* [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
@ 2016-03-03 12:11 Peter Maydell
2016-03-03 12:18 ` [Qemu-devel] " Peter Maydell
0 siblings, 1 reply; 7+ messages in thread
From: Peter Maydell @ 2016-03-03 12:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, qemu-arm, Christopher Covington, patches
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 <cov@codeaurora.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Christopher, can you check that this resolves your compile issues, please?
NB that I have not touched the similar code in bsd-user/elfload.c because
that's clearly dead code, since there's no bsd-user/arm support anyway.
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 19dc7f5..ad014da 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -273,19 +273,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
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
2016-03-03 12:11 [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines Peter Maydell
@ 2016-03-03 12:18 ` Peter Maydell
0 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2016-03-03 12:18 UTC (permalink / raw)
To: QEMU Developers
Cc: Riku Voipio, Christopher Covington, qemu-arm, Patch Tracking
Typoed qemu-devel email address again, sorry. I must figure out a
way to automate "cc the usual suspects"...
thanks
-- PMM
On 3 March 2016 at 12:11, Peter Maydell <peter.maydell@linaro.org> wrote:
> 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 <cov@codeaurora.org>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Christopher, can you check that this resolves your compile issues, please?
>
> NB that I have not touched the similar code in bsd-user/elfload.c because
> that's clearly dead code, since there's no bsd-user/arm support anyway.
>
> 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 19dc7f5..ad014da 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -273,19 +273,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
> --
> 1.9.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [Qemu-devel] [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
@ 2016-03-03 12:18 ` Peter Maydell
0 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2016-03-03 12:18 UTC (permalink / raw)
To: QEMU Developers
Cc: Riku Voipio, Christopher Covington, qemu-arm, Patch Tracking
Typoed qemu-devel email address again, sorry. I must figure out a
way to automate "cc the usual suspects"...
thanks
-- PMM
On 3 March 2016 at 12:11, Peter Maydell <peter.maydell@linaro.org> wrote:
> 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 <cov@codeaurora.org>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Christopher, can you check that this resolves your compile issues, please?
>
> NB that I have not touched the similar code in bsd-user/elfload.c because
> that's clearly dead code, since there's no bsd-user/arm support anyway.
>
> 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 19dc7f5..ad014da 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -273,19 +273,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
> --
> 1.9.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [Qemu-devel] [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
2016-03-03 12:18 ` [Qemu-devel] " Peter Maydell
(?)
@ 2016-03-03 13:38 ` Christopher Covington
-1 siblings, 0 replies; 7+ messages in thread
From: Christopher Covington @ 2016-03-03 13:38 UTC (permalink / raw)
To: Peter Maydell, QEMU Developers
Cc: Andrew Jones, Riku Voipio, qemu-arm, Patch Tracking
On 03/03/2016 07:18 AM, Peter Maydell wrote:
> Typoed qemu-devel email address again, sorry. I must figure out a
> way to automate "cc the usual suspects"...
>
> thanks
> -- PMM
>
> On 3 March 2016 at 12:11, Peter Maydell <peter.maydell@linaro.org> wrote:
>> 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 <cov@codeaurora.org>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>> Christopher, can you check that this resolves your compile issues, please?
It does. Thanks Peter!
Tested-by: Christopher Covington <cov@codeaurora.org>
>> NB that I have not touched the similar code in bsd-user/elfload.c because
>> that's clearly dead code, since there's no bsd-user/arm support anyway.
>>
>> 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 19dc7f5..ad014da 100644
>> --- a/linux-user/elfload.c
>> +++ b/linux-user/elfload.c
>> @@ -273,19 +273,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
>> --
>> 1.9.1
>>
>>
--
Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [Qemu-devel] [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
2016-03-03 12:18 ` [Qemu-devel] " Peter Maydell
(?)
(?)
@ 2016-03-03 13:44 ` Christopher Covington
2016-03-03 13:50 ` [Qemu-devel] " Peter Maydell
-1 siblings, 1 reply; 7+ messages in thread
From: Christopher Covington @ 2016-03-03 13:44 UTC (permalink / raw)
To: Peter Maydell; +Cc: Riku Voipio, QEMU Developers, qemu-arm, Patch Tracking
On 03/03/2016 07:18 AM, Peter Maydell wrote:
> Typoed qemu-devel email address again, sorry. I must figure out a
> way to automate "cc the usual suspects"...
git send-email ... \
--cc-cmd='scripts/get_maintainer.pl --norolestats' \
...
Cheers,
Cov
--
Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
2016-03-03 13:44 ` Christopher Covington
@ 2016-03-03 13:50 ` Peter Maydell
0 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2016-03-03 13:50 UTC (permalink / raw)
To: Christopher Covington
Cc: Riku Voipio, QEMU Developers, qemu-arm, Patch Tracking
On 3 March 2016 at 13:44, Christopher Covington <cov@codeaurora.org> wrote:
> On 03/03/2016 07:18 AM, Peter Maydell wrote:
>> Typoed qemu-devel email address again, sorry. I must figure out a
>> way to automate "cc the usual suspects"...
>
> git send-email ... \
> --cc-cmd='scripts/get_maintainer.pl --norolestats' \
> ...
I mostly don't use that because I think it ccs more people
than I would prefer. git send-email supports an alias file,
though, and so I can now say --cc=qemu rather than having to
type the address in full.
thanks
-- PMM
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines
@ 2016-03-03 13:50 ` Peter Maydell
0 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2016-03-03 13:50 UTC (permalink / raw)
To: Christopher Covington
Cc: Riku Voipio, QEMU Developers, qemu-arm, Patch Tracking
On 3 March 2016 at 13:44, Christopher Covington <cov@codeaurora.org> wrote:
> On 03/03/2016 07:18 AM, Peter Maydell wrote:
>> Typoed qemu-devel email address again, sorry. I must figure out a
>> way to automate "cc the usual suspects"...
>
> git send-email ... \
> --cc-cmd='scripts/get_maintainer.pl --norolestats' \
> ...
I mostly don't use that because I think it ccs more people
than I would prefer. git send-email supports an alias file,
though, and so I can now say --cc=qemu rather than having to
type the address in full.
thanks
-- PMM
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-03-03 13:51 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-03 12:11 [Qemu-arm] [PATCH] linux-user: arm: Remove ARM_cpsr and similar #defines Peter Maydell
2016-03-03 12:18 ` Peter Maydell
2016-03-03 12:18 ` [Qemu-devel] " Peter Maydell
2016-03-03 13:38 ` Christopher Covington
2016-03-03 13:44 ` Christopher Covington
2016-03-03 13:50 ` Peter Maydell
2016-03-03 13:50 ` [Qemu-devel] " Peter Maydell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.