about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-10-19 19:06:38 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-10-19 19:06:38 +0200
commit0833a07a65da8e786041666a815f2df87dccaa7e (patch)
tree9dafa7e7c7ae9358bafab3ff368866d6175267e9 /src
parentaa4dbe72c9f7a6297a68ef4edce70a105cbd0f4c (diff)
downloadbox64-0833a07a65da8e786041666a815f2df87dccaa7e.tar.gz
box64-0833a07a65da8e786041666a815f2df87dccaa7e.zip
[DYNAREC] Introduce BOX4_DYNAREC_INTERP_SIGNAL and 1 profile that needs it
Diffstat (limited to 'src')
-rw-r--r--src/include/env.h1
-rw-r--r--src/libtools/signal32.c2
-rw-r--r--src/libtools/signals.c2
3 files changed, 3 insertions, 2 deletions
diff --git a/src/include/env.h b/src/include/env.h
index 6b793881..546fc7fe 100644
--- a/src/include/env.h
+++ b/src/include/env.h
@@ -70,6 +70,7 @@ extern char* ftrace_name;
     BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1, 1)                           \
     INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2, 1)       \
     INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2, 1)           \
+    BOOLEAN(BOX64_DYNAREC_INTERP_SIGNAL, dynarec_interp_signal, 0, 1)         \
     STRING(BOX64_EMULATED_LIBS, emulated_libs, 0)                             \
     STRING(BOX64_ENV, env, 0)                                                 \
     STRING(BOX64_ENV1, env1, 0)                                               \
diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c
index 99e09434..d088a9e6 100644
--- a/src/libtools/signal32.c
+++ b/src/libtools/signal32.c
@@ -699,7 +699,7 @@ void my_sigactionhandler_oldcode_32(x64emu_t* emu, int32_t sig, int simple, sigi
     int dynarec = 0;
     #ifdef DYNAREC
     if(sig!=X64_SIGSEGV && !(Locks&is_dyndump_locked) && !(Locks&is_memprot_locked))
-        dynarec = 1;
+        dynarec = BOX64ENV(dynarec_interp_signal)?0:1;
     #endif
     ret = RunFunctionHandler32(&exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext);
     // restore old value from emu
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index 4bb29eaa..a05b6491 100644
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -1147,7 +1147,7 @@ void my_sigactionhandler_oldcode_64(x64emu_t* emu, int32_t sig, int simple, sigi
     int dynarec = 0;
     #ifdef DYNAREC
     if(!(sig==X64_SIGSEGV || (Locks&is_dyndump_locked) || (Locks&is_memprot_locked)))
-        dynarec = 1;
+        dynarec = BOX64ENV(dynarec_interp_signal)?0:1;
     #endif
     ret = RunFunctionHandler(emu, &exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext);
     // restore old value from emu