about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-30 13:15:57 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-03-30 13:15:57 +0000
commit373c400cc3a8d06487373a62183ca8981b38e752 (patch)
tree5f04ef44e6524726c005ac718f715babddf189dd /src
parentd93e53498d18cbabb601a4fffb5224925aa5db24 (diff)
downloadbox64-373c400cc3a8d06487373a62183ca8981b38e752.tar.gz
box64-373c400cc3a8d06487373a62183ca8981b38e752.zip
[DYNAREC] Fixed TEST_INTERPRETER when jumping to a non-dynarec block
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynablock.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index 59530aed..17c6aa0c 100755
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -205,6 +205,7 @@ dynablock_t* DBGetBlock(x64emu_t* emu, uintptr_t addr, int create)
     dynablock_t *db = internalDBGetBlock(emu, addr, addr, create, 1);
     if(db && db->done && db->block && db->need_test) {
         if(AreaInHotPage((uintptr_t)db->x64_addr, (uintptr_t)db->x64_addr + db->x64_size - 1)) {
+            emu->test.test = 0;
             if(box64_dynarec_fastpage) {
                 uint32_t hash = X31_hash_code(db->x64_addr, db->x64_size);
                 if(hash==db->hash)  // seems ok, run it without reprotecting it
@@ -240,6 +241,8 @@ dynablock_t* DBGetBlock(x64emu_t* emu, uintptr_t addr, int create)
         }
         mutex_unlock(&my_context->mutex_dyndump);
     } 
+    if(!db || !db->block || !db->done)
+        emu->test.test = 0;
     return db;
 }
 
@@ -249,8 +252,10 @@ dynablock_t* DBAlternateBlock(x64emu_t* emu, uintptr_t addr, uintptr_t filladdr)
     int create = 1;
     dynablock_t *db = internalDBGetBlock(emu, addr, filladdr, create, 1);
     if(db && db->done && db->block && db->need_test) {
-        if(mutex_trylock(&my_context->mutex_dyndump))
+        if(mutex_trylock(&my_context->mutex_dyndump)) {
+            emu->test.test = 0;
             return NULL;
+        }
         uint32_t hash = X31_hash_code(db->x64_addr, db->x64_size);
         if(hash!=db->hash) {
             db->done = 0;   // invalidating the block
@@ -267,5 +272,7 @@ dynablock_t* DBAlternateBlock(x64emu_t* emu, uintptr_t addr, uintptr_t filladdr)
         }
         mutex_unlock(&my_context->mutex_dyndump);
     } 
+    if(!db || !db->block || !db->done)
+        emu->test.test = 0;
     return db;
 }