about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c1
-rw-r--r--src/dynarec/arm64/dynarec_arm64_helper.c6
-rw-r--r--src/os/os_wine.c3
-rw-r--r--src/tools/env.c36
4 files changed, 26 insertions, 20 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 6feae03c..8557af3f 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -2652,7 +2652,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             GETIP(addr);
             STORE_XEMU_CALL(xRIP);
             MOV32w(x1, u8);
-            LDRx_U12(xR8, xEmu, offsetof(x64emu_t, win64_teb));
             CALL_S(native_int, -1);
             LOAD_XEMU_CALL(xRIP);
             TABLE64(x3, addr); // expected return address
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index a3c8f027..7f78e4de 100644
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -782,6 +782,9 @@ void call_c(dynarec_arm_t* dyn, int ninst, void* fnc, int reg, int ret, int save
         STPx_S7_offset(xR8,  xR9,  xEmu, offsetof(x64emu_t, regs[_R8]));
         fpu_pushcache(dyn, ninst, savereg, 0);
     }
+    #ifdef _WIN32
+    LDRx_U12(xR8, xEmu, offsetof(x64emu_t, win64_teb));
+    #endif
     TABLE64(reg, (uintptr_t)fnc);
     BLR(reg);
     if(ret>=0) {
@@ -831,6 +834,9 @@ void call_i(dynarec_arm_t* dyn, int ninst, void* fnc)
     STRx_U12(xFlags, xEmu, offsetof(x64emu_t, eflags));
     fpu_pushcache(dyn, ninst, x87pc, 0);
 
+    #ifdef _WIN32
+    LDRx_U12(xR8, xEmu, offsetof(x64emu_t, win64_teb));
+    #endif
     TABLE64(x87pc, (uintptr_t)fnc);
     BLR(x87pc);
     LDPx_S7_postindex(xEmu, x1, xSP, 16);
diff --git a/src/os/os_wine.c b/src/os/os_wine.c
index 83be99b2..7b222706 100644
--- a/src/os/os_wine.c
+++ b/src/os/os_wine.c
@@ -211,7 +211,8 @@ void PrintfFtrace(int prefix, const char* fmt, ...)
     static char buf[1024] = { 0 };
 
     char* p = buf;
-    strcpy(p, prefix > 1 ? "[\033[31mBOX64\033[0m] " : "[BOX64] ");
+    p[0] = '\0';
+    if (prefix) strcpy(p, prefix > 1 ? "[\033[31mBOX64\033[0m] " : "[BOX64] ");
     va_list args;
     va_start(args, fmt);
     vsprintf(p + strlen(p), fmt, args);
diff --git a/src/tools/env.c b/src/tools/env.c
index 08f823e9..4b512693 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -125,23 +125,6 @@ static void applyCustomRules()
         initCycleLog(my_context);
     }
 
-    if (box64env.is_dynarec_test_str_overridden) {
-        if (strlen(box64env.dynarec_test_str) == 1) {
-            if (box64env.dynarec_test_str[0] >= '0' && box64env.dynarec_test_str[0] <= '1')
-                box64env.dynarec_test = box64env.dynarec_test_str[0] - '0';
-
-            box64env.dynarec_test_start = 0x0;
-            box64env.dynarec_test_end = 0x0;
-        } else if (strchr(box64env.dynarec_test_str, '-')) {
-            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 {
-                box64env.dynarec_test = 0;
-            }
-        }
-    }
-
     if (box64env.is_dynarec_gdbjit_str_overridden) {
         if (strlen(box64env.dynarec_gdbjit_str) == 1) {
             if (box64env.dynarec_gdbjit_str[0] >= '0' && box64env.dynarec_gdbjit_str[0] <= '3')
@@ -158,13 +141,30 @@ static void applyCustomRules()
             }
         }
     }
+#endif
+
+    if (box64env.is_dynarec_test_str_overridden) {
+        if (strlen(box64env.dynarec_test_str) == 1) {
+            if (box64env.dynarec_test_str[0] >= '0' && box64env.dynarec_test_str[0] <= '1')
+                box64env.dynarec_test = box64env.dynarec_test_str[0] - '0';
+
+            box64env.dynarec_test_start = 0x0;
+            box64env.dynarec_test_end = 0x0;
+        } else if (strchr(box64env.dynarec_test_str, '-')) {
+            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 {
+                box64env.dynarec_test = 0;
+            }
+        }
+    }
 
     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);
-#endif
 
     if (box64env.dynarec_test) {
         SET_BOX64ENV(dynarec_fastnan, 0);