[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 34/38] linux-user: arm: Remove ARM_cpsr and similar #
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL 34/38] linux-user: arm: Remove ARM_cpsr and similar #defines |
Date: |
Wed, 25 May 2016 13:32:06 +0300 |
From: Peter Maydell <address@hidden>
The #defines of ARM_cpsr and friends in linux-user/arm/target-syscall.h
can clash with versions in the system headers if building on an
ARM or AArch64 build (though this seems to be dependent on the version
of the system headers). The QEMU defines are not very useful (it's
not clear that they're intended for use with the target_pt_regs struct
rather than (say) the CPUARMState structure) and we only use them in one
function in elfload.c anyway. So just remove the #defines and directly
access regs->uregs[].
Reported-by: Christopher Covington <address@hidden>
Tested-by: Christopher Covington <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
---
linux-user/arm/target_syscall.h | 20 +-------------------
linux-user/elfload.c | 19 ++++++++++---------
2 files changed, 11 insertions(+), 28 deletions(-)
diff --git a/linux-user/arm/target_syscall.h b/linux-user/arm/target_syscall.h
index ea863db..11077b7 100644
--- a/linux-user/arm/target_syscall.h
+++ b/linux-user/arm/target_syscall.h
@@ -4,29 +4,11 @@
/* this struct defines the way the registers are stored on the
stack during a system call. */
+/* uregs[0..15] are r0 to r15; uregs[16] is CPSR; uregs[17] is ORIG_r0 */
struct target_pt_regs {
abi_long uregs[18];
};
-#define ARM_cpsr uregs[16]
-#define ARM_pc uregs[15]
-#define ARM_lr uregs[14]
-#define ARM_sp uregs[13]
-#define ARM_ip uregs[12]
-#define ARM_fp uregs[11]
-#define ARM_r10 uregs[10]
-#define ARM_r9 uregs[9]
-#define ARM_r8 uregs[8]
-#define ARM_r7 uregs[7]
-#define ARM_r6 uregs[6]
-#define ARM_r5 uregs[5]
-#define ARM_r4 uregs[4]
-#define ARM_r3 uregs[3]
-#define ARM_r2 uregs[2]
-#define ARM_r1 uregs[1]
-#define ARM_r0 uregs[0]
-#define ARM_ORIG_r0 uregs[17]
-
#define ARM_SYSCALL_BASE 0x900000
#define ARM_THUMB_SYSCALL 0
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index e47caff..bb2558f 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
--
2.1.4
- [Qemu-devel] [PULL 25/38] linux-user: Use safe_syscall for wait system calls, (continued)
- [Qemu-devel] [PULL 25/38] linux-user: Use safe_syscall for wait system calls, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 24/38] linux-user: Use safe_syscall for open and openat system calls, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 28/38] linux-user: Use safe_syscall for futex syscall, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 26/38] linux-user: Use safe_syscall for execve syscall, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 27/38] linux-user: Use safe_syscall for pselect, select syscalls, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 29/38] linux-user: Handle negative values in timespec conversion, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 31/38] linux-user: Use g_try_malloc() in do_msgrcv(), riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 35/38] linux-user/signal.c: Generate opcode data for restorer in setup_rt_frame, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 30/38] linux-user: Handle msgrcv error case correctly, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 32/38] linux-user: x86_64: Don't use 16-bit UIDs, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 34/38] linux-user: arm: Remove ARM_cpsr and similar #defines,
riku . voipio <=
- [Qemu-devel] [PULL 33/38] linux-user: Use direct syscalls for setuid(), etc, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 36/38] linux-user/signal.c: Use target address instead of host address for microblaze restorer, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 37/38] linux-user/signal.c: Use s390 target space address instead of host space, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 38/38] linux-user, target-ppc: fix use of MSR_LE, riku . voipio, 2016/05/25
- Re: [Qemu-devel] [PULL 00/38] linux-user update, Peter Maydell, 2016/05/25