From 053c389cfba933fe92b65cd6486e993d3fb1ab74 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 18 Apr 2025 11:58:37 +0200 Subject: [DYNAREC] Small improvment to callret=2 handling of path to regen a block --- src/dynarec/dynarec.c | 2 ++ src/libtools/signals.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') 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); -- cgit 1.4.1