diff options
| author | André Zwing <nerv@dawncrow.de> | 2025-05-11 16:55:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-11 16:55:19 +0200 |
| commit | a9ddd396c4e5feca0276f78cf6f21373db596082 (patch) | |
| tree | 6b567fab37b6b388e8e7e6f6f7470fe4c53f82f8 /wow64 | |
| parent | f0b060dadd041455edbfc9537a1061a8adf7b86b (diff) | |
| download | box64-a9ddd396c4e5feca0276f78cf6f21373db596082.tar.gz box64-a9ddd396c4e5feca0276f78cf6f21373db596082.zip | |
[WOW64] Initial implementation patches (#2619)
* [WOW64] Add stub for VolatileRangesContains * [WOW64] Implement BTCpu[GS]etContext * [WOW64] Add env support
Diffstat (limited to 'wow64')
| -rw-r--r-- | wow64/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | wow64/compiler.h | 7 | ||||
| -rw-r--r-- | wow64/wowbox64.c | 13 |
3 files changed, 13 insertions, 10 deletions
diff --git a/wow64/CMakeLists.txt b/wow64/CMakeLists.txt index 80fb9368..ca2adacb 100644 --- a/wow64/CMakeLists.txt +++ b/wow64/CMakeLists.txt @@ -72,6 +72,7 @@ set(WOW64_BOX64CPU_SRC "${BOX64_ROOT}/src/os/perfmap.c" "${BOX64_ROOT}/src/os/my_cpuid_wine.c" "${BOX64_ROOT}/src/tools/alternate.c" + "${BOX64_ROOT}/src/tools/env.c" "${BOX64_ROOT}/src/tools/rbtree.c" ) @@ -118,4 +119,4 @@ add_compile_definitions(DYNAREC ARM64) target_link_options(wowbox64 PRIVATE -nostdlib -nodefaultlibs -lclang_rt.builtins-aarch64) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) \ No newline at end of file +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) diff --git a/wow64/compiler.h b/wow64/compiler.h new file mode 100644 index 00000000..1fff78b3 --- /dev/null +++ b/wow64/compiler.h @@ -0,0 +1,7 @@ +#ifndef __COMPILER_H_ +#define __COMPILER_H_ + +/* Things missing from mingw64 right now */ +#define ThreadWow64Context (29) + +#endif //__COMPILER_H_ diff --git a/wow64/wowbox64.c b/wow64/wowbox64.c index d507d339..86a5fdfd 100644 --- a/wow64/wowbox64.c +++ b/wow64/wowbox64.c @@ -1,8 +1,10 @@ #include <stdio.h> #include <windows.h> #include <ntstatus.h> +#include <winternl.h> #include <winnt.h> +#include "compiler.h" #include "os.h" #include "custommem.h" #include "env.h" @@ -19,11 +21,6 @@ uint8_t box64_rdtsc_shift = 0; int box64_is32bits = 0; int box64_wine = 0; // this is for the emulated x86 Wine. -box64env_t box64env = { 0 }; // FIXME: add real env support. - -box64env_t* GetCurEnvByAddr(uintptr_t addr) { - return &box64env; -} int is_addr_unaligned(uintptr_t addr) { @@ -81,8 +78,7 @@ void* WINAPI __wine_get_unix_opcode(void) NTSTATUS WINAPI BTCpuGetContext(HANDLE thread, HANDLE process, void* unknown, WOW64_CONTEXT* ctx) { - // NYI - return STATUS_SUCCESS; + return NtQueryInformationThread( thread, ThreadWow64Context, ctx, sizeof(*ctx), NULL ); } void WINAPI BTCpuNotifyMemoryFree(PVOID addr, SIZE_T size, ULONG free_type) @@ -115,8 +111,7 @@ NTSTATUS WINAPI BTCpuResetToConsistentState(EXCEPTION_POINTERS* ptrs) NTSTATUS WINAPI BTCpuSetContext(HANDLE thread, HANDLE process, void* unknown, WOW64_CONTEXT* ctx) { - // NYI - return STATUS_SUCCESS; + return NtSetInformationThread( thread, ThreadWow64Context, ctx, sizeof(*ctx) ); } void WINAPI BTCpuSimulate(void) |