diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2016-05-27 14:05:48 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2016-05-27 14:05:48 +0100 |
commit | d6550e9ed2e1a60d889dfb721de00d9a4e3bafbe (patch) | |
tree | 3ab1161c8e63c202cbd207cfb10e1e37ec206951 /linux-user/elfload.c | |
parent | 34c99d7b93c9181aa8c426300beca130b2b19e39 (diff) | |
parent | 49e55cbacf4ad08f831b9f3f9cb0f3082883a3a1 (diff) |
Merge remote-tracking branch 'remotes/riku/tags/pull-linux-user-20160527' into staging
linux-user pull request v2 for may 2016
# gpg: Signature made Fri 27 May 2016 12:51:10 BST using RSA key ID DE3C9BC0
# gpg: Good signature from "Riku Voipio <riku.voipio@iki.fi>"
# gpg: aka "Riku Voipio <riku.voipio@linaro.org>"
* remotes/riku/tags/pull-linux-user-20160527: (38 commits)
linux-user,target-ppc: fix use of MSR_LE
linux-user/signal.c: Use s390 target space address instead of host space
linux-user/signal.c: Use target address instead of host address for microblaze restorer
linux-user/signal.c: Generate opcode data for restorer in setup_rt_frame
linux-user: arm: Remove ARM_cpsr and similar #defines
linux-user: Use direct syscalls for setuid(), etc
linux-user: x86_64: Don't use 16-bit UIDs
linux-user: Use g_try_malloc() in do_msgrcv()
linux-user: Handle msgrcv error case correctly
linux-user: Handle negative values in timespec conversion
linux-user: Use safe_syscall for futex syscall
linux-user: Use safe_syscall for pselect, select syscalls
linux-user: Use safe_syscall for execve syscall
linux-user: Use safe_syscall for wait system calls
linux-user: Use safe_syscall for open and openat system calls
linux-user: Use safe_syscall for read and write system calls
linux-user: Provide safe_syscall for fixing races between signals and syscalls
linux-user: Add debug code to exercise restarting system calls
linux-user: Support for restarting system calls for Microblaze targets
linux-user: Set r14 on exit from microblaze syscall
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'linux-user/elfload.c')
-rw-r--r-- | linux-user/elfload.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c index e47caff7ae..bb2558f284 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -274,19 +274,20 @@ static inline void init_thread(struct target_pt_regs *regs, abi_long stack = infop->start_stack; memset(regs, 0, sizeof(*regs)); - regs->ARM_cpsr = 0x10; - if (infop->entry & 1) - regs->ARM_cpsr |= CPSR_T; - regs->ARM_pc = infop->entry & 0xfffffffe; - regs->ARM_sp = infop->start_stack; + regs->uregs[16] = ARM_CPU_MODE_USR; + if (infop->entry & 1) { + regs->uregs[16] |= CPSR_T; + } + regs->uregs[15] = infop->entry & 0xfffffffe; + regs->uregs[13] = infop->start_stack; /* FIXME - what to for failure of get_user()? */ - get_user_ual(regs->ARM_r2, stack + 8); /* envp */ - get_user_ual(regs->ARM_r1, stack + 4); /* envp */ + get_user_ual(regs->uregs[2], stack + 8); /* envp */ + get_user_ual(regs->uregs[1], stack + 4); /* envp */ /* XXX: it seems that r0 is zeroed after ! */ - regs->ARM_r0 = 0; + regs->uregs[0] = 0; /* For uClinux PIC binaries. */ /* XXX: Linux does this only on ARM with no MMU (do we care ?) */ - regs->ARM_r10 = infop->start_data; + regs->uregs[10] = infop->start_data; } #define ELF_NREG 18 |