diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-24 15:24:54 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-24 15:24:54 +0200 |
| commit | 320459c2c6324c0934b5faa640e3e656a4bf9e1e (patch) | |
| tree | 258a5ad68935243f282e6e796d8eac66cf082872 /src/emu | |
| parent | 8d14c10b8cf773d252dfeb7717d90fc07e3590ee (diff) | |
| download | box64-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.c | 17 |
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; |