public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/6] nptl: Move Linux pthread_kill to nptl
@ 2020-12-04 18:09 Adhemerval Zanella
  2020-12-04 18:09 ` [PATCH 2/6] nptl: Move pthread_kill to libc Adhemerval Zanella
                   ` (5 more replies)
  0 siblings, 6 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

The nptl already expects a Linux syscall internak.  Also
__is_internal_signal and the DEBUGGING_P check is removed.

Checked on x86_64-linux-gnu.
---
 nptl/pthread_kill.c                    | 28 ++++++++-----
 sysdeps/unix/sysv/linux/pthread_kill.c | 57 --------------------------
 2 files changed, 18 insertions(+), 67 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/pthread_kill.c

diff --git a/nptl/pthread_kill.c b/nptl/pthread_kill.c
index 73144a07ec..7ef68d1572 100644
--- a/nptl/pthread_kill.c
+++ b/nptl/pthread_kill.c
@@ -1,4 +1,4 @@
-/* Send a signal to a specific pthread.  Stub version.
+/* Send a signal to a specific pthread.  Linux version.
    Copyright (C) 2014-2020 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,23 +16,31 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <signal.h>
+#include <unistd.h>
 #include <pthreadP.h>
 
-
 int
 __pthread_kill (pthread_t threadid, int signo)
 {
+  /* Disallow sending the signal we use for cancellation, timers,
+     for the setxid implementation.  */
+  if (__is_internal_signal (signo))
+    return EINVAL;
+
+  /* Force load of pd->tid into local variable or register.  Otherwise
+     if a thread exits between ESRCH test and tgkill, we might return
+     EINVAL, because pd->tid would be cleared by the kernel.  */
   struct pthread *pd = (struct pthread *) threadid;
-
-  /* Make sure the descriptor is valid.  */
-  if (DEBUGGING_P && INVALID_TD_P (pd))
+  pid_t tid = atomic_forced_read (pd->tid);
+  if (__glibc_unlikely (tid <= 0))
     /* Not a valid thread handle.  */
     return ESRCH;
 
-  return ENOSYS;
+  /* We have a special syscall to do the work.  */
+  pid_t pid = __getpid ();
+
+  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
+  return (INTERNAL_SYSCALL_ERROR_P (val)
+	  ? INTERNAL_SYSCALL_ERRNO (val) : 0);
 }
 strong_alias (__pthread_kill, pthread_kill)
