[PATCH] powerpc: Don't blow away load_addr in start_thread
The patch to make process.c work for 32-bit and 64-bit
(06d67d5474
) 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>
This commit is contained in:
parent
6cb7bfebb1
commit
90eac727c6
1 changed files with 5 additions and 1 deletions
|
@ -595,6 +595,10 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
|
||||||
*/
|
*/
|
||||||
void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
|
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);
|
set_fs(USER_DS);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -621,7 +625,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
|
||||||
regs->msr = MSR_USER;
|
regs->msr = MSR_USER;
|
||||||
#else
|
#else
|
||||||
if (!test_thread_flag(TIF_32BIT)) {
|
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
|
/* start is a relocated pointer to the function descriptor for
|
||||||
* the elf _start routine. The first entry in the function
|
* the elf _start routine. The first entry in the function
|
||||||
|
|
Loading…
Reference in a new issue