diff mbox series

[v2,08/12] linux-user/sparc64: Fix target_signal_frame

Message ID 20191025113921.9412-9-richard.henderson@linaro.org
State Superseded
Headers show
Series linux-user sparc fixes | expand

Commit Message

Richard Henderson Oct. 25, 2019, 11:39 a.m. UTC
Instructions are always 4 bytes; use uint32_t not abi_ulong.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

---
 linux-user/sparc/signal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.17.1

Comments

Laurent Vivier Oct. 25, 2019, 12:47 p.m. UTC | #1
Le 25/10/2019 à 13:39, Richard Henderson a écrit :
> Instructions are always 4 bytes; use uint32_t not abi_ulong.

> 

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  linux-user/sparc/signal.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c

> index efb0df7e2b..ecfdf937e4 100644

> --- a/linux-user/sparc/signal.c

> +++ b/linux-user/sparc/signal.c

> @@ -87,7 +87,7 @@ struct target_signal_frame {

>      struct sparc_stackf ss;

>      __siginfo_t         info;

>      abi_ulong           fpu_save;

> -    abi_ulong           insns[2] __attribute__ ((aligned (8)));

> +    uint32_t            insns[2] __attribute__ ((aligned (8)));

>      abi_ulong           extramask[TARGET_NSIG_WORDS - 1];

>      abi_ulong           extra_size; /* Should be 0 */

>      qemu_siginfo_fpu_t fpu_state;

> @@ -98,7 +98,7 @@ struct target_rt_signal_frame {

>      abi_ulong           regs[20];

>      sigset_t            mask;

>      abi_ulong           fpu_save;

> -    unsigned int        insns[2];

> +    uint32_t            insns[2];

>      stack_t             stack;

>      unsigned int        extra_size; /* Should be 0 */

>      qemu_siginfo_fpu_t  fpu_state;

> 


This definition is used by sparc and sparc64 (sparc64/signal.c includes
sparc/signal.c), so the definition was valid before your changes for
sparc and not good for sparc64. Moreover rt_signal_frame for sparc64
doesn't look like this one (and signal_frame doesn't exist).

Perhaps you should consider to introduce a specific file for sparc64?
Thanks,

Laurent
Richard Henderson Oct. 25, 2019, 1:38 p.m. UTC | #2
On 10/25/19 8:47 AM, Laurent Vivier wrote:
> Le 25/10/2019 à 13:39, Richard Henderson a écrit :

>> Instructions are always 4 bytes; use uint32_t not abi_ulong.

>>

>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

>> ---

>>  linux-user/sparc/signal.c | 4 ++--

>>  1 file changed, 2 insertions(+), 2 deletions(-)

>>

>> diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c

>> index efb0df7e2b..ecfdf937e4 100644

>> --- a/linux-user/sparc/signal.c

>> +++ b/linux-user/sparc/signal.c

>> @@ -87,7 +87,7 @@ struct target_signal_frame {

>>      struct sparc_stackf ss;

>>      __siginfo_t         info;

>>      abi_ulong           fpu_save;

>> -    abi_ulong           insns[2] __attribute__ ((aligned (8)));

>> +    uint32_t            insns[2] __attribute__ ((aligned (8)));

>>      abi_ulong           extramask[TARGET_NSIG_WORDS - 1];

>>      abi_ulong           extra_size; /* Should be 0 */

>>      qemu_siginfo_fpu_t fpu_state;

>> @@ -98,7 +98,7 @@ struct target_rt_signal_frame {

>>      abi_ulong           regs[20];

>>      sigset_t            mask;

>>      abi_ulong           fpu_save;

>> -    unsigned int        insns[2];

>> +    uint32_t            insns[2];

>>      stack_t             stack;

>>      unsigned int        extra_size; /* Should be 0 */

>>      qemu_siginfo_fpu_t  fpu_state;

>>

> 

> This definition is used by sparc and sparc64 (sparc64/signal.c includes

> sparc/signal.c), so the definition was valid before your changes for

> sparc and not good for sparc64. Moreover rt_signal_frame for sparc64

> doesn't look like this one (and signal_frame doesn't exist).


You're right that target_rt_signal_frame isn't correct for sparc64.  But we
also don't implement setup_rt_frame yet, so it's also currently unused.

What's here is just good enough to make setup_frame work, and that is correct
for both sparc and sparc64.


r~
Laurent Vivier Oct. 25, 2019, 1:43 p.m. UTC | #3
Le 25/10/2019 à 15:38, Richard Henderson a écrit :
> On 10/25/19 8:47 AM, Laurent Vivier wrote:

>> Le 25/10/2019 à 13:39, Richard Henderson a écrit :

>>> Instructions are always 4 bytes; use uint32_t not abi_ulong.

>>>

>>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

>>> ---

>>>  linux-user/sparc/signal.c | 4 ++--

>>>  1 file changed, 2 insertions(+), 2 deletions(-)

>>>

>>> diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c

>>> index efb0df7e2b..ecfdf937e4 100644

>>> --- a/linux-user/sparc/signal.c

>>> +++ b/linux-user/sparc/signal.c

>>> @@ -87,7 +87,7 @@ struct target_signal_frame {

>>>      struct sparc_stackf ss;

>>>      __siginfo_t         info;

>>>      abi_ulong           fpu_save;

>>> -    abi_ulong           insns[2] __attribute__ ((aligned (8)));

>>> +    uint32_t            insns[2] __attribute__ ((aligned (8)));

>>>      abi_ulong           extramask[TARGET_NSIG_WORDS - 1];

>>>      abi_ulong           extra_size; /* Should be 0 */

>>>      qemu_siginfo_fpu_t fpu_state;

>>> @@ -98,7 +98,7 @@ struct target_rt_signal_frame {

>>>      abi_ulong           regs[20];

>>>      sigset_t            mask;

>>>      abi_ulong           fpu_save;

>>> -    unsigned int        insns[2];

>>> +    uint32_t            insns[2];

>>>      stack_t             stack;

>>>      unsigned int        extra_size; /* Should be 0 */

>>>      qemu_siginfo_fpu_t  fpu_state;

>>>

>>

>> This definition is used by sparc and sparc64 (sparc64/signal.c includes

>> sparc/signal.c), so the definition was valid before your changes for

>> sparc and not good for sparc64. Moreover rt_signal_frame for sparc64

>> doesn't look like this one (and signal_frame doesn't exist).

> 

> You're right that target_rt_signal_frame isn't correct for sparc64.  But we

> also don't implement setup_rt_frame yet, so it's also currently unused.

> 

> What's here is just good enough to make setup_frame work, and that is correct

> for both sparc and sparc64.


ok

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff mbox series

Patch

diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c
index efb0df7e2b..ecfdf937e4 100644
--- a/linux-user/sparc/signal.c
+++ b/linux-user/sparc/signal.c
@@ -87,7 +87,7 @@  struct target_signal_frame {
     struct sparc_stackf ss;
     __siginfo_t         info;
     abi_ulong           fpu_save;
-    abi_ulong           insns[2] __attribute__ ((aligned (8)));
+    uint32_t            insns[2] __attribute__ ((aligned (8)));
     abi_ulong           extramask[TARGET_NSIG_WORDS - 1];
     abi_ulong           extra_size; /* Should be 0 */
     qemu_siginfo_fpu_t fpu_state;
@@ -98,7 +98,7 @@  struct target_rt_signal_frame {
     abi_ulong           regs[20];
     sigset_t            mask;
     abi_ulong           fpu_save;
-    unsigned int        insns[2];
+    uint32_t            insns[2];
     stack_t             stack;
     unsigned int        extra_size; /* Should be 0 */
     qemu_siginfo_fpu_t  fpu_state;