From 7cbf1c8416b04c65dc3d253061d8a674ee3c616e Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 5 May 2021 06:20:31 +0200 Subject: elf, nptl: Initialize static TLS directly in ld.so The stack list is available in ld.so since commit 1daccf403b1bd86370eb94edca794dc106d02039 ("nptl: Move stack list variables into _rtld_global"), so it's possible to walk the stack list directly in ld.so and perform the initialization there. This eliminates an unprotected function pointer from _rtld_global and reduces the libpthread initialization code. --- elf/dl-reloc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'elf/dl-reloc.c') diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index c2df26d..bb9ca1a 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -118,7 +118,7 @@ _dl_try_allocate_static_tls (struct link_map *map, bool optional) (void) _dl_update_slotinfo (map->l_tls_modid); #endif - GL(dl_init_static_tls) (map); + dl_init_static_tls (map); } else map->l_need_tls_init = 1; @@ -141,6 +141,7 @@ cannot allocate memory in static TLS block")); } } +#if !THREAD_GSCOPE_IN_TCB /* Initialize static TLS area and DTV for current (only) thread. libpthread implementations should provide their own hook to handle all threads. */ @@ -159,7 +160,7 @@ _dl_nothread_init_static_tls (struct link_map *map) memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size), '\0', map->l_tls_blocksize - map->l_tls_initimage_size); } - +#endif /* !THREAD_GSCOPE_IN_TCB */ void _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], -- cgit v1.1