elf: In rtld_setup_main_map, assume ld.so has a DYNAMIC segment

The way we build ld.so, it always has a dynamic segment, so checking for
its absence is unnecessary.
This commit is contained in:
Florian Weimer 2024-09-24 13:23:10 +02:00
parent 7e21a65c58
commit 8f6a53eab8

View File

@ -386,7 +386,6 @@ static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
/* These two variables cannot be moved into .data.rel.ro. */ /* These two variables cannot be moved into .data.rel.ro. */
static struct libname_list _dl_rtld_libname; static struct libname_list _dl_rtld_libname;
static struct libname_list _dl_rtld_libname2;
/* Variable for statistics. */ /* Variable for statistics. */
RLTD_TIMING_DECLARE (relocate_time, static); RLTD_TIMING_DECLARE (relocate_time, static);
@ -1167,29 +1166,6 @@ rtld_setup_main_map (struct link_map *main_map)
/* _dl_rtld_libname.next = NULL; Already zero. */ /* _dl_rtld_libname.next = NULL; Already zero. */
GL(dl_rtld_map).l_libname = &_dl_rtld_libname; GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
/* Ordinarily, we would get additional names for the loader from
our DT_SONAME. This can't happen if we were actually linked as
a static executable (detect this case when we have no DYNAMIC).
If so, assume the filename component of the interpreter path to
be our SONAME, and add it to our name list. */
if (GL(dl_rtld_map).l_ld == NULL)
{
const char *p = NULL;
const char *cp = _dl_rtld_libname.name;
/* Find the filename part of the path. */
while (*cp != '\0')
if (*cp++ == '/')
p = cp;
if (p != NULL)
{
_dl_rtld_libname2.name = p;
/* _dl_rtld_libname2.next = NULL; Already zero. */
_dl_rtld_libname.next = &_dl_rtld_libname2;
}
}
has_interp = true; has_interp = true;
break; break;
case PT_LOAD: case PT_LOAD: