qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Vivier <laurent@vivier.eu>
To: qemu-devel@nongnu.org
Cc: Richard Henderson <richard.henderson@linaro.org>,
	Laurent Vivier <laurent@vivier.eu>
Subject: [PULL 18/28] linux-user/sparc: Fix sparc64_{get, set}_context traps
Date: Wed,  8 Mar 2023 14:28:47 +0100	[thread overview]
Message-ID: <20230308132857.161793-19-laurent@vivier.eu> (raw)
In-Reply-To: <20230308132857.161793-1-laurent@vivier.eu>

From: Richard Henderson <richard.henderson@linaro.org>

These traps are present for sparc64 with ilp32, aka sparc32plus.
Enabling them means adjusting the defines over in signal.c,
and fixing an incorrect usage of abi_ulong when we really meant
the full register, target_ulong.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20230216054516.1267305-7-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
 linux-user/sparc/cpu_loop.c | 21 ++++++++++-----------
 linux-user/sparc/signal.c   | 36 +++++++++++++++++++-----------------
 2 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 2bcf32590fa1..edbc4f3bdcbf 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -213,25 +213,24 @@ void cpu_loop (CPUSPARCState *env)
             env->npc = env->npc + 4;
             break;
 
-        case TARGET_TT_SPILL: /* window overflow */
-            save_window(env);
-            break;
-        case TARGET_TT_FILL:  /* window underflow */
-            restore_window(env);
-            break;
-
 #ifdef TARGET_SPARC64
-#ifndef TARGET_ABI32
-        case 0x16e:
+        case TT_TRAP + 0x6e:
             flush_windows(env);
             sparc64_get_context(env);
             break;
-        case 0x16f:
+        case TT_TRAP + 0x6f:
             flush_windows(env);
             sparc64_set_context(env);
             break;
 #endif
-#endif
+
+        case TARGET_TT_SPILL: /* window overflow */
+            save_window(env);
+            break;
+        case TARGET_TT_FILL:  /* window underflow */
+            restore_window(env);
+            break;
+
         case EXCP_INTERRUPT:
             /* just indicate that signals should be handled asap */
             break;
diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c
index b501750fe0f1..2be9000b9e04 100644
--- a/linux-user/sparc/signal.c
+++ b/linux-user/sparc/signal.c
@@ -503,7 +503,23 @@ long do_rt_sigreturn(CPUSPARCState *env)
     return -QEMU_ESIGRETURN;
 }
 
-#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
+#ifdef TARGET_ABI32
+void setup_sigtramp(abi_ulong sigtramp_page)
+{
+    uint32_t *tramp = lock_user(VERIFY_WRITE, sigtramp_page, 2 * 8, 0);
+    assert(tramp != NULL);
+
+    default_sigreturn = sigtramp_page;
+    install_sigtramp(tramp, TARGET_NR_sigreturn);
+
+    default_rt_sigreturn = sigtramp_page + 8;
+    install_sigtramp(tramp + 2, TARGET_NR_rt_sigreturn);
+
+    unlock_user(tramp, sigtramp_page, 2 * 8);
+}
+#endif
+
+#ifdef TARGET_SPARC64
 #define SPARC_MC_TSTATE 0
 #define SPARC_MC_PC 1
 #define SPARC_MC_NPC 2
@@ -575,7 +591,7 @@ void sparc64_set_context(CPUSPARCState *env)
     struct target_ucontext *ucp;
     target_mc_gregset_t *grp;
     target_mc_fpu_t *fpup;
-    abi_ulong pc, npc, tstate;
+    target_ulong pc, npc, tstate;
     unsigned int i;
     unsigned char fenab;
 
@@ -773,18 +789,4 @@ do_sigsegv:
     unlock_user_struct(ucp, ucp_addr, 1);
     force_sig(TARGET_SIGSEGV);
 }
