From patchwork Thu Mar 11 19:52:08 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: 42465 X-Patchwork-Delegate: fweimer@redhat.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 19786389443F; Thu, 11 Mar 2021 19:52:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 19786389443F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1615492347; bh=4hmwH/1K++jk3VZ7XQkuLH3NUtnSDLnTkVaogqQlVXM=; 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=tZ4dy6FfvsM+I6FLFgUNPvg9cljYFYHRwQ+qy0E5K5EkLeHQfcoqVpm5Aj5l3fInk 22A1atwMTlmqxTVliSD08aW8c8cx7D7jA5z7dJUvZJrouutA36JhkVa0ZvXG5YyEUJ b+ZD71KdC3Lgfx9o0NXdZh1BPtAOuLal6sDQ97MI= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by sourceware.org (Postfix) with ESMTPS id CDE6B3894C2E for ; Thu, 11 Mar 2021 19:52:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org CDE6B3894C2E Received: by mail-qk1-x732.google.com with SMTP id x10so21938701qkm.8 for ; Thu, 11 Mar 2021 11:52:21 -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=4hmwH/1K++jk3VZ7XQkuLH3NUtnSDLnTkVaogqQlVXM=; b=O3wFL9SNn4WdyMq5MppfrgWGdycbjGTKp4gLnzXNfKXe4eX3mMUYe6zaTLRGZGecO/ vqL8aJTO4icnL+pWyAN20SbO/ioHu/hhu05NCcyPKTQDgs+eCB54DFzahTG2xqnRPITG TeHOIqm7rGow9GhxiMdBBDdApEmsmq+jxVXCRB3IZmNkEVgO2LkMFUKaEt9hc+IAH0oi qyNxBHY/pHVEZElN8CJb3JsVXiKKMDPxZTnI6fka4w37s7wHWUZkHZcYJxOnE08NLPKq Zjyafj8T8fF5tI5+ncu0NZDD3ad9ylqErQE6KtHmykvvNH6tIXdpWL3ioYukZW9vrfZY b21g== X-Gm-Message-State: AOAM533YC9KHDfd43Z3+J57Enj4MXEozDa0EHXJbN6oiCW4hLWM9M1l3 3KM4Ze2qgAYosv8XlhjPRaeuDcCuZaY5/VTz X-Google-Smtp-Source: ABdhPJwnLxGxMCBQUgKe+gmmjTZBm+h/5FcKg176sZ8u3Bk0/kTdW1r5WPIxS/P2BjkaTiygSAZbpQ== X-Received: by 2002:a05:620a:9c6:: with SMTP id y6mr9440834qky.39.1615492341039; Thu, 11 Mar 2021 11:52:21 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id b16sm2266976qtx.85.2021.03.11.11.52.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Mar 2021 11:52:20 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v2 6/8] Consolidate pthread_atfork Date: Thu, 11 Mar 2021 16:52:08 -0300 Message-Id: <20210311195210.3153729-6-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210311195210.3153729-1-adhemerval.zanella@linaro.org> References: <20210311195210.3153729-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.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@sourceware.org Sender: "Libc-alpha" 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 | 3 -- sysdeps/htl/old_pt-atfork.c | 26 ------------ sysdeps/htl/pt-atfork.c | 42 ------------------- sysdeps/htl/pthread_atfork_compat.h | 4 ++ sysdeps/nptl/pthread_atfork_compat.h | 4 ++ sysdeps/pthread/Makefile | 6 ++- {nptl => sysdeps/pthread}/pthread_atfork.c | 1 + .../pthread/pthread_atfork_compat.c | 11 +++-- 9 files changed, 21 insertions(+), 80 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 (76%) 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 b51deff6a3..d73ebbeb78 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -44,7 +44,6 @@ routines = \ lowlevellock \ old_pthread_cond_destroy \ old_pthread_cond_init \ - pthread_atfork \ pthread_attr_copy \ pthread_attr_destroy \ pthread_attr_extension \ @@ -76,7 +75,6 @@ routines = \ pthread_sigmask \ shared-only-routines = forward -static-only-routines = pthread_atfork # We need to provide certain routines for compatibility with existing # binaries. @@ -106,7 +104,6 @@ libpthread-routines = \ libpthread-compat \ nptl-init \ nptlfreeres \ - old_pthread_atfork \ old_pthread_cond_broadcast \ old_pthread_cond_signal \ old_pthread_cond_timedwait \ 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 dbb3b8f0cc..0000000000 --- a/sysdeps/htl/pt-atfork.c +++ /dev/null @@ -1,42 +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 -#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 53b65ef349..429400f1d2 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 98% rename from nptl/pthread_atfork.c rename to sysdeps/pthread/pthread_atfork.c index 097a86d059..fc984f1578 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 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