From patchwork Tue Feb 2 15:11:32 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: 41903 X-Patchwork-Delegate: azanella@linux.vnet.ibm.com 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 392B6398B171; Tue, 2 Feb 2021 15:11:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 392B6398B171 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612278713; bh=nbB7otUBsoj3L3aU1RIan/qfJ2fd7zBdEvOALlcexTk=; 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=OJnzcQFZ52hFY/MCXzoWEE59j0e59k2Ipzy0dQwaFWcKbdbWVjerbjYntJ5GJryDn O9SbbUfzXhlkudaaqgVi1HjN1WdNl2lZr4p84uczuH2s8Ee9alG37PH9w+RQ5kHRz3 H/CmO0tu+/avzWSHTAVhE2LvcfJYzc42zKgINtoM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) by sourceware.org (Postfix) with ESMTPS id B9455398B159 for ; Tue, 2 Feb 2021 15:11:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B9455398B159 Received: by mail-qt1-x82b.google.com with SMTP id t17so15136019qtq.2 for ; Tue, 02 Feb 2021 07:11:49 -0800 (PST) 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=nbB7otUBsoj3L3aU1RIan/qfJ2fd7zBdEvOALlcexTk=; b=nx99xzcCuRai/N9AHaWjS1vre4lvOnn6SMk0A/0o5nMY9/4sz7sRTCYumJGqRlRlDg pl5f5iEFS7Jmpa8aKPHo1Y7lfUJNIRkBi4vR0jr6uC5qN6p8RF1H4NmlAoFWyqu1npeF Xfjbh5LUFSZkerWoxBQ+io94ayh1B42Ulihwhzy/8/scoJtJdmLIuctiJPMHk4RCinpk pnpErUKeUXvE1OwNIRJh9b+PJgnMV/tOnV7lSOyByJ8Uw8BZe2Dhju/E9k5z/aJVaSwe bv2unspAG2cEgs8a55/BNhrP2NmD4987Zl/WoChMjbetqLmzQ9Xh1q5YVo5s9wlKkIip 7gkw== X-Gm-Message-State: AOAM531KIcF2Eq4fJ4OwHQndTkbS8MO8uuCzcbBtD7ruUyZhRaR411yn Sc3mkImdRvV6r7ox/PXzkqLlHZin9qq6bQ== X-Google-Smtp-Source: ABdhPJxAFk1sFSFNQa5r3SBp3+7dGzw55lqWmr60NTnd3WqkAnGYNGr+7Qo3+qsq0JewQ9ikBo53xw== X-Received: by 2002:ac8:5786:: with SMTP id v6mr712878qta.200.1612278708640; Tue, 02 Feb 2021 07:11:48 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id z20sm16617267qki.93.2021.02.02.07.11.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Feb 2021 07:11:48 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 6/8] Consolidate pthread_atfork Date: Tue, 2 Feb 2021 12:11:32 -0300 Message-Id: <20210202151134.2123748-6-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210202151134.2123748-1-adhemerval.zanella@linaro.org> References: <20210202151134.2123748-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.5 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" 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 | 3 -- sysdeps/htl/old_pt-atfork.c | 26 ------------ sysdeps/htl/pt-atfork.c | 41 ------------------- sysdeps/htl/pthread_atfork_compat.h | 2 + sysdeps/nptl/pthread_atfork_compat.h | 2 + sysdeps/pthread/Makefile | 6 ++- {nptl => sysdeps/pthread}/pthread_atfork.c | 0 .../pthread/pthread_atfork_compat.c | 11 +++-- 9 files changed, 16 insertions(+), 79 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 (100%) rename nptl/old_pthread_atfork.c => sysdeps/pthread/pthread_atfork_compat.c (76%) diff --git a/htl/Makefile b/htl/Makefile index 2dfe19c17f..062d66cbe9 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 \ \ @@ -166,9 +165,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 3a8762d7b6..31067a78ac 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -38,7 +38,6 @@ routines = \ libc_pthread_init \ old_pthread_cond_destroy \ old_pthread_cond_init \ - pthread_atfork \ pthread_attr_copy \ pthread_attr_destroy \ pthread_attr_extension \ @@ -70,7 +69,6 @@ routines = \ pthread_sigmask \ shared-only-routines = forward -static-only-routines = pthread_atfork # We need to provide certain routines for compatibility with existing # binaries. @@ -134,7 +132,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \ pthread_cancel pthread_testcancel \ pthread_setcancelstate pthread_setcanceltype \ pthread_once \ - old_pthread_atfork \ pthread_getcpuclockid \ shm-directory \ sem_init sem_destroy \ 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 3d115d3819..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..8943a148e8 --- /dev/null +++ b/sysdeps/htl/pthread_atfork_compat.h @@ -0,0 +1,2 @@ +#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..d3ab9373b3 --- /dev/null +++ b/sysdeps/nptl/pthread_atfork_compat.h @@ -0,0 +1,2 @@ +#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 eeb64f9fb0..e6266495c6 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_exit thrd_join \ call_once \ @@ -37,7 +37,8 @@ libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \ mtx_trylock mtx_unlock \ cnd_broadcast \ cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \ - tss_create tss_delete tss_get tss_set + tss_create tss_delete tss_get tss_set \ + pthread_atfork_compat tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \ @@ -109,6 +110,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 100% rename from nptl/pthread_atfork.c rename to sysdeps/pthread/pthread_atfork.c diff --git a/nptl/old_pthread_atfork.c b/sysdeps/pthread/pthread_atfork_compat.c similarity index 76% rename from nptl/old_pthread_atfork.c rename to sysdeps/pthread/pthread_atfork_compat.c index 01b7de633d..e01a408103 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,14 @@ License along with the GNU C Library; if not, see . */ +#include #include -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3) +#if SHLIB_COMPAT (libpthread, PTHREAD_ATFORK_COMPAT_INTRODUCED, \ + PTHREAD_ATFORK_COMPAT_OBSOLETED) # 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