about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-07-23 11:13:28 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-07-23 11:13:37 +0200
commit49cc5eabcbcebdd6a67bfa32a82caf1723997d78 (patch)
tree18789911b978ca0fa85a336f75cff117903c8a3f /src/dynarec
parentbf429a1dcfdaa960857f03a6f85e0dbf83e8b1e4 (diff)
downloadbox64-49cc5eabcbcebdd6a67bfa32a82caf1723997d78.tar.gz
box64-49cc5eabcbcebdd6a67bfa32a82caf1723997d78.zip
Some handling of case where signal numbers differs between native and x64 archs (not complete, missing sigset conversions)
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c5
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c1
-rw-r--r--src/dynarec/dynarec_native_functions.c9
-rw-r--r--src/dynarec/la64/dynarec_la64_00.c4
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00_3.c4
5 files changed, 12 insertions, 11 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index eac955a7..a547f2a1 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -3,6 +3,7 @@
 #include <stddef.h>
 #include <errno.h>
 
+#include "x64_signals.h"
 #include "os.h"
 #include "debug.h"
 #include "box64context.h"
@@ -2626,9 +2627,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 if(!BOX64ENV(ignoreint3)) {
                     // check if TRAP signal is handled
                     TABLE64C(x1, const_context);
-                    MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP]));
+                    MOV32w(x2, offsetof(box64context_t, signals[X64_SIGTRAP]));
                     LDRx_REG(x3, x1, x2);
-                    //LDRx_U12(x3, x1, offsetof(box64context_t, signals[SIGTRAP]));
+                    //LDRx_U12(x3, x1, offsetof(box64context_t, signals[X64_SIGTRAP]));
                     CMPSx_U12(x3, 0);
                     B_MARK(cEQ);
                     GETIP(addr);  // update RIP
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index 84832f65..15c0f3f0 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -4,7 +4,6 @@
 #include <errno.h>
 #include <string.h>
 #include <math.h>
-#include <signal.h>
 #include <sys/types.h>
 #include <unistd.h>
 
diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c
index 4c87385a..bb696ac2 100644
--- a/src/dynarec/dynarec_native_functions.c
+++ b/src/dynarec/dynarec_native_functions.c
@@ -7,6 +7,7 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include "x64_signals.h"
 #include "os.h"
 #include "debug.h"
 #include "box64context.h"
@@ -186,20 +187,20 @@ void native_ud(x64emu_t* emu)
 {
     if(BOX64ENV(dynarec_test))
         emu->test.test = 0;
-    EmitSignal(emu, SIGILL, (void*)R_RIP, 0);
+    EmitSignal(emu, X64_SIGILL, (void*)R_RIP, 0);
 }
 
 void native_br(x64emu_t* emu)
 {
     if(BOX64ENV(dynarec_test))
         emu->test.test = 0;
-    EmitSignal(emu, SIGSEGV, (void*)R_RIP, 0xb09d);
+    EmitSignal(emu, X64_SIGSEGV, (void*)R_RIP, 0xb09d);
 }
 
 void native_priv(x64emu_t* emu)
 {
     emu->test.test = 0;
-    EmitSignal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
+    EmitSignal(emu, X64_SIGSEGV, (void*)R_RIP, 0xbad0);
 }
 
 void native_int(x64emu_t* emu, int num)
@@ -216,7 +217,7 @@ void native_wineint(x64emu_t* emu, int num)
 #endif
 void native_int3(x64emu_t* emu)
 {
-    EmitSignal(emu, SIGTRAP, NULL, 3);
+    EmitSignal(emu, X64_SIGTRAP, NULL, 3);
 }
 
 void native_div0(x64emu_t* emu)
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c
index 23fd9004..556ccd34 100644
--- a/src/dynarec/la64/dynarec_la64_00.c
+++ b/src/dynarec/la64/dynarec_la64_00.c
@@ -2,8 +2,8 @@
 #include <stdlib.h>
 #include <stddef.h>
 #include <errno.h>
-#include <signal.h>
 
+#include "x64_signals.h"
 #include "os.h"
 #include "debug.h"
 #include "box64context.h"
@@ -1997,7 +1997,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 if (!BOX64ENV(ignoreint3)) {
                     // check if TRAP signal is handled
                     TABLE64C(x1, const_context);
-                    MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP]));
+                    MOV32w(x2, offsetof(box64context_t, signals[X64_SIGTRAP]));
                     LDX_D(x3, x1, x2);
                     BEQZ_MARK(x3);
                     GETIP(addr, x7);
diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c
index 924f3e36..654805aa 100644
--- a/src/dynarec/rv64/dynarec_rv64_00_3.c
+++ b/src/dynarec/rv64/dynarec_rv64_00_3.c
@@ -2,9 +2,9 @@
 #include <stdlib.h>
 #include <stddef.h>
 #include <errno.h>
-#include <signal.h>
 #include <assert.h>
 
+#include "x64_signals.h"
 #include "os.h"
 #include "debug.h"
 #include "box64context.h"
@@ -482,7 +482,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int
                 if (!BOX64ENV(ignoreint3)) {
                     // check if TRAP signal is handled
                     TABLE64C(x1, const_context);
-                    MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP]));
+                    MOV32w(x2, offsetof(box64context_t, signals[X64_SIGTRAP]));
                     ADD(x2, x2, x1);
                     LD(x3, x2, 0);
                     BEQZ_MARK(x3);