summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-03-11 15:19:24 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-04-21 14:01:58 -0300
commitc6663fee4340291cd825fd8a88c219621f4eca9d (patch)
treef8dd659610efa8dcd8de0f4cbac48af46cd26a8d /nptl
parent8645f624697afecfaa4d97ac584bc0a943cbca17 (diff)
downloadglibc-c6663fee4340291cd825fd8a88c219621f4eca9d.tar.gz
glibc-c6663fee4340291cd825fd8a88c219621f4eca9d.tar.xz
glibc-c6663fee4340291cd825fd8a88c219621f4eca9d.zip
nptl: Move pthread_sigmask implementation to libc
This is part of the libpthread removal project:

  <https://sourceware.org/ml/libc-alpha/2019-10/msg00080.html>

A new symbol version is added on libc to force loading failure
instead of lazy binding one for newly binaries with old loaders.

Checked with a build against all affected ABIs.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/Makefile3
-rw-r--r--nptl/Versions4
-rw-r--r--nptl/pthread_sigmask.c11
3 files changed, 14 insertions, 4 deletions
diff --git a/nptl/Makefile b/nptl/Makefile
index e554a3898d..4816fa254e 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -59,6 +59,7 @@ routines = \
   pthread_getschedparam \
   pthread_self \
   pthread_setschedparam \
+  pthread_sigmask \
   register-atfork \
 
 shared-only-routines = forward
@@ -123,7 +124,7 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
 		      pthread_barrierattr_setpshared \
 		      pthread_key_create pthread_key_delete \
 		      pthread_getspecific pthread_setspecific \
-		      pthread_sigmask pthread_kill pthread_sigqueue \
+		      pthread_kill pthread_sigqueue \
 		      pthread_cancel pthread_testcancel \
 		      pthread_setcancelstate pthread_setcanceltype \
 		      pthread_once \
diff --git a/nptl/Versions b/nptl/Versions
index 543dddc4ee..f7140277f5 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -16,6 +16,7 @@ libc {
     pthread_mutex_lock; pthread_mutex_unlock;
     pthread_self;
     pthread_setcancelstate; pthread_setcanceltype;
+    pthread_sigmask;
   }
   GLIBC_2.1 {
     pthread_attr_init;
@@ -32,6 +33,9 @@ libc {
   GLIBC_2.28 {
     thrd_current; thrd_equal; thrd_sleep; thrd_yield;
   }
+  GLIBC_2.32 {
+    pthread_sigmask;
+  }
   GLIBC_PRIVATE {
     __libc_alloca_cutoff;
     # Internal libc interface to libpthread
diff --git a/nptl/pthread_sigmask.c b/nptl/pthread_sigmask.c
index c7860e02a5..035104453f 100644
--- a/nptl/pthread_sigmask.c
+++ b/nptl/pthread_sigmask.c
@@ -16,14 +16,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
 #include <signal.h>
 #include <pthreadP.h>
 #include <sysdep.h>
-
+#include <shlib-compat.h>
 
 int
-pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask)
+__pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask)
 {
   sigset_t local_newmask;
 
@@ -47,3 +46,9 @@ pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask)
 	  ? INTERNAL_SYSCALL_ERRNO (result)
 	  : 0);
 }
+
+versioned_symbol (libc, __pthread_sigmask, pthread_sigmask, GLIBC_2_32);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
+strong_alias (__pthread_sigmask, __pthread_sigmask_2);
+compat_symbol (libc, __pthread_sigmask_2, pthread_sigmask, GLIBC_2_0);
+#endif