diff options
author | Florian Weimer <fweimer@redhat.com> | 2022-11-03 17:28:03 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2022-11-03 17:28:03 +0100 |
commit | 1f34a2328890aa192141f96449d25b77f666bf47 (patch) | |
tree | 283ca2a4b46cf069da45f40663e779003064bcdc /elf | |
parent | fb6ee7ba8122330ac819556a42cc56db07d9da76 (diff) | |
download | glibc-1f34a2328890aa192141f96449d25b77f666bf47.zip glibc-1f34a2328890aa192141f96449d25b77f666bf47.tar.gz glibc-1f34a2328890aa192141f96449d25b77f666bf47.tar.bz2 |
elf: Introduce <dl-call_tls_init_tp.h> and call_tls_init_tp (bug 29249)
This makes it more likely that the compiler can compute the strlen
argument in _startup_fatal at compile time, which is required to
avoid a dependency on strlen this early during process startup.
Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
Diffstat (limited to 'elf')
-rw-r--r-- | elf/rtld.c | 14 |
1 files changed, 3 insertions, 11 deletions
@@ -52,6 +52,7 @@ #include <dl-execve.h> #include <dl-find_object.h> #include <dl-audit-check.h> +#include <dl-call_tls_init_tp.h> #include <assert.h> @@ -796,10 +797,7 @@ cannot allocate TLS data structures for initial thread\n"); GL(dl_initial_dtv) = GET_DTV (tcbp); /* And finally install it for the main thread. */ - const char *lossage = TLS_INIT_TP (tcbp); - if (__glibc_unlikely (lossage != NULL)) - _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage); - __tls_init_tp (); + call_tls_init_tp (tcbp); __rtld_tls_init_tp_called = true; return tcbp; @@ -2348,13 +2346,7 @@ dl_main (const ElfW(Phdr) *phdr, /* And finally install it for the main thread. */ if (! __rtld_tls_init_tp_called) - { - const char *lossage = TLS_INIT_TP (tcbp); - if (__glibc_unlikely (lossage != NULL)) - _dl_fatal_printf ("cannot set up thread-local storage: %s\n", - lossage); - __tls_init_tp (); - } + call_tls_init_tp (tcbp); /* Make sure no new search directories have been added. */ assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs)); |