about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-18 11:58:37 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-18 11:58:37 +0200
commit053c389cfba933fe92b65cd6486e993d3fb1ab74 (patch)
treed0528532d186483cfb0733549e9247f9715d0c18 /src/libtools
parent81be6b1f30308205677507ae914ea2f193857c39 (diff)
downloadbox64-053c389cfba933fe92b65cd6486e993d3fb1ab74.tar.gz
box64-053c389cfba933fe92b65cd6486e993d3fb1ab74.zip
[DYNAREC] Small improvment to callret=2 handling of path to regen a block
Diffstat (limited to 'src/libtools')
-rw-r--r--src/libtools/signals.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index cabcd5f4..163ae7b3 100644
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -1683,10 +1683,11 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
                         }
                         dynarec_log(LOG_INFO, "Dynablock (%p, x64addr=%p) %s, getting out at %s %p (%p)!\n", db, db->x64_addr, is_hotpage?"in HotPage":"dirty",(void*)R_RIP, type_callret?"self-loop":"ret from callret", (void*)addr);
                         emu->test.clean = 0;
+                        // use "3" to regen a dynablock at current pc (else it will first do an interp run)
                         #ifdef ANDROID
-                        siglongjmp(*(JUMPBUFF*)emu->jmpbuf, 2);
+                        siglongjmp(*(JUMPBUFF*)emu->jmpbuf, 3);
                         #else
-                        siglongjmp(emu->jmpbuf, 2);
+                        siglongjmp(emu->jmpbuf, 3);
                         #endif
                     }
                     dynarec_log(LOG_INFO, "Warning, Dirty %s (%p for db %p/%p) detected, but jmpbuffer not ready!\n", type_callret?"self-loop":"ret from callret", (void*)addr, db, (void*)db->x64_addr);