From 42b18c57ce5a10b45dc644c75ff7580c88f7fc56 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 5 Jan 2022 11:21:33 +0100 Subject: Added a Workaround when dlsym a native (versionned) symbol without default version fails --- src/librarian/library.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/librarian') 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; -- cgit 1.4.1