-
-stub_warning (pthread_kill)
diff --git a/sysdeps/unix/sysv/linux/pthread_kill.c b/sysdeps/unix/sysv/linux/pthread_kill.c
deleted file mode 100644
index 4dfe08ffcd..0000000000
--- a/sysdeps/unix/sysv/linux/pthread_kill.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2002-2020 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
-   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 <errno.h>
-#include <signal.h>
-#include <pthreadP.h>
-#include <tls.h>
-#include <sysdep.h>
-#include <unistd.h>
-
-
-int
-__pthread_kill (pthread_t threadid, int signo)
-{
-  struct pthread *pd = (struct pthread *) threadid;
-
-  /* Make sure the descriptor is valid.  */
-  if (DEBUGGING_P && INVALID_TD_P (pd))
-    /* Not a valid thread handle.  */
-    return ESRCH;
-
-  /* Force load of pd->tid into local variable or register.  Otherwise
-     if a thread exits between ESRCH test and tgkill, we might return
-     EINVAL, because pd->tid would be cleared by the kernel.  */
-  pid_t tid = atomic_forced_read (pd->tid);
-  if (__glibc_unlikely (tid <= 0))
-    /* Not a valid thread handle.  */
-    return ESRCH;
-
-  /* Disallow sending the signal we use for cancellation, timers,
-     for the setxid implementation.  */
-  if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID)
-    return EINVAL;
-
-  /* We have a special syscall to do the work.  */
-  pid_t pid = __getpid ();
-
-  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
-  return (INTERNAL_SYSCALL_ERROR_P (val)
-	  ? INTERNAL_SYSCALL_ERRNO (val) : 0);
-}
-strong_alias (__pthread_kill, pthread_kill)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 2/6] nptl: Move pthread_kill to libc
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
@ 2020-12-04 18:09 ` Adhemerval Zanella
  2020-12-04 18:17   ` Florian Weimer
  2020-12-04 18:09 ` [PATCH 3/6] nptl: Make pthread_kill async-signal-safe Adhemerval Zanella
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

Checked on x86_64-linux-gnu.
---
 nptl/Makefile                                               | 3 ++-
 nptl/Versions                                               | 1 +
 nptl/libpthread-compat.c                                    | 6 ++++++
 sysdeps/unix/sysv/linux/aarch64/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/aarch64/libpthread.abilist          | 1 -
 sysdeps/unix/sysv/linux/alpha/libc.abilist                  | 1 +
 sysdeps/unix/sysv/linux/alpha/libpthread.abilist            | 1 -
 sysdeps/unix/sysv/linux/arc/libc.abilist                    | 1 +
 sysdeps/unix/sysv/linux/arc/libpthread.abilist              | 1 -
 sysdeps/unix/sysv/linux/arm/be/libc.abilist                 | 1 +
 sysdeps/unix/sysv/linux/arm/be/libpthread.abilist           | 1 -
 sysdeps/unix/sysv/linux/arm/le/libc.abilist                 | 1 +
 sysdeps/unix/sysv/linux/arm/le/libpthread.abilist           | 1 -
 sysdeps/unix/sysv/linux/csky/libc.abilist                   | 1 +
 sysdeps/unix/sysv/linux/csky/libpthread.abilist             | 1 -
 sysdeps/unix/sysv/linux/hppa/libc.abilist                   | 1 +
 sysdeps/unix/sysv/linux/hppa/libpthread.abilist             | 1 -
 sysdeps/unix/sysv/linux/i386/libc.abilist                   | 1 +
 sysdeps/unix/sysv/linux/i386/libpthread.abilist             | 1 -
 sysdeps/unix/sysv/linux/ia64/libc.abilist                   | 1 +
 sysdeps/unix/sysv/linux/ia64/libpthread.abilist             | 1 -
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist            | 1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist      | 1 -
 sysdeps/unix/sysv/linux/microblaze/be/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/microblaze/le/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist      | 1 -
 sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist      | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist      | 1 -
 sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist                  | 1 +
 sysdeps/unix/sysv/linux/nios2/libpthread.abilist            | 1 -
 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist  | 1 +
 .../unix/sysv/linux/powerpc/powerpc32/libpthread.abilist    | 1 -
 .../unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist    | 1 +
 sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist   | 1 +
 .../unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist | 1 -
 sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist   | 1 +
 .../unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist | 1 -
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist             | 1 +
 sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist             | 1 +
 sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist           | 1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist     | 1 -
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist           | 1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist     | 1 -
 sysdeps/unix/sysv/linux/sh/be/libc.abilist                  | 1 +
 sysdeps/unix/sysv/linux/sh/be/libpthread.abilist            | 1 -
 sysdeps/unix/sysv/linux/sh/le/libc.abilist                  | 1 +
 sysdeps/unix/sysv/linux/sh/le/libpthread.abilist            | 1 -
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist              | 1 +
 sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist        | 1 -
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist             | 1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist       | 1 -
 64 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index ddd83dfbdd..3f6e77f63f 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -65,6 +65,7 @@ routines = \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
+  pthread_kill \
   pthread_self \
   pthread_setschedparam \
   pthread_sigmask \
@@ -131,7 +132,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_kill pthread_sigqueue \
+		      pthread_sigqueue \
 		      pthread_cancel pthread_testcancel \
 		      pthread_setcancelstate pthread_setcanceltype \
 		      pthread_once \
diff --git a/nptl/Versions b/nptl/Versions
index 02650fe91c..7cfe39a91c 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -12,6 +12,7 @@ libc {
     pthread_cond_timedwait;
     pthread_equal; pthread_exit;
     pthread_getschedparam; pthread_setschedparam;
+    pthread_kill;
     pthread_mutex_destroy; pthread_mutex_init;
     pthread_mutex_lock; pthread_mutex_unlock;
     pthread_self;
diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
index ec02b5dccf..a0856c5586 100644
--- a/nptl/libpthread-compat.c
+++ b/nptl/libpthread-compat.c
@@ -36,6 +36,12 @@ __libpthread_version_placeholder (void)
    version or later, the placeholder symbol is not needed because
    there are plenty of other symbols which populate those later
    versions.  */
+
+#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1_2))
+compat_symbol_unique (libpthread,
+		      __libpthread_version_placeholder, GLIBC_2_0);
+#endif
+
 #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
 compat_symbol_unique (libpthread,
 		      __libpthread_version_placeholder, GLIBC_2_1_2);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 4cc1c6a591..9bd30091b2 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -1442,6 +1442,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index c6b4ea2dc1..18f2b38dca 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -102,7 +102,6 @@ GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_key_delete F
-GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 26ad9845e4..8d0d149380 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -883,6 +883,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 390b6384d0..a05379d8d7 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index bb9dfd4daf..59e73552a9 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -1369,6 +1369,7 @@ GLIBC_2.32 pthread_exit F
 GLIBC_2.32 pthread_getaffinity_np F
 GLIBC_2.32 pthread_getattr_np F
 GLIBC_2.32 pthread_getschedparam F
+GLIBC_2.32 pthread_kill F
 GLIBC_2.32 pthread_mutex_destroy F
 GLIBC_2.32 pthread_mutex_init F
 GLIBC_2.32 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 1adcbecc2e..9a5a035490 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -113,7 +113,6 @@ GLIBC_2.32 pthread_getspecific F
 GLIBC_2.32 pthread_join F
 GLIBC_2.32 pthread_key_create F
 GLIBC_2.32 pthread_key_delete F
-GLIBC_2.32 pthread_kill F
 GLIBC_2.32 pthread_kill_other_threads_np F
 GLIBC_2.32 pthread_mutex_clocklock F
 GLIBC_2.32 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 3b0a47e967..fb76fc2a9e 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -1534,6 +1534,7 @@ GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getaffinity_np F
 GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
+GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index b6c26c7a50..fc7343bae9 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
-GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 9ab3924888..a8199f5de9 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -1531,6 +1531,7 @@ GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getaffinity_np F
 GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
+GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index b6c26c7a50..fc7343bae9 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
-GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 14a84dac8f..7f038c4e6f 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -1430,6 +1430,7 @@ GLIBC_2.29 pthread_exit F
 GLIBC_2.29 pthread_getaffinity_np F
 GLIBC_2.29 pthread_getattr_np F
 GLIBC_2.29 pthread_getschedparam F
+GLIBC_2.29 pthread_kill F
 GLIBC_2.29 pthread_mutex_destroy F
 GLIBC_2.29 pthread_mutex_init F
 GLIBC_2.29 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 6ce59276a7..d82933bab8 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -111,7 +111,6 @@ GLIBC_2.29 pthread_getspecific F
 GLIBC_2.29 pthread_join F
 GLIBC_2.29 pthread_key_create F
 GLIBC_2.29 pthread_key_delete F
-GLIBC_2.29 pthread_kill F
 GLIBC_2.29 pthread_kill_other_threads_np F
 GLIBC_2.29 pthread_mutex_consistent F
 GLIBC_2.29 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 5c8502f3d3..4afe849736 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -1266,6 +1266,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index cabc5af858..041f965447 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 4f0d3c1eb5..4d4e4bca71 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -860,6 +860,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 18177307c8..8875b14ad1 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index e3b345b803..1fd9df36d2 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -1287,6 +1287,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 335f486cb5..998d7d2d99 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 25f2d1c08f..38b379a876 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -1514,6 +1514,7 @@ GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getaffinity_np F
 GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
+GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index b6c26c7a50..fc7343bae9 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
-GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index c4891479d3..0704160e7c 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -859,6 +859,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 18177307c8..8875b14ad1 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 143b0163b4..f4ded90314 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -1445,6 +1445,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 60397187b6..6a26159353 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -103,7 +103,6 @@ GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_key_delete F
-GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 13d374a031..fac0b0f773 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -1445,6 +1445,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 60397187b6..6a26159353 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -103,7 +103,6 @@ GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_key_delete F
-GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index b2295f1937..18492fce28 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -856,6 +856,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index b35d7f19ca..42112cee49 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 4c786070d0..1d1e9e0d90 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -856,6 +856,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index b35d7f19ca..42112cee49 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index aa9c6a4dca..364f58a555 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -856,6 +856,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 5939588ad5..69c1dfc372 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -854,6 +854,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 92556c4237..dc26597034 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -1487,6 +1487,7 @@ GLIBC_2.21 pthread_exit F
 GLIBC_2.21 pthread_getaffinity_np F
 GLIBC_2.21 pthread_getattr_np F
 GLIBC_2.21 pthread_getschedparam F
+GLIBC_2.21 pthread_kill F
 GLIBC_2.21 pthread_mutex_destroy F
 GLIBC_2.21 pthread_mutex_init F
 GLIBC_2.21 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 924ad6e451..b1061cdbdd 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -103,7 +103,6 @@ GLIBC_2.21 pthread_getspecific F
 GLIBC_2.21 pthread_join F
 GLIBC_2.21 pthread_key_create F
 GLIBC_2.21 pthread_key_delete F
-GLIBC_2.21 pthread_kill F
 GLIBC_2.21 pthread_kill_other_threads_np F
 GLIBC_2.21 pthread_mutex_consistent F
 GLIBC_2.21 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 26c93dff05..ca1ccde821 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -867,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 13b41dafb6..abb726e354 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index f04b167788..b3334d5e07 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -867,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index c2ca00709e..64c4634b3b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -1373,6 +1373,7 @@ GLIBC_2.3 pthread_equal F
 GLIBC_2.3 pthread_exit F
 GLIBC_2.3 pthread_getattr_np F
 GLIBC_2.3 pthread_getschedparam F
+GLIBC_2.3 pthread_kill F
 GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
 GLIBC_2.3 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index e9477a3584..7edba91681 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -120,7 +120,6 @@ GLIBC_2.3 pthread_getspecific F
 GLIBC_2.3 pthread_join F
 GLIBC_2.3 pthread_key_create F
 GLIBC_2.3 pthread_key_delete F
-GLIBC_2.3 pthread_kill F
 GLIBC_2.3 pthread_kill_other_threads_np F
 GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 0ea50dc851..588436eadf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -1531,6 +1531,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index c6b4ea2dc1..18f2b38dca 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -102,7 +102,6 @@ GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_key_delete F
-GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 0263e284d4..5d471b76dd 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -1371,6 +1371,7 @@ GLIBC_2.33 pthread_exit F
 GLIBC_2.33 pthread_getaffinity_np F
 GLIBC_2.33 pthread_getattr_np F
 GLIBC_2.33 pthread_getschedparam F
+GLIBC_2.33 pthread_kill F
 GLIBC_2.33 pthread_mutex_destroy F
 GLIBC_2.33 pthread_mutex_init F
 GLIBC_2.33 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 61b3c4ff7a..0023fa95df 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -113,7 +113,6 @@ GLIBC_2.33 pthread_getspecific F
 GLIBC_2.33 pthread_join F
 GLIBC_2.33 pthread_key_create F
 GLIBC_2.33 pthread_key_delete F
-GLIBC_2.33 pthread_kill F
 GLIBC_2.33 pthread_kill_other_threads_np F
 GLIBC_2.33 pthread_mutex_clocklock F
 GLIBC_2.33 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 1626c5351f..a851e6e26a 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -1433,6 +1433,7 @@ GLIBC_2.27 pthread_exit F
 GLIBC_2.27 pthread_getaffinity_np F
 GLIBC_2.27 pthread_getattr_np F
 GLIBC_2.27 pthread_getschedparam F
+GLIBC_2.27 pthread_kill F
 GLIBC_2.27 pthread_mutex_destroy F
 GLIBC_2.27 pthread_mutex_init F
 GLIBC_2.27 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 894c474fcb..faeb8dd7b6 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.27 pthread_getspecific F
 GLIBC_2.27 pthread_join F
 GLIBC_2.27 pthread_key_create F
 GLIBC_2.27 pthread_key_delete F
-GLIBC_2.27 pthread_kill F
 GLIBC_2.27 pthread_kill_other_threads_np F
 GLIBC_2.27 pthread_mutex_consistent F
 GLIBC_2.27 pthread_mutex_consistent_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index a66426eb4d..8ca57937b4 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -858,6 +858,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 0a60f1cca2..41f7d4371b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index ab351873ae..45eb1b4878 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -1284,6 +1284,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 0e99688824..dca95c3126 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -102,7 +102,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 22ceaa3d87..7cb0df1c3b 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -1270,6 +1270,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index cabc5af858..041f965447 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index d36f228192..b8acbd5839 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -1270,6 +1270,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index cabc5af858..041f965447 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 59b4313280..b8583563b5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -861,6 +861,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 390b6384d0..a05379d8d7 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
-GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 266dcdfa08..2f27067543 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -1313,6 +1313,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 335f486cb5..998d7d2d99 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
-GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 4fff61818b..4541c8b54e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -1281,6 +1281,7 @@ GLIBC_2.2.5 pthread_equal F
 GLIBC_2.2.5 pthread_exit F
 GLIBC_2.2.5 pthread_getattr_np F
 GLIBC_2.2.5 pthread_getschedparam F
+GLIBC_2.2.5 pthread_kill F
 GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
 GLIBC_2.2.5 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 971269d2ef..2a74e40f01 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -100,7 +100,6 @@ GLIBC_2.2.5 pthread_getspecific F
 GLIBC_2.2.5 pthread_join F
 GLIBC_2.2.5 pthread_key_create F
 GLIBC_2.2.5 pthread_key_delete F
-GLIBC_2.2.5 pthread_kill F
 GLIBC_2.2.5 pthread_kill_other_threads_np F
 GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 102ed47a9c..d14923e737 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -1450,6 +1450,7 @@ GLIBC_2.16 pthread_exit F
 GLIBC_2.16 pthread_getaffinity_np F
 GLIBC_2.16 pthread_getattr_np F
 GLIBC_2.16 pthread_getschedparam F
+GLIBC_2.16 pthread_kill F
 GLIBC_2.16 pthread_mutex_destroy F
 GLIBC_2.16 pthread_mutex_init F
 GLIBC_2.16 pthread_mutex_lock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index b9bf4324a9..81f294c3e0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -102,7 +102,6 @@ GLIBC_2.16 pthread_getspecific F
 GLIBC_2.16 pthread_join F
 GLIBC_2.16 pthread_key_create F
 GLIBC_2.16 pthread_key_delete F
-GLIBC_2.16 pthread_kill F
 GLIBC_2.16 pthread_kill_other_threads_np F
 GLIBC_2.16 pthread_mutex_consistent F
 GLIBC_2.16 pthread_mutex_consistent_np F
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 3/6] nptl: Make pthread_kill async-signal-safe
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
  2020-12-04 18:09 ` [PATCH 2/6] nptl: Move pthread_kill to libc Adhemerval Zanella
