[PATCH 1/2] powerpc: Don't blow away load_addr in start_thread

Michael Ellerman michael at ellerman.id.au
Fri Oct 21 16:01:33 EST 2005


The patch to make process.c work for 32-bit and 64-bit
(06d67d54741a5bfefa31945ef195dfa748c29025) broke some 64-bit binaries.
We were blowing away load_addr in gpr[2], so we weren't properly relocating
the entry point.

Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
---

 arch/powerpc/kernel/process.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletion(-)

Index: kexec/arch/powerpc/kernel/process.c
===================================================================
--- kexec.orig/arch/powerpc/kernel/process.c
+++ kexec/arch/powerpc/kernel/process.c
@@ -595,6 +595,10 @@ int copy_thread(int nr, unsigned long cl
  */
 void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
 {
+#ifdef CONFIG_PPC64
+	unsigned long load_addr = regs->gpr[2];	/* saved by ELF_PLAT_INIT */
+#endif
+
 	set_fs(USER_DS);
 
 	/*
@@ -621,7 +625,7 @@ void start_thread(struct pt_regs *regs, 
 	regs->msr = MSR_USER;
 #else
 	if (!test_thread_flag(TIF_32BIT)) {
-		unsigned long entry, toc, load_addr = regs->gpr[2];
+		unsigned long entry, toc;
 
 		/* start is a relocated pointer to the function descriptor for
 		 * the elf _start routine.  The first entry in the function



More information about the Linuxppc64-dev mailing list