diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-07 09:25:04 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-07 09:25:04 +0200 |
| commit | f81677278f6bbe387e20f7b9f642f8dcbef12387 (patch) | |
| tree | 36b13e609477329ba3736f27931c408eb1f0f486 /src/core.c | |
| parent | 2ef6011c7aebe44870795e1faaae9dde462cb7af (diff) | |
| download | box64-f81677278f6bbe387e20f7b9f642f8dcbef12387.tar.gz box64-f81677278f6bbe387e20f7b9f642f8dcbef12387.zip | |
Reworked mmap allocator and wine prereserve handling ([BOX32] fix handling of wine prereserve)
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/core.c b/src/core.c index 58acfd30..a07b1aff 100644 --- a/src/core.c +++ b/src/core.c @@ -2388,22 +2388,6 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // export symbols AddSymbols(my_context->maplib, elf_header); - if(wine_preloaded) { - uintptr_t wineinfo = 0; - int ver = -1, veropt = 0; - const char* vername = NULL; - if(!ElfGetGlobalSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt)) - if(!ElfGetWeakSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt)) - ElfGetLocalSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt); - 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 %p -> %p\n", get_wine_prereserve(), *(void**)wineinfo); - } - #ifdef DYNAREC - dynarec_wine_prereserve(); - #endif - } AddMainElfToLinkmap(elf_header); // pre-load lib if needed if(ld_preload.size) { @@ -2437,6 +2421,23 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf } // and handle PLT RelocateElfPlt(my_context->maplib, NULL, 0, 0, elf_header); + // wine preload special case + if(wine_preloaded) { + uintptr_t wineinfo = 0; + int ver = -1, veropt = 0; + const char* vername = NULL; + if(!ElfGetGlobalSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt)) + if(!ElfGetWeakSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt)) + ElfGetLocalSymbolStartEnd(elf_header, &wineinfo, NULL, "wine_main_preload_info", &ver, &vername, 1, &veropt); + if(!wineinfo) {printf_log(LOG_NONE, "Warning, Symbol wine_main_preload_info not found\n");} + else { + printf_log(LOG_INFO, "WINE wine_main_preload_info found and updated %p -> %p\n", (void**)wineinfo, get_wine_prereserve()); + *(void**)wineinfo = get_wine_prereserve(); + } + #ifdef DYNAREC + dynarec_wine_prereserve(); + #endif + } // deferred init setupTraceInit(); RunDeferredElfInit(emu); |