about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-06-24 20:32:16 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-06-24 20:32:16 +0200
commitaeeb9b719ac586c9b741bb2167bda27960bd002b (patch)
treec4f09d231b4e48dc04a6b41502da6663f283c080 /src/tools
parent36f1808615813e85b05c9460d7dd481c4bc20de0 (diff)
downloadbox64-aeeb9b719ac586c9b741bb2167bda27960bd002b.tar.gz
box64-aeeb9b719ac586c9b741bb2167bda27960bd002b.zip
[COSIM] Added range handling in BOX64_DYNAREC_TEST ([RCFILE] too)
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/rcfile.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c
index 4179fab6..3147cc4a 100644
--- a/src/tools/rcfile.c
+++ b/src/tools/rcfile.c
@@ -165,7 +165,7 @@ IGNORE(BOX64_DYNAREC_FASTPAGE)                                      \
 ENTRYBOOL(BOX64_DYNAREC_ALIGNED_ATOMICS, box64_dynarec_aligned_atomics) \
 ENTRYBOOL(BOX64_DYNAREC_WAIT, box64_dynarec_wait)                   \
 ENTRYSTRING_(BOX64_NODYNAREC, box64_nodynarec)                      \
-ENTRYBOOL(BOX64_DYNAREC_TEST, box64_dynarec_test)                   \
+ENTRYSTRING_(BOX64_DYNAREC_TEST, box64_dynarec_test)                \
 ENTRYBOOL(BOX64_DYNAREC_MISSING, box64_dynarec_missing)             \
 
 #else
@@ -679,6 +679,32 @@ void ApplyParams(const char* name)
             printf_log(LOG_INFO, "Ignoring BOX64_NODYNAREC=%s (%p-%p)\n", param->box64_nodynarec, (void*)box64_nodynarec_start, (void*)box64_nodynarec_end);
         }
     }
+    if(param->is_box64_dynarec_test_present) {
+        uintptr_t no_start = 0, no_end = 0;
+        if(strlen(param->box64_dynarec_test)==1) {
+            box64_dynarec_test = param->box64_dynarec_test[0]-'0';
+            box64_dynarec_test_start = 0x0;
+            box64_dynarec_test_end = 0x0;
+            if(box64_dynarec_test>2) box64_dynarec_test = 0;
+        } else {
+            int ok = 0;
+            if(sscanf(param->box64_dynarec_test, "0x%lX-0x%lX", &no_start, &no_end)==2)
+                ok = 1;
+            if(!ok && sscanf(param->box64_dynarec_test, "%lx-%lx", &no_start, &no_end)==2)
+                ok = 1;
+            if(!ok && sscanf(param->box64_dynarec_test, "%ld-%ld", &no_start, &no_end)==2)
+                ok = 1;
+            if(ok && no_end>no_start) {
+                box64_dynarec_test = 1;
+                box64_dynarec_test_start = no_start;
+                box64_dynarec_test_end = no_end;
+                printf_log(LOG_INFO, "Appling BOX64_DYNAREC_TEST=%p-%p\n", (void*)box64_dynarec_test_start, (void*)box64_dynarec_test_end);
+            } else {
+                box64_dynarec_test = 0;
+                printf_log(LOG_INFO, "Ignoring BOX64_DYNAREC_TEST=%s (%p-%p)\n", param->box64_dynarec_test, (void*)box64_dynarec_test_start, (void*)box64_dynarec_test_end);
+            }
+        }
+    }
     if(param->is_box64_dynarec_forward_present) {
         int forward = 0;
         if(sscanf(param->box64_dynarec_forward, "%d", &forward)==1) {