From patchwork Mon May 3 20:54:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 1473382 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=libc-alpha-bounces@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=sXaKnPHD; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4FYwFs26gMz9sRR for ; Tue, 4 May 2021 06:54:41 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EBAC2395541C; Mon, 3 May 2021 20:54:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EBAC2395541C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1620075271; bh=Q/7v0cjRI7nOrgsJC06OvhpIEHwIL9qgpM/kYYnGJMU=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=sXaKnPHDY/L1Q3Cx5I1QAhrUypaYM33bfRLtkNnwSHAdezUIf+D+8fTAEoPsAvJce C/kdFrPTxlUlPQJu7u4OeOgT2cJcBkcpO9l6GK6GJfQ3kah6KwTjdEaQatIizEvtV6 mAUFiEdadt3PemDD1v/RJ05ZUR8nxtBJ6JpheSKY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org 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 0FAFD394482E for ; Mon, 3 May 2021 20:54:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0FAFD394482E Received: by mail-qv1-xf32.google.com with SMTP id z1so3364908qvo.4 for ; Mon, 03 May 2021 13:54:28 -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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Q/7v0cjRI7nOrgsJC06OvhpIEHwIL9qgpM/kYYnGJMU=; b=OTdnBOC6z4ctDIQW/D1p14wNYZzaUVKbjeQcRVxMDB8WyjsJm77+Dg26ezkqAR9R7K RX6r5c7jARQiHoVe+sFqg04b2IXo60CuU4/Ww6qx621ggjPblQqz4brKFunK+0KYfBuD khL433++VyXxAimB33165dk2vS0igrl/Lxk7JPfs9d7t0/0jUnAuYbV2P8Myal0oEeae X3lvU+tknHCzHdP3Dsq0DLG21XB4t3ZbPUZR1wPxdqY8XhlBIrdT/ekvP+EucBmYp9J4 6Vtw4KThoK+ti6K2eEbhBsBo3uK6IMjT7k9WxjzzWUWzDAHKg2+ocSa0GJ1RmNCbj/l5 gNqw== X-Gm-Message-State: AOAM531id1NqexUkzYj4uYYlbpBCGgqrsyiFem8nUtuJVG76fmX0OBWE 9jMHdNZZ4CtCsTP3MHT3qoWS1T8k6rOhgQ== X-Google-Smtp-Source: ABdhPJzo13J0bo43cYov/xrBbnDFea7n+nzKP7KUqyY68Cjpy7LG05ZHox+F28w7Z3973d1blwYFIQ== X-Received: by 2002:ad4:4dc8:: with SMTP id cw8mr8043909qvb.16.1620075267370; Mon, 03 May 2021 13:54:27 -0700 (PDT) Received: from birita.. ([177.194.41.149]) by smtp.googlemail.com with ESMTPSA id f125sm9471130qkj.38.2021.05.03.13.54.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 13:54:27 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v3 3/4] Consolidate pthread_atfork Date: Mon, 3 May 2021 17:54:18 -0300 Message-Id: <20210503205419.2890929-3-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210503205419.2890929-1-adhemerval.zanella@linaro.org> References: <20210503205419.2890929-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, 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: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Changes from v2: * Rebased against master. Changes from v1: * Add comment on pthread_affork_compat.h. --- The pthread_atfork is similar between Linux and Hurd, only the compat version bits differs. The generic version is place at sysdeps/pthread with a common name. It also fixes an issue with Hurd license, where the static-only object did not use LGPL. Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for i686-gnu. --- htl/Makefile | 4 +- nptl/Makefile | 1 - sysdeps/htl/old_pt-atfork.c | 26 ------------ sysdeps/htl/pt-atfork.c | 41 ------------------- sysdeps/htl/pthread_atfork_compat.h | 4 ++ sysdeps/nptl/pthread_atfork_compat.h | 4 ++ sysdeps/pthread/Makefile | 4 +- {nptl => sysdeps/pthread}/pthread_atfork.c | 1 + .../pthread/pthread_atfork_compat.c | 8 ++-- 9 files changed, 18 insertions(+), 75 deletions(-) delete mode 100644 sysdeps/htl/old_pt-atfork.c delete mode 100644 sysdeps/htl/pt-atfork.c create mode 100644 sysdeps/htl/pthread_atfork_compat.h create mode 100644 sysdeps/nptl/pthread_atfork_compat.h rename {nptl => sysdeps/pthread}/pthread_atfork.c (98%) rename nptl/old_pthread_atfork.c => sysdeps/pthread/pthread_atfork_compat.c (84%) diff --git a/htl/Makefile b/htl/Makefile index 895a6f777c..0e08680615 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -121,7 +121,6 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ pt-sigstate-destroy \ pt-sigstate \ \ - old_pt-atfork \ pt-kill \ pt-getcpuclockid \ \ @@ -165,9 +164,8 @@ headers := \ distribute := -routines := forward libc_pthread_init alloca_cutoff pt-atfork +routines := forward libc_pthread_init alloca_cutoff shared-only-routines = forward -static-only-routines = pt-atfork extra-libs := libpthread extra-libs-others := $(extra-libs) diff --git a/nptl/Makefile b/nptl/Makefile index 38f2715c2c..7d41b4e09b 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -47,7 +47,6 @@ routines = \ nptl_deallocate_tsd \ nptl_nthreads \ nptl_setxid \ - old_pthread_atfork \ old_pthread_cond_broadcast \ old_pthread_cond_destroy \ old_pthread_cond_init \ diff --git a/sysdeps/htl/old_pt-atfork.c b/sysdeps/htl/old_pt-atfork.c deleted file mode 100644 index ca38d6ca42..0000000000 --- a/sysdeps/htl/old_pt-atfork.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Register fork handlers. Generic version. - Copyright (C) 2002-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 - -#if SHLIB_COMPAT(libpthread, GLIBC_2_12, GLIBC_2_23) -# define __pthread_atfork __dyn_pthread_atfork -# include "pt-atfork.c" -# undef __pthread_atfork -compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork, GLIBC_2_12); -#endif diff --git a/sysdeps/htl/pt-atfork.c b/sysdeps/htl/pt-atfork.c deleted file mode 100644 index 3902f40835..0000000000 --- a/sysdeps/htl/pt-atfork.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Register fork handlers. Generic version. - Copyright (C) 2002-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 -#include -#include -#include - -/* Hide the symbol so that no definition but the one locally in the - executable or DSO is used. */ -int -#ifndef __pthread_atfork -/* Don't mark the compatibility function as hidden. */ -attribute_hidden -#endif -__pthread_atfork (void (*prepare) (void), - void (*parent) (void), - void (*child) (void)) -{ - return __register_atfork (prepare, parent, child, __dso_handle); -} -#ifndef __pthread_atfork -extern int pthread_atfork (void (*prepare) (void), void (*parent) (void), - void (*child) (void)) attribute_hidden; -weak_alias (__pthread_atfork, pthread_atfork) -#endif diff --git a/sysdeps/htl/pthread_atfork_compat.h b/sysdeps/htl/pthread_atfork_compat.h new file mode 100644 index 0000000000..08afccbb3c --- /dev/null +++ b/sysdeps/htl/pthread_atfork_compat.h @@ -0,0 +1,4 @@ +/* The compat version for the dynamic pthread_atfork provided by libpthread, + before supported __dso_handle was added. */ +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_12 +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_23 diff --git a/sysdeps/nptl/pthread_atfork_compat.h b/sysdeps/nptl/pthread_atfork_compat.h new file mode 100644 index 0000000000..38edcbefe5 --- /dev/null +++ b/sysdeps/nptl/pthread_atfork_compat.h @@ -0,0 +1,4 @@ +/* The compat versions for the dynamic pthread_atfork provided by libpthread, + before supported __dso_handle was added. */ +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_0 +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_3 diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile index 54bb11bab9..282425ade5 100644 --- a/sysdeps/pthread/Makefile +++ b/sysdeps/pthread/Makefile @@ -29,7 +29,7 @@ endif ifneq (,$(filter $(subdir),htl nptl)) headers += threads.h -routines += thrd_current thrd_equal thrd_sleep thrd_yield +routines += thrd_current thrd_equal thrd_sleep thrd_yield pthread_atfork libpthread-routines += thrd_create thrd_detach thrd_join @@ -47,6 +47,7 @@ $(libpthread-routines-var) += \ mtx_timedlock \ mtx_trylock \ mtx_unlock \ + pthread_atfork_compat \ thrd_exit \ tss_create \ tss_delete \ @@ -123,6 +124,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ tst-unwind-thread \ tst-pt-vfork1 tst-pt-vfork2 tst-vfork1x tst-vfork2x \ +static-only-routines = pthread_atfork # Files which must not be linked with libpthread. tests-nolibpthread += tst-unload diff --git a/nptl/pthread_atfork.c b/sysdeps/pthread/pthread_atfork.c similarity index 98% rename from nptl/pthread_atfork.c rename to sysdeps/pthread/pthread_atfork.c index 6398688dab..7646fe7efc 100644 --- a/nptl/pthread_atfork.c +++ b/sysdeps/pthread/pthread_atfork.c @@ -36,6 +36,7 @@ #include "pthreadP.h" #include #include +#include /* Hide the symbol so that no definition but the one locally in the diff --git a/nptl/old_pthread_atfork.c b/sysdeps/pthread/pthread_atfork_compat.c similarity index 84% rename from nptl/old_pthread_atfork.c rename to sysdeps/pthread/pthread_atfork_compat.c index 675227c559..4533f765d1 100644 --- a/nptl/old_pthread_atfork.c +++ b/sysdeps/pthread/pthread_atfork_compat.c @@ -1,6 +1,6 @@ -/* Copyright (C) 2002-2021 Free Software Foundation, Inc. +/* Compat pthread_atfork implementation. + 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 @@ -16,11 +16,13 @@ License along with the GNU C Library; if not, see . */ +#include #include #if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3) # define __pthread_atfork __dyn_pthread_atfork # include "pthread_atfork.c" # undef __pthread_atfork -compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork, GLIBC_2_0); +compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork, + PTHREAD_ATFORK_COMPAT_INTRODUCED); #endif