about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-05-09 16:21:41 +0800
committerGitHub <noreply@github.com>2025-05-09 10:21:41 +0200
commit22fdc90fe28171e3e7566684f60305a4f2d04dcf (patch)
tree8e0c1ded237fa62b6cf9dd56455a9338d5db5fd0 /src/dynarec
parent78193c5f1acb4fd0311bbf96ed0f692016d6e350 (diff)
downloadbox64-22fdc90fe28171e3e7566684f60305a4f2d04dcf.tar.gz
box64-22fdc90fe28171e3e7566684f60305a4f2d04dcf.zip
[GDBJIT] Added a new option to register debuginfo only after trapped into signalhandler (#2614)
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/dynablock_private.h3
-rw-r--r--src/dynarec/dynarec_native.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/dynarec/dynablock_private.h b/src/dynarec/dynablock_private.h
index 388fcc4d..8220be0c 100644
--- a/src/dynarec/dynablock_private.h
+++ b/src/dynarec/dynablock_private.h
@@ -31,6 +31,9 @@ typedef struct dynablock_s {
     void*           arch;       // arch dependant per inst info (can be NULL)
     callret_t*      callrets;   // array of callret return, with NOP / UDF depending if the block is clean or dirty
     void*           jmpnext;    // a branch jmpnext code when block is marked
+    #ifdef GDBJIT
+    void*           gdbjit_block;
+    #endif
 } dynablock_t;
 
 #endif //__DYNABLOCK_PRIVATE_H_
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 1de71094..9ea02962 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -886,7 +886,11 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit
     block->x64_size = end-start;
     // all done...
     if (BOX64ENV(dynarec_gdbjit) && (!BOX64ENV(dynarec_gdbjit_end) || (addr >= BOX64ENV(dynarec_gdbjit_start) && addr < BOX64ENV(dynarec_gdbjit_end)))) {
-        GdbJITBlockReady(helper.gdbjit_block);
+        if (BOX64ENV(dynarec_gdbjit) != 3) GdbJITBlockReady(helper.gdbjit_block);
+        GdbJITBlockCleanup(helper.gdbjit_block);
+        #ifdef GDBJIT
+        block->gdbjit_block = helper.gdbjit_block;
+        #endif
     }
     ClearCache(actual_p+sizeof(void*), native_size);   // need to clear the cache before execution...
     block->hash = X31_hash_code(block->x64_addr, block->x64_size);