diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-04-21 19:49:50 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-04-21 19:49:50 +0200 |
commit | 43fe356d18e12b5826dfee4c0b57b5c75c3a9a72 (patch) | |
tree | 70aff7217ebdc746c77f3f5b2a18a3e7ae051579 | |
parent | 130fca173f323a24b41873b6656ab77c7cff86e1 (diff) | |
download | glibc-43fe356d18e12b5826dfee4c0b57b5c75c3a9a72.zip glibc-43fe356d18e12b5826dfee4c0b57b5c75c3a9a72.tar.gz glibc-43fe356d18e12b5826dfee4c0b57b5c75c3a9a72.tar.bz2 |
nptl: Move internal __nptl_nthreads variable into libc
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r-- | nptl/Makefile | 1 | ||||
-rw-r--r-- | nptl/Versions | 1 | ||||
-rw-r--r-- | nptl/nptl-init.c | 1 | ||||
-rw-r--r-- | nptl/nptl_nthreads.c | 23 | ||||
-rw-r--r-- | nptl/pthreadP.h | 3 | ||||
-rw-r--r-- | nptl/pthread_create.c | 4 | ||||
-rw-r--r-- | nptl_db/structs.def | 2 | ||||
-rw-r--r-- | sysdeps/nptl/libc_start_call_main.h | 13 | ||||
-rw-r--r-- | sysdeps/nptl/pthread-functions.h | 2 |
9 files changed, 30 insertions, 20 deletions
diff --git a/nptl/Makefile b/nptl/Makefile index 1d37810..dce54d0 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -45,6 +45,7 @@ routines = \ libc_multiple_threads \ libc_pthread_init \ lowlevellock \ + nptl_nthreads \ old_pthread_cond_destroy \ old_pthread_cond_init \ pthread_atfork \ diff --git a/nptl/Versions b/nptl/Versions index 193376c..b4ee1bf 100644 --- a/nptl/Versions +++ b/nptl/Versions @@ -106,6 +106,7 @@ libc { __lll_lock_wait_private; __lll_trylock_elision; __lll_unlock_elision; + __nptl_nthreads; __pthread_attr_copy; __pthread_attr_destroy; __pthread_attr_init; diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 1247996..aad4f21 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -93,7 +93,6 @@ static const struct pthread_functions pthread_functions = .ptr___pthread_key_create = __pthread_key_create, .ptr___pthread_getspecific = __pthread_getspecific, .ptr___pthread_setspecific = __pthread_setspecific, - .ptr_nthreads = &__nptl_nthreads, .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd, .ptr__nptl_setxid = __nptl_setxid, .ptr_set_robust = __nptl_set_robust diff --git a/nptl/nptl_nthreads.c b/nptl/nptl_nthreads.c new file mode 100644 index 0000000..2245bb3 --- /dev/null +++ b/nptl/nptl_nthreads.c @@ -0,0 +1,23 @@ +/* Thread counter variable. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <pthreadP.h> + +/* Number of threads running. */ +unsigned int __nptl_nthreads = 1; +libc_hidden_data_def (__nptl_nthreads) diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 2e66379..64ec71c 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -220,7 +220,8 @@ extern struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]; hidden_proto (__pthread_keys) /* Number of threads running. */ -extern unsigned int __nptl_nthreads attribute_hidden; +extern unsigned int __nptl_nthreads; +libc_hidden_proto (__nptl_nthreads) #ifndef __ASSUME_SET_ROBUST_LIST /* Negative if we do not have the system call and we can use it. */ diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index f13d8e4..c1c5b24 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -59,10 +59,6 @@ static struct rtld_global *__nptl_rtld_global __attribute_used__ = &_rtld_global; #endif -/* Number of threads running. */ -unsigned int __nptl_nthreads = 1; - - /* Code to allocate and deallocate a stack. */ #include "allocatestack.c" diff --git a/nptl_db/structs.def b/nptl_db/structs.def index 8a613dd..8aacbe0 100644 --- a/nptl_db/structs.def +++ b/nptl_db/structs.def @@ -73,7 +73,7 @@ DB_SYMBOL (nptl_version) DB_FUNCTION (__nptl_create_event) DB_FUNCTION (__nptl_death_event) DB_SYMBOL (__nptl_threads_events) -DB_VARIABLE (__nptl_nthreads) +DB_MAIN_VARIABLE (__nptl_nthreads) DB_VARIABLE (__nptl_last_event) DB_VARIABLE (__nptl_initial_report_events) diff --git a/sysdeps/nptl/libc_start_call_main.h b/sysdeps/nptl/libc_start_call_main.h index 5218e7a..112cc20 100644 --- a/sysdeps/nptl/libc_start_call_main.h +++ b/sysdeps/nptl/libc_start_call_main.h @@ -17,6 +17,7 @@ <https://www.gnu.org/licenses/>. */ #include <atomic.h> +#include <nptl/pthreadP.h> _Noreturn static void __libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), @@ -69,17 +70,7 @@ __libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), /* One less thread. Decrement the counter. If it is zero we terminate the entire process. */ result = 0; -# ifdef SHARED - unsigned int *ptr = __libc_pthread_functions.ptr_nthreads; -# ifdef PTR_DEMANGLE - PTR_DEMANGLE (ptr); -# endif -# else - extern unsigned int __nptl_nthreads __attribute ((weak)); - unsigned int *const ptr = &__nptl_nthreads; -# endif - - if (! atomic_decrement_and_test (ptr)) + if (! atomic_decrement_and_test (&__nptl_nthreads)) /* Not much left to do but to exit the thread, not the process. */ __exit_thread (); } diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h index 280655f..2fa698b 100644 --- a/sysdeps/nptl/pthread-functions.h +++ b/sysdeps/nptl/pthread-functions.h @@ -55,8 +55,6 @@ struct pthread_functions int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *)); void *(*ptr___pthread_getspecific) (pthread_key_t); int (*ptr___pthread_setspecific) (pthread_key_t, const void *); -#define HAVE_PTR_NTHREADS - unsigned int *ptr_nthreads; void (*ptr__nptl_deallocate_tsd) (void); int (*ptr__nptl_setxid) (struct xid_command *); void (*ptr_set_robust) (struct pthread *); |