From patchwork Wed Jun 23 18:43:53 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: 43978 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 B92AB398902C for ; Wed, 23 Jun 2021 18:46:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B92AB398902C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1624474002; bh=nLyXbjqTiEaBUypt29AxbwNkAc04FTJ8dRaLUnZ4Kik=; 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=BN964WjUykjRPhuV7szg16lkdNL82s1HftGdWg/ws9bCbh/5FIj+td0ukSx4JU+mI R94A52hFeuqBUudyLVpkX7CAfScP8uBvHdCrUklEsfavL35tW60iLPi9ZPDqMttek+ Zs1RTQBZAhE0gSwIOGp0oxHyQFaqZdbwiEnrJAOA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x731.google.com (mail-qk1-x731.google.com [IPv6:2607:f8b0:4864:20::731]) by sourceware.org (Postfix) with ESMTPS id 5F046388A42F for ; Wed, 23 Jun 2021 18:44:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5F046388A42F Received: by mail-qk1-x731.google.com with SMTP id o6so7794477qkh.4 for ; Wed, 23 Jun 2021 11:44:02 -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=nLyXbjqTiEaBUypt29AxbwNkAc04FTJ8dRaLUnZ4Kik=; b=CrzWsIJxstYISWTLOwf5ncvixrODgYom6va6cggLslsUjBEMzevYzT84Gjf0JXs5hV XmM0pnD3HV1b+4JSqJEKcSjLAZOpDUjmLbIwxWsAHe9j+bw1LwaFqQUlAF7CWvebFTm8 eZj/phvaGNcTUCzPt6waYfwR4dW/HIAL0DPoZbEYJip599YF4xuji/Vi0BfvY5so807Y DOtnciiM1VOB7jjMAisZFjXqcdnl2Heor+Kiey+yyew092eGh7r5nitLXfdMqVMrkwnU E4c7lk/hncGgXORlp4BMv7tRgJsPu7U4fiCHI4KXoTwBSc8KRfbp5Ia0z4kww1Af5PK3 KHlg== X-Gm-Message-State: AOAM53342fEa6m7+DNxdoRorSj68KSnOM8fqrf694F4FFLByErdkulU3 qVPCL75peHIZ3BSZf3HcLolxYAse2AP6FA== X-Google-Smtp-Source: ABdhPJx3X8M8XFZHO3xGiGdcPWYLoFKnZsAQAOkbW+rruvp7NJXOXUSA+nFt3ZLNoONlUXYvvmk54w== X-Received: by 2002:a37:5bc3:: with SMTP id p186mr1499054qkb.263.1624473841767; Wed, 23 Jun 2021 11:44:01 -0700 (PDT) Received: from birita.. ([177.194.59.218]) by smtp.gmail.com with ESMTPSA id j4sm500664qtr.72.2021.06.23.11.44.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Jun 2021 11:44:01 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v4 3/4] Consolidate pthread_atfork Date: Wed, 23 Jun 2021 15:43:53 -0300 Message-Id: <20210623184354.395316-4-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210623184354.395316-1-adhemerval.zanella@linaro.org> References: <20210623184354.395316-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 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+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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 8c5ad3c5de..cf9d12fc12 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 htlfreeres +routines := forward libc_pthread_init alloca_cutoff htlfreeres 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 bbaf796771..c64e4af2f6 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -52,7 +52,6 @@ routines = \ nptl_nthreads \ nptl_setxid \ nptlfreeres \ - 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 9e6ed3c6f7..fedb785d38 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-var) += \ call_once \ @@ -45,6 +45,7 @@ $(libpthread-routines-var) += \ mtx_timedlock \ mtx_trylock \ mtx_unlock \ + pthread_atfork_compat \ thrd_create \ thrd_detach \ thrd_exit \ @@ -134,6 +135,7 @@ tests-time64 := \ tst-sem5-time64 \ tst-thrd-sleep-time64 \ +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