@ 2020-12-04 18:09 ` Adhemerval Zanella
  2020-12-04 18:20   ` Florian Weimer
  2020-12-04 18:09 ` [PATCH 4/6] nptl: Initialize tid earlier Adhemerval Zanella
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

Simiar to raise (BZ #15368), pthread_kill is also defined as
async-signal-safe (POSIX.1-2008 TC1).  However, similar to raise
it has the same issues relating to signal handling.

Different than raise, all the signal are blocked so it would be
possible to implement pthread_cancel (which also should be
async-cancel safe).

Checked on x86_64-linux-gnu.
---
 nptl/pthread_kill.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/nptl/pthread_kill.c b/nptl/pthread_kill.c
index 7ef68d1572..c547c5fe58 100644
--- a/nptl/pthread_kill.c
+++ b/nptl/pthread_kill.c
@@ -36,11 +36,17 @@ __pthread_kill (pthread_t threadid, int signo)
     /* Not a valid thread handle.  */
     return ESRCH;
 
+  sigset_t set;
+  __libc_signal_block_all (&set);
+
   /* We have a special syscall to do the work.  */
   pid_t pid = __getpid ();
 
   int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
-  return (INTERNAL_SYSCALL_ERROR_P (val)
-	  ? INTERNAL_SYSCALL_ERRNO (val) : 0);
+  val = (INTERNAL_SYSCALL_ERROR_P (val) ? INTERNAL_SYSCALL_ERRNO (val) : 0);
+
+  __libc_signal_restore_set (&set);
+
+  return val;
 }
 strong_alias (__pthread_kill, pthread_kill)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 4/6] nptl: Initialize tid earlier
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
  2020-12-04 18:09 ` [PATCH 2/6] nptl: Move pthread_kill to libc Adhemerval Zanella
  2020-12-04 18:09 ` [PATCH 3/6] nptl: Make pthread_kill async-signal-safe Adhemerval Zanella
@ 2020-12-04 18:09 ` Adhemerval Zanella
  2020-12-04 18:22   ` Florian Weimer
  2020-12-04 18:09 ` [PATCH 5/6] nptl: Implement raise with pthread_kill Adhemerval Zanella
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

It sets the PD tid value as once pthread is initialized, the idea is
to allow raise being implemented by pthread_kill and avoid a gettid
call.

Checked on x86_64-linux-gnu.
---
 csu/libc-tls.c                                   |  3 +++
 elf/rtld.c                                       |  3 +++
 nptl/nptl-init.c                                 |  5 ++---
 {nptl => sysdeps/htl}/pthread-pids.h             | 13 +++----------
 sysdeps/{unix/sysv/linux => nptl}/pthread-pids.h | 11 +++++++----
 5 files changed, 18 insertions(+), 17 deletions(-)
 rename {nptl => sysdeps/htl}/pthread-pids.h (61%)
 rename sysdeps/{unix/sysv/linux => nptl}/pthread-pids.h (70%)

diff --git a/csu/libc-tls.c b/csu/libc-tls.c
index c3589f0a7d..54fd085420 100644
--- a/csu/libc-tls.c
+++ b/csu/libc-tls.c
@@ -25,6 +25,7 @@
 #include <sys/param.h>
 #include <array_length.h>
 #include <list.h>
+#include <pthread-pids.h>
 
 #ifdef SHARED
  #error makefile bug, this file is for static only
@@ -219,4 +220,6 @@ __libc_setup_tls (void)
 #endif
 
   init_static_tls (memsz, MAX (TLS_TCB_ALIGN, max_align));
+
+  pthread_initialize_pids (THREAD_SELF);
 }
diff --git a/elf/rtld.c b/elf/rtld.c
index c4ffc8d4b7..d01ba55a57 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -49,6 +49,7 @@
 #include <libc-early-init.h>
 #include <dl-main.h>
 #include <list.h>
+#include <pthread-pids.h>
 
 #include <assert.h>
 
@@ -805,6 +806,8 @@ cannot allocate TLS data structures for initial thread\n");
 #endif
   tls_init_tp_called = true;
 
+  pthread_initialize_pids (THREAD_SELF);
+
   return tcbp;
 }
 
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 53b817715d..489023dee6 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -36,7 +36,6 @@
 #include <futex-internal.h>
 #include <kernel-features.h>
 #include <libc-pointer-arith.h>
-#include <pthread-pids.h>
 #include <pthread_mutex_conf.h>
 
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
@@ -225,9 +224,9 @@ static bool __nptl_initial_report_events __attribute_used__;
 void
 __pthread_initialize_minimal_internal (void)
 {
-  /* Minimal initialization of the thread descriptor.  */
+  /* Minimal initialization of the thread descriptor.
+     pd->tid was set during TLS initialization.  */
   struct pthread *pd = THREAD_SELF;
-  __pthread_initialize_pids (pd);
   THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
   THREAD_SETMEM (pd, user_stack, true);
 
diff --git a/nptl/pthread-pids.h b/sysdeps/htl/pthread-pids.h
similarity index 61%
rename from nptl/pthread-pids.h
rename to sysdeps/htl/pthread-pids.h
index b2a8349d0e..54c9cbca2e 100644
--- a/nptl/pthread-pids.h
+++ b/sysdeps/htl/pthread-pids.h
@@ -1,5 +1,5 @@
-/* Initialize pid and tid fields of struct pthread.  Stub version.
-   Copyright (C) 2015-2020 Free Software Foundation, Inc.
+/* Initialize pid and tid fields of struct pthread.  Hurd version.
+   Copyright (C) 2020 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
@@ -16,14 +16,7 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <pthreadP.h>
-
-/* Initialize PD->pid and PD->tid for the initial thread.  If there is
-   setup required to arrange that __exit_thread causes PD->tid to be
-   cleared and futex-woken, then this function should do that as well.  */
 static inline void
-__pthread_initialize_pids (struct pthread *pd)
+pthread_initialize_pids (tcbhead_t *pd)
 {
-#error "sysdeps pthread-pids.h file required"
-  pd->pid = pd->tid = -1;
 }
diff --git a/sysdeps/unix/sysv/linux/pthread-pids.h b/sysdeps/nptl/pthread-pids.h
similarity index 70%
rename from sysdeps/unix/sysv/linux/pthread-pids.h
rename to sysdeps/nptl/pthread-pids.h
index 0b8ca4ec06..32fb2d937d 100644
--- a/sysdeps/unix/sysv/linux/pthread-pids.h
+++ b/sysdeps/nptl/pthread-pids.h
@@ -16,14 +16,17 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <pthreadP.h>
 #include <sysdep.h>
 
-/* Initialize PD->pid and PD->tid for the initial thread.  If there is
-   setup required to arrange that __exit_thread causes PD->tid to be
+/* Initialize only as much of the initial thread's descriptor as is necessary
+   even when libpthread is not loaded.  More will be done by
+   __pthread_initialize_minimal if libpthread is loaded.  This needs to happen
+   before anything that could possibly call raise, but cannot happen before
+   TLS is initialized.
+   If there is setup required to that __exit_thread causes PD->tid to be
    cleared and futex-woken, then this function should do that as well.  */
 static inline void
-__pthread_initialize_pids (struct pthread *pd)
+pthread_initialize_pids (struct pthread *pd)
 {
   pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, &pd->tid);
 }
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 5/6] nptl: Implement raise with pthread_kill
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
                   ` (2 preceding siblings ...)
  2020-12-04 18:09 ` [PATCH 4/6] nptl: Initialize tid earlier Adhemerval Zanella
