diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-12-18 15:11:09 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-18 08:11:09 +0100 |
| commit | 47f5fe7caf92ed5b96b8d6b3e34a098bc6c2643a (patch) | |
| tree | a0e24c61b2996c11a37ae17abeca1bcfe0cb9166 /src | |
| parent | 6e0f32f4ca4b35bda036caa6ad3abcae4ae64cdc (diff) | |
| download | box64-47f5fe7caf92ed5b96b8d6b3e34a098bc6c2643a.tar.gz box64-47f5fe7caf92ed5b96b8d6b3e34a098bc6c2643a.zip | |
[GDBJIT] Show x64pc in gdb, also added documentation (#2163)
* [GDBJIT] Show x64pc in gdb * Add env. variable and documentation * typo * oops
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.c | 11 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native.c | 2 | ||||
| -rw-r--r-- | src/include/gdbjit.h | 7 | ||||
| -rw-r--r-- | src/tools/gdbjit.c | 3 |
4 files changed, 17 insertions, 6 deletions
diff --git a/src/core.c b/src/core.c index ddb83ce2..5d7666b6 100644 --- a/src/core.c +++ b/src/core.c @@ -72,7 +72,6 @@ int box64_rdtsc_1ghz = 0; uint8_t box64_rdtsc_shift = 0; char* box64_insert_args = NULL; char* box64_new_args = NULL; -int box64_dynarec_gdbjit = 1; #ifdef DYNAREC int box64_dynarec = 1; int box64_dynarec_dump = 0; @@ -98,6 +97,7 @@ uintptr_t box64_nodynarec_start = 0; uintptr_t box64_nodynarec_end = 0; uintptr_t box64_dynarec_test_start = 0; uintptr_t box64_dynarec_test_end = 0; +int box64_dynarec_gdbjit = 0; #ifdef ARM64 int arm64_asimd = 0; int arm64_aes = 0; @@ -901,6 +901,15 @@ void LoadLogEnv() if(!box64_dynarec_wait) printf_log(LOG_INFO, "Dynarec will not wait for FillBlock to ready and use Interpreter instead\n"); } + p = getenv("BOX64_DYNAREC_GDBJIT"); + if(p) { + if(strlen(p)==1) { + if(p[0]>='0' && p[0]<='1') + box64_dynarec_gdbjit = p[0]-'0'; + } + if(box64_dynarec_gdbjit) + printf_log(LOG_INFO, "Dynarec will generate debuginfo for gdbjit\n"); + } p = getenv("BOX64_DYNAREC_ALIGNED_ATOMICS"); if(p) { if(strlen(p)==1) { diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 011815bc..3b761a19 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -754,7 +754,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit dynarec_log(LOG_NONE, "%s\n", (box64_dynarec_dump>1)?"\e[m":""); } if (box64_dynarec_gdbjit) { - GdbJITNewBlock(helper.gdbjit_block, (GDB_CORE_ADDR)block->actual_block, (GDB_CORE_ADDR)block->actual_block + native_size); + GdbJITNewBlock(helper.gdbjit_block, (GDB_CORE_ADDR)block->actual_block, (GDB_CORE_ADDR)block->actual_block + native_size, helper.start); } int oldtable64size = helper.table64size; size_t oldnativesize = helper.native_size; diff --git a/src/include/gdbjit.h b/src/include/gdbjit.h index 70405d3e..40f1ad58 100644 --- a/src/include/gdbjit.h +++ b/src/include/gdbjit.h @@ -11,19 +11,20 @@ typedef struct gdbjit_block_s { FILE* file; GDB_CORE_ADDR start; GDB_CORE_ADDR end; - uintptr_t alloced; + uintptr_t x64start; + size_t alloced; size_t nlines; struct gdb_line_mapping lines[0]; } gdbjit_block_t; -void GdbJITNewBlock(gdbjit_block_t* block, GDB_CORE_ADDR start, GDB_CORE_ADDR end); +void GdbJITNewBlock(gdbjit_block_t* block, GDB_CORE_ADDR start, GDB_CORE_ADDR end, uintptr_t x64start); gdbjit_block_t* GdbJITBlockAddLine(gdbjit_block_t* block, GDB_CORE_ADDR addr, const char* line); void GdbJITBlockReady(gdbjit_block_t* block); #else -#define GdbJITNewBlock(a, b, c) +#define GdbJITNewBlock(a, b, c, d) #define GdbJITBlockAddLine(a, b, c) NULL #define GdbJITBlockReady(a) diff --git a/src/tools/gdbjit.c b/src/tools/gdbjit.c index d91c4c05..baf45fe6 100644 --- a/src/tools/gdbjit.c +++ b/src/tools/gdbjit.c @@ -46,7 +46,7 @@ gdbjit_descriptor_t __jit_debug_descriptor = { 1, GDBJIT_NOACTION, NULL, NULL }; /* --------------------------------------------------------------------------- */ -void GdbJITNewBlock(gdbjit_block_t* block, GDB_CORE_ADDR start, GDB_CORE_ADDR end) +void GdbJITNewBlock(gdbjit_block_t* block, GDB_CORE_ADDR start, GDB_CORE_ADDR end, uintptr_t x64start) { if (!block) return; @@ -59,6 +59,7 @@ void GdbJITNewBlock(gdbjit_block_t* block, GDB_CORE_ADDR start, GDB_CORE_ADDR en block->start = start; block->end = end; + block->x64start = x64start; block->alloced = block->nlines = 0; } |