qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/15] linux-user/sparc: Handle missing traps
@ 2023-02-16  5:45 Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps Richard Henderson
                   ` (15 more replies)
  0 siblings, 16 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Lots of missing trap codes for cpu_loop().

Changes for v2:
  - Fix v8plus syscall trap.
  - New patch to unify syscall error return via C flag.


r~


Richard Henderson (15):
  linux-user/sparc: Raise SIGILL for all unhandled software traps
  linux-user/sparc: Tidy syscall trap
  linux-user/sparc: Tidy syscall error return
  linux-user/sparc: Use TT_TRAP for flush windows
  linux-user/sparc: Tidy window spill/fill traps
  linux-user/sparc: Fix sparc64_{get,set}_context traps
  linux-user/sparc: Handle software breakpoint trap
  linux-user/sparc: Handle division by zero traps
  linux-user/sparc: Handle getcc, setcc, getpsr traps
  linux-user/sparc: Handle priviledged opcode trap
  linux-user/sparc: Handle privilidged action trap
  linux-user/sparc: Handle coprocessor disabled trap
  linux-user/sparc: Handle unimplemented flush trap
  linux-user/sparc: Handle floating-point exceptions
  linux-user/sparc: Handle tag overflow traps

 linux-user/sparc/target_signal.h |   2 +-
 linux-user/syscall_defs.h        |   5 +
 target/sparc/cpu.h               |   3 +-
 linux-user/sparc/cpu_loop.c      | 190 ++++++++++++++++++++++++-------
 linux-user/sparc/signal.c        |  36 +++---
 5 files changed, 175 insertions(+), 61 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  6:07   ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap Richard Henderson
                   ` (14 subsequent siblings)
  15 siblings, 1 reply; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent, Ilya Leoshkevich

The linux kernel's trap tables vector all unassigned trap
numbers to BAD_TRAP, which then raises SIGILL.

Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reported-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 434c90a55f..c120c42278 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -248,6 +248,14 @@ void cpu_loop (CPUSPARCState *env)
             cpu_exec_step_atomic(cs);
             break;
         default:
+            /*
+             * Most software trap numbers vector to BAD_TRAP.
+             * Handle anything not explicitly matched above.
+             */
+            if (trapnr >= TT_TRAP && trapnr <= TT_TRAP + 0x7f) {
+                force_sig_fault(TARGET_SIGILL, ILL_ILLTRP, env->pc);
+                break;
+            }
             fprintf(stderr, "Unhandled trap: 0x%x\n", trapnr);
             cpu_dump_state(cs, stderr, 0);
             exit(EXIT_FAILURE);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  7:51   ` Philippe Mathieu-Daudé
  2023-02-16  5:45 ` [PATCH v2 03/15] linux-user/sparc: Tidy syscall error return Richard Henderson
                   ` (13 subsequent siblings)
  15 siblings, 1 reply; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Use TT_TRAP.

For sparc32, 0x88 is the "Slowaris" system call, currently BAD_TRAP
in the kernel's ttable_32.S.  For sparc64, 0x110 is tl0_linux32, the
sparc32 trap, now folded into the TARGET_ABI32 case via TT_TRAP.

For sparc64, there does still exist trap 0x111 as tl0_oldlinux64,
which was replaced by 0x16d as tl0_linux64 in 1998.  Since no one
has noticed, don't bother implementing it now.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index c120c42278..d31ea057db 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -149,6 +149,12 @@ static void flush_windows(CPUSPARCState *env)
 #endif
 }
 
+#ifdef TARGET_ABI32
+#define TARGET_TT_SYSCALL  (TT_TRAP + 0x10) /* t_linux */
+#else
+#define TARGET_TT_SYSCALL  (TT_TRAP + 0x6d) /* tl0_linux64 */
+#endif
+
 void cpu_loop (CPUSPARCState *env)
 {
     CPUState *cs = env_cpu(env);
@@ -167,13 +173,7 @@ void cpu_loop (CPUSPARCState *env)
         }
 
         switch (trapnr) {
-#ifndef TARGET_SPARC64
-        case 0x88:
-        case 0x90:
-#else
-        case 0x110:
-        case 0x16d:
-#endif
+        case TARGET_TT_SYSCALL:
             ret = do_syscall (env, env->gregs[1],
                               env->regwptr[0], env->regwptr[1],
                               env->regwptr[2], env->regwptr[3],
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 03/15] linux-user/sparc: Tidy syscall error return
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows Richard Henderson
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Reduce ifdefs with #define syscall_cc.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index d31ea057db..051a292ce5 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -149,10 +149,13 @@ static void flush_windows(CPUSPARCState *env)
 #endif
 }
 
+/* Avoid ifdefs below for the abi32 and abi64 paths. */
 #ifdef TARGET_ABI32
 #define TARGET_TT_SYSCALL  (TT_TRAP + 0x10) /* t_linux */
+#define syscall_cc         psr
 #else
 #define TARGET_TT_SYSCALL  (TT_TRAP + 0x6d) /* tl0_linux64 */
+#define syscall_cc         xcc
 #endif
 
 void cpu_loop (CPUSPARCState *env)
@@ -183,18 +186,10 @@ void cpu_loop (CPUSPARCState *env)
                 break;
             }
             if ((abi_ulong)ret >= (abi_ulong)(-515)) {
-#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
-                env->xcc |= PSR_CARRY;
-#else
-                env->psr |= PSR_CARRY;
-#endif
+                env->syscall_cc |= PSR_CARRY;
                 ret = -ret;
             } else {
-#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
-                env->xcc &= ~PSR_CARRY;
-#else
-                env->psr &= ~PSR_CARRY;
-#endif
+                env->syscall_cc &= ~PSR_CARRY;
             }
             env->regwptr[0] = ret;
             /* next instruction */
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (2 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 03/15] linux-user/sparc: Tidy syscall error return Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  7:54   ` Philippe Mathieu-Daudé
  2023-02-16  5:45 ` [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps Richard Henderson
                   ` (11 subsequent siblings)
  15 siblings, 1 reply; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