@ 2020-12-04 18:09 ` Adhemerval Zanella
  2020-12-04 18:32   ` Adhemerval Zanella
  2020-12-04 18:09 ` [PATCH 6/6] nptl: Remove pthread raise implementation Adhemerval Zanella
  2020-12-04 18:12 ` [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Florian Weimer
  5 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

The internal __pthread_kill_internal symbol has an extra argument
that specified if all signal or just application ones should be
blocked (raise can not be used with SIGCANCEL or SIGTIMER, so there
it no need to block them).

Checked on x86_64-linux-gnu.
---
 nptl/Makefile                      |  1 +
 nptl/Versions                      |  1 +
 nptl/pt-raise.c                    | 11 +-----
 nptl/pthreadP.h                    |  3 ++
 nptl/pthread_kill.c                | 28 +--------------
 nptl/pthread_kill_internal.c       | 56 ++++++++++++++++++++++++++++++
 sysdeps/posix/raise.c              | 10 ++++--
 sysdeps/unix/sysv/linux/pt-raise.c | 20 -----------
 sysdeps/unix/sysv/linux/raise.c    | 52 ---------------------------
 9 files changed, 71 insertions(+), 111 deletions(-)
 create mode 100644 nptl/pthread_kill_internal.c
 delete mode 100644 sysdeps/unix/sysv/linux/pt-raise.c
 delete mode 100644 sysdeps/unix/sysv/linux/raise.c

diff --git a/nptl/Makefile b/nptl/Makefile
index 3f6e77f63f..424b96656a 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -66,6 +66,7 @@ routines = \
   pthread_getattr_np \
   pthread_getschedparam \
   pthread_kill \
+  pthread_kill_internal \
   pthread_self \
   pthread_setschedparam \
   pthread_sigmask \
diff --git a/nptl/Versions b/nptl/Versions
index 7cfe39a91c..39578ef4e6 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -66,6 +66,7 @@ libc {
     __pthread_attr_copy;
     __pthread_getattr_default_np;
     __pthread_attr_setsigmask_internal;
+    __pthread_kill_internal;
   }
 }
 
diff --git a/nptl/pt-raise.c b/nptl/pt-raise.c
index 069b33a86e..286a9f686a 100644
--- a/nptl/pt-raise.c
+++ b/nptl/pt-raise.c
@@ -17,13 +17,4 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <pthread.h>
-#include <signal.h>
-
-
-int
-raise (int sig)
-{
-  /* This is what POSIX says must happen.  */
-  return pthread_kill (pthread_self (), sig);
-}
+#include "raise.c"
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index a7510f9f63..2f34ac1ab9 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -526,6 +526,9 @@ extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
 extern int __pthread_detach (pthread_t th);
 extern int __pthread_cancel (pthread_t th);
 extern int __pthread_kill (pthread_t threadid, int signo);
+extern int __pthread_kill_internal (pthread_t threadif, int signo,
+				    bool block_all);
+libc_hidden_proto (__pthread_kill_internal)
 extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));
 extern int __pthread_join (pthread_t threadid, void **thread_return);
 extern int __pthread_setcanceltype (int type, int *oldtype);
diff --git a/nptl/pthread_kill.c b/nptl/pthread_kill.c
index c547c5fe58..d114cbfca6 100644
--- a/nptl/pthread_kill.c
+++ b/nptl/pthread_kill.c
@@ -16,37 +16,11 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <unistd.h>
 #include <pthreadP.h>
 
 int
 __pthread_kill (pthread_t threadid, int signo)
 {
-  /* Disallow sending the signal we use for cancellation, timers,
-     for the setxid implementation.  */
-  if (__is_internal_signal (signo))
-    return EINVAL;
-
-  /* Force load of pd->tid into local variable or register.  Otherwise
-     if a thread exits between ESRCH test and tgkill, we might return
-     EINVAL, because pd->tid would be cleared by the kernel.  */
-  struct pthread *pd = (struct pthread *) threadid;
-  pid_t tid = atomic_forced_read (pd->tid);
-  if (__glibc_unlikely (tid <= 0))
-    /* Not a valid thread handle.  */
-    return ESRCH;
-
-  sigset_t set;
-  __libc_signal_block_all (&set);
-
-  /* We have a special syscall to do the work.  */
-  pid_t pid = __getpid ();
-
-  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
-  val = (INTERNAL_SYSCALL_ERROR_P (val) ? INTERNAL_SYSCALL_ERRNO (val) : 0);
-
-  __libc_signal_restore_set (&set);
-
-  return val;
+  return __pthread_kill_internal (threadid, signo, true);
 }
 strong_alias (__pthread_kill, pthread_kill)
diff --git a/nptl/pthread_kill_internal.c b/nptl/pthread_kill_internal.c
new file mode 100644
index 0000000000..46a47650a1
--- /dev/null
+++ b/nptl/pthread_kill_internal.c
@@ -0,0 +1,56 @@
+/* Common implementation for raise/pthread_kill.  Linux version.
+   Copyright (C) 2020 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 <unistd.h>
+#include <pthreadP.h>
+
+int
+__pthread_kill_internal (pthread_t threadid, int signo, bool block_all)
+{
+  /* Disallow sending the signal we use for cancellation, timers,
+     for the setxid implementation.  */
+  if (__is_internal_signal (signo))
+    return EINVAL;
+
+  /* Force load of pd->tid into local variable or register.  Otherwise
+     if a thread exits between ESRCH test and tgkill, we might return
+     EINVAL, because pd->tid would be cleared by the kernel.  */
+  struct pthread *pd = (struct pthread *) threadid;
+  pid_t tid = atomic_forced_read (pd->tid);
+  if (__glibc_unlikely (tid <= 0))
+    /* Not a valid thread handle.  */
+    return ESRCH;
+
+  sigset_t set;
+  if (block_all)
+    __libc_signal_block_all (&set);
+  else
+    __libc_signal_block_app (&set);
+
+  /* We have a special syscall to do the work.  */
+  pid_t pid = __getpid ();
+
+  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
+  val = (INTERNAL_SYSCALL_ERROR_P (val) ? INTERNAL_SYSCALL_ERRNO (val) : 0);
+
+  __libc_signal_restore_set (&set);
+
+  return val;
+}
+libc_hidden_def (__pthread_kill_internal)
+
diff --git a/sysdeps/posix/raise.c b/sysdeps/posix/raise.c
index 32cb108f0b..8a3ea95b3e 100644
--- a/sysdeps/posix/raise.c
+++ b/sysdeps/posix/raise.c
@@ -16,13 +16,19 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <signal.h>
-#include <unistd.h>
+#include <nptl/pthreadP.h>
 
 /* Raise the signal SIG.  */
 int
 raise (int sig)
 {
-  return __kill (__getpid (), sig);
+  int r = __pthread_kill_internal ((pthread_t) THREAD_SELF, sig, false);
+  if (r != 0)
+    {
+      __set_errno (r);
+      r = -1;
+    }
+  return r;
 }
 libc_hidden_def (raise)
 weak_alias (raise, gsignal)
diff --git a/sysdeps/unix/sysv/linux/pt-raise.c b/sysdeps/unix/sysv/linux/pt-raise.c
deleted file mode 100644
index 0c8246b0cc..0000000000
--- a/sysdeps/unix/sysv/linux/pt-raise.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ISO C raise function for libpthread.
-   Copyright (C) 2002-2020 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
-   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 <sysdeps/unix/sysv/linux/raise.c>
diff --git a/sysdeps/unix/sysv/linux/raise.c b/sysdeps/unix/sysv/linux/raise.c
deleted file mode 100644
index 3b90ae1d55..0000000000
--- a/sysdeps/unix/sysv/linux/raise.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (C) 2002-2020 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
-   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 <signal.h>
-#include <sysdep.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <internal-signals.h>
-
-int
-raise (int sig)
-{
-  /* rt_sigprocmask may fail if:
-
-     1. sigsetsize != sizeof (sigset_t) (EINVAL)
-     2. a failure in copy from/to user space (EFAULT)
-     3. an invalid 'how' operation (EINVAL)
-
-     The first case is already handle in glibc syscall call by using the arch
-     defined _NSIG.  Second case is handled by using a stack allocated mask.
-     The last one should be handled by the block/unblock functions.  */
-
-  sigset_t set;
-  __libc_signal_block_app (&set);
-
-  pid_t pid = INTERNAL_SYSCALL_CALL (getpid);
-  pid_t tid = INTERNAL_SYSCALL_CALL (gettid);
-
-  int ret = INLINE_SYSCALL_CALL (tgkill, pid, tid, sig);
-
-  __libc_signal_restore_set (&set);
-
-  return ret;
-}
-libc_hidden_def (raise)
-weak_alias (raise, gsignal)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 6/6] nptl: Remove pthread raise implementation
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
                   ` (3 preceding siblings ...)
  2020-12-04 18:09 ` [PATCH 5/6] nptl: Implement raise with pthread_kill Adhemerval Zanella
