diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-04-24 16:37:24 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-24 10:37:24 +0200 |
| commit | 926e4b2da82d2da28484f2e8da6d30f30e702205 (patch) | |
| tree | 9b895f9f0884e1c28478b50ac6dd83271bd6c633 /src/tools/env.c | |
| parent | 4903177bab1f3324a0faeedd968fed5bf4ea8772 (diff) | |
| download | box64-926e4b2da82d2da28484f2e8da6d30f30e702205.tar.gz box64-926e4b2da82d2da28484f2e8da6d30f30e702205.zip | |
[DYNAREC] Added ranged Dynablock dump (#2570)
Diffstat (limited to 'src/tools/env.c')
| -rw-r--r-- | src/tools/env.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/src/tools/env.c b/src/tools/env.c index 7c0319a9..ad37922e 100644 --- a/src/tools/env.c +++ b/src/tools/env.c @@ -85,6 +85,16 @@ static void addNewEnvVar(const char* s) box_free(p); } +static void parseRange(const char* s, uintptr_t* start, uintptr_t* end) +{ + if (!s) return; + if (!strchr(s, '-')) return; + if (sscanf(s, "%ld-%ld", start, end) == 2) return; + if (sscanf(s, "0x%lX-0x%lX", start, end) == 2) return; + if (sscanf(s, "0x%lx-0x%lx", start, end) == 2) return; + sscanf(s, "%lx-%lx", start, end); +} + static void applyCustomRules() { if (BOX64ENV(log) == LOG_NEVER) { @@ -113,12 +123,7 @@ static void applyCustomRules() box64env.dynarec_test_start = 0x0; box64env.dynarec_test_end = 0x0; } else if (strchr(box64env.dynarec_test_str, '-')) { - if (sscanf(box64env.dynarec_test_str, "%ld-%ld", &box64env.dynarec_test_start, &box64env.dynarec_test_end) != 2) { - if (sscanf(box64env.dynarec_test_str, "0x%lX-0x%lX", &box64env.dynarec_test_start, &box64env.dynarec_test_end) != 2) { - if (sscanf(box64env.dynarec_test_str, "0x%lx-0x%lx", &box64env.dynarec_test_start, &box64env.dynarec_test_end) != 2) - sscanf(box64env.dynarec_test_str, "%lx-%lx", &box64env.dynarec_test_start, &box64env.dynarec_test_end); - } - } + parseRange(box64env.dynarec_test_str, &box64env.dynarec_test_start, &box64env.dynarec_test_end); if (box64env.dynarec_test_end > box64env.dynarec_test_start) { box64env.dynarec_test = 1; } else { @@ -135,12 +140,7 @@ static void applyCustomRules() box64env.dynarec_gdbjit_start = 0x0; box64env.dynarec_gdbjit_end = 0x0; } else if (strchr(box64env.dynarec_gdbjit_str, '-')) { - if (sscanf(box64env.dynarec_gdbjit_str, "%ld-%ld", &box64env.dynarec_gdbjit_start, &box64env.dynarec_gdbjit_end) != 2) { - if (sscanf(box64env.dynarec_gdbjit_str, "0x%lX-0x%lX", &box64env.dynarec_gdbjit_start, &box64env.dynarec_gdbjit_end) != 2) { - if (sscanf(box64env.dynarec_gdbjit_str, "0x%lx-0x%lx", &box64env.dynarec_gdbjit_start, &box64env.dynarec_gdbjit_end) != 2) - sscanf(box64env.dynarec_gdbjit_str, "%lx-%lx", &box64env.dynarec_gdbjit_start, &box64env.dynarec_gdbjit_end); - } - } + parseRange(box64env.dynarec_gdbjit_str, &box64env.dynarec_gdbjit_start, &box64env.dynarec_gdbjit_end); if (box64env.dynarec_gdbjit_end > box64env.dynarec_gdbjit_start) { box64env.dynarec_gdbjit = 2; } else { @@ -149,18 +149,11 @@ static void applyCustomRules() } } - if (box64env.is_nodynarec_overridden) { - if(box64env.nodynarec) { - if (strchr(box64env.nodynarec,'-')) { - if(sscanf(box64env.nodynarec, "%ld-%ld", &box64env.nodynarec_start, &box64env.nodynarec_end)!=2) { - if(sscanf(box64env.nodynarec, "0x%lX-0x%lX", &box64env.nodynarec_start, &box64env.nodynarec_end)!=2) { - if(sscanf(box64env.nodynarec, "0x%lx-0x%lx", &box64env.nodynarec_start, &box64env.nodynarec_end)!=2) - sscanf(box64env.nodynarec, "%lx-%lx", &box64env.nodynarec_start, &box64env.nodynarec_end); - } - } - } - } - } + if (box64env.is_nodynarec_overridden) + parseRange(box64env.nodynarec, &box64env.nodynarec_start, &box64env.nodynarec_end); + + if (box64env.is_dynarec_dump_range_overridden) + parseRange(box64env.dynarec_dump_range, &box64env.dynarec_dump_range_start, &box64env.dynarec_dump_range_end); if (box64env.dynarec_test) { SET_BOX64ENV(dynarec_fastnan, 0); |