about summary refs log tree commit diff stats
path: root/src/include
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-04-09 01:12:55 +0800
committerGitHub <noreply@github.com>2025-04-08 19:12:55 +0200
commitd592c1996d74e9e6e728026486cdab6a75f43aaa (patch)
tree935f142dff05d4640f2cd5865f8d63f8c3ca8cf9 /src/include
parent8b3d4404d77bcc806631e17038f046d409cb6b69 (diff)
downloadbox64-d592c1996d74e9e6e728026486cdab6a75f43aaa.tar.gz
box64-d592c1996d74e9e6e728026486cdab6a75f43aaa.zip
[WOW64] Add wow64 PE build scaffolding (#2513)
Diffstat (limited to 'src/include')
-rw-r--r--src/include/custommem.h8
-rw-r--r--src/include/debug.h20
-rw-r--r--src/include/os.h33
3 files changed, 55 insertions, 6 deletions
diff --git a/src/include/custommem.h b/src/include/custommem.h
index b17eff99..5e883570 100644
--- a/src/include/custommem.h
+++ b/src/include/custommem.h
@@ -138,13 +138,9 @@ int checkInHotPage(uintptr_t addr);
 #endif
 
 // this will simulate an x86_64 version of the function (no tracking will done, but tracking will be used)
-void* box_mmap(void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset);
+void* box_mmap(void* addr, size_t length, int prot, int flags, int fd, ssize_t offset);
 // this will simulate an x86_64 version of the function (no tracking will done)
-int box_munmap(void* addr, unsigned long length);
-// this will call the syscall directly
-void* internal_mmap(void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset);
-// this will call the syscall directly
-int internal_munmap(void* addr, unsigned long length);
+int box_munmap(void* addr, size_t length);
 
 void reserveHighMem();
 
diff --git a/src/include/debug.h b/src/include/debug.h
index 631e35d7..93268420 100644
--- a/src/include/debug.h
+++ b/src/include/debug.h
@@ -68,6 +68,7 @@ extern int box64_tcmalloc_minimal;  // when using tcmalloc_minimal
 #define LOG_NEVER 3
 #define LOG_VERBOSE 3
 
+#ifndef _WIN32 // TODO: better wow64 support?
 void printf_ftrace(int prefix, const char* fmt, ...);
 
 #define printf_log_prefix(prefix, L, ...)                                                               \
@@ -98,6 +99,18 @@ void printf_ftrace(int prefix, const char* fmt, ...);
 
 #define dynarec_log(L, ...) dynarec_log_prefix(1, L, __VA_ARGS__)
 
+#else
+#define printf_log_prefix(prefix, L, ...)
+#define printf_log(L, ...)
+#define printf_dump_prefix(prefix, L, ...)
+#define printf_dump(L, ...)
+#define printf_dlsym_prefix(prefix, L, ...)
+#define printf_dlsym(L, ...)
+#define dynarec_log_prefix(prefix, L, ...)
+#define dynarec_log(L, ...)
+#endif
+
+
 #define EXPORT __attribute__((visibility("default")))
 #ifdef BUILD_DYNAMIC
 #define EXPORTDYN __attribute__((visibility("default")))
@@ -105,6 +118,7 @@ void printf_ftrace(int prefix, const char* fmt, ...);
 #define EXPORTDYN
 #endif
 
+#ifndef _WIN32 // TODO: better wow64 support?
 #ifndef STATICBUILD
 void init_malloc_hook(void);
 #endif
@@ -131,6 +145,12 @@ extern void* __libc_memalign(size_t, size_t);
 extern char* box_strdup(const char* s);
 extern char* box_realpath(const char* path, char* ret);
 #endif
+#else
+#define box_malloc  WinMalloc
+#define box_realloc WinRealloc
+#define box_calloc  WinCalloc
+#define box_free    WinFree
+#endif
 
 //use actual_XXXX for internal memory that should be in 32bits space when box32 is active
 //use box_XXX for internal memory that doesn't need anything special
diff --git a/src/include/os.h b/src/include/os.h
index 6968df19..2ab70722 100644
--- a/src/include/os.h
+++ b/src/include/os.h
@@ -2,6 +2,37 @@
 #define __OS_H_
 
 #include <stdint.h>
+#include <sys/types.h>
+
+#ifndef _WIN32
+#include <dlfcn.h>
+#include <sys/mman.h>
+#else
+typedef __int64 ssize_t;
+
+#define PROT_READ  0x1
+#define PROT_WRITE 0x2
+#define PROT_EXEC  0x4
+
+#define MAP_FAILED    ((void*)-1)
+#define MAP_PRIVATE   0x02
+#define MAP_FIXED     0x10
+#define MAP_ANONYMOUS 0x20
+#define MAP_32BIT     0x40
+#define MAP_NORESERVE 0
+
+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* WinMalloc(size_t size);
+void* WinRealloc(void* ptr, size_t size);
+void* WinCalloc(size_t nmemb, size_t size);
+void WinFree(void* ptr);
+#endif
+
+void* InternalMmap(void* addr, unsigned long length, int prot, int flags, int fd, ssize_t offset);
+int InternalMunmap(void* addr, unsigned long length);
 
 int GetTID(void);
 int SchedYield(void);
@@ -17,6 +48,8 @@ int IsBridgeSignature(char s, char c);
 int IsNativeCall(uintptr_t addr, int is32bits, uintptr_t* calladdress, uint16_t* retn);
 void EmuInt3(void* emu, void* addr);
 void* EmuFork(void* emu, int forktype);
+
+void PersonalityAddrLimit32Bit(void);
 // ----------------------------------------------------------------
 
 #ifndef _WIN32