about summary refs log tree commit diff stats
path: root/wow64
diff options
context:
space:
mode:
authorAndré Zwing <nerv@dawncrow.de>2025-05-11 16:55:19 +0200
committerGitHub <noreply@github.com>2025-05-11 16:55:19 +0200
commita9ddd396c4e5feca0276f78cf6f21373db596082 (patch)
tree6b567fab37b6b388e8e7e6f6f7470fe4c53f82f8 /wow64
parentf0b060dadd041455edbfc9537a1061a8adf7b86b (diff)
downloadbox64-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.txt3
-rw-r--r--wow64/compiler.h7
-rw-r--r--wow64/wowbox64.c13
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)