diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-05-10 10:31:41 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-05-10 10:31:41 +0200 |
commit | d017b0ab5a181dce4145f3a1b3b27e3341abd201 (patch) | |
tree | cfe65201d70b7df83848838256d2c7288dcee67b /elf/dl-tls_init_tp.c | |
parent | 0df5d8d404fbf6a7802737b0f9d32ab3376cec86 (diff) | |
download | glibc-d017b0ab5a181dce4145f3a1b3b27e3341abd201.tar.gz glibc-d017b0ab5a181dce4145f3a1b3b27e3341abd201.tar.xz glibc-d017b0ab5a181dce4145f3a1b3b27e3341abd201.zip |
elf: Introduce __tls_pre_init_tp
This is an early variant of __tls_init_tp, primarily for initializing thread-related elements of _rtld_global/GL. Some existing initialization code not needed for NPTL is moved into the generic version of this function. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'elf/dl-tls_init_tp.c')
-rw-r--r-- | elf/dl-tls_init_tp.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/elf/dl-tls_init_tp.c b/elf/dl-tls_init_tp.c index 728cd84c00..d84adc992c 100644 --- a/elf/dl-tls_init_tp.c +++ b/elf/dl-tls_init_tp.c @@ -18,6 +18,35 @@ #include <ldsodefs.h> +#if defined SHARED && defined _LIBC_REENTRANT \ + && defined __rtld_lock_default_lock_recursive +static void +rtld_lock_default_lock_recursive (void *lock) +{ + __rtld_lock_default_lock_recursive (lock); +} + +static void +rtld_lock_default_unlock_recursive (void *lock) +{ + __rtld_lock_default_unlock_recursive (lock); +} +#endif + +void +__tls_pre_init_tp (void) +{ +#if !THREAD_GSCOPE_IN_TCB + GL(dl_init_static_tls) = &_dl_nothread_init_static_tls; +#endif + +#if defined SHARED && defined _LIBC_REENTRANT \ + && defined __rtld_lock_default_lock_recursive + GL(dl_rtld_lock_recursive) = rtld_lock_default_lock_recursive; + GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive; +#endif +} + void __tls_init_tp (void) { |