about summary refs log tree commit diff stats
path: root/src/librarian/library.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-01-05 11:21:33 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-01-05 11:21:33 +0100
commit42b18c57ce5a10b45dc644c75ff7580c88f7fc56 (patch)
tree367c781c07955d10cc6d9ba276e9b5d2c1f9a8c3 /src/librarian/library.c
parentdd0f7c1d5c5a7cf084e7ecc6aa54c758e7a79995 (diff)
downloadbox64-42b18c57ce5a10b45dc644c75ff7580c88f7fc56.tar.gz
box64-42b18c57ce5a10b45dc644c75ff7580c88f7fc56.zip
Added a Workaround when dlsym a native (versionned) symbol without default version fails
Diffstat (limited to 'src/librarian/library.c')
-rwxr-xr-xsrc/librarian/library.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c
index 86638591..647d014c 100755
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -704,6 +704,14 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui
             strcat(newname, name);
             symbol = dlsym(lib->priv.w.lib, newname);
         }
+        if(!symbol)
+            symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, name);
+        if(!symbol && lib->priv.w.altprefix) {
+            char newname[200];
+            strcpy(newname, lib->priv.w.altprefix);
+            strcat(newname, name);
+            symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, newname);
+        }
         if(!symbol) {
             printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", name, lib->name);
             return 0;
@@ -741,6 +749,14 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui
                 strcat(newname, name);
                 symbol = dlsym(lib->priv.w.lib, newname);
             }
+            if(!symbol)
+                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, name);
+            if(!symbol && lib->priv.w.altprefix) {
+                char newname[200];
+                strcpy(newname, lib->priv.w.altprefix);
+                strcat(newname, name);
+                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, newname);
+            }
             if(!symbol) {
                 printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", name, lib->name);
                 return 0;
@@ -759,6 +775,8 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui
             symbol = dlsym(lib->priv.w.lib, kh_value(lib->symbol2map, k).name);
             if(!symbol)
                 symbol = dlsym(RTLD_DEFAULT, kh_value(lib->symbol2map, k).name);    // search globaly maybe
+            if(!symbol)
+                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, kh_value(lib->symbol2map, k).name);
             if(!symbol) {
                 printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", kh_value(lib->symbol2map, k).name, lib->name);
                 return 0;