mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
elf: rtld_multiple_ref is always true
For a long time, libc.so.6 has dependend on ld.so, which means that there is a reference to ld.so in all processes, and rtld_multiple_ref is always true. In fact, if rtld_multiple_ref were false, some of the ld.so setup code would not run. Reviewed-by: DJ Delorie <dj@redhat.com>
This commit is contained in:
parent
273694cd78
commit
8f8dd904c4
18
elf/rtld.c
18
elf/rtld.c
@ -1963,14 +1963,9 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
if (main_map->l_searchlist.r_list[i] == &GL(dl_rtld_map))
|
||||
break;
|
||||
|
||||
bool rtld_multiple_ref = false;
|
||||
if (__glibc_likely (i < main_map->l_searchlist.r_nlist))
|
||||
{
|
||||
/* Some DT_NEEDED entry referred to the interpreter object itself, so
|
||||
put it back in the list of visible objects. We insert it into the
|
||||
chain in symbol search order because gdb uses the chain's order as
|
||||
its symbol search order. */
|
||||
rtld_multiple_ref = true;
|
||||
/* Insert the link map for the dynamic loader into the chain in
|
||||
symbol search order because gdb uses the chain's order as its
|
||||
symbol search order. */
|
||||
|
||||
GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1];
|
||||
if (__glibc_likely (state.mode == rtld_mode_normal))
|
||||
@ -2000,7 +1995,6 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev);
|
||||
GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now let us see whether all libraries are available in the
|
||||
versions we need. */
|
||||
@ -2327,10 +2321,7 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
/* Make sure no new search directories have been added. */
|
||||
assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
|
||||
|
||||
if (rtld_multiple_ref)
|
||||
{
|
||||
/* There was an explicit ref to the dynamic linker as a shared lib.
|
||||
Re-relocate ourselves with user-controlled symbol definitions.
|
||||
/* Re-relocate ourselves with user-controlled symbol definitions.
|
||||
|
||||
We must do this after TLS initialization in case after this
|
||||
re-relocation, we might call a user-supplied function
|
||||
@ -2347,6 +2338,7 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
/* Likewise for the locking implementation. */
|
||||
__rtld_mutex_init ();
|
||||
|
||||
{
|
||||
RTLD_TIMING_VAR (start);
|
||||
rtld_timer_start (&start);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user