[PATCH v2 6/8] Consolidate pthread_atfork
Adhemerval Zanella
adhemerval.zanella@linaro.org
Thu Mar 11 19:52:08 GMT 2021
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
- <https://www.gnu.org/licenses/>. */
-
-#include <shlib-compat.h>
-
-#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
- <https://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <pt-internal.h>
-#include <fork.h>
-#include <dso_handle.h>
-#include <register-atfork.h>
-
-/* 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 <fork.h>
#include <dso_handle.h>
+#include <register-atfork.h>
/* 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 <drepper@redhat.com>, 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
<https://www.gnu.org/licenses/>. */
+#include <pthread_atfork_compat.h>
#include <shlib-compat.h>
-#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
--
2.25.1
More information about the Libc-alpha
mailing list