From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf32.google.com (mail-qv1-xf32.google.com [IPv6:2607:f8b0:4864:20::f32]) by sourceware.org (Postfix) with ESMTPS id 0EB1A3857C44 for ; Fri, 26 Mar 2021 18:19:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0EB1A3857C44 Received: by mail-qv1-xf32.google.com with SMTP id o19so3419622qvu.0 for ; Fri, 26 Mar 2021 11:19:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=O4JkBnRYqpE71dG+UurLjm+h5ULvA+OO2/Vq48XBjD0=; b=BP/qZG095qB+asOReNlgmVmLizo5dFq3yX9c52RDwGVaNAiIW+VBs40eN0HExS9Wxc zfCQW9nVbO9Fm5vdmSeVxkvRSu2Cb9UfPWtuqAiFjNn7sU0sPhML9PjDjWvNNbMBWR70 1QPoqr4PcJuQ0q2B0kUn5uoRs37mkJ7kGEYnOmswyOKCtrUV2IjaZ2Mp5hFDX5uoai0m pMCCD5k6oxy3yghK5BTnGCXs2NzuM75/wJ1wjAta+gXyMPW4luXhwElLp8ETdRRrrodq 9TWRbjpOw2ljmj5f5cJ9VaX5x3zNx9T+ZTtL9lCvjNInPD2/BUpPuqhE98C7lpRrwQnu r5XA== X-Gm-Message-State: AOAM53364hsNsBddZ401rCIPPuqPZvozXy9lbKeWsLpclPPx7v9JhoWp ZqLUYhWxzLpIjKPpX/KHqCYmCaTESQOsz02e X-Google-Smtp-Source: ABdhPJwOe6zH30LhuZAcxzMwLOh7Svfxs68InDEmTwuYq/wtxD9RZE981464TvwYW+D7yRuZdlMa2A== X-Received: by 2002:a0c:f9cc:: with SMTP id j12mr14662660qvo.15.1616782785398; Fri, 26 Mar 2021 11:19:45 -0700 (PDT) Received: from [192.168.1.132] ([177.194.41.149]) by smtp.gmail.com with ESMTPSA id a14sm7475213qkc.47.2021.03.26.11.19.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 Mar 2021 11:19:45 -0700 (PDT) Subject: Re: [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface To: Florian Weimer , libc-alpha@sourceware.org References: <452f10ce207ae27d4d3ce76054b03f9778080550.1615914632.git.fweimer@redhat.com> From: Adhemerval Zanella Message-ID: Date: Fri, 26 Mar 2021 15:19:42 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <452f10ce207ae27d4d3ce76054b03f9778080550.1615914632.git.fweimer@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLACK 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-List-Received-Date: Fri, 26 Mar 2021 18:19:48 -0000 On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote: > All previously forwarded functions are now implemented in libc. LGTM, thanks. Reviewed-by: Adhemerval Zanella > --- > nptl/Makefile | 1 - > nptl/forward.c | 31 -------------------- > nptl/libc_pthread_init.c | 29 +----------------- > nptl/nptl-init.c | 11 +------ > nptl/pthreadP.h | 7 ++--- > sysdeps/nptl/libc-lockP.h | 28 ++++-------------- > sysdeps/nptl/pthread-functions.h | 50 -------------------------------- > 7 files changed, 10 insertions(+), 147 deletions(-) > delete mode 100644 nptl/forward.c > delete mode 100644 sysdeps/nptl/pthread-functions.h > > diff --git a/nptl/Makefile b/nptl/Makefile > index 1b5038485d..7423967cd2 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -38,7 +38,6 @@ routines = \ > elision-timed \ > elision-trylock \ > elision-unlock \ > - forward \ > futex-internal \ > libc-cancellation \ > libc-cleanup \ Ok. > diff --git a/nptl/forward.c b/nptl/forward.c > deleted file mode 100644 > index c819ab6f2a..0000000000 > --- a/nptl/forward.c > +++ /dev/null > @@ -1,31 +0,0 @@ > -/* Copyright (C) 2002-2021 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - Contributed by Ulrich Drepper , 2002. > - > - 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 > -#include > -#include > -#include > - > -#include > -#include > -#include > - > - > -/* Pointers to the libc functions. */ > -struct pthread_functions __libc_pthread_functions attribute_hidden; > -int __libc_pthread_functions_init attribute_hidden; Ok. > diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c > index 85fceff930..c951332666 100644 > --- a/nptl/libc_pthread_init.c > +++ b/nptl/libc_pthread_init.c > @@ -34,38 +34,11 @@ extern int __libc_multiple_threads attribute_hidden; > > int * > #endif > -__libc_pthread_init (void (*reclaim) (void), > - const struct pthread_functions *functions) > +__libc_pthread_init (void (*reclaim) (void)) > { > /* Called by a child after fork. */ > __register_atfork (NULL, NULL, reclaim, NULL); > > -#ifdef SHARED > - /* Copy the function pointers into an array in libc. This enables > - access with just one memory reference but moreso, it prevents > - hijacking the function pointers with just one pointer change. We > - "encrypt" the function pointers since we cannot write-protect the > - array easily enough. */ > - union ptrhack > - { > - struct pthread_functions pf; > -# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *)) > - void *parr[NPTRS]; > - } __attribute__ ((may_alias)) const *src; > - union ptrhack *dest; > - > - src = (const void *) functions; > - dest = (void *) &__libc_pthread_functions; > - > - for (size_t cnt = 0; cnt < NPTRS; ++cnt) > - { > - void *p = src->parr[cnt]; > - PTR_MANGLE (p); > - dest->parr[cnt] = p; > - } > - __libc_pthread_functions_init = 1; > -#endif > - > #ifndef TLS_MULTIPLE_THREADS_IN_TCB > return &__libc_multiple_threads; > #endif Ok. > diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c > index f4a603b32d..061e3ff8d7 100644 > --- a/nptl/nptl-init.c > +++ b/nptl/nptl-init.c > @@ -50,15 +50,6 @@ size_t __static_tls_align_m1; > /* Version of the library, used in libthread_db to detect mismatches. */ > static const char nptl_version[] __attribute_used__ = VERSION; > > -#ifdef SHARED > -static const struct pthread_functions pthread_functions = > - { > - }; > -# define ptr_pthread_functions &pthread_functions > -#else > -# define ptr_pthread_functions NULL > -#endif > - > /* For asynchronous cancellation we use a signal. This is the handler. */ > static void > sigcancel_handler (int sig, siginfo_t *si, void *ctx) Ok. > @@ -207,7 +198,7 @@ __pthread_initialize_minimal_internal (void) > #ifndef TLS_MULTIPLE_THREADS_IN_TCB > __libc_multiple_threads_ptr = > #endif > - __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions); > + __libc_pthread_init (__reclaim_stacks); > } > strong_alias (__pthread_initialize_minimal_internal, > __pthread_initialize_minimal) Ok. > diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h > index 9852906b3a..a1d34d5ff1 100644 > --- a/nptl/pthreadP.h > +++ b/nptl/pthreadP.h > @@ -30,7 +30,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -364,11 +363,9 @@ hidden_proto (__nptl_death_event) > > /* Register the generation counter in the libpthread with the libc. */ > #ifdef TLS_MULTIPLE_THREADS_IN_TCB > -extern void __libc_pthread_init (void (*reclaim) (void), > - const struct pthread_functions *functions); > +extern void __libc_pthread_init (void (*reclaim) (void)); > #else > -extern int *__libc_pthread_init (void (*reclaim) (void), > - const struct pthread_functions *functions); > +extern int *__libc_pthread_init (void (*reclaim) (void)); > > /* 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 Maybe move the __libc_pthread_init prototype out of TLS_MULTIPLE_THREADS_IN_TCB since it is duplicated. > diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h > index 0dd2ea1147..e573689799 100644 > --- a/sysdeps/nptl/libc-lockP.h > +++ b/sysdeps/nptl/libc-lockP.h > @@ -32,7 +32,6 @@ > ld.so might be used on old kernels with a different libc.so. */ > #include > #include > -#include > > #if IS_IN (libpthread) > /* This gets us the declarations of the __pthread_* internal names, > @@ -100,27 +99,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0"); > (FUNC != NULL ? FUNC ARGS : ELSE) > #endif > > -/* Call thread functions through the function pointer table. */ > -#if defined SHARED && IS_IN (libc) > -# define PTFAVAIL(NAME) __libc_pthread_functions_init > -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ > - (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE) > -# define __libc_ptf_call_always(FUNC, ARGS) \ > - PTHFCT_CALL (ptr_##FUNC, ARGS) > -#elif IS_IN (libpthread) > -# define PTFAVAIL(NAME) 1 > -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ > - FUNC ARGS > -# define __libc_ptf_call_always(FUNC, ARGS) \ > - FUNC ARGS > -#else > -# define PTFAVAIL(NAME) (NAME != NULL) > -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ > - __libc_maybe_call (FUNC, ARGS, ELSE) > -# define __libc_ptf_call_always(FUNC, ARGS) \ > - FUNC ARGS > -#endif > - > +/* All previously forwarded functions are now called directly (either > + via local call in libc, or through a __export), but __libc_ptf_call > + is still used in generic code shared with Hurd. */ > +#define PTFAVAIL(NAME) 1 > +#define __libc_ptf_call(FUNC, ARGS, ELSE) FUNC ARGS > +#define __libc_ptf_call_always(FUNC, ARGS) FUNC ARGS > > /* Initialize the named lock variable, leaving it in a consistent, unlocked > state. */ Ok. > diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h > deleted file mode 100644 > index d76b2cdecf..0000000000 > --- a/sysdeps/nptl/pthread-functions.h > +++ /dev/null > @@ -1,50 +0,0 @@ > -/* Copyright (C) 2003-2021 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - Contributed by Ulrich Drepper , 2003. > - > - 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 > - . */ > - > -#ifndef _PTHREAD_FUNCTIONS_H > -#define _PTHREAD_FUNCTIONS_H 1 > - > -#include > -#include > -#include > -#include > - > -struct xid_command; > - > -/* Data type shared with libc. The libc uses it to pass on calls to > - the thread functions. */ > -struct pthread_functions > -{ > -}; > - > -/* Variable in libc.so. */ > -extern struct pthread_functions __libc_pthread_functions attribute_hidden; > -extern int __libc_pthread_functions_init attribute_hidden; > - > -#ifdef PTR_DEMANGLE > -# define PTHFCT_CALL(fct, params) \ > - ({ __typeof (__libc_pthread_functions.fct) __p; \ > - __p = __libc_pthread_functions.fct; \ > - PTR_DEMANGLE (__p); \ > - __p params; }) > -#else > -# define PTHFCT_CALL(fct, params) \ > - __libc_pthread_functions.fct params > -#endif > - > -#endif /* pthread-functions.h */ > Ok.