about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-03-06 12:41:31 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-03-06 12:41:39 +0100
commit24e133e0067b19a6fedb4ff79178305295e3d37b (patch)
treede77dbe3a21528e078beca86bb67065367971173 /src
parent995fa013a63e171ee9f4689ebb555b8866d3d6fb (diff)
downloadbox64-24e133e0067b19a6fedb4ff79178305295e3d37b.tar.gz
box64-24e133e0067b19a6fedb4ff79178305295e3d37b.zip
Added back full handling of winepreloader prereserve memory
Diffstat (limited to 'src')
-rw-r--r--src/main.c7
-rw-r--r--src/tools/wine_tools.c3
2 files changed, 6 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index fdf4edcd..f14b31a5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1678,7 +1678,7 @@ int main(int argc, const char **argv, char **env) {
         if(x64) {
             prog = argv[++nextarg];
             printf_log(LOG_INFO, "BOX64: Wine preloader detected, loading \"%s\" directly\n", prog);
-            //wine_preloaded = 1;
+            wine_preloaded = 1;
         }
     }
     #ifndef STATICBUILD
@@ -1699,8 +1699,9 @@ int main(int argc, const char **argv, char **env) {
      || (strrchr(prog, '/') && !strcmp(strrchr(prog,'/'), "/wine64"))) {
         const char* prereserve = getenv("WINEPRELOADRESERVE");
         printf_log(LOG_INFO, "BOX64: Wine64 detected, WINEPRELOADRESERVE=\"%s\"\n", prereserve?prereserve:"");
-        if(wine_preloaded)
+        if(wine_preloaded) {
             wine_prereserve(prereserve);
+        }
         // special case for winedbg, doesn't work anyway
         if(argv[nextarg+1] && strstr(argv[nextarg+1], "winedbg")==argv[nextarg+1]) {
             if(getenv("BOX64_WINEDBG")) {
@@ -2096,7 +2097,7 @@ int main(int argc, const char **argv, char **env) {
         if(!wineinfo) {printf_log(LOG_NONE, "Warning, Symbol wine_main_preload_info not found\n");}
         else {
             *(void**)wineinfo = get_wine_prereserve();
-            printf_log(LOG_DEBUG, "WINE wine_main_preload_info found and updated\n");
+            printf_log(LOG_DEBUG, "WINE wine_main_preload_info found and updated %p -> %p\n", get_wine_prereserve(), *(void**)wineinfo);
         }
         #ifdef DYNAREC
         dynarec_wine_prereserve();
diff --git a/src/tools/wine_tools.c b/src/tools/wine_tools.c
index e13b3730..28ddde42 100644
--- a/src/tools/wine_tools.c
+++ b/src/tools/wine_tools.c
@@ -59,6 +59,7 @@ static void add_no_overlap(void* addr, size_t size)
 
 void wine_prereserve(const char* reserve)
 {
+    init_custommem_helper(my_context);
     void* addr = NULL;
     size_t size = 0;
 
@@ -103,7 +104,7 @@ void dynarec_wine_prereserve()
     // don't reserve the initial arbritrary block as "with linker", it's not true
     for(int i=1; i<sizeof(my_wine_reserve)/sizeof(my_wine_reserve[0]); ++i)
         if(my_wine_reserve[i].addr && my_wine_reserve[i].size)
-            addDBFromAddressRange(my_context, (uintptr_t)my_wine_reserve[i].addr, my_wine_reserve[i].size, 0);  // prepare the prereserved area for exec, with linker
+            addDBFromAddressRange((uintptr_t)my_wine_reserve[i].addr, my_wine_reserve[i].size);  // prepare the prereserved area for exec, with linker
     #endif
 }
 #endif