@ 2020-12-04 18:09 ` Adhemerval Zanella
  2020-12-04 18:23   ` Florian Weimer
  2020-12-04 18:12 ` [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Florian Weimer
  5 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:09 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer

With raise being implemented on basis of pthread_kill, there is
no differente between libpthread and libc.

Checked on x86_64-linux-gnu.
---
 nptl/Makefile                                 |  2 +-
 nptl/pt-raise.c                               | 20 -------------------
 nptl/pthread_kill_internal.c                  |  1 -
 .../sysv/linux/aarch64/libpthread.abilist     |  1 -
 .../unix/sysv/linux/alpha/libpthread.abilist  |  1 -
 .../unix/sysv/linux/arc/libpthread.abilist    |  1 -
 .../unix/sysv/linux/arm/be/libpthread.abilist |  1 -
 .../unix/sysv/linux/arm/le/libpthread.abilist |  1 -
 .../unix/sysv/linux/csky/libpthread.abilist   |  1 -
 .../unix/sysv/linux/hppa/libpthread.abilist   |  1 -
 .../unix/sysv/linux/i386/libpthread.abilist   |  1 -
 .../unix/sysv/linux/ia64/libpthread.abilist   |  1 -
 .../linux/m68k/coldfire/libpthread.abilist    |  1 -
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  1 -
 .../linux/microblaze/be/libpthread.abilist    |  1 -
 .../linux/microblaze/le/libpthread.abilist    |  1 -
 .../sysv/linux/mips/mips32/libpthread.abilist |  1 -
 .../sysv/linux/mips/mips64/libpthread.abilist |  1 -
 .../unix/sysv/linux/nios2/libpthread.abilist  |  1 -
 .../powerpc/powerpc32/libpthread.abilist      |  1 -
 .../powerpc/powerpc64/be/libpthread.abilist   |  1 -
 .../powerpc/powerpc64/le/libpthread.abilist   |  1 -
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  1 -
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  1 -
 .../linux/s390/s390-32/libpthread.abilist     |  1 -
 .../linux/s390/s390-64/libpthread.abilist     |  1 -
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  1 -
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  1 -
 .../linux/sparc/sparc32/libpthread.abilist    |  1 -
 .../linux/sparc/sparc64/libpthread.abilist    |  1 -
 .../sysv/linux/x86_64/64/libpthread.abilist   |  1 -
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  1 -
 32 files changed, 1 insertion(+), 51 deletions(-)
 delete mode 100644 nptl/pt-raise.c

diff --git a/nptl/Makefile b/nptl/Makefile
index 424b96656a..c29dcd2b52 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -151,7 +151,7 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
 		      lowlevellock \
 		      pt-fork pt-fcntl \
 		      $(pthread-compat-wrappers) \
-		      pt-raise pt-system \
+		      pt-system \
 		      flockfile ftrylockfile funlockfile \
 		      sigaction \
 		      herrno res pt-allocrtsig \
diff --git a/nptl/pt-raise.c b/nptl/pt-raise.c
deleted file mode 100644
index 286a9f686a..0000000000
--- a/nptl/pt-raise.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ISO C raise function for libpthread.
-   Copyright (C) 2002-2020 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
-   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 "raise.c"
diff --git a/nptl/pthread_kill_internal.c b/nptl/pthread_kill_internal.c
index 46a47650a1..a81fe2db86 100644
--- a/nptl/pthread_kill_internal.c
+++ b/nptl/pthread_kill_internal.c
@@ -53,4 +53,3 @@ __pthread_kill_internal (pthread_t threadid, int signo, bool block_all)
   return val;
 }
 libc_hidden_def (__pthread_kill_internal)
-
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 18f2b38dca..8674d82bad 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.17 pthread_tryjoin_np F
 GLIBC_2.17 pthread_yield F
 GLIBC_2.17 pwrite F
 GLIBC_2.17 pwrite64 F
-GLIBC_2.17 raise F
 GLIBC_2.17 read F
 GLIBC_2.17 recv F
 GLIBC_2.17 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index a05379d8d7..37e2e498ba 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 9a5a035490..85cdb87513 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -179,7 +179,6 @@ GLIBC_2.32 pthread_tryjoin_np F
 GLIBC_2.32 pthread_yield F
 GLIBC_2.32 pwrite F
 GLIBC_2.32 pwrite64 F
-GLIBC_2.32 raise F
 GLIBC_2.32 read F
 GLIBC_2.32 recv F
 GLIBC_2.32 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index fc7343bae9..e29ecce521 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.4 pthread_tryjoin_np F
 GLIBC_2.4 pthread_yield F
 GLIBC_2.4 pwrite F
 GLIBC_2.4 pwrite64 F
-GLIBC_2.4 raise F
 GLIBC_2.4 read F
 GLIBC_2.4 recv F
 GLIBC_2.4 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index fc7343bae9..e29ecce521 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.4 pthread_tryjoin_np F
 GLIBC_2.4 pthread_yield F
 GLIBC_2.4 pwrite F
 GLIBC_2.4 pwrite64 F
-GLIBC_2.4 raise F
 GLIBC_2.4 read F
 GLIBC_2.4 recv F
 GLIBC_2.4 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index d82933bab8..5975349ad0 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -174,7 +174,6 @@ GLIBC_2.29 pthread_tryjoin_np F
 GLIBC_2.29 pthread_yield F
 GLIBC_2.29 pwrite F
 GLIBC_2.29 pwrite64 F
-GLIBC_2.29 raise F
 GLIBC_2.29 read F
 GLIBC_2.29 recv F
 GLIBC_2.29 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 041f965447..f16ca227ab 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 8875b14ad1..c3e8cbf284 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 998d7d2d99..d249bf0bb1 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index fc7343bae9..e29ecce521 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.4 pthread_tryjoin_np F
 GLIBC_2.4 pthread_yield F
 GLIBC_2.4 pwrite F
 GLIBC_2.4 pwrite64 F
-GLIBC_2.4 raise F
 GLIBC_2.4 read F
 GLIBC_2.4 recv F
 GLIBC_2.4 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 8875b14ad1..c3e8cbf284 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 6a26159353..a260eaf1ad 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -166,7 +166,6 @@ GLIBC_2.18 pthread_tryjoin_np F
 GLIBC_2.18 pthread_yield F
 GLIBC_2.18 pwrite F
 GLIBC_2.18 pwrite64 F
-GLIBC_2.18 raise F
 GLIBC_2.18 read F
 GLIBC_2.18 recv F
 GLIBC_2.18 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 6a26159353..a260eaf1ad 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -166,7 +166,6 @@ GLIBC_2.18 pthread_tryjoin_np F
 GLIBC_2.18 pthread_yield F
 GLIBC_2.18 pwrite F
 GLIBC_2.18 pwrite64 F
-GLIBC_2.18 raise F
 GLIBC_2.18 read F
 GLIBC_2.18 recv F
 GLIBC_2.18 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 42112cee49..55b42b617c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 42112cee49..55b42b617c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index b1061cdbdd..5d5c5aab44 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -166,7 +166,6 @@ GLIBC_2.21 pthread_tryjoin_np F
 GLIBC_2.21 pthread_yield F
 GLIBC_2.21 pwrite F
 GLIBC_2.21 pwrite64 F
-GLIBC_2.21 raise F
 GLIBC_2.21 read F
 GLIBC_2.21 recv F
 GLIBC_2.21 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index abb726e354..e9b0739340 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 7edba91681..0faf484806 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.3 pthread_testcancel F
 GLIBC_2.3 pthread_yield F
 GLIBC_2.3 pwrite F
 GLIBC_2.3 pwrite64 F
-GLIBC_2.3 raise F
 GLIBC_2.3 read F
 GLIBC_2.3 recv F
 GLIBC_2.3 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 18f2b38dca..8674d82bad 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.17 pthread_tryjoin_np F
 GLIBC_2.17 pthread_yield F
 GLIBC_2.17 pwrite F
 GLIBC_2.17 pwrite64 F
-GLIBC_2.17 raise F
 GLIBC_2.17 read F
 GLIBC_2.17 recv F
 GLIBC_2.17 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 0023fa95df..62a11c535a 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -179,7 +179,6 @@ GLIBC_2.33 pthread_tryjoin_np F
 GLIBC_2.33 pthread_yield F
 GLIBC_2.33 pwrite F
 GLIBC_2.33 pwrite64 F
-GLIBC_2.33 raise F
 GLIBC_2.33 read F
 GLIBC_2.33 recv F
 GLIBC_2.33 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index faeb8dd7b6..4628abce49 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -163,7 +163,6 @@ GLIBC_2.27 pthread_tryjoin_np F
 GLIBC_2.27 pthread_yield F
 GLIBC_2.27 pwrite F
 GLIBC_2.27 pwrite64 F
-GLIBC_2.27 raise F
 GLIBC_2.27 read F
 GLIBC_2.27 recv F
 GLIBC_2.27 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 41f7d4371b..a02aafedbc 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index dca95c3126..249dd16a6b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -146,7 +146,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 041f965447..f16ca227ab 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 041f965447..f16ca227ab 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index a05379d8d7..37e2e498ba 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -71,7 +71,6 @@ GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
-GLIBC_2.0 raise F
 GLIBC_2.0 read F
 GLIBC_2.0 recv F
 GLIBC_2.0 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 998d7d2d99..d249bf0bb1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2 pthread_testcancel F
 GLIBC_2.2 pthread_yield F
 GLIBC_2.2 pwrite F
 GLIBC_2.2 pwrite64 F
-GLIBC_2.2 raise F
 GLIBC_2.2 read F
 GLIBC_2.2 recv F
 GLIBC_2.2 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 2a74e40f01..71390950d1 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -144,7 +144,6 @@ GLIBC_2.2.5 pthread_testcancel F
 GLIBC_2.2.5 pthread_yield F
 GLIBC_2.2.5 pwrite F
 GLIBC_2.2.5 pwrite64 F
-GLIBC_2.2.5 raise F
 GLIBC_2.2.5 read F
 GLIBC_2.2.5 recv F
 GLIBC_2.2.5 recvfrom F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 81f294c3e0..cd337846d9 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.16 pthread_tryjoin_np F
 GLIBC_2.16 pthread_yield F
 GLIBC_2.16 pwrite F
 GLIBC_2.16 pwrite64 F
-GLIBC_2.16 raise F
 GLIBC_2.16 read F
 GLIBC_2.16 recv F
 GLIBC_2.16 recvfrom F
-- 
2.25.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/6] nptl: Move Linux pthread_kill to nptl
  2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
                   ` (4 preceding siblings ...)
  2020-12-04 18:09 ` [PATCH 6/6] nptl: Remove pthread raise implementation Adhemerval Zanella
@ 2020-12-04 18:12 ` Florian Weimer
  2020-12-04 19:08   ` Adhemerval Zanella
  5 siblings, 1 reply; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:12 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> The nptl already expects a Linux syscall internak.  Also
> __is_internal_signal and the DEBUGGING_P check is removed.

Typo: internak

And __is_internal_signal is still there?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/6] nptl: Move pthread_kill to libc
  2020-12-04 18:09 ` [PATCH 2/6] nptl: Move pthread_kill to libc Adhemerval Zanella
