diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-18 11:58:37 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-18 11:58:37 +0200 |
| commit | 053c389cfba933fe92b65cd6486e993d3fb1ab74 (patch) | |
| tree | d0528532d186483cfb0733549e9247f9715d0c18 /src | |
| parent | 81be6b1f30308205677507ae914ea2f193857c39 (diff) | |
| download | box64-053c389cfba933fe92b65cd6486e993d3fb1ab74.tar.gz box64-053c389cfba933fe92b65cd6486e993d3fb1ab74.zip | |
[DYNAREC] Small improvment to callret=2 handling of path to regen a block
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/dynarec.c | 2 | ||||
| -rw-r--r-- | src/libtools/signals.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index 2356f451..c0f712eb 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -175,6 +175,8 @@ void DynaRun(x64emu_t* emu) emu->test.clean = 0; } #endif + if(skip==3) + skip = 0; } } if(emu->flags.need_jmpbuf) 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); |