about summary refs log tree commit diff stats
path: root/src/core.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-07 17:17:55 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-07 17:17:55 +0200
commitf073415510929646b7e2d5e254c4932b46b40233 (patch)
tree4adb71907705a9b6335de19ae05e1e177c31e6ca /src/core.c
parent4c69bcd97aff691b464f01ebed057cfcb912612b (diff)
downloadbox64-f073415510929646b7e2d5e254c4932b46b40233.tar.gz
box64-f073415510929646b7e2d5e254c4932b46b40233.zip
[BOX32] More work on 32bits wrapped functions
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/core.c b/src/core.c
index a07b1aff..58acfd30 100644
--- a/src/core.c
+++ b/src/core.c
@@ -2388,6 +2388,22 @@ 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) {
@@ -2421,23 +2437,6 @@ 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);