about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-01-05 22:50:14 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-01-05 22:50:14 +0100
commit5e01769622b0d5edda8e42c994eff171887cc1d8 (patch)
treefacdf86bd22d1c76fb9fc65948c77f27dbda29ca /src
parent97a1da81af3903c030f0b7287579b6680148b8b3 (diff)
downloadbox64-5e01769622b0d5edda8e42c994eff171887cc1d8.tar.gz
box64-5e01769622b0d5edda8e42c994eff171887cc1d8.zip
Made the missing symbol workaround more resiliant
Diffstat (limited to 'src')
-rwxr-xr-xsrc/elfs/elfloader.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 0927ab3c..eb10c55a 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -1578,7 +1578,7 @@ int dl_iterate_phdr_findsymbol(struct dl_phdr_info* info, size_t size, void* dat
                     ElfW(Verdaux)* vda = (ElfW(Verdaux)*)(((uintptr_t)v) + v->vd_aux);
                     for(int i=0; i<v->vd_cnt; ++i) {
                         const char* vername = &strtab[vda->vda_name];
-                        if((s->addr = dlvsym(s->lib, s->name, vername))) {
+                        if(vername && (s->addr = dlvsym(s->lib, s->name, vername))) {
                             printf_log(LOG_DEBUG, "Found symbol with version %s, value = %p\n", vername, s->addr);
                             return 1;   // stop searching
                         }
@@ -1598,7 +1598,10 @@ void* GetNativeSymbolUnversionned(void* lib, const char* name)
     search_symbol_t s;
     s.name = name;
     s.addr = NULL;
-    s.lib = lib;
+    if(lib) 
+        s.lib = lib;
+    else 
+        s.lib = my_context->box64lib;
     printf_log(LOG_INFO, "Look for %s in loaded elfs\n", name);
     dl_iterate_phdr(dl_iterate_phdr_findsymbol, &s);
     return s.addr;