diff mbox series

[v2,06/16] target/ppc: fix signal delivery for ppc64abi32

Message ID 20190919171015.12681-7-alex.bennee@linaro.org
State New
Headers show
Series testing/next (docker/podman, tcg, build fixes) | expand

Commit Message

Alex Bennée Sept. 19, 2019, 5:10 p.m. UTC
We were incorrectly using the 64-bit AIX ABI instead of the 32-bit
SYSV ABI for setting NIP for the signal handler.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
v2
  - change to wording
---
 linux-user/ppc/signal.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Laurent Vivier Sept. 20, 2019, 7:27 p.m. UTC | #1
Le 19/09/2019 à 19:10, Alex Bennée a écrit :
> We were incorrectly using the 64-bit AIX ABI instead of the 32-bit
> SYSV ABI for setting NIP for the signal handler.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
> ---
> v2
>    - change to wording
> ---
>   linux-user/ppc/signal.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c
> index 619a56950df..5b82af6cb62 100644
> --- a/linux-user/ppc/signal.c
> +++ b/linux-user/ppc/signal.c
> @@ -501,7 +501,9 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
>       int i, err = 0;
>   #if defined(TARGET_PPC64)
>       struct target_sigcontext *sc = 0;
> +#if !defined(TARGET_ABI32)
>       struct image_info *image = ((TaskState *)thread_cpu->opaque)->info;
> +#endif
>   #endif
>   
>       rt_sf_addr = get_sigframe(ka, env, sizeof(*rt_sf));
> @@ -557,7 +559,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
>       env->gpr[5] = (target_ulong) h2g(&rt_sf->uc);
>       env->gpr[6] = (target_ulong) h2g(rt_sf);
>   
> -#if defined(TARGET_PPC64)
> +#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
>       if (get_ppc64_abi(image) < 2) {
>           /* ELFv1 PPC64 function pointers are pointers to OPD entries. */
>           struct target_func_ptr *handler =
> 

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

Patch

diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c
index 619a56950df..5b82af6cb62 100644
--- a/linux-user/ppc/signal.c
+++ b/linux-user/ppc/signal.c
@@ -501,7 +501,9 @@  void setup_rt_frame(int sig, struct target_sigaction *ka,
     int i, err = 0;
 #if defined(TARGET_PPC64)
     struct target_sigcontext *sc = 0;
+#if !defined(TARGET_ABI32)
     struct image_info *image = ((TaskState *)thread_cpu->opaque)->info;
+#endif
 #endif
 
     rt_sf_addr = get_sigframe(ka, env, sizeof(*rt_sf));
@@ -557,7 +559,7 @@  void setup_rt_frame(int sig, struct target_sigaction *ka,
     env->gpr[5] = (target_ulong) h2g(&rt_sf->uc);
     env->gpr[6] = (target_ulong) h2g(rt_sf);
 
-#if defined(TARGET_PPC64)
+#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
     if (get_ppc64_abi(image) < 2) {
         /* ELFv1 PPC64 function pointers are pointers to OPD entries. */
         struct target_func_ptr *handler =