@ 2020-12-04 18:17   ` Florian Weimer
  2020-12-04 18:21     ` Adhemerval Zanella
  0 siblings, 1 reply; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:17 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
> index ec02b5dccf..a0856c5586 100644
> --- a/nptl/libpthread-compat.c
> +++ b/nptl/libpthread-compat.c
> @@ -36,6 +36,12 @@ __libpthread_version_placeholder (void)
>     version or later, the placeholder symbol is not needed because
>     there are plenty of other symbols which populate those later
>     versions.  */
> +
> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1_2))
> +compat_symbol_unique (libpthread,
> +		      __libpthread_version_placeholder, GLIBC_2_0);
> +#endif
> +
>  #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
>  compat_symbol_unique (libpthread,
>  		      __libpthread_version_placeholder, GLIBC_2_1_2);

I think this isn't necessary yet becase there are many GLIBC_2.0
symbols that keep that version alive.

I assume you have used the symbol moving script, so those changes
should be fine.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/6] nptl: Make pthread_kill async-signal-safe
  2020-12-04 18:09 ` [PATCH 3/6] nptl: Make pthread_kill async-signal-safe Adhemerval Zanella
@ 2020-12-04 18:20   ` Florian Weimer
  2020-12-04 18:26     ` Adhemerval Zanella
  2020-12-04 18:38     ` Adhemerval Zanella
  0 siblings, 2 replies; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:20 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> Simiar to raise (BZ #15368), pthread_kill is also defined as
> async-signal-safe (POSIX.1-2008 TC1).  However, similar to raise
> it has the same issues relating to signal handling.
>
> Different than raise, all the signal are blocked so it would be
> possible to implement pthread_cancel (which also should be
> async-cancel safe).

What do you mean by implementing pthread_cancel?

Patch looks okay as far as I can see, but we'll eventually need a
different approach to deal with the TID reuse race.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/6] nptl: Move pthread_kill to libc
  2020-12-04 18:17   ` Florian Weimer
@ 2020-12-04 18:21     ` Adhemerval Zanella
  2020-12-04 18:24       ` Florian Weimer
  0 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:21 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:17, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
>> index ec02b5dccf..a0856c5586 100644
>> --- a/nptl/libpthread-compat.c
>> +++ b/nptl/libpthread-compat.c
>> @@ -36,6 +36,12 @@ __libpthread_version_placeholder (void)
>>     version or later, the placeholder symbol is not needed because
>>     there are plenty of other symbols which populate those later
>>     versions.  */
>> +
>> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1_2))
>> +compat_symbol_unique (libpthread,
>> +		      __libpthread_version_placeholder, GLIBC_2_0);
>> +#endif
>> +
>>  #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
>>  compat_symbol_unique (libpthread,
>>  		      __libpthread_version_placeholder, GLIBC_2_1_2);
> 
> I think this isn't necessary yet becase there are many GLIBC_2.0
> symbols that keep that version alive.
> 
> I assume you have used the symbol moving script, so those changes
> should be fine.
> 

Yes, and I think I have acked on the last review. I think I saw
one issue with riscv32, since it is base abi is the current one,
that I will check out.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 4/6] nptl: Initialize tid earlier
  2020-12-04 18:09 ` [PATCH 4/6] nptl: Initialize tid earlier Adhemerval Zanella
@ 2020-12-04 18:22   ` Florian Weimer
  2020-12-04 18:30     ` Adhemerval Zanella
  0 siblings, 1 reply; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:22 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> It sets the PD tid value as once pthread is initialized, the idea is
> to allow raise being implemented by pthread_kill and avoid a gettid
> call.

I don't think this is possible.  I expect that some applications
assume that raise works after vfork (certainly via abort), and the TID
cache is wrong at that point.  Sorry.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 6/6] nptl: Remove pthread raise implementation
  2020-12-04 18:09 ` [PATCH 6/6] nptl: Remove pthread raise implementation Adhemerval Zanella
@ 2020-12-04 18:23   ` Florian Weimer
  0 siblings, 0 replies; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:23 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha; +Cc: Adhemerval Zanella, Florian Weimer

* Adhemerval Zanella via Libc-alpha:

> diff --git a/nptl/pthread_kill_internal.c b/nptl/pthread_kill_internal.c
> index 46a47650a1..a81fe2db86 100644
> --- a/nptl/pthread_kill_internal.c
> +++ b/nptl/pthread_kill_internal.c
> @@ -53,4 +53,3 @@ __pthread_kill_internal (pthread_t threadid, int signo, bool block_all)
>    return val;
>  }
>  libc_hidden_def (__pthread_kill_internal)
> -

Spurious change.  Rest looks okay.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/6] nptl: Move pthread_kill to libc
  2020-12-04 18:21     ` Adhemerval Zanella
@ 2020-12-04 18:24       ` Florian Weimer
  2020-12-04 18:27         ` Adhemerval Zanella
  0 siblings, 1 reply; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:24 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella:

> On 04/12/2020 15:17, Florian Weimer wrote:
>> * Adhemerval Zanella via Libc-alpha:
>> 
>>> diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
>>> index ec02b5dccf..a0856c5586 100644
>>> --- a/nptl/libpthread-compat.c
>>> +++ b/nptl/libpthread-compat.c
>>> @@ -36,6 +36,12 @@ __libpthread_version_placeholder (void)
>>>     version or later, the placeholder symbol is not needed because
>>>     there are plenty of other symbols which populate those later
>>>     versions.  */
>>> +
>>> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1_2))
>>> +compat_symbol_unique (libpthread,
>>> +		      __libpthread_version_placeholder, GLIBC_2_0);
>>> +#endif
>>> +
>>>  #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
>>>  compat_symbol_unique (libpthread,
>>>  		      __libpthread_version_placeholder, GLIBC_2_1_2);
>> 
>> I think this isn't necessary yet becase there are many GLIBC_2.0
>> symbols that keep that version alive.
>> 
>> I assume you have used the symbol moving script, so those changes
>> should be fine.
>> 
>
> Yes, and I think I have acked on the last review. I think I saw
> one issue with riscv32, since it is base abi is the current one,
> that I will check out.

Okay, should I commit the script as it is today?

I wanted to add something to auto-generate the new base symbol
version, but haven't found the time to implement that.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/6] nptl: Make pthread_kill async-signal-safe
  2020-12-04 18:20   ` Florian Weimer
