diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-03-06 12:41:31 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-03-06 12:41:39 +0100 |
| commit | 24e133e0067b19a6fedb4ff79178305295e3d37b (patch) | |
| tree | de77dbe3a21528e078beca86bb67065367971173 /src | |
| parent | 995fa013a63e171ee9f4689ebb555b8866d3d6fb (diff) | |
| download | box64-24e133e0067b19a6fedb4ff79178305295e3d37b.tar.gz box64-24e133e0067b19a6fedb4ff79178305295e3d37b.zip | |
Added back full handling of winepreloader prereserve memory
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 7 | ||||
| -rw-r--r-- | src/tools/wine_tools.c | 3 |
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 |