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/modrm.h6
-rw-r--r--src/emu/x64run.c11
-rw-r--r--src/emu/x64run0f.c13
-rw-r--r--src/emu/x64runf20f.c1
4 files changed, 23 insertions, 8 deletions
diff --git a/src/emu/modrm.h b/src/emu/modrm.h
index 2f2cd1fc..6b02e74a 100644
--- a/src/emu/modrm.h
+++ b/src/emu/modrm.h
@@ -11,9 +11,9 @@
 #define F64S    *(int64_t*)(addr+=8, addr-8)

 #define PK(a)   *(uint8_t*)(addr+a)

 #ifdef DYNAREC

-#define STEP if(step) return 0;

-#define STEP2 if(step) {R_RIP = addr; return 0;}

-#define STEP3 if(*step) (*step)++;

+#define STEP  check_exec(emu, addr); if(step) return 0;

+#define STEP2 check_exec(emu, addr); if(step) {R_RIP = addr; return 0;}

+#define STEP3 check_exec(emu, addr); if(*step) (*step)++;

 #else

 #define STEP

 #define STEP2

diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 27232c9e..5859ec34 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -71,6 +71,7 @@ int Run(x64emu_t *emu, int step)
 #ifdef TEST_INTERPRETER
     test->memsize = 0;
 #else
+    check_exec(emu, R_RIP);
 x64emurun:
     while(1) 
 #endif
@@ -1813,7 +1814,7 @@ x64emurun:
             F8;
             if(rex.is32bits && box64_ignoreint3)
             {} else
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
             STEP;
             #endif
             break;
@@ -1853,7 +1854,7 @@ x64emurun:
             #ifndef TEST_INTERPRETER
             if(rex.is32bits && box64_ignoreint3)
             {} else
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
             STEP;
             #endif
             break;
@@ -1882,7 +1883,7 @@ x64emurun:
         case 0xF4:                      /* HLT */
             // this is a privilege opcode...
             #ifndef TEST_INTERPRETER
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
             STEP;
             #endif
             break;
@@ -2016,14 +2017,14 @@ x64emurun:
             // this is a privilege opcode
             if(rex.is32bits && box64_ignoreint3)
             {} else
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
             STEP;
             break;
         case 0xFB:                      /* STI */
             // this is a privilege opcode
             if(rex.is32bits && box64_ignoreint3)
             {} else
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
             STEP;
             break;
         case 0xFC:                      /* CLD */
diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c
index d1ae6ff8..0364f4e9 100644
--- a/src/emu/x64run0f.c
+++ b/src/emu/x64run0f.c
@@ -387,6 +387,19 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step)
             R_RAX = tmp64u&0xFFFFFFFF;

             break;

 

+        case 0x34:                  /* SYSENTER */

+            #ifndef TEST_INTERPRETER

+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);

+            STEP;

+            #endif

+            break;

+        case 0x35:                  /* SYSEXIT */

+            #ifndef TEST_INTERPRETER

+            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);

+            STEP;

+            #endif

+            break;

+

         case 0x38:  // these are some SSE3 opcodes

             opcode = F8;

             switch(opcode) {

diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c
index 5b28888f..097d0e32 100644
--- a/src/emu/x64runf20f.c
+++ b/src/emu/x64runf20f.c
@@ -20,6 +20,7 @@
 #include "x87emu_private.h"

 #include "box64context.h"

 #include "bridge.h"

+#include "signals.h"

 

 #include "modrm.h"