about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-24 15:24:54 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-24 15:24:54 +0200
commit320459c2c6324c0934b5faa640e3e656a4bf9e1e (patch)
tree258a5ad68935243f282e6e796d8eac66cf082872 /src/emu
parent8d14c10b8cf773d252dfeb7717d90fc07e3590ee (diff)
downloadbox64-320459c2c6324c0934b5faa640e3e656a4bf9e1e.tar.gz
box64-320459c2c6324c0934b5faa640e3e656a4bf9e1e.zip
Make BOX64_IGNOREINT3 also ignore other privilged instructions
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64run.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index aa28c070..e0dc0062 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -561,7 +561,13 @@ x64emurun:
         case 0x6E:                      /* OUTSB DX */
         case 0x6F:                      /* OUTSD DX */
 #ifndef TEST_INTERPRETER
-            emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            if(rex.is32bits && box64_ignoreint3)
+            {
+                F8;
+            } else {
+                F8;
+                emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+            }
             STEP;
             #endif
             break;
@@ -1804,6 +1810,9 @@ x64emurun:
         case 0xE7:                      /* OUT XX, EAX */
             // this is a privilege opcode...
             #ifndef TEST_INTERPRETER
+            F8;
+            if(rex.is32bits && box64_ignoreint3)
+            {} else
             emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
             STEP;
             #endif
@@ -1842,6 +1851,8 @@ x64emurun:
         case 0xEF:                      /* OUT DX, EAX */
             // this is a privilege opcode...
             #ifndef TEST_INTERPRETER
+            if(rex.is32bits && box64_ignoreint3)
+            {} else
             emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
             STEP;
             #endif
@@ -2003,11 +2014,15 @@ x64emurun:
             break;
         case 0xFA:                      /* CLI */
             // this is a privilege opcode
+            if(rex.is32bits && box64_ignoreint3)
+            {} else
             emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
             STEP;
             break;
         case 0xFB:                      /* STI */
             // this is a privilege opcode
+            if(rex.is32bits && box64_ignoreint3)
+            {} else
             emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
             STEP;
             break;