Update.
1999-07-12 Andreas Schwab <schwab@suse.de> * elf/rtld.c (dl_main): When putting back the interpreter object handle the case where a missing object might occur in the list of objects but not in the search list when in trace mode.
This commit is contained in:
parent
eb242eda56
commit
b2bcd61a99
@ -1,3 +1,9 @@
|
|||||||
|
1999-07-12 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* elf/rtld.c (dl_main): When putting back the interpreter object
|
||||||
|
handle the case where a missing object might occur in the list of
|
||||||
|
objects but not in the search list when in trace mode.
|
||||||
|
|
||||||
1999-07-11 Ulrich Drepper <drepper@cygnus.com>
|
1999-07-11 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* Versions.def (libnss_hesiod): Add GLIBC_2.2.
|
* Versions.def (libnss_hesiod): Add GLIBC_2.2.
|
||||||
|
15
elf/rtld.c
15
elf/rtld.c
@ -798,9 +798,18 @@ of this helper program; chances are you did not intend to run this program.\n\
|
|||||||
while (_dl_loaded->l_searchlist.r_list[i] != &_dl_rtld_map)
|
while (_dl_loaded->l_searchlist.r_list[i] != &_dl_rtld_map)
|
||||||
++i;
|
++i;
|
||||||
_dl_rtld_map.l_prev = _dl_loaded->l_searchlist.r_list[i - 1];
|
_dl_rtld_map.l_prev = _dl_loaded->l_searchlist.r_list[i - 1];
|
||||||
_dl_rtld_map.l_next = (i + 1 < _dl_loaded->l_searchlist.r_nlist
|
if (__builtin_expect (mode, normal) == normal)
|
||||||
? _dl_loaded->l_searchlist.r_list[i + 1]
|
_dl_rtld_map.l_next = (i + 1 < _dl_loaded->l_searchlist.r_nlist
|
||||||
: NULL);
|
? _dl_loaded->l_searchlist.r_list[i + 1]
|
||||||
|
: NULL);
|
||||||
|
else
|
||||||
|
/* In trace mode there might be an invisible object (which we
|
||||||
|
could not find) after the previous one in the search list.
|
||||||
|
In this case it doesn't matter much where we put the
|
||||||
|
interpreter object, so we just initialize the list pointer so
|
||||||
|
that the assertion below holds. */
|
||||||
|
_dl_rtld_map.l_next = _dl_rtld_map.l_prev->l_next;
|
||||||
|
|
||||||
assert (_dl_rtld_map.l_prev->l_next == _dl_rtld_map.l_next);
|
assert (_dl_rtld_map.l_prev->l_next == _dl_rtld_map.l_next);
|
||||||
_dl_rtld_map.l_prev->l_next = &_dl_rtld_map;
|
_dl_rtld_map.l_prev->l_next = &_dl_rtld_map;
|
||||||
if (_dl_rtld_map.l_next)
|
if (_dl_rtld_map.l_next)
|
||||||
|
Loading…
Reference in New Issue
Block a user