From patchwork Tue Sep 7 13:33:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 44888 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 76DF8385E448 for ; Tue, 7 Sep 2021 13:34:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 76DF8385E448 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1631021694; bh=fg9vWHdiH/zavUU5dOFI+Pb5LG1XRilWttn4o5i73Jw=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=CfplIBv8PKTF5c73zTM2Wbsa0rOO9MH1v2n2wTYFu0UQk3YDrmHeoxUGoouFMY5uU 60T7jPurY91mO43aGMmtl8PGAszZ1HpW21Os5PYIIPip4XGswJ7ysVlI66U/OYKpIc HrhjL7rBgvbsutFm4QOYlcw1M9wwAN+UPDJIJ0So= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) by sourceware.org (Postfix) with ESMTPS id 585CB3858002 for ; Tue, 7 Sep 2021 13:33:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 585CB3858002 Received: by mail-lj1-x22d.google.com with SMTP id y6so16592357lje.2 for ; Tue, 07 Sep 2021 06:33:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fg9vWHdiH/zavUU5dOFI+Pb5LG1XRilWttn4o5i73Jw=; b=VhBUhIEXGDzDA2cLc45XxgyvEByFBSC1I7nPLVanimDUebkBO/SfgGxeRQu7A41mDY o8a7Te3knYw0Jr/2+ESJ5qKD4HZyEtw4Zsz5ADrqbAK3c+UKNH6WEdPJV3SOfPWdkwhE pyp0x+mO/MVk0sI4RcEkBXrN9Hlloo4gtNpAXJppWivcez7e/MMET+OkyT6zR2HgHp0V nPQYatUBrQSDxk56h54aepBGtdJ+GRg9dd8T61xydQ6FkGjx9NSRaQXZRoOL12PoAwSc 5LJ1YfwQjiz1c7ZyZ5n17hFYG9LTEgfvF48c9k7aLwiozbwU40IygLFSOs8wpY6SsMZ8 PRlg== X-Gm-Message-State: AOAM532yvOtGfRtnaTyskAs943C1DP4SN3RH+kCbab5jXWCfgC1YfHbm 2ev4VyGShYJI6ua9wJHZUmj2n3jsq83GbkZA X-Google-Smtp-Source: ABdhPJxpQnSAzf59ZKpXeNtvG6P2uxa/ZB+/2EEu+oa/vQ4wAxytkKfH4ajct/0p88gScPEFHM2w0A== X-Received: by 2002:a2e:a903:: with SMTP id j3mr14729052ljq.347.1631021627801; Tue, 07 Sep 2021 06:33:47 -0700 (PDT) Received: from badwolf.office.smartdec.ru ([81.23.5.115]) by smtp.googlemail.com with ESMTPSA id u15sm1012348lfk.26.2021.09.07.06.33.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Sep 2021 06:33:47 -0700 (PDT) To: libc-alpha@sourceware.org, bug-hurd@gnu.org Subject: [PATCH htl v3 1/5] elf: Replace most uses of THREAD_GSCOPE_IN_TCB Date: Tue, 7 Sep 2021 16:33:21 +0300 Message-Id: <20210907133325.255690-2-bugaevc@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210907133325.255690-1-bugaevc@gmail.com> References: <20210907133325.255690-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Sergey Bugaev via Libc-alpha From: Sergey Bugaev Reply-To: Sergey Bugaev Cc: samuel.thibault@gnu.org, Sergey Bugaev Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" While originally this definition was indeed used to distinguish between the cases where the GSCOPE flag was stored in TCB or not, it has since become used as a general way to distinguish between HTL and NPTL. THREAD_GSCOPE_IN_TCB will be removed in the following commits, as HTL, which currently is the only port that does not put the flag into TCB, will get ported to put the GSCOPE flag into the TCB as well. To prepare for that change, migrate all code that wants to distinguish between HTL and NPTL to use PTHREAD_IN_LIBC instead, which is a better choice since the distinction mostly has to do with whether libc has access to the list of thread structures and therefore can initialize thread-local storage. The parts of code that actually depend on whether the GSCOPE flag is in TCB are left unchanged. Signed-off-by: Sergey Bugaev --- elf/dl-reloc.c | 4 ++-- elf/dl-support.c | 6 ++++-- elf/dl-tls.c | 6 +++--- elf/dl-tls_init_tp.c | 2 +- sysdeps/generic/ldsodefs.h | 11 ++++++----- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index e13a672ade..6c957456b8 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -141,7 +141,7 @@ cannot allocate memory in static TLS block")); } } -#if !THREAD_GSCOPE_IN_TCB +#if !PTHREAD_IN_LIBC /* Initialize static TLS area and DTV for current (only) thread. libpthread implementations should provide their own hook to handle all threads. */ @@ -160,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 */ +#endif /* !PTHREAD_IN_LIBC */ void _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], diff --git a/elf/dl-support.c b/elf/dl-support.c index 0155718175..a317459fae 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -183,7 +183,7 @@ uint64_t _dl_hwcap_mask; * executable but this isn't true for all platforms. */ ElfW(Word) _dl_stack_flags = DEFAULT_STACK_PERMS; -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC list_t _dl_stack_used; list_t _dl_stack_user; list_t _dl_stack_cache; @@ -195,9 +195,11 @@ int _dl_stack_cache_lock; when it was not, we do it by calling this function. It returns an errno code or zero on success. */ int (*_dl_make_stack_executable_hook) (void **) = _dl_make_stack_executable; -int _dl_thread_gscope_count; void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; #endif +#if !THREAD_GSCOPE_IN_TCB +int _dl_thread_gscope_count; +#endif struct dl_scope_free_list *_dl_scope_free_list; #ifdef NEED_DL_SYSINFO diff --git a/elf/dl-tls.c b/elf/dl-tls.c index 423e380f7c..d554ae4497 100644 --- a/elf/dl-tls.c +++ b/elf/dl-tls.c @@ -29,7 +29,7 @@ #include #include -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC # include #endif @@ -1058,7 +1058,7 @@ cannot create TLS data structures")); } } -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC static inline void __attribute__((always_inline)) init_one_static_tls (struct pthread *curp, struct link_map *map) { @@ -1091,4 +1091,4 @@ _dl_init_static_tls (struct link_map *map) lll_unlock (GL (dl_stack_cache_lock), LLL_PRIVATE); } -#endif /* THREAD_GSCOPE_IN_TCB */ +#endif /* PTHREAD_IN_LIBC */ diff --git a/elf/dl-tls_init_tp.c b/elf/dl-tls_init_tp.c index d84adc992c..e482f3cfa9 100644 --- a/elf/dl-tls_init_tp.c +++ b/elf/dl-tls_init_tp.c @@ -36,7 +36,7 @@ rtld_lock_default_unlock_recursive (void *lock) void __tls_pre_init_tp (void) { -#if !THREAD_GSCOPE_IN_TCB +#if !PTHREAD_IN_LIBC GL(dl_init_static_tls) = &_dl_nothread_init_static_tls; #endif diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 9c15259236..02bd579ef8 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -456,7 +456,7 @@ struct rtld_global /* Generation counter for the dtv. */ EXTERN size_t _dl_tls_generation; -#if !THREAD_GSCOPE_IN_TCB +#if !PTHREAD_IN_LIBC EXTERN void (*_dl_init_static_tls) (struct link_map *); #endif @@ -466,7 +466,7 @@ struct rtld_global size_t count; void *list[50]; } *_dl_scope_free_list; -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC /* List of active thread stacks, with memory managed by glibc. */ EXTERN list_t _dl_stack_used; @@ -486,7 +486,8 @@ struct rtld_global /* Mutex protecting the stack lists. */ EXTERN int _dl_stack_cache_lock; -#else +#endif +#if !THREAD_GSCOPE_IN_TCB EXTERN int _dl_thread_gscope_count; #endif #ifdef SHARED @@ -1297,13 +1298,13 @@ extern void _dl_aux_init (ElfW(auxv_t) *av) /* Initialize the static TLS space for the link map in all existing threads. */ -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC void _dl_init_static_tls (struct link_map *map) attribute_hidden; #endif static inline void dl_init_static_tls (struct link_map *map) { -#if THREAD_GSCOPE_IN_TCB +#if PTHREAD_IN_LIBC /* The stack list is available to ld.so, so the initialization can be handled within ld.so directly. */ _dl_init_static_tls (map);