diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-01-05 11:21:33 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-01-05 11:21:33 +0100 |
| commit | 42b18c57ce5a10b45dc644c75ff7580c88f7fc56 (patch) | |
| tree | 367c781c07955d10cc6d9ba276e9b5d2c1f9a8c3 /src/librarian/library.c | |
| parent | dd0f7c1d5c5a7cf084e7ecc6aa54c758e7a79995 (diff) | |
| download | box64-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-x | src/librarian/library.c | 18 |
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; |