@ 2020-12-04 18:26     ` Adhemerval Zanella
  2020-12-04 18:38     ` Adhemerval Zanella
  1 sibling, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:26 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:20, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> Simiar to raise (BZ #15368), pthread_kill is also defined as
>> async-signal-safe (POSIX.1-2008 TC1).  However, similar to raise
>> it has the same issues relating to signal handling.
>>
>> Different than raise, all the signal are blocked so it would be
>> possible to implement pthread_cancel (which also should be
>> async-cancel safe).
> 
> What do you mean by implementing pthread_cancel?
> 
> Patch looks okay as far as I can see, but we'll eventually need a
> different approach to deal with the TID reuse race.
> 

For TID reuse case I don't see a easy way other than add a lock
on pthread_kill with synchronizes with pthread_exit.  It would
require some changes on how we synchronize the TID clear by the
kernel.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/6] nptl: Move pthread_kill to libc
  2020-12-04 18:24       ` Florian Weimer
@ 2020-12-04 18:27         ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:27 UTC (permalink / raw)
  To: Florian Weimer; +Cc: Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:24, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 04/12/2020 15:17, Florian Weimer wrote:
>>> * Adhemerval Zanella via Libc-alpha:
>>>
>>>> diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
>>>> index ec02b5dccf..a0856c5586 100644
>>>> --- a/nptl/libpthread-compat.c
>>>> +++ b/nptl/libpthread-compat.c
>>>> @@ -36,6 +36,12 @@ __libpthread_version_placeholder (void)
>>>>     version or later, the placeholder symbol is not needed because
>>>>     there are plenty of other symbols which populate those later
>>>>     versions.  */
>>>> +
>>>> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1_2))
>>>> +compat_symbol_unique (libpthread,
>>>> +		      __libpthread_version_placeholder, GLIBC_2_0);
>>>> +#endif
>>>> +
>>>>  #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
>>>>  compat_symbol_unique (libpthread,
>>>>  		      __libpthread_version_placeholder, GLIBC_2_1_2);
>>>
>>> I think this isn't necessary yet becase there are many GLIBC_2.0
>>> symbols that keep that version alive.
>>>
>>> I assume you have used the symbol moving script, so those changes
>>> should be fine.
>>>
>>
>> Yes, and I think I have acked on the last review. I think I saw
>> one issue with riscv32, since it is base abi is the current one,
>> that I will check out.
> 
> Okay, should I commit the script as it is today?
> 
> I wanted to add something to auto-generate the new base symbol
> version, but haven't found the time to implement that.
> 

Yes, I will check the possible riscv32 issue once it is upstream.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 4/6] nptl: Initialize tid earlier
  2020-12-04 18:22   ` Florian Weimer
@ 2020-12-04 18:30     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:30 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:22, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> It sets the PD tid value as once pthread is initialized, the idea is
>> to allow raise being implemented by pthread_kill and avoid a gettid
>> call.
> 
> I don't think this is possible.  I expect that some applications
> assume that raise works after vfork (certainly via abort), and the TID
> cache is wrong at that point.  Sorry.
> 

Sign, I would consider this undefined behavior but I don't see why break
it anyway.  I withdraw this patch.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 5/6] nptl: Implement raise with pthread_kill
  2020-12-04 18:09 ` [PATCH 5/6] nptl: Implement raise with pthread_kill Adhemerval Zanella
@ 2020-12-04 18:32   ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:32 UTC (permalink / raw)
  To: libc-alpha; +Cc: Zack Weinberg, Florian Weimer



On 04/12/2020 15:09, Adhemerval Zanella wrote:
> The internal __pthread_kill_internal symbol has an extra argument
> that specified if all signal or just application ones should be
> blocked (raise can not be used with SIGCANCEL or SIGTIMER, so there
> it no need to block them).
> 
> Checked on x86_64-linux-gnu.
> ---
>  nptl/Makefile                      |  1 +
>  nptl/Versions                      |  1 +
>  nptl/pt-raise.c                    | 11 +-----
>  nptl/pthreadP.h                    |  3 ++
>  nptl/pthread_kill.c                | 28 +--------------
>  nptl/pthread_kill_internal.c       | 56 ++++++++++++++++++++++++++++++
>  sysdeps/posix/raise.c              | 10 ++++--
>  sysdeps/unix/sysv/linux/pt-raise.c | 20 -----------
>  sysdeps/unix/sysv/linux/raise.c    | 52 ---------------------------
>  9 files changed, 71 insertions(+), 111 deletions(-)
>  create mode 100644 nptl/pthread_kill_internal.c
>  delete mode 100644 sysdeps/unix/sysv/linux/pt-raise.c
>  delete mode 100644 sysdeps/unix/sysv/linux/raise.c
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 3f6e77f63f..424b96656a 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -66,6 +66,7 @@ routines = \
>    pthread_getattr_np \
>    pthread_getschedparam \
>    pthread_kill \
> +  pthread_kill_internal \
>    pthread_self \
>    pthread_setschedparam \
>    pthread_sigmask \
> diff --git a/nptl/Versions b/nptl/Versions
> index 7cfe39a91c..39578ef4e6 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -66,6 +66,7 @@ libc {
>      __pthread_attr_copy;
>      __pthread_getattr_default_np;
>      __pthread_attr_setsigmask_internal;
> +    __pthread_kill_internal;
>    }
>  }
>  
> diff --git a/nptl/pt-raise.c b/nptl/pt-raise.c
> index 069b33a86e..286a9f686a 100644
> --- a/nptl/pt-raise.c
> +++ b/nptl/pt-raise.c
> @@ -17,13 +17,4 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include <pthread.h>
> -#include <signal.h>
> -
> -
> -int
> -raise (int sig)
> -{
> -  /* This is what POSIX says must happen.  */
> -  return pthread_kill (pthread_self (), sig);
> -}
> +#include "raise.c"
> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index a7510f9f63..2f34ac1ab9 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -526,6 +526,9 @@ extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
>  extern int __pthread_detach (pthread_t th);
>  extern int __pthread_cancel (pthread_t th);
>  extern int __pthread_kill (pthread_t threadid, int signo);
> +extern int __pthread_kill_internal (pthread_t threadif, int signo,
> +				    bool block_all);
> +libc_hidden_proto (__pthread_kill_internal)
>  extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));
>  extern int __pthread_join (pthread_t threadid, void **thread_return);
>  extern int __pthread_setcanceltype (int type, int *oldtype);
> diff --git a/nptl/pthread_kill.c b/nptl/pthread_kill.c
> index c547c5fe58..d114cbfca6 100644
> --- a/nptl/pthread_kill.c
> +++ b/nptl/pthread_kill.c
> @@ -16,37 +16,11 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include <unistd.h>
>  #include <pthreadP.h>
>  
>  int
>  __pthread_kill (pthread_t threadid, int signo)
>  {
> -  /* Disallow sending the signal we use for cancellation, timers,
> -     for the setxid implementation.  */
> -  if (__is_internal_signal (signo))
> -    return EINVAL;
> -
> -  /* Force load of pd->tid into local variable or register.  Otherwise
> -     if a thread exits between ESRCH test and tgkill, we might return
> -     EINVAL, because pd->tid would be cleared by the kernel.  */
> -  struct pthread *pd = (struct pthread *) threadid;
> -  pid_t tid = atomic_forced_read (pd->tid);
> -  if (__glibc_unlikely (tid <= 0))
> -    /* Not a valid thread handle.  */
> -    return ESRCH;
> -
> -  sigset_t set;
> -  __libc_signal_block_all (&set);
> -
> -  /* We have a special syscall to do the work.  */
> -  pid_t pid = __getpid ();
> -
> -  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
> -  val = (INTERNAL_SYSCALL_ERROR_P (val) ? INTERNAL_SYSCALL_ERRNO (val) : 0);
> -
> -  __libc_signal_restore_set (&set);
> -
> -  return val;
> +  return __pthread_kill_internal (threadid, signo, true);
>  }
>  strong_alias (__pthread_kill, pthread_kill)
> diff --git a/nptl/pthread_kill_internal.c b/nptl/pthread_kill_internal.c
> new file mode 100644
> index 0000000000..46a47650a1
> --- /dev/null
> +++ b/nptl/pthread_kill_internal.c
> @@ -0,0 +1,56 @@
> +/* Common implementation for raise/pthread_kill.  Linux version.
> +   Copyright (C) 2020 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 <unistd.h>
> +#include <pthreadP.h>
> +
> +int
> +__pthread_kill_internal (pthread_t threadid, int signo, bool block_all)
> +{
> +  /* Disallow sending the signal we use for cancellation, timers,
> +     for the setxid implementation.  */
> +  if (__is_internal_signal (signo))
> +    return EINVAL;
> +
> +  /* Force load of pd->tid into local variable or register.  Otherwise
> +     if a thread exits between ESRCH test and tgkill, we might return
> +     EINVAL, because pd->tid would be cleared by the kernel.  */
> +  struct pthread *pd = (struct pthread *) threadid;
> +  pid_t tid = atomic_forced_read (pd->tid);
> +  if (__glibc_unlikely (tid <= 0))
> +    /* Not a valid thread handle.  */
> +    return ESRCH;
> +
> +  sigset_t set;
> +  if (block_all)
> +    __libc_signal_block_all (&set);
> +  else
> +    __libc_signal_block_app (&set);
> +
> +  /* We have a special syscall to do the work.  */
> +  pid_t pid = __getpid ();

As Florian has pointed out, using the cached tid might not work when
vfork is used.  In this case I think is better to remove the atomic
read and issue __gettid () instead (as Linux raise does currently).

I will send an updated version.

> +
> +  int val = INTERNAL_SYSCALL_CALL (tgkill, pid, tid, signo);
> +  val = (INTERNAL_SYSCALL_ERROR_P (val) ? INTERNAL_SYSCALL_ERRNO (val) : 0);
> +
> +  __libc_signal_restore_set (&set);
> +
> +  return val;
> +}
> +libc_hidden_def (__pthread_kill_internal)
> +
> diff --git a/sysdeps/posix/raise.c b/sysdeps/posix/raise.c
> index 32cb108f0b..8a3ea95b3e 100644
> --- a/sysdeps/posix/raise.c
> +++ b/sysdeps/posix/raise.c
> @@ -16,13 +16,19 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <signal.h>
> -#include <unistd.h>
> +#include <nptl/pthreadP.h>
>  
>  /* Raise the signal SIG.  */
>  int
>  raise (int sig)
>  {
> -  return __kill (__getpid (), sig);
> +  int r = __pthread_kill_internal ((pthread_t) THREAD_SELF, sig, false);
> +  if (r != 0)
> +    {
> +      __set_errno (r);
> +      r = -1;
> +    }
> +  return r;
>  }
>  libc_hidden_def (raise)
>  weak_alias (raise, gsignal)
> diff --git a/sysdeps/unix/sysv/linux/pt-raise.c b/sysdeps/unix/sysv/linux/pt-raise.c
> deleted file mode 100644
> index 0c8246b0cc..0000000000
> --- a/sysdeps/unix/sysv/linux/pt-raise.c
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* ISO C raise function for libpthread.
> -   Copyright (C) 2002-2020 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
> -   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 <sysdeps/unix/sysv/linux/raise.c>
> diff --git a/sysdeps/unix/sysv/linux/raise.c b/sysdeps/unix/sysv/linux/raise.c
> deleted file mode 100644
> index 3b90ae1d55..0000000000
> --- a/sysdeps/unix/sysv/linux/raise.c
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -/* Copyright (C) 2002-2020 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
> -   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 <signal.h>
> -#include <sysdep.h>
> -#include <errno.h>
> -#include <sys/types.h>
> -#include <unistd.h>
> -#include <internal-signals.h>
> -
> -int
> -raise (int sig)
> -{
> -  /* rt_sigprocmask may fail if:
> -
> -     1. sigsetsize != sizeof (sigset_t) (EINVAL)
> -     2. a failure in copy from/to user space (EFAULT)
> -     3. an invalid 'how' operation (EINVAL)
> -
> -     The first case is already handle in glibc syscall call by using the arch
> -     defined _NSIG.  Second case is handled by using a stack allocated mask.
> -     The last one should be handled by the block/unblock functions.  */
> -
> -  sigset_t set;
> -  __libc_signal_block_app (&set);
> -
> -  pid_t pid = INTERNAL_SYSCALL_CALL (getpid);
> -  pid_t tid = INTERNAL_SYSCALL_CALL (gettid);
> -
> -  int ret = INLINE_SYSCALL_CALL (tgkill, pid, tid, sig);
> -
> -  __libc_signal_restore_set (&set);
> -
> -  return ret;
> -}
> -libc_hidden_def (raise)
> -weak_alias (raise, gsignal)
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/6] nptl: Make pthread_kill async-signal-safe
  2020-12-04 18:20   ` Florian Weimer
  2020-12-04 18:26     ` Adhemerval Zanella
@ 2020-12-04 18:38     ` Adhemerval Zanella
  2020-12-04 18:45       ` Florian Weimer
  1 sibling, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 18:38 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:20, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> Simiar to raise (BZ #15368), pthread_kill is also defined as
>> async-signal-safe (POSIX.1-2008 TC1).  However, similar to raise
>> it has the same issues relating to signal handling.
>>
>> Different than raise, all the signal are blocked so it would be
>> possible to implement pthread_cancel (which also should be
>> async-cancel safe).
> 
> What do you mean by implementing pthread_cancel?

To avoid the second issue of the pthread_cancel async-signal-safe
issues [2].

[2] https://sourceware.org/pipermail/libc-alpha/2020-December/120423.html

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/6] nptl: Make pthread_kill async-signal-safe
  2020-12-04 18:38     ` Adhemerval Zanella
