From bc852aebeb9852801329f9576b4d5e3fa7df2efa Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 23 Jan 2024 15:56:11 +0100 Subject: Added a new option BOX64_MMAP32 to use 32bits mapping on external MMAP (help Snapdragon device running Vulkan with Wine/Wow64, active by default on SD845/SD888/SD8G2 profiles) --- src/emu/x64emu.c | 9 ++++----- src/emu/x64run.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'src/emu') diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c index 0173ea22..d1ae11c8 100644 --- a/src/emu/x64emu.c +++ b/src/emu/x64emu.c @@ -31,9 +31,6 @@ #warning Architecture cannot follow SSE Flush to 0 flag #endif -// from src/wrapped/wrappedlibc.c -int my_munmap(x64emu_t* emu, void* addr, unsigned long length); - typedef struct cleanup_s { void* f; int arg; @@ -194,8 +191,10 @@ void CallAllCleanup(x64emu_t *emu) static void internalFreeX64(x64emu_t* emu) { - if(emu && emu->stack2free) - my_munmap(NULL, emu->stack2free, emu->size_stack); + if(emu && emu->stack2free) { + if(!internal_munmap(emu->stack2free, emu->size_stack)) + freeProtection((uintptr_t)emu->stack2free, emu->size_stack); + } } EXPORTDYN diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 7bec6b91..986c371a 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -31,6 +31,7 @@ int my_setcontext(x64emu_t* emu, void* ucp); #ifdef TEST_INTERPRETER int RunTest(x64test_t *test) #else +int running32bits = 0; int Run(x64emu_t *emu, int step) #endif { @@ -440,6 +441,8 @@ x64emurun: goto fini; } is32bits = (emu->segs[_CS]==0x23); + if(is32bits) + running32bits = 1; #endif break; case 0x65: /* GS: prefix */ @@ -456,6 +459,8 @@ x64emurun: goto fini; } is32bits = (emu->segs[_CS]==0x23); + if(is32bits) + running32bits = 1; #endif break; case 0x66: /* 16bits prefix */ @@ -1426,6 +1431,10 @@ x64emurun: R_RIP = addr; STEP; is32bits = (emu->segs[_CS]==0x23); + #ifndef TEST_INTERPRETER + if(is32bits) + running32bits = 1; + #endif break; case 0xD0: /* GRP2 Eb,1 */ case 0xD2: /* GRP2 Eb,CL */ @@ -1941,6 +1950,10 @@ x64emurun: } STEP2; is32bits = (emu->segs[_CS]==0x23); + #ifndef TEST_INTERPRETER + if(is32bits) + running32bits = 1; + #endif } break; case 4: /* JMP NEAR Ed */ @@ -1967,6 +1980,10 @@ x64emurun: } STEP2; is32bits = (emu->segs[_CS]==0x23); + #ifndef TEST_INTERPRETER + if(is32bits) + running32bits = 1; + #endif } break; case 6: /* Push Ed */ -- cgit 1.4.1