diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-26 18:43:52 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-26 18:43:52 +0200 |
| commit | dc0ab611c46502f115dc68c5d924f4834511216a (patch) | |
| tree | bcad1c146612e5eb6444a232aa1e587c4ca89bdd /src | |
| parent | 5ddc93cf0dec903fb3aac1121861bd722acc6744 (diff) | |
| download | box64-dc0ab611c46502f115dc68c5d924f4834511216a.tar.gz box64-dc0ab611c46502f115dc68c5d924f4834511216a.zip | |
Added handling of INT 0x29 (__fastfail)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_00.c | 8 | ||||
| -rwxr-xr-x | src/emu/x64run.c | 6 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 8820136b..77a20622 100755 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1972,6 +1972,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MARK; LOAD_XEMU_REM(); jump_to_epilog(dyn, 0, xRIP, ninst); + } else if(box64_wine && u8==0x29) { + INST_NAME("INT 0x29"); + // __fastfail ignored! + MOV32w(x1, 1); + STRw_U12(x1, xEmu, offsetof(x64emu_t, quit)); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; } else { INST_NAME("INT n"); SETFLAGS(X_ALL, SF_SET); // Hack to set flags in "don't care" state diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 2e4264c8..bca01f1f 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -1378,6 +1378,12 @@ x64emurun: if(box64_wine && tmp8u==0x2D) { // lets ignore the INT 2D printf_log(LOG_DEBUG, "INT 2D called\n"); + } else if(box64_wine && tmp8u==0x29) { + // INT 29 is __fastfail + printf_log(LOG_DEBUG, "INT 29 called => __fastfail(0x%x)\n", R_ECX); + emu->quit = 1; + R_RIP = addr; + goto fini; } else if (tmp8u==0x80) { // 32bits syscall #ifndef TEST_INTERPRETER |