@ 2020-12-04 18:45       ` Florian Weimer
  0 siblings, 0 replies; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 18:45 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella:

> On 04/12/2020 15:20, Florian Weimer wrote:
>> * Adhemerval Zanella via Libc-alpha:
>> 
>>> Simiar to raise (BZ #15368), pthread_kill is also defined as
>>> async-signal-safe (POSIX.1-2008 TC1).  However, similar to raise
>>> it has the same issues relating to signal handling.
>>>
>>> Different than raise, all the signal are blocked so it would be
>>> possible to implement pthread_cancel (which also should be
>>> async-cancel safe).
>> 
>> What do you mean by implementing pthread_cancel?
>
> To avoid the second issue of the pthread_cancel async-signal-safe
> issues [2].
>
> [2] https://sourceware.org/pipermail/libc-alpha/2020-December/120423.html

I think the signal blocking would have to happen on the target thread.
Blocking signals on the signal-sending thread does not help?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/6] nptl: Move Linux pthread_kill to nptl
  2020-12-04 18:12 ` [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Florian Weimer
@ 2020-12-04 19:08   ` Adhemerval Zanella
  2020-12-04 19:32     ` Florian Weimer
  0 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2020-12-04 19:08 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 04/12/2020 15:12, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> The nptl already expects a Linux syscall internak.  Also
>> __is_internal_signal and the DEBUGGING_P check is removed.
> 
> Typo: internak
> 
> And __is_internal_signal is still there?
> 
I meant '__is_internal_signal is used', I will fix both in the
commit message.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/6] nptl: Move Linux pthread_kill to nptl
  2020-12-04 19:08   ` Adhemerval Zanella
@ 2020-12-04 19:32     ` Florian Weimer
  0 siblings, 0 replies; 21+ messages in thread
From: Florian Weimer @ 2020-12-04 19:32 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella:

> On 04/12/2020 15:12, Florian Weimer wrote:
>> * Adhemerval Zanella via Libc-alpha:
>> 
>>> The nptl already expects a Linux syscall internak.  Also
>>> __is_internal_signal and the DEBUGGING_P check is removed.
>> 
>> Typo: internak
>> 
>> And __is_internal_signal is still there?
>> 
> I meant '__is_internal_signal is used', I will fix both in the
> commit message.

Okay, then it looks good.  Thanks.

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2020-12-04 19:32 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-04 18:09 [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Adhemerval Zanella
2020-12-04 18:09 ` [PATCH 2/6] nptl: Move pthread_kill to libc Adhemerval Zanella
2020-12-04 18:17   ` Florian Weimer
2020-12-04 18:21     ` Adhemerval Zanella
2020-12-04 18:24       ` Florian Weimer
2020-12-04 18:27         ` Adhemerval Zanella
2020-12-04 18:09 ` [PATCH 3/6] nptl: Make pthread_kill async-signal-safe Adhemerval Zanella
2020-12-04 18:20   ` Florian Weimer
2020-12-04 18:26     ` Adhemerval Zanella
2020-12-04 18:38     ` Adhemerval Zanella
2020-12-04 18:45       ` Florian Weimer
2020-12-04 18:09 ` [PATCH 4/6] nptl: Initialize tid earlier Adhemerval Zanella
2020-12-04 18:22   ` Florian Weimer
2020-12-04 18:30     ` Adhemerval Zanella
2020-12-04 18:09 ` [PATCH 5/6] nptl: Implement raise with pthread_kill Adhemerval Zanella
2020-12-04 18:32   ` Adhemerval Zanella
2020-12-04 18:09 ` [PATCH 6/6] nptl: Remove pthread raise implementation Adhemerval Zanella
2020-12-04 18:23   ` Florian Weimer
2020-12-04 18:12 ` [PATCH 1/6] nptl: Move Linux pthread_kill to nptl Florian Weimer
2020-12-04 19:08   ` Adhemerval Zanella
2020-12-04 19:32     ` Florian Weimer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).