From patchwork Fri Apr 16 09:21:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 42994 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 64AA8389201D; Fri, 16 Apr 2021 09:21:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 64AA8389201D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1618564867; bh=cizwjI6mJmNc5qpucxaaHop5vKO+yIy/dCRHpzVZGyA=; h=To:Subject:In-Reply-To:References:Date:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=BAE1cGhAUgqITAOnrEljwYd/y8Gxe/HkjwKlA1wh1WEtxYogQgIp/2PN99D+NRtJa Y53vlPsBTGWwjfhp7PkgCCv4ZHR3AsFpIi8b9WSBTsbJ1CZeR22kG6wn6+BdktkOp+ c14kRT9VNeCGotUBeAuX0Dz41RrSUVSlxS71Vv8k= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 2D075389201D for ; Fri, 16 Apr 2021 09:21:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2D075389201D Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-320-tpwPVN6ZNC6TOfKTx8GpUg-1; Fri, 16 Apr 2021 05:20:58 -0400 X-MC-Unique: tpwPVN6ZNC6TOfKTx8GpUg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6E2CB6D249 for ; Fri, 16 Apr 2021 09:20:57 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-113-139.ams2.redhat.com [10.36.113.139]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 946FC669F2 for ; Fri, 16 Apr 2021 09:20:56 +0000 (UTC) To: libc-alpha@sourceware.org Subject: [PATCH v4 11/37] nptl: Move internal __nptl_nthreads variable into libc In-Reply-To: References: Message-Id: Date: Fri, 16 Apr 2021 11:21:14 +0200 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Florian Weimer via Libc-alpha From: Florian Weimer Reply-To: Florian Weimer Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Reviewed-by: Adhemerval Zanella --- nptl/Makefile | 1 + nptl/Versions | 1 + nptl/nptl-init.c | 1 - nptl/nptl_nthreads.c | 23 +++++++++++++++++++++++ nptl/pthreadP.h | 3 ++- nptl/pthread_create.c | 4 ---- nptl_db/structs.def | 2 +- sysdeps/nptl/libc_start_call_main.h | 13 ++----------- sysdeps/nptl/pthread-functions.h | 2 -- 9 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 nptl/nptl_nthreads.c diff --git a/nptl/Makefile b/nptl/Makefile index ea2554a525..5bfa721596 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 193376c827..b4ee1bf309 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 124799679b..aad4f21f74 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 0000000000..2245bb3c76 --- /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 + . */ + +#include + +/* 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 2e66379441..64ec71c23f 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 6c645aff48..350bf03f5d 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -51,10 +51,6 @@ static td_thr_events_t __nptl_threads_events __attribute_used__; /* Pointer to descriptor with the last event. */ static struct pthread *__nptl_last_event __attribute_used__; -/* 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 999a9fc35a..d0e1cb659a 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 5218e7ab1e..112cc20a7a 100644 --- a/sysdeps/nptl/libc_start_call_main.h +++ b/sysdeps/nptl/libc_start_call_main.h @@ -17,6 +17,7 @@ . */ #include +#include _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 280655fe40..2fa698b1da 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 *);