public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Florian Weimer <fw@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc] nptl: Export __libc_multiple_threads from libc as an internal symbol Date: Mon, 10 May 2021 08:38:47 +0000 (GMT) [thread overview] Message-ID: <20210510083847.41AAE3959E40@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=321789f61aa93c14390535aa3cf01846633cd022 commit 321789f61aa93c14390535aa3cf01846633cd022 Author: Florian Weimer <fweimer@redhat.com> Date: Mon May 10 10:31:41 2021 +0200 nptl: Export __libc_multiple_threads from libc as an internal symbol This allows the elimination of the __libc_multiple_threads_ptr variable in libpthread and its initialization procedure. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> Diff: --- nptl/Versions | 1 + nptl/allocatestack.c | 4 ++-- nptl/libc_multiple_threads.c | 3 ++- nptl/libc_pthread_init.c | 11 ----------- nptl/nptl-init.c | 10 +--------- nptl/pthreadP.h | 6 +----- nptl/pthread_cancel.c | 2 +- sysdeps/unix/sysv/linux/single-thread.h | 6 +++++- 8 files changed, 13 insertions(+), 30 deletions(-) diff --git a/nptl/Versions b/nptl/Versions index f950b77969..fb15a7e8eb 100644 --- a/nptl/Versions +++ b/nptl/Versions @@ -305,6 +305,7 @@ libc { __libc_cleanup_pop_restore; __libc_cleanup_push_defer; __libc_dl_error_tsd; + __libc_multiple_threads; __libc_pthread_init; __lll_clocklock_elision; __lll_lock_elision; diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 8aaba088b1..059786192e 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -477,7 +477,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* This is at least the second thread. */ pd->header.multiple_threads = 1; #ifndef TLS_MULTIPLE_THREADS_IN_TCB - __pthread_multiple_threads = *__libc_multiple_threads_ptr = 1; + __pthread_multiple_threads = __libc_multiple_threads = 1; #endif #ifdef NEED_DL_SYSINFO @@ -598,7 +598,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* This is at least the second thread. */ pd->header.multiple_threads = 1; #ifndef TLS_MULTIPLE_THREADS_IN_TCB - __pthread_multiple_threads = *__libc_multiple_threads_ptr = 1; + __pthread_multiple_threads = __libc_multiple_threads = 1; #endif #ifdef NEED_DL_SYSINFO diff --git a/nptl/libc_multiple_threads.c b/nptl/libc_multiple_threads.c index 60328023cd..a0e7932c26 100644 --- a/nptl/libc_multiple_threads.c +++ b/nptl/libc_multiple_threads.c @@ -23,6 +23,7 @@ /* Variable set to a nonzero value either if more than one thread runs or ran, or if a single-threaded process is trying to cancel itself. See nptl/descr.h for more context on the single-threaded process case. */ -int __libc_multiple_threads attribute_hidden; +int __libc_multiple_threads __attribute__ ((nocommon)); +libc_hidden_data_def (__libc_multiple_threads) # endif #endif diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c index 397b83beb6..75f5d28ed6 100644 --- a/nptl/libc_pthread_init.c +++ b/nptl/libc_pthread_init.c @@ -27,20 +27,9 @@ #include <sysdep.h> #include <ldsodefs.h> - -#ifdef TLS_MULTIPLE_THREADS_IN_TCB void -#else -extern int __libc_multiple_threads attribute_hidden; - -int * -#endif __libc_pthread_init (void (*reclaim) (void)) { /* Called by a child after fork. */ __register_atfork (NULL, NULL, reclaim, NULL); - -#ifndef TLS_MULTIPLE_THREADS_IN_TCB - return &__libc_multiple_threads; -#endif } diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 2724770533..2fb1117f3e 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -37,11 +37,6 @@ #include <libc-pointer-arith.h> #include <pthread_mutex_conf.h> -#ifndef TLS_MULTIPLE_THREADS_IN_TCB -/* Pointer to the corresponding variable in libc. */ -int *__libc_multiple_threads_ptr attribute_hidden; -#endif - /* Size and alignment of static TLS block. */ size_t __static_tls_size; size_t __static_tls_align_m1; @@ -183,10 +178,7 @@ __pthread_initialize_minimal_internal (void) #endif /* Register the fork generation counter with the libc. */ -#ifndef TLS_MULTIPLE_THREADS_IN_TCB - __libc_multiple_threads_ptr = -#endif - __libc_pthread_init (__reclaim_stacks); + __libc_pthread_init (__reclaim_stacks); } strong_alias (__pthread_initialize_minimal_internal, __pthread_initialize_minimal) diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 6b52ca158e..dd6d6c6342 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -368,17 +368,13 @@ extern unsigned long int __fork_generation attribute_hidden; extern unsigned long int *__fork_generation_pointer attribute_hidden; /* Register the generation counter in the libpthread with the libc. */ -#ifdef TLS_MULTIPLE_THREADS_IN_TCB extern void __libc_pthread_init (void (*reclaim) (void)); -#else -extern int *__libc_pthread_init (void (*reclaim) (void)); +#ifndef TLS_MULTIPLE_THREADS_IN_TCB /* Variable set to a nonzero value either if more than one thread runs or ran, or if a single-threaded process is trying to cancel itself. See nptl/descr.h for more context on the single-threaded process case. */ extern int __pthread_multiple_threads attribute_hidden; -/* Pointer to the corresponding variable in libc. */ -extern int *__libc_multiple_threads_ptr attribute_hidden; #endif extern size_t __pthread_get_minstack (const pthread_attr_t *attr); diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c index 060484cdc8..2cab8f0a34 100644 --- a/nptl/pthread_cancel.c +++ b/nptl/pthread_cancel.c @@ -90,7 +90,7 @@ __pthread_cancel (pthread_t th) points get executed. */ THREAD_SETMEM (THREAD_SELF, header.multiple_threads, 1); #ifndef TLS_MULTIPLE_THREADS_IN_TCB - __pthread_multiple_threads = *__libc_multiple_threads_ptr = 1; + __pthread_multiple_threads = __libc_multiple_threads = 1; #endif } /* Mark the thread as canceled. This has to be done diff --git a/sysdeps/unix/sysv/linux/single-thread.h b/sysdeps/unix/sysv/linux/single-thread.h index a28aaed04d..841f8c69d5 100644 --- a/sysdeps/unix/sysv/linux/single-thread.h +++ b/sysdeps/unix/sysv/linux/single-thread.h @@ -27,9 +27,13 @@ The ABI might define SINGLE_THREAD_BY_GLOBAL to enable the single thread check to use global variables instead of the pthread_t field. */ +#ifndef __ASSEMBLER__ +extern int __libc_multiple_threads; +libc_hidden_proto (__libc_multiple_threads) +#endif + #ifdef SINGLE_THREAD_BY_GLOBAL # if IS_IN (libc) -extern int __libc_multiple_threads; # define SINGLE_THREAD_P \ __glibc_likely (__libc_multiple_threads == 0) # elif IS_IN (libpthread)
reply other threads:[~2021-05-10 8:38 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210510083847.41AAE3959E40@sourceware.org \ --to=fw@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).