-#else
-void setup_sigtramp(abi_ulong sigtramp_page)
-{
-    uint32_t *tramp = lock_user(VERIFY_WRITE, sigtramp_page, 2 * 8, 0);
-    assert(tramp != NULL);
-
-    default_sigreturn = sigtramp_page;
-    install_sigtramp(tramp, TARGET_NR_sigreturn);
-
-    default_rt_sigreturn = sigtramp_page + 8;
-    install_sigtramp(tramp + 2, TARGET_NR_rt_sigreturn);
-
-    unlock_user(tramp, sigtramp_page, 2 * 8);
-}
-#endif
+#endif /* TARGET_SPARC64 */
-- 
2.39.2



  parent reply	other threads:[~2023-03-08 13:35 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-08 13:28 [PULL 00/28] Linux user for 8.0 patches Laurent Vivier
2023-03-08 13:28 ` [PULL 01/28] linux-user: Fix access to /proc/self/exe Laurent Vivier
2023-03-08 13:28 ` [PULL 02/28] linux-user: fix timerfd read endianness conversion Laurent Vivier
2023-03-08 13:28 ` [PULL 03/28] linux-user: add target to host netlink conversions Laurent Vivier
2023-03-08 13:28 ` [PULL 04/28] linux-user: Fix unaligned memory access in prlimit64 syscall Laurent Vivier
2023-03-08 13:28 ` [PULL 05/28] linux-user: add support for xtensa FDPIC Laurent Vivier
2023-03-08 13:28 ` [PULL 06/28] linux-user: fill out task state in /proc/self/stat Laurent Vivier
2023-03-08 13:28 ` [PULL 07/28] linux-user: Fix brk() to release pages Laurent Vivier
2023-03-08 13:28 ` [PULL 08/28] linux-user: Provide print_raw_param64() for 64-bit values Laurent Vivier
2023-03-08 13:28 ` [PULL 09/28] linux-user: Add strace for prlimit64() syscall Laurent Vivier
2023-03-08 13:28 ` [PULL 10/28] linux-user: fix sockaddr_in6 endianness Laurent Vivier
2023-03-08 13:28 ` [PULL 11/28] linux-user: handle netlink flag NLA_F_NESTED Laurent Vivier
2023-03-08 13:28 ` [PULL 12/28] linux-user: Add translation for argument of msync() Laurent Vivier
2023-03-08 13:28 ` [PULL 13/28] linux-user: Emulate CLONE_PIDFD flag in clone() Laurent Vivier
2023-03-08 13:28 ` [PULL 14/28] linux-user/sparc: Tidy syscall trap Laurent Vivier
2023-03-08 13:28 ` [PULL 15/28] linux-user/sparc: Tidy syscall error return Laurent Vivier
2023-03-08 13:28 ` [PULL 16/28] linux-user/sparc: Use TT_TRAP for flush windows Laurent Vivier
2023-03-08 13:28 ` [PULL 17/28] linux-user/sparc: Tidy window spill/fill traps Laurent Vivier
2023-03-08 13:28 ` Laurent Vivier [this message]
2023-03-08 13:28 ` [PULL 19/28] linux-user/sparc: Handle software breakpoint trap Laurent Vivier
2023-03-08 13:28 ` [PULL 20/28] linux-user/sparc: Handle division by zero traps Laurent Vivier
2023-03-08 13:28 ` [PULL 21/28] linux-user/sparc: Handle getcc, setcc, getpsr traps Laurent Vivier
2023-03-08 13:28 ` [PULL 22/28] linux-user/sparc: Handle priviledged opcode trap Laurent Vivier
2023-03-08 13:28 ` [PULL 23/28] linux-user/sparc: Handle privilidged action trap Laurent Vivier
2023-03-08 13:28 ` [PULL 24/28] linux-user/sparc: Handle coprocessor disabled trap Laurent Vivier
2023-03-08 13:28 ` [PULL 25/28] linux-user/sparc: Handle unimplemented flush trap Laurent Vivier
2023-03-08 13:28 ` [PULL 26/28] linux-user/sparc: Handle floating-point exceptions Laurent Vivier
2023-03-08 13:28 ` [PULL 27/28] linux-user/sparc: Handle tag overflow traps Laurent Vivier
2023-03-08 13:28 ` [PULL 28/28] linux-user: fix bug about incorrect base addresss of gdt on i386 and x86_64 Laurent Vivier
2023-03-10 10:35 ` [PULL 00/28] Linux user for 8.0 patches Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2023-03-10 22:08 Laurent Vivier
2023-03-10 22:09 ` [PULL 18/28] linux-user/sparc: Fix sparc64_{get, set}_context traps Laurent Vivier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230308132857.161793-19-laurent@vivier.eu \
    --to=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).