diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-23 11:13:28 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-23 11:13:37 +0200 |
| commit | 49cc5eabcbcebdd6a67bfa32a82caf1723997d78 (patch) | |
| tree | 18789911b978ca0fa85a336f75cff117903c8a3f /src/dynarec | |
| parent | bf429a1dcfdaa960857f03a6f85e0dbf83e8b1e4 (diff) | |
| download | box64-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.c | 5 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_functions.c | 1 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native_functions.c | 9 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 4 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00_3.c | 4 |
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); |