12345678910111213141516171819202122232425 |
- --- a/ldso/libdl/libdl.c
- +++ b/ldso/libdl/libdl.c
- @@ -671,7 +671,7 @@ static void *do_dlsym(void *vhandle, con
- {
- struct elf_resolve *tpnt, *tfrom;
- struct dyn_elf *handle;
- - ElfW(Addr) from;
- + ElfW(Addr) from = 0;
- struct dyn_elf *rpnt;
- void *ret;
- struct symbol_ref sym_ref = { NULL, NULL };
- @@ -729,7 +729,12 @@ static void *do_dlsym(void *vhandle, con
- tpnt = NULL;
- if (handle == _dl_symbol_tables)
- tpnt = handle->dyn; /* Only search RTLD_GLOBAL objs if global object */
- - ret = _dl_find_hash(name2, &handle->dyn->symbol_scope, tpnt, ELF_RTYPE_CLASS_DLSYM, &sym_ref);
- + do {
- + ret = _dl_find_hash(name2, &handle->dyn->symbol_scope, tpnt, ELF_RTYPE_CLASS_DLSYM, &sym_ref);
- + if (ret != NULL)
- + break;
- + handle = handle->next;
- + } while (from && handle);
-
- #if defined(USE_TLS) && USE_TLS && defined SHARED
- if (sym_ref.sym && (ELF_ST_TYPE(sym_ref.sym->st_info) == STT_TLS) && (sym_ref.tpnt)) {
|