The v9 and pre-v9 code can be unified with this macro.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 051a292ce5..e1d08ff204 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -196,15 +196,14 @@ void cpu_loop (CPUSPARCState *env)
             env->pc = env->npc;
             env->npc = env->npc + 4;
             break;
-        case 0x83: /* flush windows */
-#ifdef TARGET_ABI32
-        case 0x103:
-#endif
+
+        case TT_TRAP + 0x03: /* flush windows */
             flush_windows(env);
             /* next instruction */
             env->pc = env->npc;
             env->npc = env->npc + 4;
             break;
+
 #ifndef TARGET_SPARC64
         case TT_WIN_OVF: /* window overflow */
             save_window(env);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (3 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  7:55   ` Philippe Mathieu-Daudé
  2023-02-16  5:45 ` [PATCH v2 06/15] linux-user/sparc: Fix sparc64_{get, set}_context traps Richard Henderson
                   ` (10 subsequent siblings)
  15 siblings, 1 reply; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Add some macros to localize the hw difference between v9 and pre-v9.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index e1d08ff204..2bcf32590f 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -158,6 +158,15 @@ static void flush_windows(CPUSPARCState *env)
 #define syscall_cc         xcc
 #endif
 
+/* Avoid ifdefs below for the v9 and pre-v9 hw traps. */
+#ifdef TARGET_SPARC64
+#define TARGET_TT_SPILL  TT_SPILL
+#define TARGET_TT_FILL   TT_FILL
+#else
+#define TARGET_TT_SPILL  TT_WIN_OVF
+#define TARGET_TT_FILL   TT_WIN_UNF
+#endif
+
 void cpu_loop (CPUSPARCState *env)
 {
     CPUState *cs = env_cpu(env);
@@ -204,20 +213,14 @@ void cpu_loop (CPUSPARCState *env)
             env->npc = env->npc + 4;
             break;
 
-#ifndef TARGET_SPARC64
-        case TT_WIN_OVF: /* window overflow */
+        case TARGET_TT_SPILL: /* window overflow */
             save_window(env);
             break;
-        case TT_WIN_UNF: /* window underflow */
-            restore_window(env);
-            break;
-#else
-        case TT_SPILL: /* window overflow */
-            save_window(env);
-            break;
-        case TT_FILL: /* window underflow */
+        case TARGET_TT_FILL:  /* window underflow */
             restore_window(env);
             break;
+
+#ifdef TARGET_SPARC64
 #ifndef TARGET_ABI32
         case 0x16e:
             flush_windows(env);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 06/15] linux-user/sparc: Fix sparc64_{get, set}_context traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (4 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 07/15] linux-user/sparc: Handle software breakpoint trap Richard Henderson
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

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>
---
 linux-user/sparc/cpu_loop.c | 23 +++++++++++------------
 linux-user/sparc/signal.c   | 36 +++++++++++++++++++-----------------
 2 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 2bcf32590f..edbc4f3bdc 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -213,6 +213,17 @@ void cpu_loop (CPUSPARCState *env)
             env->npc = env->npc + 4;
             break;
 
+#ifdef TARGET_SPARC64
+        case TT_TRAP + 0x6e:
+            flush_windows(env);
+            sparc64_get_context(env);
+            break;
+        case TT_TRAP + 0x6f:
+            flush_windows(env);
+            sparc64_set_context(env);
+            break;
+#endif
+
         case TARGET_TT_SPILL: /* window overflow */
             save_window(env);
             break;
@@ -220,18 +231,6 @@ void cpu_loop (CPUSPARCState *env)
             restore_window(env);
             break;
 
-#ifdef TARGET_SPARC64
-#ifndef TARGET_ABI32
-        case 0x16e:
-            flush_windows(env);
-            sparc64_get_context(env);
-            break;
-        case 0x16f:
-            flush_windows(env);
-            sparc64_set_context(env);
-            break;
-#endif
-#endif
         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 b501750fe0..2be9000b9e 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.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 07/15] linux-user/sparc: Handle software breakpoint trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (5 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 06/15] linux-user/sparc: Fix sparc64_{get, set}_context traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 08/15] linux-user/sparc: Handle division by zero traps Richard Henderson
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

This is 'ta 1' for both v9 and pre-v9.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index edbc4f3bdc..c14eaea163 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -206,6 +206,11 @@ void cpu_loop (CPUSPARCState *env)
             env->npc = env->npc + 4;
             break;
 
+        case TT_TRAP + 0x01: /* breakpoint */
+        case EXCP_DEBUG:
+            force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc);
+            break;
+
         case TT_TRAP + 0x03: /* flush windows */
             flush_windows(env);
             /* next instruction */
@@ -237,9 +242,6 @@ void cpu_loop (CPUSPARCState *env)
         case TT_ILL_INSN:
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPC, env->pc);
             break;
-        case EXCP_DEBUG:
-            force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc);
-            break;
         case EXCP_ATOMIC:
             cpu_exec_step_atomic(cs);
             break;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 08/15] linux-user/sparc: Handle division by zero traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (6 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 07/15] linux-user/sparc: Handle software breakpoint trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 09/15] linux-user/sparc: Handle getcc, setcc, getpsr traps Richard Henderson
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

In addition to the hw trap vector, there is a software trap
assigned for older sparc without hw division instructions.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index c14eaea163..e04c842867 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -211,6 +211,11 @@ void cpu_loop (CPUSPARCState *env)
             force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc);
             break;
 
+        case TT_TRAP + 0x02: /* div0 */
+        case TT_DIV_ZERO:
+            force_sig_fault(TARGET_SIGFPE, TARGET_FPE_INTDIV, env->pc);
+            break;
+
         case TT_TRAP + 0x03: /* flush windows */
             flush_windows(env);
             /* next instruction */
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 09/15] linux-user/sparc: Handle getcc, setcc, getpsr traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (7 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 08/15] linux-user/sparc: Handle division by zero traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 10/15] linux-user/sparc: Handle priviledged opcode trap Richard Henderson
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

These are really only meaningful for sparc32, but they're
still present for backward compatibility for sparc64.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 62 +++++++++++++++++++++++++++++++++++--
 1 file changed, 59 insertions(+), 3 deletions(-)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index e04c842867..a3edb353f6 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -149,6 +149,51 @@ static void flush_windows(CPUSPARCState *env)
 #endif
 }
 
+static void next_instruction(CPUSPARCState *env)
+{
+    env->pc = env->npc;
+    env->npc = env->npc + 4;
+}
+
+static uint32_t do_getcc(CPUSPARCState *env)
+{
+#ifdef TARGET_SPARC64
+    return cpu_get_ccr(env) & 0xf;
+#else
+    return extract32(cpu_get_psr(env), 20, 4);
+#endif
+}
+
+static void do_setcc(CPUSPARCState *env, uint32_t icc)
+{
+#ifdef TARGET_SPARC64
+    cpu_put_ccr(env, (cpu_get_ccr(env) & 0xf0) | (icc & 0xf));
+#else
+    cpu_put_psr(env, deposit32(cpu_get_psr(env), 20, 4, icc));
+#endif
+}
+
+static uint32_t do_getpsr(CPUSPARCState *env)
+{
+#ifdef TARGET_SPARC64
+    const uint64_t TSTATE_CWP = 0x1f;
+    const uint64_t TSTATE_ICC = 0xfull << 32;
+    const uint64_t TSTATE_XCC = 0xfull << 36;
+    const uint32_t PSR_S      = 0x00000080u;
+    const uint32_t PSR_V8PLUS = 0xff000000u;
+    uint64_t tstate = sparc64_tstate(env);
+
+    /* See <asm/psrcompat.h>, tstate_to_psr. */
+    return ((tstate & TSTATE_CWP)                   |
+            PSR_S                                   |
+            ((tstate & TSTATE_ICC) >> 12)           |
+            ((tstate & TSTATE_XCC) >> 20)           |
+            PSR_V8PLUS);
+#else
+    return (cpu_get_psr(env) & (PSR_ICC | PSR_CWP)) | PSR_S;
+#endif
+}
+
 /* Avoid ifdefs below for the abi32 and abi64 paths. */
 #ifdef TARGET_ABI32
 #define TARGET_TT_SYSCALL  (TT_TRAP + 0x10) /* t_linux */
@@ -218,9 +263,20 @@ void cpu_loop (CPUSPARCState *env)
 
         case TT_TRAP + 0x03: /* flush windows */
             flush_windows(env);
-            /* next instruction */
-            env->pc = env->npc;
-            env->npc = env->npc + 4;
+            next_instruction(env);
+            break;
+
+        case TT_TRAP + 0x20: /* getcc */
+            env->gregs[1] = do_getcc(env);
+            next_instruction(env);
+            break;
+        case TT_TRAP + 0x21: /* setcc */
+            do_setcc(env, env->gregs[1]);
+            next_instruction(env);
+            break;
+        case TT_TRAP + 0x22: /* getpsr */
+            env->gregs[1] = do_getpsr(env);
+            next_instruction(env);
             break;
 
 #ifdef TARGET_SPARC64
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 10/15] linux-user/sparc: Handle priviledged opcode trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (8 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 09/15] linux-user/sparc: Handle getcc, setcc, getpsr traps Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 11/15] linux-user/sparc: Handle privilidged action trap Richard Henderson
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

For the most part priviledged opcodes are ifdefed out of the
user-only sparc translator, which will then incorrectly produce
illegal opcode traps.  But there are some code paths that
properly raise TT_PRIV_INSN, so we must handle it.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index a3edb353f6..61b6e81459 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -303,6 +303,9 @@ void cpu_loop (CPUSPARCState *env)
         case TT_ILL_INSN:
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPC, env->pc);
             break;
+        case TT_PRIV_INSN:
+            force_sig_fault(TARGET_SIGILL, TARGET_ILL_PRVOPC, env->pc);
+            break;
         case EXCP_ATOMIC:
             cpu_exec_step_atomic(cs);
             break;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 11/15] linux-user/sparc: Handle privilidged action trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (9 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 10/15] linux-user/sparc: Handle priviledged opcode trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 12/15] linux-user/sparc: Handle coprocessor disabled trap Richard Henderson
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

This is raised by using an %asi < 0x80 in user-mode.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 61b6e81459..43f19fbd91 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -306,6 +306,12 @@ void cpu_loop (CPUSPARCState *env)
         case TT_PRIV_INSN:
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_PRVOPC, env->pc);
             break;
+#ifdef TARGET_SPARC64
+        case TT_PRIV_ACT:
+            /* Note do_privact defers to do_privop. */
+            force_sig_fault(TARGET_SIGILL, TARGET_ILL_PRVOPC, env->pc);
+            break;
+#endif
         case EXCP_ATOMIC:
             cpu_exec_step_atomic(cs);
             break;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 12/15] linux-user/sparc: Handle coprocessor disabled trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (10 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 11/15] linux-user/sparc: Handle privilidged action trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 13/15] linux-user/sparc: Handle unimplemented flush trap Richard Henderson
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Since qemu does not implement a sparc coprocessor, all such
instructions raise this trap.  Because of that, we never raise
the coprocessor exception trap, which would be vector 0x28.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 43f19fbd91..bf7e10216f 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -311,6 +311,10 @@ void cpu_loop (CPUSPARCState *env)
             /* Note do_privact defers to do_privop. */
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_PRVOPC, env->pc);
             break;
+#else
+        case TT_NCP_INSN:
+            force_sig_fault(TARGET_SIGILL, TARGET_ILL_COPROC, env->pc);
+            break;
 #endif
         case EXCP_ATOMIC:
             cpu_exec_step_atomic(cs);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 13/15] linux-user/sparc: Handle unimplemented flush trap
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (11 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 12/15] linux-user/sparc: Handle coprocessor disabled trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 14/15] linux-user/sparc: Handle floating-point exceptions Richard Henderson
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

For sparc64, TT_UNIMP_FLUSH == TT_ILL_INSN, so this is
already handled.  For sparc32, the kernel uses SKIP_TRAP.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/cpu_loop.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index bf7e10216f..093358a39a 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -315,6 +315,9 @@ void cpu_loop (CPUSPARCState *env)
         case TT_NCP_INSN:
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_COPROC, env->pc);
             break;
+        case TT_UNIMP_FLUSH:
+            next_instruction(env);
+            break;
 #endif
         case EXCP_ATOMIC:
             cpu_exec_step_atomic(cs);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 14/15] linux-user/sparc: Handle floating-point exceptions
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (12 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 13/15] linux-user/sparc: Handle unimplemented flush trap Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-02-16  5:45 ` [PATCH v2 15/15] linux-user/sparc: Handle tag overflow traps Richard Henderson
  2023-03-07 15:56 ` [PATCH v2 00/15] linux-user/sparc: Handle missing traps Laurent Vivier
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

Raise SIGFPE for ieee exceptions.

The other types, such as FSR_FTT_UNIMPFPOP, should not appear,
because we enable normal emulation of missing insns at the
start of sparc_cpu_realizefn().

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/sparc/cpu.h          |  3 +--
 linux-user/sparc/cpu_loop.c | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h
index e478c5eb16..ae8de606d5 100644
--- a/target/sparc/cpu.h
+++ b/target/sparc/cpu.h
@@ -197,8 +197,7 @@ enum {
 #define FSR_FTT2   (1ULL << 16)
 #define FSR_FTT1   (1ULL << 15)
 #define FSR_FTT0   (1ULL << 14)
-//gcc warns about constant overflow for ~FSR_FTT_MASK
-//#define FSR_FTT_MASK (FSR_FTT2 | FSR_FTT1 | FSR_FTT0)
+#define FSR_FTT_MASK (FSR_FTT2 | FSR_FTT1 | FSR_FTT0)
 #ifdef TARGET_SPARC64
 #define FSR_FTT_NMASK      0xfffffffffffe3fffULL
 #define FSR_FTT_CEXC_NMASK 0xfffffffffffe3fe0ULL
diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 093358a39a..5a8a71e976 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -297,6 +297,28 @@ void cpu_loop (CPUSPARCState *env)
             restore_window(env);
             break;
 
+        case TT_FP_EXCP:
+            {
+                int code = TARGET_FPE_FLTUNK;
+                target_ulong fsr = env->fsr;
+
+                if ((fsr & FSR_FTT_MASK) == FSR_FTT_IEEE_EXCP) {
+                    if (fsr & FSR_NVC) {
+                        code = TARGET_FPE_FLTINV;
+                    } else if (fsr & FSR_OFC) {
+                        code = TARGET_FPE_FLTOVF;
+                    } else if (fsr & FSR_UFC) {
+                        code = TARGET_FPE_FLTUND;
+                    } else if (fsr & FSR_DZC) {
+                        code = TARGET_FPE_FLTDIV;
+                    } else if (fsr & FSR_NXC) {
+                        code = TARGET_FPE_FLTRES;
+                    }
+                }
+                force_sig_fault(TARGET_SIGFPE, code, env->pc);
+            }
+            break;
+
         case EXCP_INTERRUPT:
             /* just indicate that signals should be handled asap */
             break;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 15/15] linux-user/sparc: Handle tag overflow traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (13 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 14/15] linux-user/sparc: Handle floating-point exceptions Richard Henderson
@ 2023-02-16  5:45 ` Richard Henderson
  2023-03-07 15:56 ` [PATCH v2 00/15] linux-user/sparc: Handle missing traps Laurent Vivier
  15 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent

This trap is raised by taddcctv and tsubcctv insns.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/sparc/target_signal.h | 2 +-
 linux-user/syscall_defs.h        | 5 +++++
 linux-user/sparc/cpu_loop.c      | 3 +++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/linux-user/sparc/target_signal.h b/linux-user/sparc/target_signal.h
index 87757f0c4e..f223eb4af6 100644
--- a/linux-user/sparc/target_signal.h
+++ b/linux-user/sparc/target_signal.h
@@ -8,7 +8,7 @@
 #define TARGET_SIGTRAP           5
 #define TARGET_SIGABRT           6
 #define TARGET_SIGIOT            6
-#define TARGET_SIGSTKFLT         7 /* actually EMT */
+#define TARGET_SIGEMT            7
 #define TARGET_SIGFPE            8
 #define TARGET_SIGKILL           9
 #define TARGET_SIGBUS           10
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 77864de57f..614a1cbc8e 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -717,6 +717,11 @@ typedef struct target_siginfo {
 #define TARGET_TRAP_HWBKPT      (4)     /* hardware breakpoint/watchpoint */
 #define TARGET_TRAP_UNK         (5)     /* undiagnosed trap */
 
+/*
+ * SIGEMT si_codes
+ */
+#define TARGET_EMT_TAGOVF      1       /* tag overflow */
+
 #include "target_resource.h"
 
 struct target_pollfd {
diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c
index 5a8a71e976..b36bb2574b 100644
--- a/linux-user/sparc/cpu_loop.c
+++ b/linux-user/sparc/cpu_loop.c
@@ -328,6 +328,9 @@ void cpu_loop (CPUSPARCState *env)
         case TT_PRIV_INSN:
             force_sig_fault(TARGET_SIGILL, TARGET_ILL_PRVOPC, env->pc);
             break;
+        case TT_TOVF:
+            force_sig_fault(TARGET_SIGEMT, TARGET_EMT_TAGOVF, env->pc);
+            break;
 #ifdef TARGET_SPARC64
         case TT_PRIV_ACT:
             /* Note do_privact defers to do_privop. */
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps
  2023-02-16  5:45 ` [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps Richard Henderson
@ 2023-02-16  6:07   ` Richard Henderson
  0 siblings, 0 replies; 23+ messages in thread
From: Richard Henderson @ 2023-02-16  6:07 UTC (permalink / raw)
  To: qemu-devel; +Cc: laurent, Ilya Leoshkevich

On 2/15/23 19:45, Richard Henderson wrote:
> The linux kernel's trap tables vector all unassigned trap
> numbers to BAD_TRAP, which then raises SIGILL.
> 
> Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
> Reported-by: Ilya Leoshkevich <iii@linux.ibm.com>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/sparc/cpu_loop.c | 8 ++++++++
>   1 file changed, 8 insertions(+)

I'll queue this to tcg-next, along with Ilya's other start_exclusive patches.


r~



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap
  2023-02-16  5:45 ` [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap Richard Henderson
@ 2023-02-16  7:51   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-16  7:51 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: laurent

On 16/2/23 06:45, Richard Henderson wrote:
> Use TT_TRAP.
> 
> For sparc32, 0x88 is the "Slowaris" system call, currently BAD_TRAP
> in the kernel's ttable_32.S.  For sparc64, 0x110 is tl0_linux32, the
> sparc32 trap, now folded into the TARGET_ABI32 case via TT_TRAP.
> 
> For sparc64, there does still exist trap 0x111 as tl0_oldlinux64,
> which was replaced by 0x16d as tl0_linux64 in 1998.  Since no one
> has noticed, don't bother implementing it now.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/sparc/cpu_loop.c | 14 +++++++-------
>   1 file changed, 7 insertions(+), 7 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows
  2023-02-16  5:45 ` [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows Richard Henderson
@ 2023-02-16  7:54   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-16  7:54 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: laurent

On 16/2/23 06:45, Richard Henderson wrote:
> The v9 and pre-v9 code can be unified with this macro.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/sparc/cpu_loop.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps
  2023-02-16  5:45 ` [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps Richard Henderson
@ 2023-02-16  7:55   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-16  7:55 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: laurent

On 16/2/23 06:45, Richard Henderson wrote:
> Add some macros to localize the hw difference between v9 and pre-v9.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/sparc/cpu_loop.c | 23 +++++++++++++----------
>   1 file changed, 13 insertions(+), 10 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 00/15] linux-user/sparc: Handle missing traps
  2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
                   ` (14 preceding siblings ...)
  2023-02-16  5:45 ` [PATCH v2 15/15] linux-user/sparc: Handle tag overflow traps Richard Henderson
@ 2023-03-07 15:56 ` Laurent Vivier
  2023-03-07 17:07   ` Richard Henderson
  15 siblings, 1 reply; 23+ messages in thread
From: Laurent Vivier @ 2023-03-07 15:56 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel

Hi Richard,

I don't have the time to review your series, do you want I queue it in the linux-user branch and I 
keep it if it passes my test suite?

Thanks,
Laurent

Le 16/02/2023 à 06:45, Richard Henderson a écrit :
> Lots of missing trap codes for cpu_loop().
> 
> Changes for v2:
>    - Fix v8plus syscall trap.
>    - New patch to unify syscall error return via C flag.
> 
> 
> r~
> 
> 
> Richard Henderson (15):
>    linux-user/sparc: Raise SIGILL for all unhandled software traps
>    linux-user/sparc: Tidy syscall trap
>    linux-user/sparc: Tidy syscall error return
>    linux-user/sparc: Use TT_TRAP for flush windows
>    linux-user/sparc: Tidy window spill/fill traps
>    linux-user/sparc: Fix sparc64_{get,set}_context traps
>    linux-user/sparc: Handle software breakpoint trap
>    linux-user/sparc: Handle division by zero traps
>    linux-user/sparc: Handle getcc, setcc, getpsr traps
>    linux-user/sparc: Handle priviledged opcode trap
>    linux-user/sparc: Handle privilidged action trap
>    linux-user/sparc: Handle coprocessor disabled trap
>    linux-user/sparc: Handle unimplemented flush trap
>    linux-user/sparc: Handle floating-point exceptions
>    linux-user/sparc: Handle tag overflow traps
> 
>   linux-user/sparc/target_signal.h |   2 +-
>   linux-user/syscall_defs.h        |   5 +
>   target/sparc/cpu.h               |   3 +-
>   linux-user/sparc/cpu_loop.c      | 190 ++++++++++++++++++++++++-------
>   linux-user/sparc/signal.c        |  36 +++---
>   5 files changed, 175 insertions(+), 61 deletions(-)
> 



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 00/15] linux-user/sparc: Handle missing traps
  2023-03-07 15:56 ` [PATCH v2 00/15] linux-user/sparc: Handle missing traps Laurent Vivier
@ 2023-03-07 17:07   ` Richard Henderson
  2023-03-07 18:23     ` Laurent Vivier
  0 siblings, 1 reply; 23+ messages in thread
From: Richard Henderson @ 2023-03-07 17:07 UTC (permalink / raw)
  To: Laurent Vivier, qemu-devel

On 3/7/23 07:56, Laurent Vivier wrote:
> Hi Richard,
> 
> I don't have the time to review your series, do you want I queue it in the linux-user 
> branch and I keep it if it passes my test suite?

Yes please.


r~


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 00/15] linux-user/sparc: Handle missing traps
  2023-03-07 17:07   ` Richard Henderson
@ 2023-03-07 18:23     ` Laurent Vivier
  0 siblings, 0 replies; 23+ messages in thread
From: Laurent Vivier @ 2023-03-07 18:23 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel

Le 07/03/2023 à 18:07, Richard Henderson a écrit :
> On 3/7/23 07:56, Laurent Vivier wrote:
>> Hi Richard,
>>
>> I don't have the time to review your series, do you want I queue it in the linux-user branch and I 
>> keep it if it passes my test suite?
> 
> Yes please.
>

Done, except PATCH 1 that is already merged.

Thanks,
Laurent


^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2023-03-07 18:23 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-16  5:45 [PATCH v2 00/15] linux-user/sparc: Handle missing traps Richard Henderson
2023-02-16  5:45 ` [PATCH v2 01/15] linux-user/sparc: Raise SIGILL for all unhandled software traps Richard Henderson
2023-02-16  6:07   ` Richard Henderson
2023-02-16  5:45 ` [PATCH v2 02/15] linux-user/sparc: Tidy syscall trap Richard Henderson
2023-02-16  7:51   ` Philippe Mathieu-Daudé
2023-02-16  5:45 ` [PATCH v2 03/15] linux-user/sparc: Tidy syscall error return Richard Henderson
2023-02-16  5:45 ` [PATCH v2 04/15] linux-user/sparc: Use TT_TRAP for flush windows Richard Henderson
2023-02-16  7:54   ` Philippe Mathieu-Daudé
2023-02-16  5:45 ` [PATCH v2 05/15] linux-user/sparc: Tidy window spill/fill traps Richard Henderson
2023-02-16  7:55   ` Philippe Mathieu-Daudé
2023-02-16  5:45 ` [PATCH v2 06/15] linux-user/sparc: Fix sparc64_{get, set}_context traps Richard Henderson
2023-02-16  5:45 ` [PATCH v2 07/15] linux-user/sparc: Handle software breakpoint trap Richard Henderson
2023-02-16  5:45 ` [PATCH v2 08/15] linux-user/sparc: Handle division by zero traps Richard Henderson
2023-02-16  5:45 ` [PATCH v2 09/15] linux-user/sparc: Handle getcc, setcc, getpsr traps Richard Henderson
2023-02-16  5:45 ` [PATCH v2 10/15] linux-user/sparc: Handle priviledged opcode trap Richard Henderson
2023-02-16  5:45 ` [PATCH v2 11/15] linux-user/sparc: Handle privilidged action trap Richard Henderson
2023-02-16  5:45 ` [PATCH v2 12/15] linux-user/sparc: Handle coprocessor disabled trap Richard Henderson
2023-02-16  5:45 ` [PATCH v2 13/15] linux-user/sparc: Handle unimplemented flush trap Richard Henderson
2023-02-16  5:45 ` [PATCH v2 14/15] linux-user/sparc: Handle floating-point exceptions Richard Henderson
2023-02-16  5:45 ` [PATCH v2 15/15] linux-user/sparc: Handle tag overflow traps Richard Henderson
2023-03-07 15:56 ` [PATCH v2 00/15] linux-user/sparc: Handle missing traps Laurent Vivier
2023-03-07 17:07   ` Richard Henderson
2023-03-07 18:23     ` Laurent Vivier

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).