diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-05-22 23:02:12 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-22 23:02:12 +0200 |
| commit | 18a02fafb1a14d70affb16cee2cb59c1c1e7849e (patch) | |
| tree | c2233c1e8fffb0ccede744c2fe8b716a10ee6c6e /src | |
| parent | 5916869329fc3bf00885be33be98f9cfbe6073de (diff) | |
| parent | 06d4fc79ec22cdc93ca4577bd01fc496c3eb6c0e (diff) | |
| download | box64-18a02fafb1a14d70affb16cee2cb59c1c1e7849e.tar.gz box64-18a02fafb1a14d70affb16cee2cb59c1c1e7849e.zip | |
Merge pull request #2660 from AndreRH/wowbox64
wow64 part4 (dont squash)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 19 | ||||
| -rw-r--r-- | src/dynarec/dynablock.c | 2 | ||||
| -rw-r--r-- | src/include/os.h | 2 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 351e1e0a..3ab1e5c4 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2646,6 +2646,25 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0xCD: u8 = F8; +#ifdef _WIN32 + NOTEST(x1); + SMEND(); + GETIP(addr); + STORE_XEMU_CALL(xRIP); + MOV32w(x1, u8); + LDRx_U12(xR8, xEmu, offsetof(x64emu_t, win64_teb)); + CALL_S(x86Int, -1); + LOAD_XEMU_CALL(xRIP); + TABLE64(x3, addr); // expected return address + CMPSx_REG(xRIP, x3); + B_MARK(cNE); + LDRw_U12(w1, xEmu, offsetof(x64emu_t, quit)); + CBZw_NEXT(w1); + MARK; + LOAD_XEMU_REM(); + jump_to_epilog(dyn, 0, xRIP, ninst); + break; +#endif if(box64_wine && (u8==0x2D || u8==0x2C || u8==0x29)) { INST_NAME("INT 29/2c/2d"); // lets do nothing diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 4ecdf768..2556f137 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -223,11 +223,13 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t return block; } } +#ifndef _WIN32 if((getProtection_fast(addr)&req_prot)!=req_prot) {// cannot be run, get out of the Dynarec if(need_lock) mutex_unlock(&my_context->mutex_dyndump); return NULL; } +#endif block = AddNewDynablock(addr); // fill the block diff --git a/src/include/os.h b/src/include/os.h index 1257cc48..f141e99e 100644 --- a/src/include/os.h +++ b/src/include/os.h @@ -26,6 +26,8 @@ void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset) int munmap(void* addr, size_t length); int mprotect(void* addr, size_t len, int prot); +void x86Int(void* emu, int code); + void* WinMalloc(size_t size); void* WinRealloc(void* ptr, size_t size); void* WinCalloc(size_t nmemb, size_t size); |