Fixed a bug in libdl.c where the RTLD_GLOBAL was assigned
wronly.
for (; rpnt; rpnt = rpnt->next) {
tpnt = rpnt->dyn;
+ if (!(tpnt->rtld_flags & RTLD_GLOBAL))
+ continue;
/* Don't search the executable when resolving a copy reloc. */
if ((type_class & ELF_RTYPE_CLASS_COPY) && tpnt->libtype == elf_executable)
continue;
_dl_memset (dyn_ptr->next, 0, sizeof (struct dyn_elf));
dyn_ptr = dyn_ptr->next;
dyn_ptr->dyn = tpnt1;
- tpnt->rtld_flags |= RTLD_GLOBAL;
if (!tpnt1) {
tpnt1 = _dl_load_shared_library(0, &rpnt, tcurr, lpntstr, 0);
+ dyn_ptr->dyn = tpnt1;
if (!tpnt1)
goto oops;
- dyn_ptr->dyn = tpnt1;
+ tpnt1->rtld_flags |= RTLD_GLOBAL;
} else {
+ tpnt1->rtld_flags |= RTLD_GLOBAL;
tpnt1->usage_count++;
}
}