about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64emu.c9
-rw-r--r--src/emu/x64run.c17
2 files changed, 21 insertions, 5 deletions
diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c
index 0173ea22..d1ae11c8 100644
--- a/src/emu/x64emu.c
+++ b/src/emu/x64emu.c
@@ -31,9 +31,6 @@
 #warning Architecture cannot follow SSE Flush to 0 flag
 #endif
 
-// from src/wrapped/wrappedlibc.c
-int my_munmap(x64emu_t* emu, void* addr, unsigned long length);
-
 typedef struct cleanup_s {
     void*       f;
     int         arg;
@@ -194,8 +191,10 @@ void CallAllCleanup(x64emu_t *emu)
 
 static void internalFreeX64(x64emu_t* emu)
 {
-    if(emu && emu->stack2free)
-        my_munmap(NULL, emu->stack2free, emu->size_stack);
+    if(emu && emu->stack2free) {
+        if(!internal_munmap(emu->stack2free, emu->size_stack))
+            freeProtection((uintptr_t)emu->stack2free, emu->size_stack);
+    }
 }
 
 EXPORTDYN
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 7bec6b91..986c371a 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -31,6 +31,7 @@ int my_setcontext(x64emu_t* emu, void* ucp);
 #ifdef TEST_INTERPRETER
 int RunTest(x64test_t *test)
 #else
+int running32bits = 0;
 int Run(x64emu_t *emu, int step)
 #endif
 {
@@ -440,6 +441,8 @@ x64emurun:
                 goto fini;
             }
             is32bits = (emu->segs[_CS]==0x23);
+            if(is32bits)
+                running32bits = 1;
             #endif
             break;
         case 0x65:                      /* GS: prefix */
@@ -456,6 +459,8 @@ x64emurun:
                 goto fini;
             }
             is32bits = (emu->segs[_CS]==0x23);
+            if(is32bits)
+                running32bits = 1;
             #endif
             break;
         case 0x66:                      /* 16bits prefix */
@@ -1426,6 +1431,10 @@ x64emurun:
             R_RIP = addr;
             STEP;
             is32bits = (emu->segs[_CS]==0x23);
+            #ifndef TEST_INTERPRETER
+            if(is32bits)
+                running32bits = 1;
+            #endif
             break;
         case 0xD0:                      /* GRP2 Eb,1 */
         case 0xD2:                      /* GRP2 Eb,CL */
@@ -1941,6 +1950,10 @@ x64emurun:
                         }
                         STEP2;
                         is32bits = (emu->segs[_CS]==0x23);
+                        #ifndef TEST_INTERPRETER
+                        if(is32bits)
+                            running32bits = 1;
+                        #endif
                     }
                     break;
                 case 4:                 /* JMP NEAR Ed */
@@ -1967,6 +1980,10 @@ x64emurun:
                         }
                         STEP2;
                         is32bits = (emu->segs[_CS]==0x23);
+                        #ifndef TEST_INTERPRETER
+                        if(is32bits)
+                            running32bits = 1;
+                        #endif
                     }
                     break;
                 case 6:                 /* Push Ed */