aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2005-10-21 02:01:33 -0400
committerPaul Mackerras <paulus@samba.org>2005-10-21 08:47:39 -0400
commit90eac727c6d7afbe707ce408edf97c33385fa08c (patch)
tree130fc6e078e82a3c8fd62d90105d346637d680ea /arch/powerpc
parent6cb7bfebb145af5ea1d052512a2ae7ff07a47202 (diff)
[PATCH] powerpc: Don't blow away load_addr in start_thread
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@ellerman.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/process.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 193c8c1bf132..047da1ae21fe 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -595,6 +595,10 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
595 */ 595 */
596void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp) 596void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
597{ 597{
598#ifdef CONFIG_PPC64
599 unsigned long load_addr = regs->gpr[2]; /* saved by ELF_PLAT_INIT */
600#endif
601
598 set_fs(USER_DS); 602 set_fs(USER_DS);
599 603
600 /* 604 /*
@@ -621,7 +625,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
621 regs->msr = MSR_USER; 625 regs->msr = MSR_USER;
622#else 626#else
623 if (!test_thread_flag(TIF_32BIT)) { 627 if (!test_thread_flag(TIF_32BIT)) {
624 unsigned long entry, toc, load_addr = regs->gpr[2]; 628 unsigned long entry, toc;
625 629
626 /* start is a relocated pointer to the function descriptor for 630 /* start is a relocated pointer to the function descriptor for
627 * the elf _start routine. The first entry in the function 631 * the elf _start routine. The first entry in the function