public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 00/18] Repost of pending libpthread removal patches
@ 2021-03-12 17:48 Florian Weimer
  2021-03-12 17:48 ` [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc Florian Weimer
                   ` (17 more replies)
  0 siblings, 18 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:48 UTC (permalink / raw)
  To: libc-alpha

This series is a repost of:

  <https://sourceware.org/pipermail/libc-alpha/2021-March/123202.html>

I've made some minor cleanups (removal of weak declarations of symbols
moved to libc from sysdeps/nptl/libc-lockP.h; this should help with
static linking of libpthread without crashes eventually).  I had to move
pthread_once before __pthread_unwind_next because of its _Unwind_Resume
dependency.  The patches after __pthread_unwind_next are new and remove
forwarder functionality, and also move pthread_exit.

As discussed on the GDB list, the nptl_db support for pthread_key_create
is unused by GDB, so I could not write a test for this.

Tested on i686-linux-gnu x86_64-linux-gnu.  Built with
build-many-glibcs.py.

Thanks,
Florian

Florian Weimer (18):
  nptl: Move pthread_mutex_consistent into libc
  nptl: Move __pthread_cleanup_routine into libc
  nptl: Move legacy unwinding implementation into libc
  nptl: Move legacy cancelation handling into libc as compat symbols
  nptl: Remove longjmp, siglongjmp from libpthread
  Legacy unwinder: Remove definition of _Unwind_GetCFA
  nptl: Move __pthread_cleanup_upto into libc
  nptl: Move pthread_once and __pthread_once into libc
  nptl: Move __pthread_unwind_next into libc
  csu: Move calling main out of __libc_start_main_impl
  nptl: Move internal __nptl_nthreads variable into libc
  nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE
  nptl: Move __pthread_keys global variable into libc
  nptl: Move __nptl_deallocate_tsd into libc
  nptl: Move pthread_exit into libc
  nptl: Move pthread_setcancelstate into libc
  nptl: Move pthread_setcanceltype into libc
  nptl: Invoke the set_robust_list system call directly in fork

 NEWS                                          |   4 +-
 csu/libc-start.c                              |  74 +-----------
 elf/Makefile                                  |   2 +
 include/setjmp.h                              |   4 +-
 libio/iopopen.c                               |   5 +-
 misc/error.c                                  |  19 +--
 nptl/Makefile                                 |  48 +++++---
 nptl/Versions                                 |  48 +++++---
 nptl/cleanup_compat.c                         |  16 ++-
 nptl/cleanup_defer_compat.c                   |  72 +++--------
 nptl/cleanup_routine.c                        |  12 +-
 nptl/forward.c                                |  28 -----
 nptl/libc-cleanup.c                           |  64 +++++++++-
 nptl/libc_pthread_init.c                      |   9 +-
 nptl/nptl-init.c                              |  34 +-----
 nptl/nptl_deallocate_tsd.c                    | 112 ++++++++++++++++++
 .../nptl_nthreads.c                           |  19 +--
 nptl/pt-longjmp.c                             |  49 --------
 nptl/pthreadP.h                               |  48 ++++----
 nptl/pthread_cancel.c                         |  10 +-
 nptl/{pt-cleanup.c => pthread_cleanup_upto.c} |   2 +-
 nptl/pthread_create.c                         |  98 ---------------
 nptl/pthread_exit.c                           |  16 ++-
 nptl/pthread_keys.c                           |  24 ++++
 nptl/pthread_mutex_consistent.c               |  22 +++-
 nptl/pthread_once.c                           |  22 +++-
 nptl/pthread_setcancelstate.c                 |   6 +-
 nptl/pthread_setcanceltype.c                  |   3 +-
 nptl/tst-cleanup4.c                           |   5 +
 nptl/tst-cleanup4aux.c                        |   5 +
 nptl/tst-pthread_exit-nothreads-static.c      |  19 +++
 nptl/tst-pthread_exit-nothreads.c             |  28 +++++
 nptl/unwind.c                                 |  14 ++-
 nptl/vars.c                                   |   5 -
 nptl_db/db-symbols.awk                        |   1 +
 nptl_db/structs.def                           |   9 +-
 setjmp/Versions                               |   4 -
 stdlib/fmtmsg.c                               |   9 +-
 sysdeps/arm/Makefile                          |   5 -
 sysdeps/arm/nptl/unwind-forcedunwind.c        |  25 ----
 sysdeps/generic/libc_start_call_main.h        |  24 ++++
 sysdeps/generic/unwind-dw2.c                  |   8 --
 sysdeps/generic/unwind-resume.c               |  14 +++
 .../unwind-resume.c}                          |   5 +-
 sysdeps/nptl/fork.c                           |  14 +--
 sysdeps/nptl/fork.h                           |   3 -
 sysdeps/nptl/jmp-unwind.c                     |   8 +-
 sysdeps/nptl/libc-lock.h                      |  59 ++++-----
 sysdeps/nptl/libc-lockP.h                     |  45 +------
 sysdeps/nptl/libc_start_call_main.h           |  74 ++++++++++++
 sysdeps/nptl/pthread-functions.h              |  15 ---
 sysdeps/nptl/pthread.h                        |   5 +-
 sysdeps/nptl/unwind-forcedunwind.c            |  64 ----------
 sysdeps/posix/system.c                        |   5 +-
 sysdeps/pthread/Makefile                      |   2 +-
 sysdeps/pthread/tst-robust1.c                 |   4 +-
 sysdeps/pthread/tst-robust8.c                 |   2 +-
 sysdeps/pthread/tst-robust9.c                 |   4 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  15 +++
 .../sysv/linux/aarch64/libpthread.abilist     |  15 ---
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  15 +++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  15 ---
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  15 +++
 .../unix/sysv/linux/arc/libpthread.abilist    |  13 --
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  15 +++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  15 ---
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  15 +++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  15 ---
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  15 +++
 .../unix/sysv/linux/csky/libpthread.abilist   |  13 --
 sysdeps/unix/sysv/linux/fatal-prepare.h       |   4 +-
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  15 +++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  15 ---
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  15 +++
 .../unix/sysv/linux/i386/libpthread.abilist   |  15 ---
 sysdeps/unix/sysv/linux/ia64/Makefile         |   2 +-
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  15 +++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  15 ---
 .../sysv/linux/m68k/coldfire/libc.abilist     |  15 +++
 .../linux/m68k/coldfire/libpthread.abilist    |  15 ---
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  15 +++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  15 ---
 .../sysv/linux/microblaze/be/libc.abilist     |  15 +++
 .../linux/microblaze/be/libpthread.abilist    |  15 ---
 .../sysv/linux/microblaze/le/libc.abilist     |  15 +++
 .../linux/microblaze/le/libpthread.abilist    |  15 ---
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  15 +++
 .../sysv/linux/mips/mips32/libpthread.abilist |  15 ---
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  15 +++
 .../sysv/linux/mips/mips64/libpthread.abilist |  15 ---
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  15 +++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  15 +++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  15 +++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  15 ---
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  15 +++
 .../powerpc/powerpc32/libpthread.abilist      |  17 ---
 .../powerpc/powerpc32/nofpu/libc.abilist      |  15 +++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  15 +++
 .../powerpc/powerpc64/be/libpthread.abilist   |  17 ---
 .../linux/powerpc/powerpc64/le/libc.abilist   |  15 +++
 .../powerpc/powerpc64/le/libpthread.abilist   |  15 ---
 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c  |  61 ----------
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  15 +++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  13 --
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  15 +++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  13 --
 sysdeps/unix/sysv/linux/s390/Versions         |   2 +-
 sysdeps/unix/sysv/linux/s390/jmp-unwind.c     |   7 +-
 .../unix/sysv/linux/s390/libpthread-compat.c  |  25 ++++
 sysdeps/unix/sysv/linux/s390/pt-longjmp.c     |  33 ------
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  15 +++
 .../linux/s390/s390-32/libpthread.abilist     |  18 +--
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  15 +++
 .../linux/s390/s390-64/libpthread.abilist     |  18 +--
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  15 +++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  15 ---
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  15 +++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  15 ---
 .../sysv/linux/sparc/sparc32/libc.abilist     |  15 +++
 .../linux/sparc/sparc32/libpthread.abilist    |  15 ---
 .../sysv/linux/sparc/sparc64/libc.abilist     |  15 +++
 .../linux/sparc/sparc64/libpthread.abilist    |  15 ---
 sysdeps/unix/sysv/linux/spawni.c              |   5 +-
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  15 +++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  15 ---
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  15 +++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  15 ---
 sysdeps/x86/nptl/pt-longjmp.c                 |  71 -----------
 128 files changed, 1169 insertions(+), 1312 deletions(-)
 create mode 100644 nptl/nptl_deallocate_tsd.c
 rename sysdeps/arm/pt-arm-unwind-resume.S => nptl/nptl_nthreads.c (51%)
 delete mode 100644 nptl/pt-longjmp.c
 rename nptl/{pt-cleanup.c => pthread_cleanup_upto.c} (98%)
 create mode 100644 nptl/pthread_keys.c
 create mode 100644 nptl/tst-pthread_exit-nothreads-static.c
 create mode 100644 nptl/tst-pthread_exit-nothreads.c
 delete mode 100644 sysdeps/arm/nptl/unwind-forcedunwind.c
 create mode 100644 sysdeps/generic/libc_start_call_main.h
 rename sysdeps/{unix/sysv/linux/ia64/unwind-forcedunwind.c => ia64/unwind-resume.c} (87%)
 create mode 100644 sysdeps/nptl/libc_start_call_main.h
 delete mode 100644 sysdeps/nptl/unwind-forcedunwind.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/libpthread-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c
 delete mode 100644 sysdeps/x86/nptl/pt-longjmp.c

-- 
2.29.2


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

* [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
@ 2021-03-12 17:48 ` Florian Weimer
  2021-03-15 19:30   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 02/18] nptl: Move __pthread_cleanup_routine " Florian Weimer
                   ` (16 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:48 UTC (permalink / raw)
  To: libc-alpha

And deprecated pthread_mutex_consistent_np, its old name.
---
 NEWS                                          |  4 +++-
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 | 11 ++++++++--
 nptl/pthread_mutex_consistent.c               | 22 ++++++++++++++++---
 sysdeps/nptl/pthread.h                        |  5 +++--
 sysdeps/pthread/tst-robust1.c                 |  4 ++--
 sysdeps/pthread/tst-robust8.c                 |  2 +-
 sysdeps/pthread/tst-robust9.c                 |  4 ++--
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  3 +++
 .../sysv/linux/aarch64/libpthread.abilist     |  2 --
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  3 +++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  2 --
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  3 +++
 .../unix/sysv/linux/arc/libpthread.abilist    |  2 --
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  3 +++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  2 --
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  3 +++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  2 --
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  3 +++
 .../unix/sysv/linux/csky/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  3 +++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  3 +++
 .../unix/sysv/linux/i386/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  3 +++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  2 --
 .../sysv/linux/m68k/coldfire/libc.abilist     |  3 +++
 .../linux/m68k/coldfire/libpthread.abilist    |  2 --
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  3 +++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 --
 .../sysv/linux/microblaze/be/libc.abilist     |  3 +++
 .../linux/microblaze/be/libpthread.abilist    |  2 --
 .../sysv/linux/microblaze/le/libc.abilist     |  3 +++
 .../linux/microblaze/le/libpthread.abilist    |  2 --
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  3 +++
 .../sysv/linux/mips/mips32/libpthread.abilist |  2 --
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  3 +++
 .../sysv/linux/mips/mips64/libpthread.abilist |  2 --
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  3 +++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  3 +++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  3 +++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  2 --
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  3 +++
 .../powerpc/powerpc32/libpthread.abilist      |  2 --
 .../powerpc/powerpc32/nofpu/libc.abilist      |  3 +++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  3 +++
 .../powerpc/powerpc64/be/libpthread.abilist   |  2 --
 .../linux/powerpc/powerpc64/le/libc.abilist   |  3 +++
 .../powerpc/powerpc64/le/libpthread.abilist   |  2 --
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  3 +++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  2 --
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  3 +++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  2 --
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  3 +++
 .../linux/s390/s390-32/libpthread.abilist     |  2 --
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  3 +++
 .../linux/s390/s390-64/libpthread.abilist     |  2 --
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  3 +++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 --
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  3 +++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 --
 .../sysv/linux/sparc/sparc32/libc.abilist     |  3 +++
 .../linux/sparc/sparc32/libpthread.abilist    |  2 --
 .../sysv/linux/sparc/sparc64/libc.abilist     |  3 +++
 .../linux/sparc/sparc64/libpthread.abilist    |  2 --
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  3 +++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  2 --
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  3 +++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 --
 69 files changed, 136 insertions(+), 72 deletions(-)

diff --git a/NEWS b/NEWS
index aa0f10a891..f9d15952f8 100644
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,9 @@ Major new features:
 
 Deprecated and removed features, and other changes affecting compatibility:
 
-  [Add deprecations, removals and changes affecting compatibility here]
+* The function pthread_mutex_consistent_np has been deprecated; programs
+  should use the equivalent standard function pthread_mutex_consistent
+  instead.
 
 Changes to build and runtime requirements:
 
diff --git a/nptl/Makefile b/nptl/Makefile
index b51deff6a3..96bb47e152 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -71,6 +71,7 @@ routines = \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
+  pthread_mutex_consistent \
   pthread_self \
   pthread_setschedparam \
   pthread_sigmask \
@@ -159,7 +160,6 @@ libpthread-routines = \
   pthread_kill_other_threads \
   pthread_mutex_cond_lock \
   pthread_mutex_conf \
-  pthread_mutex_consistent \
   pthread_mutex_destroy \
   pthread_mutex_getprioceiling \
   pthread_mutex_init \
diff --git a/nptl/Versions b/nptl/Versions
index 039cff38aa..e38d98709d 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -55,6 +55,12 @@ libc {
   GLIBC_2.3.4 {
     pthread_attr_setaffinity_np;
   }
+  GLIBC_2.4 {
+    pthread_mutex_consistent_np;
+  }
+  GLIBC_2.12 {
+    pthread_mutex_consistent;
+  }
   # C11 thread symbols.
   GLIBC_2.28 {
     thrd_current;
@@ -70,6 +76,9 @@ libc {
     pthread_getattr_np;
     pthread_sigmask;
   }
+  GLIBC_2.34 {
+    pthread_mutex_consistent;
+  }
   GLIBC_PRIVATE {
     __futex_abstimed_wait64;
     __futex_abstimed_wait_cancelable64;
@@ -326,7 +335,6 @@ libpthread {
   }
 
   GLIBC_2.4 {
-    pthread_mutex_consistent_np;
     pthread_mutex_getprioceiling;
     pthread_mutex_setprioceiling;
     pthread_mutexattr_getprioceiling;
@@ -343,7 +351,6 @@ libpthread {
 
   GLIBC_2.12 {
     pthread_getname_np;
-    pthread_mutex_consistent;
     pthread_mutexattr_getrobust;
     pthread_mutexattr_setrobust;
     pthread_setname_np;
diff --git a/nptl/pthread_mutex_consistent.c b/nptl/pthread_mutex_consistent.c
index 937c7c4640..0a84063a2b 100644
--- a/nptl/pthread_mutex_consistent.c
+++ b/nptl/pthread_mutex_consistent.c
@@ -18,10 +18,10 @@
 
 #include <errno.h>
 #include <pthreadP.h>
-
+#include <shlib-compat.h>
 
 int
-pthread_mutex_consistent (pthread_mutex_t *mutex)
+__pthread_mutex_consistent (pthread_mutex_t *mutex)
 {
   /* Test whether this is a robust mutex with a dead owner.
      See concurrency notes regarding __kind in struct __pthread_mutex_s
@@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
 
   return 0;
 }
-weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
+versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
+                  GLIBC_2_34);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)
+/* Compat symbol with the old libc version, _np alias.  */
+# undef pthread_mutex_consistent_np
+strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_1)
+compat_symbol (libc, __pthread_mutex_consistent_1,
+               pthread_mutex_consistent_np, GLIBC_2_4);
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_34)
+/* Compat symbol with the old libc version.  */
+strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_2)
+compat_symbol (libc, __pthread_mutex_consistent_2,
+               pthread_mutex_consistent, GLIBC_2_12);
+#endif
diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
index a04a3a2754..2ec2caec98 100644
--- a/sysdeps/nptl/pthread.h
+++ b/sysdeps/nptl/pthread.h
@@ -809,8 +809,9 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
 extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
      __THROW __nonnull ((1));
 # ifdef __USE_GNU
-extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
-     __THROW __nonnull ((1));
+#  define pthread_mutex_consistent_np __glibc_macro_warning ("\
+pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent") \
+  pthread_mutex_consistent
 # endif
 #endif
 
diff --git a/sysdeps/pthread/tst-robust1.c b/sysdeps/pthread/tst-robust1.c
index d4b1d88a68..6342fcbbf7 100644
--- a/sysdeps/pthread/tst-robust1.c
+++ b/sysdeps/pthread/tst-robust1.c
@@ -241,14 +241,14 @@ do_test (void)
 #endif
 
 #ifndef NOT_CONSISTENT
-      e = pthread_mutex_consistent_np (&m1);
+      e = pthread_mutex_consistent (&m1);
       if (e != 0)
 	{
 	  printf ("%ld: mutex_consistent m1 failed with error %d\n", round, e);
 	  return 1;
 	}
 
-      e = pthread_mutex_consistent_np (&m2);
+      e = pthread_mutex_consistent (&m2);
       if (e != 0)
 	{
 	  printf ("%ld: mutex_consistent m2 failed with error %d\n", round, e);
diff --git a/sysdeps/pthread/tst-robust8.c b/sysdeps/pthread/tst-robust8.c
index 27dd53d2c3..8f135cb516 100644
--- a/sysdeps/pthread/tst-robust8.c
+++ b/sysdeps/pthread/tst-robust8.c
@@ -92,7 +92,7 @@ mutex_timedlock of %d in thread %ld failed with %d\n",
 	    }
 
 	  if (e == EOWNERDEAD)
-	    pthread_mutex_consistent_np (&map[r]);
+	    pthread_mutex_consistent (&map[r]);
 
 	  if (e == 0 || e == EOWNERDEAD)
 	    state[r] = 1;
diff --git a/sysdeps/pthread/tst-robust9.c b/sysdeps/pthread/tst-robust9.c
index befc14f2d8..532aebc4e9 100644
--- a/sysdeps/pthread/tst-robust9.c
+++ b/sysdeps/pthread/tst-robust9.c
@@ -14,10 +14,10 @@ tf (void *data)
   int err = pthread_mutex_lock (&m);
   if (err == EOWNERDEAD)
     {
-      err = pthread_mutex_consistent_np (&m);
+      err = pthread_mutex_consistent (&m);
       if (err)
 	{
-	  puts ("pthread_mutex_consistent_np");
+	  puts ("pthread_mutex_consistent");
 	  exit (1);
 	}
     }
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index bac795262d..231330e591 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -1442,6 +1442,8 @@ 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_mutex_consistent F
+GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
@@ -2172,3 +2174,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 336ee51e7e..1d4fffb5a6 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -102,8 +102,6 @@ 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
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_getprioceiling F
 GLIBC_2.17 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 897f70db22..72c1c3ae6a 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -1749,6 +1749,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x458
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x458
 GLIBC_2.12 sys_nerr D 0x4
@@ -2254,6 +2255,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2437,6 +2439,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 5c87b9baa0..e97e4d4dd5 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 604d259ad6..180b1e6244 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -1369,6 +1369,8 @@ 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_mutex_consistent F
+GLIBC_2.32 pthread_mutex_consistent_np F
 GLIBC_2.32 pthread_mutex_destroy F
 GLIBC_2.32 pthread_mutex_init F
 GLIBC_2.32 pthread_mutex_lock F
@@ -1932,3 +1934,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 1adcbecc2e..2f76de6bfc 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -116,8 +116,6 @@ 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
-GLIBC_2.32 pthread_mutex_consistent_np F
 GLIBC_2.32 pthread_mutex_destroy F
 GLIBC_2.32 pthread_mutex_getprioceiling F
 GLIBC_2.32 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 094236f713..e3781f0e83 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -156,6 +157,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -1535,6 +1537,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -136,7 +135,6 @@ 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
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 2bb4d31e81..0cd363cc2d 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -153,6 +154,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -1532,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -136,7 +135,6 @@ 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
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index d4291fecfb..c1e62a6df3 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -1430,6 +1430,8 @@ 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_mutex_consistent F
+GLIBC_2.29 pthread_mutex_consistent_np F
 GLIBC_2.29 pthread_mutex_destroy F
 GLIBC_2.29 pthread_mutex_init F
 GLIBC_2.29 pthread_mutex_lock F
@@ -2116,3 +2118,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 6ce59276a7..f05530eb2a 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -113,8 +113,6 @@ 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
 GLIBC_2.29 pthread_mutex_destroy F
 GLIBC_2.29 pthread_mutex_getprioceiling F
 GLIBC_2.29 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 1fd2a862f6..50d9080eb6 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x404
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x404
 GLIBC_2.12 sys_nerr D 0x4
@@ -2075,6 +2076,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2144,6 +2146,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index a7bb15be58..02dca5bd52 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 943331f01e..d172849c32 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -1754,6 +1754,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2242,6 +2243,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2311,6 +2313,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 017a9d9a86..92acdbc721 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -224,7 +223,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index f530151bde..e9e82e5ec8 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x438
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x438
 GLIBC_2.12 sys_nerr D 0x4
@@ -2107,6 +2108,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2176,6 +2178,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 6fb2e05072..1f9d0edbc9 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 6e76b6dcaa..b0c0d7208d 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -34,6 +34,7 @@ GLIBC_2.12 __m68k_read_tp F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -157,6 +158,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
@@ -1515,6 +1517,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -136,7 +135,6 @@ 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
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 7541b8289f..c312a9e726 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -1711,6 +1711,7 @@ GLIBC_2.12 __m68k_read_tp F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2187,6 +2188,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2256,6 +2258,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 017a9d9a86..92acdbc721 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -224,7 +223,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 6cf1936c42..4e5f7336c3 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -1445,6 +1445,8 @@ 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_mutex_consistent F
+GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
@@ -2167,3 +2169,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 9356f6183a..4849b99385 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -103,8 +103,6 @@ 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
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_getprioceiling F
 GLIBC_2.18 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 98730ebcda..374e48889a 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -1445,6 +1445,8 @@ 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_mutex_consistent F
+GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
@@ -2164,3 +2166,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 9356f6183a..4849b99385 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -103,8 +103,6 @@ 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
 GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_getprioceiling F
 GLIBC_2.18 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 92fa6cbc73..f4c9a0e288 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
 GLIBC_2.11 mkstemps F
 GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.13 fanotify_init F
 GLIBC_2.13 fanotify_mark F
@@ -2158,6 +2159,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2225,6 +2227,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 7aff4d018b..23f58b6459 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -92,7 +92,6 @@ GLIBC_2.0 tcdrain F
 GLIBC_2.0 write F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -225,7 +224,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 265a49e74e..1935dd7207 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
 GLIBC_2.11 mkstemps F
 GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.13 fanotify_init F
 GLIBC_2.13 fanotify_mark F
@@ -2156,6 +2157,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2223,6 +2225,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 7aff4d018b..23f58b6459 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -92,7 +92,6 @@ GLIBC_2.0 tcdrain F
 GLIBC_2.0 write F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -225,7 +224,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index cfa5e1111b..130dd19d46 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
 GLIBC_2.11 mkstemps F
 GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.13 fanotify_init F
 GLIBC_2.13 fanotify_mark F
@@ -2164,6 +2165,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2231,6 +2233,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 8c03ac52cd..a8728b1a57 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -1342,6 +1342,7 @@ GLIBC_2.11 mkostemps64 F
 GLIBC_2.11 mkstemps F
 GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.13 fanotify_init F
 GLIBC_2.13 fanotify_mark F
@@ -2158,6 +2159,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2225,6 +2227,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 17f5609e06..040ee6c0b6 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -1487,6 +1487,8 @@ 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_mutex_consistent F
+GLIBC_2.21 pthread_mutex_consistent_np F
 GLIBC_2.21 pthread_mutex_destroy F
 GLIBC_2.21 pthread_mutex_init F
 GLIBC_2.21 pthread_mutex_lock F
@@ -2205,3 +2207,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 73b4dfbd8e..0c7fe737a0 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -103,8 +103,6 @@ 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
 GLIBC_2.21 pthread_mutex_destroy F
 GLIBC_2.21 pthread_mutex_getprioceiling F
 GLIBC_2.21 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 76a16e2a6d..d51a3a1b32 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -1715,6 +1715,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2214,6 +2215,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2397,6 +2399,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 0c68fb1b7c..7bdd5c1a03 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 697f072fd4..6b0a6ef07e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -1715,6 +1715,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2247,6 +2248,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2442,6 +2444,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 2647bb51f1..d4fcc5479a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x438
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x438
 GLIBC_2.12 sys_nerr D 0x4
@@ -2077,6 +2078,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2260,6 +2262,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index c7f6167250..335cda5763 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -215,7 +214,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 036b1c8345..bbe387fe61 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -1531,6 +1531,8 @@ 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_mutex_consistent F
+GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
@@ -2367,3 +2369,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 336ee51e7e..1d4fffb5a6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -102,8 +102,6 @@ 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
 GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_getprioceiling F
 GLIBC_2.17 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index ff3225e16f..684acb6795 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -1371,6 +1371,8 @@ 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_mutex_consistent F
+GLIBC_2.33 pthread_mutex_consistent_np F
 GLIBC_2.33 pthread_mutex_destroy F
 GLIBC_2.33 pthread_mutex_init F
 GLIBC_2.33 pthread_mutex_lock F
@@ -1934,3 +1936,4 @@ GLIBC_2.33 write F
 GLIBC_2.33 writev F
 GLIBC_2.33 wscanf F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 61b3c4ff7a..33b755ed10 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -116,8 +116,6 @@ 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
-GLIBC_2.33 pthread_mutex_consistent_np F
 GLIBC_2.33 pthread_mutex_destroy F
 GLIBC_2.33 pthread_mutex_getprioceiling F
 GLIBC_2.33 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index fb5ad9909f..6f8afeb03e 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -1433,6 +1433,8 @@ 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_mutex_consistent F
+GLIBC_2.27 pthread_mutex_consistent_np F
 GLIBC_2.27 pthread_mutex_destroy F
 GLIBC_2.27 pthread_mutex_init F
 GLIBC_2.27 pthread_mutex_lock F
@@ -2134,3 +2136,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 894c474fcb..4be8886aed 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -102,8 +102,6 @@ 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
 GLIBC_2.27 pthread_mutex_destroy F
 GLIBC_2.27 pthread_mutex_getprioceiling F
 GLIBC_2.27 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index cead75acc5..a4b1c00c78 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -1707,6 +1707,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2212,6 +2213,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2395,6 +2397,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index a198e22445..c3c66c7f6a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 31366dd7e6..c05c18c2bb 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x438
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x438
 GLIBC_2.12 sys_nerr D 0x4
@@ -2113,6 +2114,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2296,6 +2298,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 6d166d5f97..fa4b4cf747 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index a3a8be8910..635a05bf2f 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2082,6 +2083,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2151,6 +2153,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index a7bb15be58..02dca5bd52 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 8f505c5045..5b09a03eef 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2079,6 +2080,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2148,6 +2150,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index a7bb15be58..02dca5bd52 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 53ef6304f1..7019d97b8d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -1708,6 +1708,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x21c
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x21c
 GLIBC_2.12 sys_nerr D 0x4
@@ -2203,6 +2204,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
@@ -2412,6 +2414,7 @@ GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
 GLIBC_2.4 printf F
 GLIBC_2.4 printf_size F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 qecvt F
 GLIBC_2.4 qecvt_r F
 GLIBC_2.4 qfcvt F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 5c87b9baa0..e97e4d4dd5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
 GLIBC_2.1.2 __libpthread_version_placeholder F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index eba0cb156d..deb4735664 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x438
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x438
 GLIBC_2.12 sys_nerr D 0x4
@@ -2130,6 +2131,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2199,6 +2201,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 6fb2e05072..1f9d0edbc9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 17ce5dfd58..779b06605b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
 GLIBC_2.12 _sys_errlist D 0x438
 GLIBC_2.12 _sys_nerr D 0x4
 GLIBC_2.12 ntp_gettimex F
+GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 recvmmsg F
 GLIBC_2.12 sys_errlist D 0x438
 GLIBC_2.12 sys_nerr D 0x4
@@ -2089,6 +2090,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
@@ -2158,6 +2160,7 @@ GLIBC_2.4 open_wmemstream F
 GLIBC_2.4 openat F
 GLIBC_2.4 openat64 F
 GLIBC_2.4 ppoll F
+GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 readlinkat F
 GLIBC_2.4 renameat F
 GLIBC_2.4 symlinkat F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index f85ab1d3cd..01d330cad7 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -1,6 +1,5 @@
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
-GLIBC_2.12 pthread_mutex_consistent F
 GLIBC_2.12 pthread_mutexattr_getrobust F
 GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
@@ -215,7 +214,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
 GLIBC_2.30 sem_clockwait F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_getprioceiling F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 17a1c83903..a85d2af101 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -1450,6 +1450,8 @@ 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_mutex_consistent F
+GLIBC_2.16 pthread_mutex_consistent_np F
 GLIBC_2.16 pthread_mutex_destroy F
 GLIBC_2.16 pthread_mutex_init F
 GLIBC_2.16 pthread_mutex_lock F
@@ -2186,3 +2188,4 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 0e24fcd6bf..b470f2eed5 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -102,8 +102,6 @@ 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
 GLIBC_2.16 pthread_mutex_destroy F
 GLIBC_2.16 pthread_mutex_getprioceiling F
 GLIBC_2.16 pthread_mutex_init F
-- 
2.29.2



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

* [PATCH 02/18] nptl: Move __pthread_cleanup_routine into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
  2021-03-12 17:48 ` [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-15 19:53   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 03/18] nptl: Move legacy unwinding implementation " Florian Weimer
                   ` (15 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

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

diff --git a/nptl/Makefile b/nptl/Makefile
index 96bb47e152..b951fcb77e 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -30,6 +30,7 @@ extra-libs-others := $(extra-libs)
 
 routines = \
   alloca_cutoff \
+  cleanup_routine \
   elision-conf \
   elision-lock \
   elision-timed \
@@ -98,7 +99,6 @@ libpthread-routines = \
   cleanup_compat \
   cleanup_defer \
   cleanup_defer_compat \
-  cleanup_routine \
   events \
   flockfile \
   ftrylockfile \
diff --git a/nptl/Versions b/nptl/Versions
index e38d98709d..f2db649f9d 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -49,6 +49,7 @@ libc {
     pthread_cond_wait;
   }
   GLIBC_2.3.3 {
+    __pthread_cleanup_routine;
     pthread_attr_setaffinity_np;
     pthread_getaffinity_np;
   }
@@ -77,6 +78,7 @@ libc {
     pthread_sigmask;
   }
   GLIBC_2.34 {
+    __pthread_cleanup_routine;
     pthread_mutex_consistent;
   }
   GLIBC_PRIVATE {
@@ -312,7 +314,6 @@ libpthread {
   }
 
   GLIBC_2.3.3 {
-    __pthread_cleanup_routine;
     __pthread_register_cancel;
     __pthread_register_cancel_defer;
     __pthread_unregister_cancel;
diff --git a/nptl/cleanup_routine.c b/nptl/cleanup_routine.c
index 973f088be7..9710bf58ec 100644
--- a/nptl/cleanup_routine.c
+++ b/nptl/cleanup_routine.c
@@ -17,11 +17,19 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <pthread.h>
-
+#include <shlib-compat.h>
 
 void
-__pthread_cleanup_routine (struct __pthread_cleanup_frame *f)
+___pthread_cleanup_routine (struct __pthread_cleanup_frame *f)
 {
   if (f->__do_it)
     f->__cancel_routine (f->__cancel_arg);
 }
+versioned_symbol (libc, ___pthread_cleanup_routine, __pthread_cleanup_routine,
+                  GLIBC_2_34);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_34)
+strong_alias (___pthread_cleanup_routine, __pthread_cleanup_routine_alias)
+compat_symbol (libc, __pthread_cleanup_routine_alias,
+               __pthread_cleanup_routine, GLIBC_2_3_3);
+#endif
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 231330e591..a55f3d9667 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -338,6 +338,7 @@ GLIBC_2.17 __printf_fp F
 GLIBC_2.17 __profile_frequency F
 GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
+GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -2174,4 +2175,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 1d4fffb5a6..ad2492cb4c 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.17 __lseek F
 GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
-GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 72c1c3ae6a..54a11b7e76 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2147,6 +2147,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2255,6 +2256,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index e97e4d4dd5..1eff0da935 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 180b1e6244..a229125212 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -327,6 +327,7 @@ GLIBC_2.32 __printf_fp F
 GLIBC_2.32 __profile_frequency F
 GLIBC_2.32 __progname D 0x4
 GLIBC_2.32 __progname_full D 0x4
+GLIBC_2.32 __pthread_cleanup_routine F
 GLIBC_2.32 __ptsname_r_chk F
 GLIBC_2.32 __pwrite64 F
 GLIBC_2.32 __rawmemchr F
@@ -1934,4 +1935,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 2f76de6bfc..c635f1dac9 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -12,7 +12,6 @@ GLIBC_2.32 __lseek F
 GLIBC_2.32 __open F
 GLIBC_2.32 __open64 F
 GLIBC_2.32 __pread64 F
-GLIBC_2.32 __pthread_cleanup_routine F
 GLIBC_2.32 __pthread_getspecific F
 GLIBC_2.32 __pthread_key_create F
 GLIBC_2.32 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index e3781f0e83..cfc58ca510 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -157,6 +157,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -485,6 +486,7 @@ GLIBC_2.4 __printf_fp F
 GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
+GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index a3516931d6..79c5f66cff 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create 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 0cd363cc2d..e725ee6217 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -154,6 +154,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -482,6 +483,7 @@ GLIBC_2.4 __printf_fp F
 GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
+GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index a3516931d6..79c5f66cff 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create 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 c1e62a6df3..51d9d33b13 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -331,6 +331,7 @@ GLIBC_2.29 __printf_fp F
 GLIBC_2.29 __profile_frequency F
 GLIBC_2.29 __progname D 0x4
 GLIBC_2.29 __progname_full D 0x4
+GLIBC_2.29 __pthread_cleanup_routine F
 GLIBC_2.29 __ptsname_r_chk F
 GLIBC_2.29 __pwrite64 F
 GLIBC_2.29 __rawmemchr F
@@ -2118,4 +2119,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index f05530eb2a..e242edb9c3 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -12,7 +12,6 @@ GLIBC_2.29 __lseek F
 GLIBC_2.29 __open F
 GLIBC_2.29 __open64 F
 GLIBC_2.29 __pread64 F
-GLIBC_2.29 __pthread_cleanup_routine F
 GLIBC_2.29 __pthread_getspecific F
 GLIBC_2.29 __pthread_key_create F
 GLIBC_2.29 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 50d9080eb6..914aef5f35 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -1996,6 +1996,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2076,6 +2077,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 02dca5bd52..8ce3580478 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index d172849c32..f7ca08f695 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2161,6 +2161,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2243,6 +2244,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 92acdbc721..d3fc0f2d70 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index e9e82e5ec8..a77ab9816b 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2028,6 +2028,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2108,6 +2109,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 1f9d0edbc9..d7000f415e 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index b0c0d7208d..49a3997d83 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -158,6 +158,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
@@ -471,6 +472,7 @@ GLIBC_2.4 __printf_fp F
 GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
+GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index a3516931d6..79c5f66cff 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create 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 c312a9e726..9969b02829 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2105,6 +2105,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2188,6 +2189,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 92acdbc721..d3fc0f2d70 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 4e5f7336c3..eb6d753ae8 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -339,6 +339,7 @@ GLIBC_2.18 __printf_fp F
 GLIBC_2.18 __profile_frequency F
 GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
+GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -2169,4 +2170,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 4849b99385..c096915557 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.18 __lseek F
 GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
-GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 374e48889a..7c3d154267 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -339,6 +339,7 @@ GLIBC_2.18 __printf_fp F
 GLIBC_2.18 __profile_frequency F
 GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
+GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -2166,4 +2167,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 4849b99385..c096915557 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.18 __lseek F
 GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
-GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index f4c9a0e288..bb2c61d8b4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2079,6 +2079,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2159,6 +2160,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 23f58b6459..358a13524a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -200,7 +200,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 1935dd7207..7a418b2e12 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2077,6 +2077,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2157,6 +2158,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 23f58b6459..358a13524a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -200,7 +200,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 130dd19d46..29d9e4045a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2085,6 +2085,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2165,6 +2166,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index a8728b1a57..404789db07 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2078,6 +2078,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x400
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2159,6 +2160,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 040ee6c0b6..468444aa86 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -376,6 +376,7 @@ GLIBC_2.21 __printf_fp F
 GLIBC_2.21 __profile_frequency F
 GLIBC_2.21 __progname D 0x4
 GLIBC_2.21 __progname_full D 0x4
+GLIBC_2.21 __pthread_cleanup_routine F
 GLIBC_2.21 __ptsname_r_chk F
 GLIBC_2.21 __pwrite64 F
 GLIBC_2.21 __rawmemchr F
@@ -2207,4 +2208,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 0c7fe737a0..6379c1f86c 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.21 __lseek F
 GLIBC_2.21 __open F
 GLIBC_2.21 __open64 F
 GLIBC_2.21 __pread64 F
-GLIBC_2.21 __pthread_cleanup_routine F
 GLIBC_2.21 __pthread_getspecific F
 GLIBC_2.21 __pthread_key_create F
 GLIBC_2.21 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index d51a3a1b32..41ba4fdb29 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2109,6 +2109,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 getcontext F
 GLIBC_2.3.3 gnu_dev_major F
@@ -2215,6 +2216,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 7bdd5c1a03..7c6e78f6ce 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 6b0a6ef07e..1d030db5f7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2142,6 +2142,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 getcontext F
 GLIBC_2.3.3 gnu_dev_major F
@@ -2248,6 +2249,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index d4fcc5479a..9f86b81d65 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -1977,6 +1977,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2078,6 +2079,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 335cda5763..773d873bd1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -190,7 +190,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index bbe387fe61..599d06d56f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -424,6 +424,7 @@ GLIBC_2.17 __printf_fp F
 GLIBC_2.17 __profile_frequency F
 GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
+GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -2369,4 +2370,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 1d4fffb5a6..ad2492cb4c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.17 __lseek F
 GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
-GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 684acb6795..9f0068ba1c 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -324,6 +324,7 @@ GLIBC_2.33 __printf_fp F
 GLIBC_2.33 __profile_frequency F
 GLIBC_2.33 __progname D 0x4
 GLIBC_2.33 __progname_full D 0x4
+GLIBC_2.33 __pthread_cleanup_routine F
 GLIBC_2.33 __ptsname_r_chk F
 GLIBC_2.33 __pwrite64 F
 GLIBC_2.33 __rawmemchr F
@@ -1936,4 +1937,5 @@ GLIBC_2.33 write F
 GLIBC_2.33 writev F
 GLIBC_2.33 wscanf F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 33b755ed10..76484b8073 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -12,7 +12,6 @@ GLIBC_2.33 __lseek F
 GLIBC_2.33 __open F
 GLIBC_2.33 __open64 F
 GLIBC_2.33 __pread64 F
-GLIBC_2.33 __pthread_cleanup_routine F
 GLIBC_2.33 __pthread_getspecific F
 GLIBC_2.33 __pthread_key_create F
 GLIBC_2.33 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 6f8afeb03e..833d6f11d6 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -335,6 +335,7 @@ GLIBC_2.27 __printf_fp F
 GLIBC_2.27 __profile_frequency F
 GLIBC_2.27 __progname D 0x8
 GLIBC_2.27 __progname_full D 0x8
+GLIBC_2.27 __pthread_cleanup_routine F
 GLIBC_2.27 __ptsname_r_chk F
 GLIBC_2.27 __pwrite64 F
 GLIBC_2.27 __rawmemchr F
@@ -2136,4 +2137,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 4be8886aed..2332ba5927 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.27 __lseek F
 GLIBC_2.27 __open F
 GLIBC_2.27 __open64 F
 GLIBC_2.27 __pread64 F
-GLIBC_2.27 __pthread_cleanup_routine F
 GLIBC_2.27 __pthread_getspecific F
 GLIBC_2.27 __pthread_key_create F
 GLIBC_2.27 __pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index a4b1c00c78..a3e732e82f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2118,6 +2118,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2213,6 +2214,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index c3c66c7f6a..28cf9cfcee 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -203,7 +203,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index c05c18c2bb..4443545ed0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2022,6 +2022,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2114,6 +2115,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index fa4b4cf747..5baa0fdd6f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -195,7 +195,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 635a05bf2f..f9cb4195cd 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2000,6 +2000,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2083,6 +2084,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 02dca5bd52..8ce3580478 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 5b09a03eef..e1ae67a464 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2000,6 +2000,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2080,6 +2081,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 02dca5bd52..8ce3580478 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 7019d97b8d..9ca458b1c5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2112,6 +2112,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2204,6 +2205,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index e97e4d4dd5..1eff0da935 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index deb4735664..6af3cc116b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2051,6 +2051,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2131,6 +2132,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 1f9d0edbc9..d7000f415e 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 779b06605b..e267cc2a23 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2009,6 +2009,7 @@ GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
+GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2090,6 +2091,7 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 01d330cad7..f0271930eb 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -192,7 +192,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
-GLIBC_2.3.3 __pthread_cleanup_routine F
 GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index a85d2af101..50e860fe40 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -339,6 +339,7 @@ GLIBC_2.16 __printf_fp F
 GLIBC_2.16 __profile_frequency F
 GLIBC_2.16 __progname D 0x4
 GLIBC_2.16 __progname_full D 0x4
+GLIBC_2.16 __pthread_cleanup_routine F
 GLIBC_2.16 __ptsname_r_chk F
 GLIBC_2.16 __pwrite64 F
 GLIBC_2.16 __rawmemchr F
@@ -2188,4 +2189,5 @@ GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
+GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index b470f2eed5..aa9e127bad 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.16 __lseek F
 GLIBC_2.16 __open F
 GLIBC_2.16 __open64 F
 GLIBC_2.16 __pread64 F
-GLIBC_2.16 __pthread_cleanup_routine F
 GLIBC_2.16 __pthread_getspecific F
 GLIBC_2.16 __pthread_key_create F
 GLIBC_2.16 __pthread_mutex_destroy F
-- 
2.29.2



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

* [PATCH 03/18] nptl: Move legacy unwinding implementation into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
  2021-03-12 17:48 ` [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc Florian Weimer
  2021-03-12 17:49 ` [PATCH 02/18] nptl: Move __pthread_cleanup_routine " Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-15 20:02   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
                   ` (14 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

It is still used internally.  Since unwinding is now available
unconditionally, avoid indirect calls through function pointers loaded
from the stack by inlining the non-cancellation cleanup code.  This
avoids a regression in security hardening.

The out-of-line  __libc_cleanup_routine implementation is no longer
needed because the inline definition is now static __always_inline.
---
 nptl/Versions                    |  2 +
 nptl/cleanup_defer_compat.c      | 56 ++--------------------------
 nptl/libc-cleanup.c              | 64 ++++++++++++++++++++++++++++++--
 nptl/nptl-init.c                 |  2 -
 sysdeps/nptl/libc-lock.h         | 59 ++++++++++++++---------------
 sysdeps/nptl/libc-lockP.h        | 26 +------------
 sysdeps/nptl/pthread-functions.h |  4 --
 7 files changed, 97 insertions(+), 116 deletions(-)

diff --git a/nptl/Versions b/nptl/Versions
index f2db649f9d..e3eb686a04 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -86,6 +86,8 @@ libc {
     __futex_abstimed_wait_cancelable64;
     __libc_alloca_cutoff;
     __libc_allocate_rtsig_private;
+    __libc_cleanup_pop_restore;
+    __libc_cleanup_push_defer;
     __libc_current_sigrtmax_private;
     __libc_current_sigrtmin_private;
     __libc_dl_error_tsd;
diff --git a/nptl/cleanup_defer_compat.c b/nptl/cleanup_defer_compat.c
index 49ef53ea60..1957318208 100644
--- a/nptl/cleanup_defer_compat.c
+++ b/nptl/cleanup_defer_compat.c
@@ -17,41 +17,15 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include "pthreadP.h"
-
+#include <libc-lock.h>
 
 void
 _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
 			     void (*routine) (void *), void *arg)
 {
-  struct pthread *self = THREAD_SELF;
-
   buffer->__routine = routine;
   buffer->__arg = arg;
-  buffer->__prev = THREAD_GETMEM (self, cleanup);
-
-  int cancelhandling = THREAD_GETMEM (self, cancelhandling);
-
-  /* Disable asynchronous cancellation for now.  */
-  if (__glibc_unlikely (cancelhandling & CANCELTYPE_BITMASK))
-    while (1)
-      {
-	int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
-						cancelhandling
-						& ~CANCELTYPE_BITMASK,
-						cancelhandling);
-	if (__glibc_likely (curval == cancelhandling))
-	  /* Successfully replaced the value.  */
-	  break;
-
-	/* Prepare for the next round.  */
-	cancelhandling = curval;
-      }
-
-  buffer->__canceltype = (cancelhandling & CANCELTYPE_BITMASK
-			  ? PTHREAD_CANCEL_ASYNCHRONOUS
-			  : PTHREAD_CANCEL_DEFERRED);
-
-  THREAD_SETMEM (self, cleanup, buffer);
+  __libc_cleanup_push_defer (buffer);
 }
 strong_alias (_pthread_cleanup_push_defer, __pthread_cleanup_push_defer)
 
@@ -60,31 +34,7 @@ void
 _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
 			      int execute)
 {
-  struct pthread *self = THREAD_SELF;
-
-  THREAD_SETMEM (self, cleanup, buffer->__prev);
-
-  int cancelhandling;
-  if (__builtin_expect (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED, 0)
-      && ((cancelhandling = THREAD_GETMEM (self, cancelhandling))
-	  & CANCELTYPE_BITMASK) == 0)
-    {
-      while (1)
-	{
-	  int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
-						  cancelhandling
-						  | CANCELTYPE_BITMASK,
-						  cancelhandling);
-	  if (__glibc_likely (curval == cancelhandling))
-	    /* Successfully replaced the value.  */
-	    break;
-
-	  /* Prepare for the next round.  */
-	  cancelhandling = curval;
-	}
-
-      CANCELLATION_P (self);
-    }
+  __libc_cleanup_pop_restore (buffer);
 
   /* If necessary call the cleanup routine after we removed the
      current cleanup block from the list.  */
diff --git a/nptl/libc-cleanup.c b/nptl/libc-cleanup.c
index 61f97eceda..14ccfe9285 100644
--- a/nptl/libc-cleanup.c
+++ b/nptl/libc-cleanup.c
@@ -17,11 +17,69 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include "pthreadP.h"
+#include <tls.h>
+#include <libc-lock.h>
 
+void
+__libc_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer)
+{
+  struct pthread *self = THREAD_SELF;
+
+  buffer->__prev = THREAD_GETMEM (self, cleanup);
+
+  int cancelhandling = THREAD_GETMEM (self, cancelhandling);
+
+  /* Disable asynchronous cancellation for now.  */
+  if (__glibc_unlikely (cancelhandling & CANCELTYPE_BITMASK))
+    while (1)
+      {
+	int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
+						cancelhandling
+						& ~CANCELTYPE_BITMASK,
+						cancelhandling);
+	if (__glibc_likely (curval == cancelhandling))
+	  /* Successfully replaced the value.  */
+	  break;
+
+	/* Prepare for the next round.  */
+	cancelhandling = curval;
+      }
+
+  buffer->__canceltype = (cancelhandling & CANCELTYPE_BITMASK
+			  ? PTHREAD_CANCEL_ASYNCHRONOUS
+			  : PTHREAD_CANCEL_DEFERRED);
+
+  THREAD_SETMEM (self, cleanup, buffer);
+}
+libc_hidden_def (__libc_cleanup_push_defer)
 
 void
-__libc_cleanup_routine (struct __pthread_cleanup_frame *f)
+__libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer)
 {
-  if (f->__do_it)
-    f->__cancel_routine (f->__cancel_arg);
+  struct pthread *self = THREAD_SELF;
+
+  THREAD_SETMEM (self, cleanup, buffer->__prev);
+
+  int cancelhandling;
+  if (__builtin_expect (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED, 0)
+      && ((cancelhandling = THREAD_GETMEM (self, cancelhandling))
+	  & CANCELTYPE_BITMASK) == 0)
+    {
+      while (1)
+	{
+	  int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
+						  cancelhandling
+						  | CANCELTYPE_BITMASK,
+						  cancelhandling);
+	  if (__glibc_likely (curval == cancelhandling))
+	    /* Successfully replaced the value.  */
+	    break;
+
+	  /* Prepare for the next round.  */
+	  cancelhandling = curval;
+	}
+
+      CANCELLATION_P (self);
+    }
 }
+libc_hidden_def (__libc_cleanup_pop_restore)
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 865ee8db29..c2b563cc68 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -96,8 +96,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_key_create = __pthread_key_create,
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
-    .ptr__pthread_cleanup_push_defer = __pthread_cleanup_push_defer,
-    .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore,
     .ptr_nthreads = &__nptl_nthreads,
     .ptr___pthread_unwind = &__pthread_unwind,
     .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h
index dea96121b3..56fe83f69f 100644
--- a/sysdeps/nptl/libc-lock.h
+++ b/sysdeps/nptl/libc-lock.h
@@ -143,39 +143,40 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
   __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
 #endif
 
-/* Note that for I/O cleanup handling we are using the old-style
-   cancel handling.  It does not have to be integrated with C++ since
-   no C++ code is called in the middle.  The old-style handling is
-   faster and the support is not going away.  */
-extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
-					 void (*routine) (void *), void *arg);
-extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
-					  int execute);
+/* Put the unwind buffer BUFFER on the per-thread callback stack.  The
+   caller must fill BUFFER->__routine and BUFFER->__arg before calling
+   this function.  */
+void __libc_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer);
+libc_hidden_proto (__libc_cleanup_push_defer)
+/* Remove BUFFER from the unwind callback stack.  The caller must invoke
+   the callback if desired.  */
+void __libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer);
+libc_hidden_proto (__libc_cleanup_pop_restore)
 
 /* Start critical region with cleanup.  */
-#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
-  { struct _pthread_cleanup_buffer _buffer;				      \
-    int _avail;								      \
-    if (DOIT) {								      \
-      _avail = PTFAVAIL (_pthread_cleanup_push_defer);			      \
-      if (_avail) {							      \
-	__libc_ptf_call_always (_pthread_cleanup_push_defer, (&_buffer, FCT,  \
-							      ARG));	      \
-      } else {								      \
-	_buffer.__routine = (FCT);					      \
-	_buffer.__arg = (ARG);						      \
-      }									      \
-    } else {								      \
-      _avail = 0;							      \
-    }
+#define __libc_cleanup_region_start(DOIT, FCT, ARG)			\
+  {   bool _cleanup_start_doit;						\
+  struct _pthread_cleanup_buffer _buffer;				\
+  /* Non-addresable copy of FCT, so that we avoid indirect calls on	\
+     the non-unwinding path.  */					\
+  void (*_cleanup_routine) (void *) = (FCT);				\
+  _buffer.__arg = (ARG);						\
+  if (DOIT)								\
+    {									\
+      _cleanup_start_doit = true;					\
+      _buffer.__routine = _cleanup_routine;				\
+      __libc_cleanup_push_defer (&_buffer);				\
+    }									\
+  else									\
+      _cleanup_start_doit = false;
 
 /* End critical region with cleanup.  */
-#define __libc_cleanup_region_end(DOIT) \
-    if (_avail) {							      \
-      __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
-    } else if (DOIT)							      \
-      _buffer.__routine (_buffer.__arg);				      \
-  }
+#define __libc_cleanup_region_end(DOIT)		\
+  if (_cleanup_start_doit)			\
+    __libc_cleanup_pop_restore (&_buffer);	\
+  if (DOIT)					\
+    _cleanup_routine (_buffer.__arg);		\
+  } /* matches __libc_cleanup_region_start */
 
 
 /* Hide the definitions which are only supposed to be used inside libc in
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 4a0b96e6d9..1a861b0d3f 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -251,32 +251,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 /* Get once control variable.  */
 #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)
 
-/* Note that for I/O cleanup handling we are using the old-style
-   cancel handling.  It does not have to be integrated with C++ snce
-   no C++ code is called in the middle.  The old-style handling is
-   faster and the support is not going away.  */
-extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
-				   void (*routine) (void *), void *arg);
-extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
-				  int execute);
-extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
-					 void (*routine) (void *), void *arg);
-extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
-					  int execute);
-
-/* Sometimes we have to exit the block in the middle.  */
-#define __libc_cleanup_end(DOIT) \
-    if (_avail) {							      \
-      __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
-    } else if (DOIT)							      \
-      _buffer.__routine (_buffer.__arg)
-
 /* __libc_cleanup_push and __libc_cleanup_pop depend on exception
    handling and stack unwinding.  */
 #ifdef __EXCEPTIONS
 
 /* Normal cleanup handling, based on C cleanup attribute.  */
-__extern_inline void
+static __always_inline void
 __libc_cleanup_routine (struct __pthread_cleanup_frame *f)
 {
   if (f->__do_it)
@@ -396,8 +376,6 @@ weak_extern (__pthread_once)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 weak_extern (__pthread_setcancelstate)
-weak_extern (_pthread_cleanup_push_defer)
-weak_extern (_pthread_cleanup_pop_restore)
 # else
 #  pragma weak __pthread_mutex_init
 #  pragma weak __pthread_mutex_destroy
@@ -420,8 +398,6 @@ weak_extern (_pthread_cleanup_pop_restore)
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
 #  pragma weak __pthread_setcancelstate
-#  pragma weak _pthread_cleanup_push_defer
-#  pragma weak _pthread_cleanup_pop_restore
 # endif
 #endif
 
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 97a5c48939..4268084b66 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -57,10 +57,6 @@ struct pthread_functions
   int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *));
   void *(*ptr___pthread_getspecific) (pthread_key_t);
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
-  void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer *,
-					   void (*) (void *), void *);
-  void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *,
-					    int);
 #define HAVE_PTR_NTHREADS
   unsigned int *ptr_nthreads;
   void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *)
-- 
2.29.2



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

* [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (2 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 03/18] nptl: Move legacy unwinding implementation " Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-16 14:09   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
                   ` (13 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

This affects _pthread_cleanup_pop, _pthread_cleanup_pop_restore,
_pthread_cleanup_push, _pthread_cleanup_push_defer.  The symbols
have been moved using scripts/move-symbol-to-libc.py.

No new symbol versions are added because the symbols are turned into
compatibility symbols at the same time.
---
 nptl/Makefile                                 | 15 ++++++++++----
 nptl/Versions                                 | 10 ++++++----
 nptl/cleanup_compat.c                         | 16 +++++++++------
 nptl/cleanup_defer_compat.c                   | 20 ++++++++++++-------
 nptl/pthreadP.h                               | 17 ++++++++--------
 nptl/tst-cleanup4.c                           |  5 +++++
 nptl/tst-cleanup4aux.c                        |  5 +++++
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  4 ++++
 .../sysv/linux/aarch64/libpthread.abilist     |  4 ----
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  4 ++++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  4 ----
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  4 ++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  4 ----
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  4 ++++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  4 ----
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  4 ++++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  4 ----
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  4 ++++
 .../unix/sysv/linux/csky/libpthread.abilist   |  4 ----
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  4 ++++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  4 ----
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  4 ++++
 .../unix/sysv/linux/i386/libpthread.abilist   |  4 ----
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  4 ++++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  4 ----
 .../sysv/linux/m68k/coldfire/libc.abilist     |  4 ++++
 .../linux/m68k/coldfire/libpthread.abilist    |  4 ----
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  4 ++++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  4 ----
 .../sysv/linux/microblaze/be/libc.abilist     |  4 ++++
 .../linux/microblaze/be/libpthread.abilist    |  4 ----
 .../sysv/linux/microblaze/le/libc.abilist     |  4 ++++
 .../linux/microblaze/le/libpthread.abilist    |  4 ----
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  4 ++++
 .../sysv/linux/mips/mips32/libpthread.abilist |  4 ----
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  4 ++++
 .../sysv/linux/mips/mips64/libpthread.abilist |  4 ----
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  4 ++++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  4 ++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  4 ++++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  4 ----
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  4 ++++
 .../powerpc/powerpc32/libpthread.abilist      |  4 ----
 .../powerpc/powerpc32/nofpu/libc.abilist      |  4 ++++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  4 ++++
 .../powerpc/powerpc64/be/libpthread.abilist   |  4 ----
 .../linux/powerpc/powerpc64/le/libc.abilist   |  4 ++++
 .../powerpc/powerpc64/le/libpthread.abilist   |  4 ----
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  4 ++++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  4 ----
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  4 ++++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  4 ----
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  4 ++++
 .../linux/s390/s390-32/libpthread.abilist     |  4 ----
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  4 ++++
 .../linux/s390/s390-64/libpthread.abilist     |  4 ----
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  4 ++++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  4 ----
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  4 ++++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  4 ----
 .../sysv/linux/sparc/sparc32/libc.abilist     |  4 ++++
 .../linux/sparc/sparc32/libpthread.abilist    |  4 ----
 .../sysv/linux/sparc/sparc64/libc.abilist     |  4 ++++
 .../linux/sparc/sparc64/libpthread.abilist    |  4 ----
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  4 ++++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  4 ----
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  4 ++++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  4 ----
 68 files changed, 186 insertions(+), 146 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index b951fcb77e..147a8d3d59 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -30,6 +30,8 @@ extra-libs-others := $(extra-libs)
 
 routines = \
   alloca_cutoff \
+  cleanup_compat \
+  cleanup_defer_compat \
   cleanup_routine \
   elision-conf \
   elision-lock \
@@ -96,9 +98,7 @@ libpthread-routines = \
   $(pthread-compat-wrappers) \
   cancellation \
   cleanup \
-  cleanup_compat \
   cleanup_defer \
-  cleanup_defer_compat \
   events \
   flockfile \
   ftrylockfile \
@@ -344,7 +344,6 @@ tests = tst-attr2 tst-attr3 tst-default-attr \
 	tst-tsd3 tst-tsd4 \
 	tst-cancel4_1 tst-cancel4_2 \
 	tst-cancel7 tst-cancel17 tst-cancel24 \
-	tst-cleanup4 \
 	tst-signal3 \
 	tst-exec4 tst-exec5 \
 	tst-stack2 tst-stack3 tst-stack4 \
@@ -418,7 +417,7 @@ endif
 
 LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
 
-tests += tst-cancelx7 tst-cancelx17 tst-cleanupx4
+tests += tst-cancelx7 tst-cancelx17
 
 ifeq ($(build-shared),yes)
 tests += tst-compat-forwarder tst-audit-threads
@@ -438,6 +437,14 @@ extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \
 		   tst-cleanup4aux.o tst-cleanupx4aux.o
 test-extras += tst-cleanup4aux tst-cleanupx4aux
 
+# This test exercises compat symbols removed in glibc 2.34.
+ifdef have-GLIBC_2.33
+tests += tst-cleanup4
+ifeq ($(build-shared),yes)
+tests += tst-cleanupx4
+endif
+endif
+
 tst-tls3mod.so-no-z-defs = yes
 tst-tls5mod.so-no-z-defs = yes
 tst-tls5moda.so-no-z-defs = yes
diff --git a/nptl/Versions b/nptl/Versions
index e3eb686a04..ff6eae2566 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -1,5 +1,9 @@
 libc {
   GLIBC_2.0 {
+    _pthread_cleanup_pop;
+    _pthread_cleanup_pop_restore;
+    _pthread_cleanup_push;
+    _pthread_cleanup_push_defer;
     pthread_attr_destroy;
     pthread_attr_getdetachstate;
     pthread_attr_getinheritsched;
@@ -103,6 +107,8 @@ libc {
     __pthread_attr_init;
     __pthread_attr_setaffinity_np;
     __pthread_attr_setsigmask_internal;
+    __pthread_cleanup_pop;
+    __pthread_cleanup_push;
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
@@ -141,10 +147,6 @@ libpthread {
     __sigaction;
     __write;
     _exit;
-    _pthread_cleanup_pop;
-    _pthread_cleanup_pop_restore;
-    _pthread_cleanup_push;
-    _pthread_cleanup_push_defer;
     accept;
     close;
     connect;
diff --git a/nptl/cleanup_compat.c b/nptl/cleanup_compat.c
index fec88c2f86..b5fd657c38 100644
--- a/nptl/cleanup_compat.c
+++ b/nptl/cleanup_compat.c
@@ -16,12 +16,12 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
 #include <stdlib.h>
 #include "pthreadP.h"
 
-
 void
-_pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
+__pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
 		       void (*routine) (void *), void *arg)
 {
   struct pthread *self = THREAD_SELF;
@@ -32,11 +32,10 @@ _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
 
   THREAD_SETMEM (self, cleanup, buffer);
 }
-strong_alias (_pthread_cleanup_push, __pthread_cleanup_push)
-
+libc_hidden_def (__pthread_cleanup_push)
 
 void
-_pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
+__pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
 {
   struct pthread *self __attribute ((unused)) = THREAD_SELF;
 
@@ -47,4 +46,9 @@ _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
   if (execute)
     buffer->__routine (buffer->__arg);
 }
-strong_alias (_pthread_cleanup_pop, __pthread_cleanup_pop)
+libc_hidden_def (__pthread_cleanup_pop)
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, __pthread_cleanup_push, _pthread_cleanup_push, GLIBC_2_0);
+compat_symbol (libc, __pthread_cleanup_pop, _pthread_cleanup_pop, GLIBC_2_0);
+#endif /* SHLIB_COMPAT  */
diff --git a/nptl/cleanup_defer_compat.c b/nptl/cleanup_defer_compat.c
index 1957318208..a172218b42 100644
--- a/nptl/cleanup_defer_compat.c
+++ b/nptl/cleanup_defer_compat.c
@@ -16,10 +16,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include "pthreadP.h"
-#include <libc-lock.h>
+#include <shlib-compat.h>
 
-void
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+# include "pthreadP.h"
+# include <libc-lock.h>
+
+void attribute_compat_text_section
 _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
 			     void (*routine) (void *), void *arg)
 {
@@ -27,10 +30,10 @@ _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
   buffer->__arg = arg;
   __libc_cleanup_push_defer (buffer);
 }
-strong_alias (_pthread_cleanup_push_defer, __pthread_cleanup_push_defer)
-
+compat_symbol (libc, _pthread_cleanup_push_defer,
+	       _pthread_cleanup_push_defer, GLIBC_2_0);
 
-void
+void attribute_compat_text_section
 _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
 			      int execute)
 {
@@ -41,4 +44,7 @@ _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
   if (execute)
     buffer->__routine (buffer->__arg);
 }
-strong_alias (_pthread_cleanup_pop_restore, __pthread_cleanup_pop_restore)
+compat_symbol (libc, _pthread_cleanup_pop_restore,
+	       _pthread_cleanup_pop_restore, GLIBC_2_0);
+
+#endif /* SHLIB_COMPAT */
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index c8538de44f..781bc65c1c 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -585,11 +585,10 @@ libc_hidden_proto (__pthread_attr_setsigmask_internal)
 extern __typeof (pthread_attr_getsigmask_np) __pthread_attr_getsigmask_np;
 libc_hidden_proto (__pthread_attr_getsigmask_np)
 
-#if IS_IN (libpthread)
 /* Special versions which use non-exported functions.  */
 extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
-				    void (*routine) (void *), void *arg)
-     attribute_hidden;
+				    void (*routine) (void *), void *arg);
+libc_hidden_proto (__pthread_cleanup_push)
 
 /* Replace cleanup macros defined in <pthread.h> with internal
    versions that don't depend on unwind info and better support
@@ -600,12 +599,13 @@ extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
   __pthread_cleanup_push (&_buffer, (routine), (arg));
 
 extern void __pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
-				   int execute) attribute_hidden;
+				   int execute);
+libc_hidden_proto (__pthread_cleanup_pop)
 # undef pthread_cleanup_pop
 # define pthread_cleanup_pop(execute)                   \
   __pthread_cleanup_pop (&_buffer, (execute)); }
 
-# if defined __EXCEPTIONS && !defined __cplusplus
+#if defined __EXCEPTIONS && !defined __cplusplus
 /* Structure to hold the cleanup handler information.  */
 struct __pthread_cleanup_combined_frame
 {
@@ -646,7 +646,7 @@ __pthread_cleanup_combined_routine_voidptr (void *__arg)
     }
 }
 
-#  define pthread_cleanup_combined_push(routine, arg) \
+# define pthread_cleanup_combined_push(routine, arg) \
   do {									      \
     void (*__cancel_routine) (void *) = (routine);			      \
     struct __pthread_cleanup_combined_frame __clframe			      \
@@ -657,15 +657,14 @@ __pthread_cleanup_combined_routine_voidptr (void *__arg)
 			    __pthread_cleanup_combined_routine_voidptr,	      \
 			    &__clframe);
 
-#  define pthread_cleanup_combined_pop(execute) \
+# define pthread_cleanup_combined_pop(execute) \
     __pthread_cleanup_pop (&__clframe.__buffer, 0);			      \
     __clframe.__do_it = 0;						      \
     if (execute)							      \
       __cancel_routine (__clframe.__cancel_arg);			      \
   } while (0)
 
-# endif
-#endif
+#endif /* __EXCEPTIONS && !defined __cplusplus */
 
 extern void __pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
 					  void (*routine) (void *), void *arg);
diff --git a/nptl/tst-cleanup4.c b/nptl/tst-cleanup4.c
index 24c062db1a..4eb51580bc 100644
--- a/nptl/tst-cleanup4.c
+++ b/nptl/tst-cleanup4.c
@@ -17,6 +17,7 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <pthread.h>
+#include <shlib-compat.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -25,8 +26,12 @@
 extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
                                    void (*__routine) (void *),
                                    void *__arg);
+compat_symbol_reference (libc, _pthread_cleanup_push,
+                         _pthread_cleanup_push, GLIBC_2_0);
 extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
                                   int __execute);
+compat_symbol_reference (libc, _pthread_cleanup_pop,
+                         _pthread_cleanup_pop, GLIBC_2_0);
 
 static int fds[2];
 static pthread_barrier_t b2;
diff --git a/nptl/tst-cleanup4aux.c b/nptl/tst-cleanup4aux.c
index d20730ddf2..7713f9c612 100644
--- a/nptl/tst-cleanup4aux.c
+++ b/nptl/tst-cleanup4aux.c
@@ -17,6 +17,7 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <pthread.h>
+#include <shlib-compat.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -24,8 +25,12 @@
 extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
                                    void (*__routine) (void *),
                                    void *__arg);
+compat_symbol_reference (libc, _pthread_cleanup_push,
+                         _pthread_cleanup_push, GLIBC_2_0);
 extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
                                   int __execute);
+compat_symbol_reference (libc, _pthread_cleanup_pop,
+                         _pthread_cleanup_pop, GLIBC_2_0);
 
 extern void clh (void *arg);
 extern void fn0 (void);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index a55f3d9667..a585f7d30d 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -538,6 +538,10 @@ GLIBC_2.17 _obstack_begin_1 F
 GLIBC_2.17 _obstack_free F
 GLIBC_2.17 _obstack_memory_used F
 GLIBC_2.17 _obstack_newchunk F
+GLIBC_2.17 _pthread_cleanup_pop F
+GLIBC_2.17 _pthread_cleanup_pop_restore F
+GLIBC_2.17 _pthread_cleanup_push F
+GLIBC_2.17 _pthread_cleanup_push_defer F
 GLIBC_2.17 _res D 0x238
 GLIBC_2.17 _res_hconf D 0x48
 GLIBC_2.17 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index ad2492cb4c..6047fa274f 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.17 __res_state F
 GLIBC_2.17 __send F
 GLIBC_2.17 __sigaction F
 GLIBC_2.17 __write F
-GLIBC_2.17 _pthread_cleanup_pop F
-GLIBC_2.17 _pthread_cleanup_pop_restore F
-GLIBC_2.17 _pthread_cleanup_push F
-GLIBC_2.17 _pthread_cleanup_push_defer F
 GLIBC_2.17 accept F
 GLIBC_2.17 close F
 GLIBC_2.17 connect F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 54a11b7e76..c9ac935ccf 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -277,6 +277,10 @@ GLIBC_2.0 _obstack_newchunk F
 GLIBC_2.0 _outb F
 GLIBC_2.0 _outl F
 GLIBC_2.0 _outw F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x238
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 1eff0da935..5f8c13bb69 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index a229125212..27fecc5c8a 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -506,6 +506,10 @@ GLIBC_2.32 _obstack_begin_1 F
 GLIBC_2.32 _obstack_free F
 GLIBC_2.32 _obstack_memory_used F
 GLIBC_2.32 _obstack_newchunk F
+GLIBC_2.32 _pthread_cleanup_pop F
+GLIBC_2.32 _pthread_cleanup_pop_restore F
+GLIBC_2.32 _pthread_cleanup_push F
+GLIBC_2.32 _pthread_cleanup_push_defer F
 GLIBC_2.32 _res D 0x200
 GLIBC_2.32 _res_hconf D 0x30
 GLIBC_2.32 _setjmp F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index c635f1dac9..9713a20071 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -42,10 +42,6 @@ GLIBC_2.32 __res_state F
 GLIBC_2.32 __send F
 GLIBC_2.32 __sigaction F
 GLIBC_2.32 __write F
-GLIBC_2.32 _pthread_cleanup_pop F
-GLIBC_2.32 _pthread_cleanup_pop_restore F
-GLIBC_2.32 _pthread_cleanup_push F
-GLIBC_2.32 _pthread_cleanup_push_defer F
 GLIBC_2.32 accept F
 GLIBC_2.32 call_once F
 GLIBC_2.32 close F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index cfc58ca510..2383d95094 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -683,6 +683,10 @@ GLIBC_2.4 _obstack_begin_1 F
 GLIBC_2.4 _obstack_free F
 GLIBC_2.4 _obstack_memory_used F
 GLIBC_2.4 _obstack_newchunk F
+GLIBC_2.4 _pthread_cleanup_pop F
+GLIBC_2.4 _pthread_cleanup_pop_restore F
+GLIBC_2.4 _pthread_cleanup_push F
+GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 _res D 0x200
 GLIBC_2.4 _res_hconf D 0x30
 GLIBC_2.4 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 79c5f66cff..c2e78416b8 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
 GLIBC_2.4 __send F
 GLIBC_2.4 __sigaction F
 GLIBC_2.4 __write F
-GLIBC_2.4 _pthread_cleanup_pop F
-GLIBC_2.4 _pthread_cleanup_pop_restore F
-GLIBC_2.4 _pthread_cleanup_push F
-GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 accept F
 GLIBC_2.4 close F
 GLIBC_2.4 connect F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index e725ee6217..bb46b8b5e3 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -680,6 +680,10 @@ GLIBC_2.4 _obstack_begin_1 F
 GLIBC_2.4 _obstack_free F
 GLIBC_2.4 _obstack_memory_used F
 GLIBC_2.4 _obstack_newchunk F
+GLIBC_2.4 _pthread_cleanup_pop F
+GLIBC_2.4 _pthread_cleanup_pop_restore F
+GLIBC_2.4 _pthread_cleanup_push F
+GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 _res D 0x200
 GLIBC_2.4 _res_hconf D 0x30
 GLIBC_2.4 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 79c5f66cff..c2e78416b8 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
 GLIBC_2.4 __send F
 GLIBC_2.4 __sigaction F
 GLIBC_2.4 __write F
-GLIBC_2.4 _pthread_cleanup_pop F
-GLIBC_2.4 _pthread_cleanup_pop_restore F
-GLIBC_2.4 _pthread_cleanup_push F
-GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 accept F
 GLIBC_2.4 close F
 GLIBC_2.4 connect F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 51d9d33b13..684e451f83 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -515,6 +515,10 @@ GLIBC_2.29 _obstack_begin_1 F
 GLIBC_2.29 _obstack_free F
 GLIBC_2.29 _obstack_memory_used F
 GLIBC_2.29 _obstack_newchunk F
+GLIBC_2.29 _pthread_cleanup_pop F
+GLIBC_2.29 _pthread_cleanup_pop_restore F
+GLIBC_2.29 _pthread_cleanup_push F
+GLIBC_2.29 _pthread_cleanup_push_defer F
 GLIBC_2.29 _res D 0x200
 GLIBC_2.29 _res_hconf D 0x30
 GLIBC_2.29 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index e242edb9c3..bb8a51a51d 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -42,10 +42,6 @@ GLIBC_2.29 __res_state F
 GLIBC_2.29 __send F
 GLIBC_2.29 __sigaction F
 GLIBC_2.29 __write F
-GLIBC_2.29 _pthread_cleanup_pop F
-GLIBC_2.29 _pthread_cleanup_pop_restore F
-GLIBC_2.29 _pthread_cleanup_push F
-GLIBC_2.29 _pthread_cleanup_push_defer F
 GLIBC_2.29 accept F
 GLIBC_2.29 call_once F
 GLIBC_2.29 close F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 914aef5f35..8dde237f8b 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -502,6 +502,10 @@ GLIBC_2.2 _obstack_begin_1 F
 GLIBC_2.2 _obstack_free F
 GLIBC_2.2 _obstack_memory_used F
 GLIBC_2.2 _obstack_newchunk F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x200
 GLIBC_2.2 _res_hconf D 0x30
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 8ce3580478..8d7aa63a02 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index f7ca08f695..cc2226be23 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index d3fc0f2d70..ee156d6f49 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index a77ab9816b..438f3bd131 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -514,6 +514,10 @@ GLIBC_2.2 _obstack_newchunk F
 GLIBC_2.2 _outb F
 GLIBC_2.2 _outl F
 GLIBC_2.2 _outw F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x238
 GLIBC_2.2 _res_hconf D 0x48
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index d7000f415e..ab6a5cfb78 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 49a3997d83..5add3e607a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -671,6 +671,10 @@ GLIBC_2.4 _obstack_begin_1 F
 GLIBC_2.4 _obstack_free F
 GLIBC_2.4 _obstack_memory_used F
 GLIBC_2.4 _obstack_newchunk F
+GLIBC_2.4 _pthread_cleanup_pop F
+GLIBC_2.4 _pthread_cleanup_pop_restore F
+GLIBC_2.4 _pthread_cleanup_push F
+GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 _res D 0x1fe
 GLIBC_2.4 _res_hconf D 0x30
 GLIBC_2.4 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 79c5f66cff..c2e78416b8 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
 GLIBC_2.4 __send F
 GLIBC_2.4 __sigaction F
 GLIBC_2.4 __write F
-GLIBC_2.4 _pthread_cleanup_pop F
-GLIBC_2.4 _pthread_cleanup_pop_restore F
-GLIBC_2.4 _pthread_cleanup_push F
-GLIBC_2.4 _pthread_cleanup_push_defer F
 GLIBC_2.4 accept F
 GLIBC_2.4 close F
 GLIBC_2.4 connect F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 9969b02829..2e7c9f9b47 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x1fe
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index d3fc0f2d70..ee156d6f49 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index eb6d753ae8..493f7ddaa0 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -541,6 +541,10 @@ GLIBC_2.18 _obstack_begin_1 F
 GLIBC_2.18 _obstack_free F
 GLIBC_2.18 _obstack_memory_used F
 GLIBC_2.18 _obstack_newchunk F
+GLIBC_2.18 _pthread_cleanup_pop F
+GLIBC_2.18 _pthread_cleanup_pop_restore F
+GLIBC_2.18 _pthread_cleanup_push F
+GLIBC_2.18 _pthread_cleanup_push_defer F
 GLIBC_2.18 _res D 0x200
 GLIBC_2.18 _res_hconf D 0x30
 GLIBC_2.18 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index c096915557..1f516569ba 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.18 __res_state F
 GLIBC_2.18 __send F
 GLIBC_2.18 __sigaction F
 GLIBC_2.18 __write F
-GLIBC_2.18 _pthread_cleanup_pop F
-GLIBC_2.18 _pthread_cleanup_pop_restore F
-GLIBC_2.18 _pthread_cleanup_push F
-GLIBC_2.18 _pthread_cleanup_push_defer F
 GLIBC_2.18 accept F
 GLIBC_2.18 close F
 GLIBC_2.18 connect F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 7c3d154267..ec83b89aa3 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -541,6 +541,10 @@ GLIBC_2.18 _obstack_begin_1 F
 GLIBC_2.18 _obstack_free F
 GLIBC_2.18 _obstack_memory_used F
 GLIBC_2.18 _obstack_newchunk F
+GLIBC_2.18 _pthread_cleanup_pop F
+GLIBC_2.18 _pthread_cleanup_pop_restore F
+GLIBC_2.18 _pthread_cleanup_push F
+GLIBC_2.18 _pthread_cleanup_push_defer F
 GLIBC_2.18 _res D 0x200
 GLIBC_2.18 _res_hconf D 0x30
 GLIBC_2.18 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index c096915557..1f516569ba 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.18 __res_state F
 GLIBC_2.18 __send F
 GLIBC_2.18 __sigaction F
 GLIBC_2.18 __write F
-GLIBC_2.18 _pthread_cleanup_pop F
-GLIBC_2.18 _pthread_cleanup_pop_restore F
-GLIBC_2.18 _pthread_cleanup_push F
-GLIBC_2.18 _pthread_cleanup_push_defer F
 GLIBC_2.18 accept F
 GLIBC_2.18 close F
 GLIBC_2.18 connect F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index bb2c61d8b4..cb0ab4bc19 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 358a13524a..903f49957f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 7a418b2e12..2be2623e99 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 358a13524a..903f49957f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 29d9e4045a..09147861b5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 404789db07..4a0208c8c8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -260,6 +260,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x238
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 468444aa86..078025a7d6 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -582,6 +582,10 @@ GLIBC_2.21 _obstack_begin_1 F
 GLIBC_2.21 _obstack_free F
 GLIBC_2.21 _obstack_memory_used F
 GLIBC_2.21 _obstack_newchunk F
+GLIBC_2.21 _pthread_cleanup_pop F
+GLIBC_2.21 _pthread_cleanup_pop_restore F
+GLIBC_2.21 _pthread_cleanup_push F
+GLIBC_2.21 _pthread_cleanup_push_defer F
 GLIBC_2.21 _res D 0x200
 GLIBC_2.21 _res_hconf D 0x30
 GLIBC_2.21 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 6379c1f86c..cd41c7d42b 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.21 __res_state F
 GLIBC_2.21 __send F
 GLIBC_2.21 __sigaction F
 GLIBC_2.21 __write F
-GLIBC_2.21 _pthread_cleanup_pop F
-GLIBC_2.21 _pthread_cleanup_pop_restore F
-GLIBC_2.21 _pthread_cleanup_push F
-GLIBC_2.21 _pthread_cleanup_push_defer F
 GLIBC_2.21 accept F
 GLIBC_2.21 close F
 GLIBC_2.21 connect F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 41ba4fdb29..bc79b844a5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -275,6 +275,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 7c6e78f6ce..589a865796 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 1d030db5f7..63c05472ed 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -275,6 +275,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 9f86b81d65..37e4ee564d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -561,6 +561,10 @@ GLIBC_2.3 _obstack_begin_1 F
 GLIBC_2.3 _obstack_free F
 GLIBC_2.3 _obstack_memory_used F
 GLIBC_2.3 _obstack_newchunk F
+GLIBC_2.3 _pthread_cleanup_pop F
+GLIBC_2.3 _pthread_cleanup_pop_restore F
+GLIBC_2.3 _pthread_cleanup_push F
+GLIBC_2.3 _pthread_cleanup_push_defer F
 GLIBC_2.3 _res D 0x238
 GLIBC_2.3 _res_hconf D 0x48
 GLIBC_2.3 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 773d873bd1..7c1553be29 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.3 __res_state F
 GLIBC_2.3 __send F
 GLIBC_2.3 __sigaction F
 GLIBC_2.3 __write F
-GLIBC_2.3 _pthread_cleanup_pop F
-GLIBC_2.3 _pthread_cleanup_pop_restore F
-GLIBC_2.3 _pthread_cleanup_push F
-GLIBC_2.3 _pthread_cleanup_push_defer F
 GLIBC_2.3 accept F
 GLIBC_2.3 close F
 GLIBC_2.3 connect F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 599d06d56f..1888ec6e86 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -627,6 +627,10 @@ GLIBC_2.17 _obstack_begin_1 F
 GLIBC_2.17 _obstack_free F
 GLIBC_2.17 _obstack_memory_used F
 GLIBC_2.17 _obstack_newchunk F
+GLIBC_2.17 _pthread_cleanup_pop F
+GLIBC_2.17 _pthread_cleanup_pop_restore F
+GLIBC_2.17 _pthread_cleanup_push F
+GLIBC_2.17 _pthread_cleanup_push_defer F
 GLIBC_2.17 _res D 0x238
 GLIBC_2.17 _res_hconf D 0x48
 GLIBC_2.17 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index ad2492cb4c..6047fa274f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.17 __res_state F
 GLIBC_2.17 __send F
 GLIBC_2.17 __sigaction F
 GLIBC_2.17 __write F
-GLIBC_2.17 _pthread_cleanup_pop F
-GLIBC_2.17 _pthread_cleanup_pop_restore F
-GLIBC_2.17 _pthread_cleanup_push F
-GLIBC_2.17 _pthread_cleanup_push_defer F
 GLIBC_2.17 accept F
 GLIBC_2.17 close F
 GLIBC_2.17 connect F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 9f0068ba1c..8cd92b1abe 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -500,6 +500,10 @@ GLIBC_2.33 _obstack_begin_1 F
 GLIBC_2.33 _obstack_free F
 GLIBC_2.33 _obstack_memory_used F
 GLIBC_2.33 _obstack_newchunk F
+GLIBC_2.33 _pthread_cleanup_pop F
+GLIBC_2.33 _pthread_cleanup_pop_restore F
+GLIBC_2.33 _pthread_cleanup_push F
+GLIBC_2.33 _pthread_cleanup_push_defer F
 GLIBC_2.33 _res D 0x200
 GLIBC_2.33 _res_hconf D 0x30
 GLIBC_2.33 _setjmp F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 76484b8073..71e8f38003 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -42,10 +42,6 @@ GLIBC_2.33 __res_state F
 GLIBC_2.33 __send F
 GLIBC_2.33 __sigaction F
 GLIBC_2.33 __write F
-GLIBC_2.33 _pthread_cleanup_pop F
-GLIBC_2.33 _pthread_cleanup_pop_restore F
-GLIBC_2.33 _pthread_cleanup_push F
-GLIBC_2.33 _pthread_cleanup_push_defer F
 GLIBC_2.33 accept F
 GLIBC_2.33 call_once F
 GLIBC_2.33 close F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 833d6f11d6..894f01282f 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -521,6 +521,10 @@ GLIBC_2.27 _obstack_begin_1 F
 GLIBC_2.27 _obstack_free F
 GLIBC_2.27 _obstack_memory_used F
 GLIBC_2.27 _obstack_newchunk F
+GLIBC_2.27 _pthread_cleanup_pop F
+GLIBC_2.27 _pthread_cleanup_pop_restore F
+GLIBC_2.27 _pthread_cleanup_push F
+GLIBC_2.27 _pthread_cleanup_push_defer F
 GLIBC_2.27 _res D 0x238
 GLIBC_2.27 _res_hconf D 0x48
 GLIBC_2.27 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 2332ba5927..f5f9baefb9 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.27 __res_state F
 GLIBC_2.27 __send F
 GLIBC_2.27 __sigaction F
 GLIBC_2.27 __write F
-GLIBC_2.27 _pthread_cleanup_pop F
-GLIBC_2.27 _pthread_cleanup_pop_restore F
-GLIBC_2.27 _pthread_cleanup_push F
-GLIBC_2.27 _pthread_cleanup_push_defer F
 GLIBC_2.27 accept F
 GLIBC_2.27 close F
 GLIBC_2.27 connect F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index a3e732e82f..8788493ce0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 28cf9cfcee..7aa725ccae 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 4443545ed0..4596ab72b0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -519,6 +519,10 @@ GLIBC_2.2 _obstack_begin_1 F
 GLIBC_2.2 _obstack_free F
 GLIBC_2.2 _obstack_memory_used F
 GLIBC_2.2 _obstack_newchunk F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x238
 GLIBC_2.2 _res_hconf D 0x48
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 5baa0fdd6f..25da7ea8dc 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -47,10 +47,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index f9cb4195cd..ae16394e8a 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -505,6 +505,10 @@ GLIBC_2.2 _obstack_begin_1 F
 GLIBC_2.2 _obstack_free F
 GLIBC_2.2 _obstack_memory_used F
 GLIBC_2.2 _obstack_newchunk F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x200
 GLIBC_2.2 _res_hconf D 0x30
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 8ce3580478..8d7aa63a02 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index e1ae67a464..6e45427e90 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -505,6 +505,10 @@ GLIBC_2.2 _obstack_begin_1 F
 GLIBC_2.2 _obstack_free F
 GLIBC_2.2 _obstack_memory_used F
 GLIBC_2.2 _obstack_newchunk F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x200
 GLIBC_2.2 _res_hconf D 0x30
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 8ce3580478..8d7aa63a02 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 9ca458b1c5..080a036590 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -267,6 +267,10 @@ GLIBC_2.0 _obstack_begin_1 F
 GLIBC_2.0 _obstack_free F
 GLIBC_2.0 _obstack_memory_used F
 GLIBC_2.0 _obstack_newchunk F
+GLIBC_2.0 _pthread_cleanup_pop F
+GLIBC_2.0 _pthread_cleanup_pop_restore F
+GLIBC_2.0 _pthread_cleanup_push F
+GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 _res D 0x200
 GLIBC_2.0 _rpc_dtablesize F
 GLIBC_2.0 _seterr_reply F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 1eff0da935..5f8c13bb69 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -24,10 +24,6 @@ GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
 GLIBC_2.0 __write F
-GLIBC_2.0 _pthread_cleanup_pop F
-GLIBC_2.0 _pthread_cleanup_pop_restore F
-GLIBC_2.0 _pthread_cleanup_push F
-GLIBC_2.0 _pthread_cleanup_push_defer F
 GLIBC_2.0 accept F
 GLIBC_2.0 close F
 GLIBC_2.0 connect F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 6af3cc116b..c8fb7da49f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -547,6 +547,10 @@ GLIBC_2.2 _obstack_begin_1 F
 GLIBC_2.2 _obstack_free F
 GLIBC_2.2 _obstack_memory_used F
 GLIBC_2.2 _obstack_newchunk F
+GLIBC_2.2 _pthread_cleanup_pop F
+GLIBC_2.2 _pthread_cleanup_pop_restore F
+GLIBC_2.2 _pthread_cleanup_push F
+GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 _res D 0x238
 GLIBC_2.2 _res_hconf D 0x48
 GLIBC_2.2 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index d7000f415e..ab6a5cfb78 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
 GLIBC_2.2 __send F
 GLIBC_2.2 __sigaction F
 GLIBC_2.2 __write F
-GLIBC_2.2 _pthread_cleanup_pop F
-GLIBC_2.2 _pthread_cleanup_pop_restore F
-GLIBC_2.2 _pthread_cleanup_push F
-GLIBC_2.2 _pthread_cleanup_push_defer F
 GLIBC_2.2 accept F
 GLIBC_2.2 close F
 GLIBC_2.2 connect F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index e267cc2a23..cde6fdb49d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -508,6 +508,10 @@ GLIBC_2.2.5 _obstack_begin_1 F
 GLIBC_2.2.5 _obstack_free F
 GLIBC_2.2.5 _obstack_memory_used F
 GLIBC_2.2.5 _obstack_newchunk F
+GLIBC_2.2.5 _pthread_cleanup_pop F
+GLIBC_2.2.5 _pthread_cleanup_pop_restore F
+GLIBC_2.2.5 _pthread_cleanup_push F
+GLIBC_2.2.5 _pthread_cleanup_push_defer F
 GLIBC_2.2.5 _res D 0x238
 GLIBC_2.2.5 _res_hconf D 0x48
 GLIBC_2.2.5 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index f0271930eb..301c0817b8 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -45,10 +45,6 @@ GLIBC_2.2.5 __res_state F
 GLIBC_2.2.5 __send F
 GLIBC_2.2.5 __sigaction F
 GLIBC_2.2.5 __write F
-GLIBC_2.2.5 _pthread_cleanup_pop F
-GLIBC_2.2.5 _pthread_cleanup_pop_restore F
-GLIBC_2.2.5 _pthread_cleanup_push F
-GLIBC_2.2.5 _pthread_cleanup_push_defer F
 GLIBC_2.2.5 accept F
 GLIBC_2.2.5 close F
 GLIBC_2.2.5 connect F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 50e860fe40..e772da1ec4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -542,6 +542,10 @@ GLIBC_2.16 _obstack_begin_1 F
 GLIBC_2.16 _obstack_free F
 GLIBC_2.16 _obstack_memory_used F
 GLIBC_2.16 _obstack_newchunk F
+GLIBC_2.16 _pthread_cleanup_pop F
+GLIBC_2.16 _pthread_cleanup_pop_restore F
+GLIBC_2.16 _pthread_cleanup_push F
+GLIBC_2.16 _pthread_cleanup_push_defer F
 GLIBC_2.16 _res D 0x200
 GLIBC_2.16 _res_hconf D 0x30
 GLIBC_2.16 _rpc_dtablesize F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index aa9e127bad..31322dfabb 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -43,10 +43,6 @@ GLIBC_2.16 __res_state F
 GLIBC_2.16 __send F
 GLIBC_2.16 __sigaction F
 GLIBC_2.16 __write F
-GLIBC_2.16 _pthread_cleanup_pop F
-GLIBC_2.16 _pthread_cleanup_pop_restore F
-GLIBC_2.16 _pthread_cleanup_push F
-GLIBC_2.16 _pthread_cleanup_push_defer F
 GLIBC_2.16 accept F
 GLIBC_2.16 close F
 GLIBC_2.16 connect F
-- 
2.29.2



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

* [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (3 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-16 14:13   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA Florian Weimer
                   ` (12 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

The definitions in libc are sufficient, the forwarders are no longer
needed.

The symbols have been moved using scripts/move-symbol-to-libc.py.
s390-linux-gnu and s390x-linux-gnu need a new version placeholder
to keep the GLIBC_2.19 symbol version in libpthread.

Tested on i386-linux-gnu, powerpc64le-linux-gnu, s390x-linux-gnu,
x86_64-linux-gnu.  Built with build-many-glibcs.py.
---
 nptl/Makefile                                 |  1 -
 nptl/Versions                                 |  2 -
 nptl/pt-longjmp.c                             | 49 -------------
 .../sysv/linux/aarch64/libpthread.abilist     |  2 -
 .../unix/sysv/linux/alpha/libpthread.abilist  |  2 -
 .../unix/sysv/linux/arm/be/libpthread.abilist |  2 -
 .../unix/sysv/linux/arm/le/libpthread.abilist |  2 -
 .../unix/sysv/linux/hppa/libpthread.abilist   |  2 -
 .../unix/sysv/linux/i386/libpthread.abilist   |  2 -
 .../unix/sysv/linux/ia64/libpthread.abilist   |  2 -
 .../linux/m68k/coldfire/libpthread.abilist    |  2 -
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 -
 .../linux/microblaze/be/libpthread.abilist    |  2 -
 .../linux/microblaze/le/libpthread.abilist    |  2 -
 .../sysv/linux/mips/mips32/libpthread.abilist |  2 -
 .../sysv/linux/mips/mips64/libpthread.abilist |  2 -
 .../unix/sysv/linux/nios2/libpthread.abilist  |  2 -
 .../powerpc/powerpc32/libpthread.abilist      |  4 --
 .../powerpc/powerpc64/be/libpthread.abilist   |  4 --
 .../powerpc/powerpc64/le/libpthread.abilist   |  2 -
 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c  | 61 ----------------
 sysdeps/unix/sysv/linux/s390/Versions         |  2 +-
 .../unix/sysv/linux/s390/libpthread-compat.c  | 25 +++++++
 sysdeps/unix/sysv/linux/s390/pt-longjmp.c     | 33 ---------
 .../linux/s390/s390-32/libpthread.abilist     |  5 +-
 .../linux/s390/s390-64/libpthread.abilist     |  5 +-
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 -
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 -
 .../linux/sparc/sparc32/libpthread.abilist    |  2 -
 .../linux/sparc/sparc64/libpthread.abilist    |  2 -
 .../sysv/linux/x86_64/64/libpthread.abilist   |  2 -
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 -
 sysdeps/x86/nptl/pt-longjmp.c                 | 71 -------------------
 33 files changed, 28 insertions(+), 276 deletions(-)
 delete mode 100644 nptl/pt-longjmp.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/libpthread-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c
 delete mode 100644 sysdeps/x86/nptl/pt-longjmp.c

diff --git a/nptl/Makefile b/nptl/Makefile
index 147a8d3d59..7e566675f2 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -116,7 +116,6 @@ libpthread-routines = \
   pt-cleanup \
   pt-fcntl \
   pt-interp \
-  pt-longjmp \
   pt-raise \
   pt-system \
   pthread_attr_getaffinity \
diff --git a/nptl/Versions b/nptl/Versions
index ff6eae2566..cf4d5b677d 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -155,7 +155,6 @@ libpthread {
     fsync;
     ftrylockfile;
     funlockfile;
-    longjmp;
     lseek;
     msync;
     open;
@@ -205,7 +204,6 @@ libpthread {
     sendmsg;
     sendto;
     sigaction;
-    siglongjmp;
     sigwait;
     system;
     tcdrain;
diff --git a/nptl/pt-longjmp.c b/nptl/pt-longjmp.c
deleted file mode 100644
index 3f903495dc..0000000000
--- a/nptl/pt-longjmp.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ABI compatibility for 'longjmp' and 'siglongjmp' symbols in libpthread ABI.
-   Copyright (C) 2002-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   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 <setjmp.h>
-#include <shlib-compat.h>
-
-/* libpthread once had its own longjmp (and siglongjmp alias), though there
-   was no apparent reason for it.  There is no use in having a separate
-   symbol in libpthread, but the historical ABI requires it.  For static
-   linking, there is no need to provide anything here--the libc version
-   will be linked in.  For shared library ABI compatibility, there must be
-   longjmp and siglongjmp symbols in libpthread.so.
-
-   With an IFUNC resolver, it would be possible to avoid the indirection,
-   but the IFUNC resolver might run before the __libc_longjmp symbol has
-   been relocated, in which case the IFUNC resolver would not be able to
-   provide the correct address.  */
-
-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
-
-static void __attribute__ ((noreturn, used))
-longjmp_compat (jmp_buf env, int val)
-{
-  __libc_longjmp (env, val);
-}
-
-strong_alias (longjmp_compat, longjmp_alias)
-compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0);
-
-strong_alias (longjmp_alias, siglongjmp_alias)
-compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 6047fa274f..884d97efca 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.17 flockfile F
 GLIBC_2.17 fsync F
 GLIBC_2.17 ftrylockfile F
 GLIBC_2.17 funlockfile F
-GLIBC_2.17 longjmp F
 GLIBC_2.17 lseek F
 GLIBC_2.17 lseek64 F
 GLIBC_2.17 msync F
@@ -175,7 +174,6 @@ GLIBC_2.17 send F
 GLIBC_2.17 sendmsg F
 GLIBC_2.17 sendto F
 GLIBC_2.17 sigaction F
-GLIBC_2.17 siglongjmp F
 GLIBC_2.17 sigwait F
 GLIBC_2.17 system F
 GLIBC_2.17 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 5f8c13bb69..e17b5183ef 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index c2e78416b8..e75c83d47f 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
 GLIBC_2.4 fsync F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
-GLIBC_2.4 longjmp F
 GLIBC_2.4 lseek F
 GLIBC_2.4 lseek64 F
 GLIBC_2.4 msync F
@@ -204,7 +203,6 @@ GLIBC_2.4 send F
 GLIBC_2.4 sendmsg F
 GLIBC_2.4 sendto F
 GLIBC_2.4 sigaction F
-GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
 GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index c2e78416b8..e75c83d47f 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
 GLIBC_2.4 fsync F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
-GLIBC_2.4 longjmp F
 GLIBC_2.4 lseek F
 GLIBC_2.4 lseek64 F
 GLIBC_2.4 msync F
@@ -204,7 +203,6 @@ GLIBC_2.4 send F
 GLIBC_2.4 sendmsg F
 GLIBC_2.4 sendto F
 GLIBC_2.4 sigaction F
-GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
 GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 8d7aa63a02..740570ef37 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index ee156d6f49..0b8c5b9104 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index ab6a5cfb78..0565c43c10 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index c2e78416b8..e75c83d47f 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
 GLIBC_2.4 fsync F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
-GLIBC_2.4 longjmp F
 GLIBC_2.4 lseek F
 GLIBC_2.4 lseek64 F
 GLIBC_2.4 msync F
@@ -204,7 +203,6 @@ GLIBC_2.4 send F
 GLIBC_2.4 sendmsg F
 GLIBC_2.4 sendto F
 GLIBC_2.4 sigaction F
-GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
 GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index ee156d6f49..0b8c5b9104 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 1f516569ba..3798ae24be 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.18 flockfile F
 GLIBC_2.18 fsync F
 GLIBC_2.18 ftrylockfile F
 GLIBC_2.18 funlockfile F
-GLIBC_2.18 longjmp F
 GLIBC_2.18 lseek F
 GLIBC_2.18 lseek64 F
 GLIBC_2.18 msync F
@@ -177,7 +176,6 @@ GLIBC_2.18 send F
 GLIBC_2.18 sendmsg F
 GLIBC_2.18 sendto F
 GLIBC_2.18 sigaction F
-GLIBC_2.18 siglongjmp F
 GLIBC_2.18 sigwait F
 GLIBC_2.18 system F
 GLIBC_2.18 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 1f516569ba..3798ae24be 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.18 flockfile F
 GLIBC_2.18 fsync F
 GLIBC_2.18 ftrylockfile F
 GLIBC_2.18 funlockfile F
-GLIBC_2.18 longjmp F
 GLIBC_2.18 lseek F
 GLIBC_2.18 lseek64 F
 GLIBC_2.18 msync F
@@ -177,7 +176,6 @@ GLIBC_2.18 send F
 GLIBC_2.18 sendmsg F
 GLIBC_2.18 sendto F
 GLIBC_2.18 sigaction F
-GLIBC_2.18 siglongjmp F
 GLIBC_2.18 sigwait F
 GLIBC_2.18 system F
 GLIBC_2.18 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 903f49957f..79da59eb81 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 903f49957f..79da59eb81 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index cd41c7d42b..9dadbc85cc 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.21 flockfile F
 GLIBC_2.21 fsync F
 GLIBC_2.21 ftrylockfile F
 GLIBC_2.21 funlockfile F
-GLIBC_2.21 longjmp F
 GLIBC_2.21 lseek F
 GLIBC_2.21 lseek64 F
 GLIBC_2.21 msync F
@@ -177,7 +176,6 @@ GLIBC_2.21 send F
 GLIBC_2.21 sendmsg F
 GLIBC_2.21 sendto F
 GLIBC_2.21 sigaction F
-GLIBC_2.21 siglongjmp F
 GLIBC_2.21 sigwait F
 GLIBC_2.21 system F
 GLIBC_2.21 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 589a865796..c852fcc147 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
@@ -209,11 +207,9 @@ GLIBC_2.3.3 pthread_condattr_setclock F
 GLIBC_2.3.3 pthread_setaffinity_np F
 GLIBC_2.3.3 pthread_timedjoin_np F
 GLIBC_2.3.3 pthread_tryjoin_np F
-GLIBC_2.3.4 longjmp F
 GLIBC_2.3.4 pthread_attr_getaffinity_np F
 GLIBC_2.3.4 pthread_setaffinity_np F
 GLIBC_2.3.4 pthread_setschedprio F
-GLIBC_2.3.4 siglongjmp F
 GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 7c1553be29..b7d0c8b743 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -74,7 +74,6 @@ GLIBC_2.3 flockfile F
 GLIBC_2.3 fsync F
 GLIBC_2.3 ftrylockfile F
 GLIBC_2.3 funlockfile F
-GLIBC_2.3 longjmp F
 GLIBC_2.3 lseek F
 GLIBC_2.3 lseek64 F
 GLIBC_2.3 msync F
@@ -177,7 +176,6 @@ GLIBC_2.3 send F
 GLIBC_2.3 sendmsg F
 GLIBC_2.3 sendto F
 GLIBC_2.3 sigaction F
-GLIBC_2.3 siglongjmp F
 GLIBC_2.3 sigwait F
 GLIBC_2.3 system F
 GLIBC_2.3 tcdrain F
@@ -198,11 +196,9 @@ GLIBC_2.3.3 pthread_condattr_setclock F
 GLIBC_2.3.3 pthread_setaffinity_np F
 GLIBC_2.3.3 pthread_timedjoin_np F
 GLIBC_2.3.3 pthread_tryjoin_np F
-GLIBC_2.3.4 longjmp F
 GLIBC_2.3.4 pthread_attr_getaffinity_np F
 GLIBC_2.3.4 pthread_setaffinity_np F
 GLIBC_2.3.4 pthread_setschedprio F
-GLIBC_2.3.4 siglongjmp F
 GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 6047fa274f..884d97efca 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.17 flockfile F
 GLIBC_2.17 fsync F
 GLIBC_2.17 ftrylockfile F
 GLIBC_2.17 funlockfile F
-GLIBC_2.17 longjmp F
 GLIBC_2.17 lseek F
 GLIBC_2.17 lseek64 F
 GLIBC_2.17 msync F
@@ -175,7 +174,6 @@ GLIBC_2.17 send F
 GLIBC_2.17 sendmsg F
 GLIBC_2.17 sendto F
 GLIBC_2.17 sigaction F
-GLIBC_2.17 siglongjmp F
 GLIBC_2.17 sigwait F
 GLIBC_2.17 system F
 GLIBC_2.17 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c b/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
deleted file mode 100644
index ed6b2a5db1..0000000000
--- a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 2002-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   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 <setjmp.h>
-#include <stdlib.h>
-#include <bits/wordsize.h>
-#include "pthreadP.h"
-#include  <shlib-compat.h>
-#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3_4)
-
-/* These functions are not declared anywhere since they shouldn't be
-   used at another place but here.  */
-extern void __novmx__libc_siglongjmp (sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
-extern void __novmx__libc_longjmp (sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
-
-
-void __novmx_siglongjmp (sigjmp_buf env, int val)
-{
-  __novmx__libc_siglongjmp (env, val);
-}
-
-void __novmx_longjmp (jmp_buf env, int val)
-{
-  __novmx__libc_longjmp (env, val);
-}
-
-compat_symbol (libpthread, __novmx_longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libpthread, __novmx_siglongjmp, siglongjmp, GLIBC_2_0);
-#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4))  */
-
-void
-__vmx_longjmp (jmp_buf env, int val)
-{
-  __libc_longjmp (env, val);
-}
-
-void
-__vmx_siglongjmp (jmp_buf env, int val)
-{
-  __libc_siglongjmp (env, val);
-}
-
-versioned_symbol (libpthread, __vmx_longjmp, longjmp, GLIBC_2_3_4);
-versioned_symbol (libpthread, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
diff --git a/sysdeps/unix/sysv/linux/s390/Versions b/sysdeps/unix/sysv/linux/s390/Versions
index 55518a7e5f..548397fcff 100644
--- a/sysdeps/unix/sysv/linux/s390/Versions
+++ b/sysdeps/unix/sysv/linux/s390/Versions
@@ -11,6 +11,6 @@ libc {
 
 libpthread {
   GLIBC_2.19 {
-    longjmp; siglongjmp;
+    __libpthread_version_placeholder;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/s390/libpthread-compat.c b/sysdeps/unix/sysv/linux/s390/libpthread-compat.c
new file mode 100644
index 0000000000..e8a7b6db5e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/libpthread-compat.c
@@ -0,0 +1,25 @@
+/* Placeholder definitions to pull in removed symbol versions.  s390 version.
+   Copyright (C) 2019-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <nptl/libpthread-compat.c>
+
+/* GLIBC_2.19 was used by a longjmp compatibility symbol.  */
+#if (SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))
+compat_symbol_unique (libpthread,
+                      __libpthread_version_placeholder, GLIBC_2_19);
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
deleted file mode 100644
index 6e97ed538b..0000000000
--- a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 2014-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.
-
-   Versioned copy of nptl/pt-longjmp.c modified for versioning
-   the reverted jmpbuf extension.  */
-
-#include  <shlib-compat.h>
-
-#include <nptl/pt-longjmp.c>
-
-#if SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
-/* In glibc release 2.19 new versions of longjmp-functions were introduced,
-   but were reverted before 2.20. Thus both versions are the same function.  */
-
-strong_alias (longjmp_alias, __v2longjmp)
-compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
-strong_alias (siglongjmp_alias, __v2siglongjmp)
-compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
-#endif /* SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 7aa725ccae..518a08ad1e 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
@@ -130,8 +128,7 @@ GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.19 longjmp F
-GLIBC_2.19 siglongjmp F
+GLIBC_2.19 __libpthread_version_placeholder F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 25da7ea8dc..c21f7cfea6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -5,8 +5,7 @@ GLIBC_2.12 pthread_mutexattr_setrobust F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.19 longjmp F
-GLIBC_2.19 siglongjmp F
+GLIBC_2.19 __libpthread_version_placeholder F
 GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
@@ -55,7 +54,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -159,7 +157,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 8d7aa63a02..740570ef37 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 8d7aa63a02..740570ef37 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 5f8c13bb69..e17b5183ef 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
 GLIBC_2.0 fsync F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
-GLIBC_2.0 longjmp F
 GLIBC_2.0 lseek F
 GLIBC_2.0 msync F
 GLIBC_2.0 open F
@@ -81,7 +80,6 @@ GLIBC_2.0 send F
 GLIBC_2.0 sendmsg F
 GLIBC_2.0 sendto F
 GLIBC_2.0 sigaction F
-GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
 GLIBC_2.0 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index ab6a5cfb78..0565c43c10 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
 GLIBC_2.2 fsync F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
-GLIBC_2.2 longjmp F
 GLIBC_2.2 lseek F
 GLIBC_2.2 lseek64 F
 GLIBC_2.2 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2 send F
 GLIBC_2.2 sendmsg F
 GLIBC_2.2 sendto F
 GLIBC_2.2 sigaction F
-GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
 GLIBC_2.2 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 301c0817b8..f1255816b1 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -53,7 +53,6 @@ GLIBC_2.2.5 flockfile F
 GLIBC_2.2.5 fsync F
 GLIBC_2.2.5 ftrylockfile F
 GLIBC_2.2.5 funlockfile F
-GLIBC_2.2.5 longjmp F
 GLIBC_2.2.5 lseek F
 GLIBC_2.2.5 lseek64 F
 GLIBC_2.2.5 msync F
@@ -157,7 +156,6 @@ GLIBC_2.2.5 send F
 GLIBC_2.2.5 sendmsg F
 GLIBC_2.2.5 sendto F
 GLIBC_2.2.5 sigaction F
-GLIBC_2.2.5 siglongjmp F
 GLIBC_2.2.5 sigwait F
 GLIBC_2.2.5 system F
 GLIBC_2.2.5 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 31322dfabb..fdaff69ea6 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.16 flockfile F
 GLIBC_2.16 fsync F
 GLIBC_2.16 ftrylockfile F
 GLIBC_2.16 funlockfile F
-GLIBC_2.16 longjmp F
 GLIBC_2.16 lseek F
 GLIBC_2.16 lseek64 F
 GLIBC_2.16 msync F
@@ -175,7 +174,6 @@ GLIBC_2.16 send F
 GLIBC_2.16 sendmsg F
 GLIBC_2.16 sendto F
 GLIBC_2.16 sigaction F
-GLIBC_2.16 siglongjmp F
 GLIBC_2.16 sigwait F
 GLIBC_2.16 system F
 GLIBC_2.16 tcdrain F
diff --git a/sysdeps/x86/nptl/pt-longjmp.c b/sysdeps/x86/nptl/pt-longjmp.c
deleted file mode 100644
index 77b32667ee..0000000000
--- a/sysdeps/x86/nptl/pt-longjmp.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* ABI compatibility for 'longjmp' and 'siglongjmp' symbols in libpthread ABI.
-   X86 version.
-   Copyright (C) 1918-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <pthreadP.h>
-#include <jmp_buf-ssp.h>
-
-#ifdef __x86_64__
-# define SHADOW_STACK_POINTER_SIZE 8
-#else
-# define SHADOW_STACK_POINTER_SIZE 4
-#endif
-
-/* Assert that the priv field in struct pthread_unwind_buf has space
-   to store shadow stack pointer.  */
-_Static_assert ((offsetof (struct pthread_unwind_buf, priv)
-		 <= SHADOW_STACK_POINTER_OFFSET)
-		&& ((offsetof (struct pthread_unwind_buf, priv)
-		     + sizeof (((struct pthread_unwind_buf *) 0)->priv))
-		    >= (SHADOW_STACK_POINTER_OFFSET
-			+ SHADOW_STACK_POINTER_SIZE)),
-		"Shadow stack pointer is not within private storage "
-		"of pthread_unwind_buf.");
-
-#include <shlib-compat.h>
-
-/* libpthread once had its own longjmp (and siglongjmp alias), though there
-   was no apparent reason for it.  There is no use in having a separate
-   symbol in libpthread, but the historical ABI requires it.  For static
-   linking, there is no need to provide anything here--the libc version
-   will be linked in.  For shared library ABI compatibility, there must be
-   longjmp and siglongjmp symbols in libpthread.so.
-
-   With an IFUNC resolver, it would be possible to avoid the indirection,
-   but the IFUNC resolver might run before the __libc_longjmp symbol has
-   been relocated, in which case the IFUNC resolver would not be able to
-   provide the correct address.  */
-
-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
-
-static void __attribute__ ((noreturn, used))
-longjmp_compat (jmp_buf env, int val)
-{
-  /* NB: We call __libc_siglongjmp,  instead of __libc_longjmp, since
-     __libc_longjmp is a private interface for cancellation which
-     doesn't restore shadow stack register.  */
-  __libc_siglongjmp (env, val);
-}
-
-strong_alias (longjmp_compat, longjmp_alias)
-compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0);
-
-strong_alias (longjmp_alias, siglongjmp_alias)
-compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0);
-
-#endif
-- 
2.29.2



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

* [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (4 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-16 14:14   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
                   ` (11 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

It is not actually used by the legacy unwinder linked into
libc.so, and it conflicts with the unwind-link functionality
in libpthread.
---
 sysdeps/generic/unwind-dw2.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c
index 618fa8885f..da971279be 100644
--- a/sysdeps/generic/unwind-dw2.c
+++ b/sysdeps/generic/unwind-dw2.c
@@ -177,14 +177,6 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index)
   return * (_Unwind_Word *) context->reg[index];
 }
 
-/* Get the value of the CFA as saved in CONTEXT.  */
-
-_Unwind_Word
-_Unwind_GetCFA (struct _Unwind_Context *context)
-{
-  return (_Unwind_Ptr) context->cfa;
-}
-
 /* Overwrite the saved value for register REG in CONTEXT with VAL.  */
 
 inline void
-- 
2.29.2



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

* [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (5 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-16 14:35   ` Adhemerval Zanella
  2021-03-12 17:49 ` [PATCH 08/18] nptl: Move pthread_once and __pthread_once " Florian Weimer
                   ` (10 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

This internal symbol is used as part of the longjmp implementation.
Rename the file from nptl/pt-cleanup.c to nptl/pthread_cleanup_upto.c
so that the pt-* files remain restricted to libpthread.
---
 nptl/Makefile                                 | 2 +-
 nptl/Versions                                 | 1 +
 nptl/nptl-init.c                              | 1 -
 nptl/pthreadP.h                               | 4 +---
 nptl/{pt-cleanup.c => pthread_cleanup_upto.c} | 2 +-
 sysdeps/nptl/jmp-unwind.c                     | 8 ++------
 sysdeps/nptl/pthread-functions.h              | 1 -
 sysdeps/unix/sysv/linux/s390/jmp-unwind.c     | 7 ++-----
 8 files changed, 8 insertions(+), 18 deletions(-)
 rename nptl/{pt-cleanup.c => pthread_cleanup_upto.c} (98%)

diff --git a/nptl/Makefile b/nptl/Makefile
index 7e566675f2..8847c4dd49 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -66,6 +66,7 @@ routines = \
   pthread_attr_setscope \
   pthread_attr_setsigmask \
   pthread_attr_setsigmask_internal \
+  pthread_cleanup_upto \
   pthread_cond_destroy \
   pthread_cond_init \
   pthread_condattr_destroy \
@@ -113,7 +114,6 @@ libpthread-routines = \
   old_pthread_cond_timedwait \
   old_pthread_cond_wait \
   pt-allocrtsig \
-  pt-cleanup \
   pt-fcntl \
   pt-interp \
   pt-raise \
diff --git a/nptl/Versions b/nptl/Versions
index cf4d5b677d..8fa0d178db 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -109,6 +109,7 @@ libc {
     __pthread_attr_setsigmask_internal;
     __pthread_cleanup_pop;
     __pthread_cleanup_push;
+    __pthread_cleanup_upto;
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index c2b563cc68..41527dcad1 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -88,7 +88,6 @@ static const struct pthread_functions pthread_functions =
     .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
     .ptr___pthread_setcancelstate = __pthread_setcancelstate,
     .ptr_pthread_setcanceltype = __pthread_setcanceltype,
-    .ptr___pthread_cleanup_upto = __pthread_cleanup_upto,
     .ptr___pthread_once = __pthread_once,
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 781bc65c1c..8f3d2cc8c9 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -332,9 +332,7 @@ extern int __make_stacks_executable (void **stack_endp) attribute_hidden;
 
 /* longjmp handling.  */
 extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
-#if IS_IN (libpthread)
-hidden_proto (__pthread_cleanup_upto)
-#endif
+libc_hidden_proto (__pthread_cleanup_upto)
 
 
 /* Functions with versioned interfaces.  */
diff --git a/nptl/pt-cleanup.c b/nptl/pthread_cleanup_upto.c
similarity index 98%
rename from nptl/pt-cleanup.c
rename to nptl/pthread_cleanup_upto.c
index 541533230d..89da3e5229 100644
--- a/nptl/pt-cleanup.c
+++ b/nptl/pthread_cleanup_upto.c
@@ -59,4 +59,4 @@ __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
 
   THREAD_SETMEM (self, cleanup, cbuf);
 }
-hidden_def (__pthread_cleanup_upto)
+libc_hidden_def (__pthread_cleanup_upto)
diff --git a/sysdeps/nptl/jmp-unwind.c b/sysdeps/nptl/jmp-unwind.c
index a79c792e82..96c4862c74 100644
--- a/sysdeps/nptl/jmp-unwind.c
+++ b/sysdeps/nptl/jmp-unwind.c
@@ -19,14 +19,10 @@
 #include <setjmp.h>
 #include <stddef.h>
 #include <libc-lock.h>
-
-extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
-#pragma weak __pthread_cleanup_upto
-
+#include <nptl/pthreadP.h>
 
 void
 _longjmp_unwind (jmp_buf env, int val)
 {
-  __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf,
-					    CURRENT_STACK_FRAME), 0);
+  __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME);
 }
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 4268084b66..1bbe609598 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -49,7 +49,6 @@ struct pthread_functions
   int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
   int (*ptr___pthread_setcancelstate) (int, int *);
   int (*ptr_pthread_setcanceltype) (int, int *);
-  void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *);
   int (*ptr___pthread_once) (pthread_once_t *, void (*) (void));
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
diff --git a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c b/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
index 2bdde57ec7..8e0399a3e9 100644
--- a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
+++ b/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
@@ -19,15 +19,12 @@
 #include <setjmp.h>
 #include <stddef.h>
 #include <libc-lock.h>
-
-extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
-#pragma weak __pthread_cleanup_upto
-
+#include <nptl/pthreadP.h>
 
 void
 _longjmp_unwind (jmp_buf env, int val)
 {
   char local_var;
 
-  __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf, &local_var), 0);
+  __pthread_cleanup_upto (env->__jmpbuf, &local_var);
 }
-- 
2.29.2



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

* [PATCH 08/18] nptl: Move pthread_once and __pthread_once into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (6 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-15 19:24   ` Florian Weimer
  2021-03-12 17:49 ` [PATCH 09/18] nptl: Move __pthread_unwind_next " Florian Weimer
                   ` (9 subsequent siblings)
  17 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

And also the fork generation counter, __fork_generation.  This
eliminates the need for __fork_generation_pointer.

To simplify symbol management, call pthread_once under the name
___libc_once.  (Creating a hidden proto and setting the symbol
version at the same time is difficult.)

call_once remains in libpthread and calls the exported __pthread_once
symbol.

pthread_once and __pthread_once have been moved using
scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 |  7 ++++--
 nptl/libc_pthread_init.c                      |  8 +------
 nptl/nptl-init.c                              |  4 +---
 nptl/pthreadP.h                               |  7 ++----
 nptl/pthread_once.c                           | 22 +++++++++++++++----
 sysdeps/nptl/fork.c                           |  3 +--
 sysdeps/nptl/fork.h                           |  3 ---
 sysdeps/nptl/libc-lockP.h                     | 15 ++++---------
 sysdeps/nptl/pthread-functions.h              |  1 -
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  4 ++++
 .../sysv/linux/aarch64/libpthread.abilist     |  2 --
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  4 ++++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  2 --
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  4 ++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  2 --
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  4 ++++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  2 --
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  4 ++++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  2 --
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  4 ++++
 .../unix/sysv/linux/csky/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  4 ++++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  4 ++++
 .../unix/sysv/linux/i386/libpthread.abilist   |  2 --
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  4 ++++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  2 --
 .../sysv/linux/m68k/coldfire/libc.abilist     |  4 ++++
 .../linux/m68k/coldfire/libpthread.abilist    |  2 --
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  4 ++++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 --
 .../sysv/linux/microblaze/be/libc.abilist     |  4 ++++
 .../linux/microblaze/be/libpthread.abilist    |  2 --
 .../sysv/linux/microblaze/le/libc.abilist     |  4 ++++
 .../linux/microblaze/le/libpthread.abilist    |  2 --
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  4 ++++
 .../sysv/linux/mips/mips32/libpthread.abilist |  2 --
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  4 ++++
 .../sysv/linux/mips/mips64/libpthread.abilist |  2 --
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  4 ++++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  4 ++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  4 ++++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  2 --
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  4 ++++
 .../powerpc/powerpc32/libpthread.abilist      |  2 --
 .../powerpc/powerpc32/nofpu/libc.abilist      |  4 ++++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  4 ++++
 .../powerpc/powerpc64/be/libpthread.abilist   |  2 --
 .../linux/powerpc/powerpc64/le/libc.abilist   |  4 ++++
 .../powerpc/powerpc64/le/libpthread.abilist   |  2 --
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  4 ++++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  2 --
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  4 ++++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  2 --
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  4 ++++
 .../linux/s390/s390-32/libpthread.abilist     |  2 --
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  4 ++++
 .../linux/s390/s390-64/libpthread.abilist     |  2 --
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  4 ++++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 --
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  4 ++++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 --
 .../sysv/linux/sparc/sparc32/libc.abilist     |  4 ++++
 .../linux/sparc/sparc32/libpthread.abilist    |  2 --
 .../sysv/linux/sparc/sparc64/libc.abilist     |  4 ++++
 .../linux/sparc/sparc64/libpthread.abilist    |  2 --
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  4 ++++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  2 --
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  4 ++++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 --
 71 files changed, 161 insertions(+), 97 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 8847c4dd49..910d8c7ebf 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -76,6 +76,7 @@ routines = \
   pthread_getattr_np \
   pthread_getschedparam \
   pthread_mutex_consistent \
+  pthread_once \
   pthread_self \
   pthread_setschedparam \
   pthread_sigmask \
@@ -179,7 +180,6 @@ libpthread-routines = \
   pthread_mutexattr_setpshared \
   pthread_mutexattr_setrobust \
   pthread_mutexattr_settype \
-  pthread_once \
   pthread_rwlock_clockrdlock \
   pthread_rwlock_clockwrlock \
   pthread_rwlock_destroy \
diff --git a/nptl/Versions b/nptl/Versions
index 8fa0d178db..74b311d4eb 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -1,5 +1,6 @@
 libc {
   GLIBC_2.0 {
+    __pthread_once;
     _pthread_cleanup_pop;
     _pthread_cleanup_pop_restore;
     _pthread_cleanup_push;
@@ -31,6 +32,7 @@ libc {
     pthread_mutex_init;
     pthread_mutex_lock;
     pthread_mutex_unlock;
+    pthread_once;
     pthread_self;
     pthread_setcancelstate;
     pthread_setcanceltype;
@@ -83,9 +85,12 @@ libc {
   }
   GLIBC_2.34 {
     __pthread_cleanup_routine;
+    __pthread_once;
     pthread_mutex_consistent;
+    pthread_once;
   }
   GLIBC_PRIVATE {
+    ___libc_once;
     __futex_abstimed_wait64;
     __futex_abstimed_wait_cancelable64;
     __libc_alloca_cutoff;
@@ -141,7 +146,6 @@ libpthread {
     __pthread_mutexattr_destroy;
     __pthread_mutexattr_init;
     __pthread_mutexattr_settype;
-    __pthread_once;
     __pthread_setspecific;
     __read;
     __send;
@@ -184,7 +188,6 @@ libpthread {
     pthread_mutexattr_getkind_np;
     pthread_mutexattr_init;
     pthread_mutexattr_setkind_np;
-    pthread_once;
     pthread_setcancelstate;
     pthread_setcanceltype;
     pthread_setspecific;
diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c
index 0757f92cd2..3ac54aae13 100644
--- a/nptl/libc_pthread_init.c
+++ b/nptl/libc_pthread_init.c
@@ -28,9 +28,6 @@
 #include <ldsodefs.h>
 
 
-unsigned long int *__fork_generation_pointer;
-
-
 #ifdef TLS_MULTIPLE_THREADS_IN_TCB
 void
 #else
@@ -38,12 +35,9 @@ extern int __libc_multiple_threads attribute_hidden;
 
 int *
 #endif
-__libc_pthread_init (unsigned long int *ptr, void (*reclaim) (void),
+__libc_pthread_init (void (*reclaim) (void),
 		     const struct pthread_functions *functions)
 {
-  /* Remember the pointer to the generation counter in libpthread.  */
-  __fork_generation_pointer = ptr;
-
   /* Called by a child after fork.  */
   __register_atfork (NULL, NULL, reclaim, NULL);
 
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 41527dcad1..c2e02b1bf2 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -88,7 +88,6 @@ static const struct pthread_functions pthread_functions =
     .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
     .ptr___pthread_setcancelstate = __pthread_setcancelstate,
     .ptr_pthread_setcanceltype = __pthread_setcanceltype,
-    .ptr___pthread_once = __pthread_once,
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
     .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
@@ -334,8 +333,7 @@ __pthread_initialize_minimal_internal (void)
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
   __libc_multiple_threads_ptr =
 #endif
-    __libc_pthread_init (&__fork_generation, __reclaim_stacks,
-			 ptr_pthread_functions);
+    __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions);
 
 #if HAVE_TUNABLES
   __pthread_tunables_init ();
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 8f3d2cc8c9..d385deae1a 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -355,12 +355,10 @@ hidden_proto (__nptl_death_event)
 
 /* Register the generation counter in the libpthread with the libc.  */
 #ifdef TLS_MULTIPLE_THREADS_IN_TCB
-extern void __libc_pthread_init (unsigned long int *ptr,
-				 void (*reclaim) (void),
+extern void __libc_pthread_init (void (*reclaim) (void),
 				 const struct pthread_functions *functions);
 #else
-extern int *__libc_pthread_init (unsigned long int *ptr,
-				 void (*reclaim) (void),
+extern int *__libc_pthread_init (void (*reclaim) (void),
 				 const struct pthread_functions *functions);
 
 /* Variable set to a nonzero value either if more than one thread runs or ran,
@@ -551,7 +549,6 @@ hidden_proto (__pthread_rwlock_unlock)
 hidden_proto (__pthread_key_create)
 hidden_proto (__pthread_getspecific)
 hidden_proto (__pthread_setspecific)
-hidden_proto (__pthread_once)
 hidden_proto (__pthread_setcancelstate)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
index 7645da222a..64eeaed5f4 100644
--- a/nptl/pthread_once.c
+++ b/nptl/pthread_once.c
@@ -19,7 +19,9 @@
 #include "pthreadP.h"
 #include <futex-internal.h>
 #include <atomic.h>
-
+#include <libc-lockP.h>
+#include <fork.h>
+#include <shlib-compat.h>
 
 unsigned long int __fork_generation attribute_hidden;
 
@@ -132,7 +134,7 @@ __pthread_once_slow (pthread_once_t *once_control, void (*init_routine) (void))
 }
 
 int
-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+___libc_once (pthread_once_t *once_control, void (*init_routine) (void))
 {
   /* Fast path.  See __pthread_once_slow.  */
   int val;
@@ -142,5 +144,17 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
   else
     return __pthread_once_slow (once_control, init_routine);
 }
-weak_alias (__pthread_once, pthread_once)
-hidden_def (__pthread_once)
+libc_hidden_def (___libc_once)
+
+/* Several aliases for setting different symbol versions.  */
+strong_alias (___libc_once, ___libc_once_1)
+strong_alias (___libc_once, ___libc_once_2)
+strong_alias (___libc_once, ___libc_once_3)
+strong_alias (___libc_once, ___libc_once_4)
+
+versioned_symbol (libc, ___libc_once_1, __pthread_once, GLIBC_2_34);
+versioned_symbol (libc, ___libc_once_2, pthread_once, GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, ___libc_once_3, __pthread_once, GLIBC_2_0);
+compat_symbol (libc, ___libc_once_4, pthread_once, GLIBC_2_0);
+#endif
diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c
index f78267b68c..ffc8f9d041 100644
--- a/sysdeps/nptl/fork.c
+++ b/sysdeps/nptl/fork.c
@@ -88,8 +88,7 @@ __libc_fork (void)
       struct pthread *self = THREAD_SELF;
 
       /* See __pthread_once.  */
-      if (__fork_generation_pointer != NULL)
-	*__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR;
+      __fork_generation += __PTHREAD_ONCE_FORK_GEN_INCR;
 
       /* Initialize the robust mutex list setting in the kernel which has
 	 been reset during the fork.  We do not check for errors because if
diff --git a/sysdeps/nptl/fork.h b/sysdeps/nptl/fork.h
index 5246754290..a2a1ad8265 100644
--- a/sysdeps/nptl/fork.h
+++ b/sysdeps/nptl/fork.h
@@ -21,6 +21,3 @@
 
 /* The fork generation counter, defined in libpthread.  */
 extern unsigned long int __fork_generation attribute_hidden;
-
-/* Pointer to the fork generation counter in the thread library.  */
-extern unsigned long int *__fork_generation_pointer attribute_hidden;
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 1a861b0d3f..f9f279525d 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -236,17 +236,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
   CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT
 #endif
 
+int ___libc_once (pthread_once_t *once_control, void (*init_routine) (void));
+libc_hidden_proto (___libc_once)
+
 /* Call handler iff the first call.  */
 #define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \
-  do {									      \
-    if (PTFAVAIL (__pthread_once))					      \
-      __libc_ptf_call_always (__pthread_once, (&(ONCE_CONTROL),		      \
-					       INIT_FUNCTION));		      \
-    else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) {			      \
-      INIT_FUNCTION ();							      \
-      (ONCE_CONTROL) |= 2;						      \
-    }									      \
-  } while (0)
+  ___libc_once (&(ONCE_CONTROL), INIT_FUNCTION)
 
 /* Get once control variable.  */
 #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)
@@ -372,7 +367,6 @@ weak_extern (__pthread_rwlock_unlock)
 weak_extern (__pthread_key_create)
 weak_extern (__pthread_setspecific)
 weak_extern (__pthread_getspecific)
-weak_extern (__pthread_once)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 weak_extern (__pthread_setcancelstate)
@@ -394,7 +388,6 @@ weak_extern (__pthread_setcancelstate)
 #  pragma weak __pthread_key_create
 #  pragma weak __pthread_setspecific
 #  pragma weak __pthread_getspecific
-#  pragma weak __pthread_once
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
 #  pragma weak __pthread_setcancelstate
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 1bbe609598..6ef7602cb9 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -49,7 +49,6 @@ struct pthread_functions
   int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
   int (*ptr___pthread_setcancelstate) (int, int *);
   int (*ptr_pthread_setcanceltype) (int, int *);
-  int (*ptr___pthread_once) (pthread_once_t *, void (*) (void));
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index a585f7d30d..8a11066f9e 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -339,6 +339,7 @@ GLIBC_2.17 __profile_frequency F
 GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
 GLIBC_2.17 __pthread_cleanup_routine F
+GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -1453,6 +1454,7 @@ GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
 GLIBC_2.17 pthread_mutex_unlock F
+GLIBC_2.17 pthread_once F
 GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
@@ -2180,4 +2182,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 884d97efca..a57e807cd0 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.17 __pthread_mutex_unlock F
 GLIBC_2.17 __pthread_mutexattr_destroy F
 GLIBC_2.17 __pthread_mutexattr_init F
 GLIBC_2.17 __pthread_mutexattr_settype F
-GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_rwlock_destroy F
@@ -120,7 +119,6 @@ GLIBC_2.17 pthread_mutexattr_setpshared F
 GLIBC_2.17 pthread_mutexattr_setrobust F
 GLIBC_2.17 pthread_mutexattr_setrobust_np F
 GLIBC_2.17 pthread_mutexattr_settype F
-GLIBC_2.17 pthread_once F
 GLIBC_2.17 pthread_rwlock_destroy F
 GLIBC_2.17 pthread_rwlock_init F
 GLIBC_2.17 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index c9ac935ccf..b62c855163 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -188,6 +188,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x8
 GLIBC_2.0 __progname_full D 0x8
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x8
@@ -891,6 +892,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2261,7 +2263,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index e17b5183ef..059ae76802 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 27fecc5c8a..cd549c654b 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -328,6 +328,7 @@ GLIBC_2.32 __profile_frequency F
 GLIBC_2.32 __progname D 0x4
 GLIBC_2.32 __progname_full D 0x4
 GLIBC_2.32 __pthread_cleanup_routine F
+GLIBC_2.32 __pthread_once F
 GLIBC_2.32 __ptsname_r_chk F
 GLIBC_2.32 __pwrite64 F
 GLIBC_2.32 __rawmemchr F
@@ -1380,6 +1381,7 @@ GLIBC_2.32 pthread_mutex_destroy F
 GLIBC_2.32 pthread_mutex_init F
 GLIBC_2.32 pthread_mutex_lock F
 GLIBC_2.32 pthread_mutex_unlock F
+GLIBC_2.32 pthread_once F
 GLIBC_2.32 pthread_self F
 GLIBC_2.32 pthread_setcancelstate F
 GLIBC_2.32 pthread_setcanceltype F
@@ -1940,4 +1942,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 9713a20071..55970eb845 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -22,7 +22,6 @@ GLIBC_2.32 __pthread_mutex_unlock F
 GLIBC_2.32 __pthread_mutexattr_destroy F
 GLIBC_2.32 __pthread_mutexattr_init F
 GLIBC_2.32 __pthread_mutexattr_settype F
-GLIBC_2.32 __pthread_once F
 GLIBC_2.32 __pthread_register_cancel F
 GLIBC_2.32 __pthread_register_cancel_defer F
 GLIBC_2.32 __pthread_rwlock_destroy F
@@ -135,7 +134,6 @@ GLIBC_2.32 pthread_mutexattr_setpshared F
 GLIBC_2.32 pthread_mutexattr_setrobust F
 GLIBC_2.32 pthread_mutexattr_setrobust_np F
 GLIBC_2.32 pthread_mutexattr_settype F
-GLIBC_2.32 pthread_once F
 GLIBC_2.32 pthread_rwlock_clockrdlock F
 GLIBC_2.32 pthread_rwlock_clockwrlock F
 GLIBC_2.32 pthread_rwlock_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 2383d95094..03e5389852 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -158,7 +158,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -487,6 +489,7 @@ GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
+GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
@@ -1548,6 +1551,7 @@ GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_unlock F
+GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index e75c83d47f..2e3d644ed9 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -57,7 +57,6 @@ GLIBC_2.4 __pthread_mutex_unlock F
 GLIBC_2.4 __pthread_mutexattr_destroy F
 GLIBC_2.4 __pthread_mutexattr_init F
 GLIBC_2.4 __pthread_mutexattr_settype F
-GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
@@ -151,7 +150,6 @@ GLIBC_2.4 pthread_mutexattr_setprotocol F
 GLIBC_2.4 pthread_mutexattr_setpshared F
 GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
-GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
 GLIBC_2.4 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index bb46b8b5e3..ac2fcf7b14 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -155,7 +155,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -484,6 +486,7 @@ GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
+GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
@@ -1545,6 +1548,7 @@ GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_unlock F
+GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index e75c83d47f..2e3d644ed9 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -57,7 +57,6 @@ GLIBC_2.4 __pthread_mutex_unlock F
 GLIBC_2.4 __pthread_mutexattr_destroy F
 GLIBC_2.4 __pthread_mutexattr_init F
 GLIBC_2.4 __pthread_mutexattr_settype F
-GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
@@ -151,7 +150,6 @@ GLIBC_2.4 pthread_mutexattr_setprotocol F
 GLIBC_2.4 pthread_mutexattr_setpshared F
 GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
-GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
 GLIBC_2.4 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 684e451f83..336a59110e 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -332,6 +332,7 @@ GLIBC_2.29 __profile_frequency F
 GLIBC_2.29 __progname D 0x4
 GLIBC_2.29 __progname_full D 0x4
 GLIBC_2.29 __pthread_cleanup_routine F
+GLIBC_2.29 __pthread_once F
 GLIBC_2.29 __ptsname_r_chk F
 GLIBC_2.29 __pwrite64 F
 GLIBC_2.29 __rawmemchr F
@@ -1441,6 +1442,7 @@ GLIBC_2.29 pthread_mutex_destroy F
 GLIBC_2.29 pthread_mutex_init F
 GLIBC_2.29 pthread_mutex_lock F
 GLIBC_2.29 pthread_mutex_unlock F
+GLIBC_2.29 pthread_once F
 GLIBC_2.29 pthread_self F
 GLIBC_2.29 pthread_setcancelstate F
 GLIBC_2.29 pthread_setcanceltype F
@@ -2124,4 +2126,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index bb8a51a51d..78e69d3e06 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -22,7 +22,6 @@ GLIBC_2.29 __pthread_mutex_unlock F
 GLIBC_2.29 __pthread_mutexattr_destroy F
 GLIBC_2.29 __pthread_mutexattr_init F
 GLIBC_2.29 __pthread_mutexattr_settype F
-GLIBC_2.29 __pthread_once F
 GLIBC_2.29 __pthread_register_cancel F
 GLIBC_2.29 __pthread_register_cancel_defer F
 GLIBC_2.29 __pthread_rwlock_destroy F
@@ -132,7 +131,6 @@ GLIBC_2.29 pthread_mutexattr_setpshared F
 GLIBC_2.29 pthread_mutexattr_setrobust F
 GLIBC_2.29 pthread_mutexattr_setrobust_np F
 GLIBC_2.29 pthread_mutexattr_settype F
-GLIBC_2.29 pthread_once F
 GLIBC_2.29 pthread_rwlock_destroy F
 GLIBC_2.29 pthread_rwlock_init F
 GLIBC_2.29 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 8dde237f8b..6d40c40268 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -356,6 +356,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1275,6 +1276,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2082,7 +2084,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 740570ef37..96c70fb45e 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index cc2226be23..2022f82d81 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -185,6 +185,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -868,6 +869,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2249,7 +2251,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 0b8c5b9104..f2be012ea9 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 438f3bd131..b9eeaabb01 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -360,6 +360,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1296,6 +1297,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2114,7 +2116,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 0565c43c10..3698acd3e9 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 5add3e607a..5a099fb3d0 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -159,7 +159,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
@@ -473,6 +475,7 @@ GLIBC_2.4 __profile_frequency F
 GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
+GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
@@ -1528,6 +1531,7 @@ GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
 GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_unlock F
+GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index e75c83d47f..2e3d644ed9 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -57,7 +57,6 @@ GLIBC_2.4 __pthread_mutex_unlock F
 GLIBC_2.4 __pthread_mutexattr_destroy F
 GLIBC_2.4 __pthread_mutexattr_init F
 GLIBC_2.4 __pthread_mutexattr_settype F
-GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
@@ -151,7 +150,6 @@ GLIBC_2.4 pthread_mutexattr_setprotocol F
 GLIBC_2.4 pthread_mutexattr_setpshared F
 GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
-GLIBC_2.4 pthread_once F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
 GLIBC_2.4 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 2e7c9f9b47..f81c9cc523 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -185,6 +185,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -867,6 +868,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2194,7 +2196,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 0b8c5b9104..f2be012ea9 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 493f7ddaa0..ce50516bc6 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -340,6 +340,7 @@ GLIBC_2.18 __profile_frequency F
 GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
 GLIBC_2.18 __pthread_cleanup_routine F
+GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -1456,6 +1457,7 @@ GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
 GLIBC_2.18 pthread_mutex_unlock F
+GLIBC_2.18 pthread_once F
 GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
@@ -2175,4 +2177,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 3798ae24be..73c70d5c87 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.18 __pthread_mutex_unlock F
 GLIBC_2.18 __pthread_mutexattr_destroy F
 GLIBC_2.18 __pthread_mutexattr_init F
 GLIBC_2.18 __pthread_mutexattr_settype F
-GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_rwlock_destroy F
@@ -121,7 +120,6 @@ GLIBC_2.18 pthread_mutexattr_setpshared F
 GLIBC_2.18 pthread_mutexattr_setrobust F
 GLIBC_2.18 pthread_mutexattr_setrobust_np F
 GLIBC_2.18 pthread_mutexattr_settype F
-GLIBC_2.18 pthread_once F
 GLIBC_2.18 pthread_rwlock_destroy F
 GLIBC_2.18 pthread_rwlock_init F
 GLIBC_2.18 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index ec83b89aa3..37ecc7c967 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -340,6 +340,7 @@ GLIBC_2.18 __profile_frequency F
 GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
 GLIBC_2.18 __pthread_cleanup_routine F
+GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -1456,6 +1457,7 @@ GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_init F
 GLIBC_2.18 pthread_mutex_lock F
 GLIBC_2.18 pthread_mutex_unlock F
+GLIBC_2.18 pthread_once F
 GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
@@ -2172,4 +2174,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 3798ae24be..73c70d5c87 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.18 __pthread_mutex_unlock F
 GLIBC_2.18 __pthread_mutexattr_destroy F
 GLIBC_2.18 __pthread_mutexattr_init F
 GLIBC_2.18 __pthread_mutexattr_settype F
-GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_rwlock_destroy F
@@ -121,7 +120,6 @@ GLIBC_2.18 pthread_mutexattr_setpshared F
 GLIBC_2.18 pthread_mutexattr_setrobust F
 GLIBC_2.18 pthread_mutexattr_setrobust_np F
 GLIBC_2.18 pthread_mutexattr_settype F
-GLIBC_2.18 pthread_once F
 GLIBC_2.18 pthread_rwlock_destroy F
 GLIBC_2.18 pthread_rwlock_init F
 GLIBC_2.18 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index cb0ab4bc19..6d50fcc64f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -183,6 +183,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -864,6 +865,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2165,7 +2167,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 79da59eb81..faa1ad9d1c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 2be2623e99..b4e05e270d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -183,6 +183,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -864,6 +865,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2163,7 +2165,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 79da59eb81..faa1ad9d1c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 09147861b5..71d184c2aa 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -183,6 +183,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -864,6 +865,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2171,7 +2173,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 4a0208c8c8..1e792c6705 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -183,6 +183,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x8
 GLIBC_2.0 __progname_full D 0x8
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x8
@@ -862,6 +863,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2165,7 +2167,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 078025a7d6..5afc3e8022 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -377,6 +377,7 @@ GLIBC_2.21 __profile_frequency F
 GLIBC_2.21 __progname D 0x4
 GLIBC_2.21 __progname_full D 0x4
 GLIBC_2.21 __pthread_cleanup_routine F
+GLIBC_2.21 __pthread_once F
 GLIBC_2.21 __ptsname_r_chk F
 GLIBC_2.21 __pwrite64 F
 GLIBC_2.21 __rawmemchr F
@@ -1498,6 +1499,7 @@ GLIBC_2.21 pthread_mutex_destroy F
 GLIBC_2.21 pthread_mutex_init F
 GLIBC_2.21 pthread_mutex_lock F
 GLIBC_2.21 pthread_mutex_unlock F
+GLIBC_2.21 pthread_once F
 GLIBC_2.21 pthread_self F
 GLIBC_2.21 pthread_setcancelstate F
 GLIBC_2.21 pthread_setcanceltype F
@@ -2213,4 +2215,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 9dadbc85cc..5db41bc85b 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.21 __pthread_mutex_unlock F
 GLIBC_2.21 __pthread_mutexattr_destroy F
 GLIBC_2.21 __pthread_mutexattr_init F
 GLIBC_2.21 __pthread_mutexattr_settype F
-GLIBC_2.21 __pthread_once F
 GLIBC_2.21 __pthread_register_cancel F
 GLIBC_2.21 __pthread_register_cancel_defer F
 GLIBC_2.21 __pthread_rwlock_destroy F
@@ -121,7 +120,6 @@ GLIBC_2.21 pthread_mutexattr_setpshared F
 GLIBC_2.21 pthread_mutexattr_setrobust F
 GLIBC_2.21 pthread_mutexattr_setrobust_np F
 GLIBC_2.21 pthread_mutexattr_settype F
-GLIBC_2.21 pthread_once F
 GLIBC_2.21 pthread_rwlock_destroy F
 GLIBC_2.21 pthread_rwlock_init F
 GLIBC_2.21 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index bc79b844a5..4bfae8faa6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -194,6 +194,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -875,6 +876,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2221,7 +2223,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index c852fcc147..995c88cbce 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 63c05472ed..dc102f7f29 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -194,6 +194,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -875,6 +876,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2254,7 +2256,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 37e4ee564d..9f019c4eac 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -409,6 +409,7 @@ GLIBC_2.3 __printf_fp F
 GLIBC_2.3 __profile_frequency F
 GLIBC_2.3 __progname D 0x8
 GLIBC_2.3 __progname_full D 0x8
+GLIBC_2.3 __pthread_once F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __rawmemchr F
 GLIBC_2.3 __rcmd_errstr D 0x8
@@ -1382,6 +1383,7 @@ GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
 GLIBC_2.3 pthread_mutex_lock F
 GLIBC_2.3 pthread_mutex_unlock F
+GLIBC_2.3 pthread_once F
 GLIBC_2.3 pthread_self F
 GLIBC_2.3 pthread_setcancelstate F
 GLIBC_2.3 pthread_setcanceltype F
@@ -2084,7 +2086,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index b7d0c8b743..07428bd3d6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -51,7 +51,6 @@ GLIBC_2.3 __pthread_mutex_unlock F
 GLIBC_2.3 __pthread_mutexattr_destroy F
 GLIBC_2.3 __pthread_mutexattr_init F
 GLIBC_2.3 __pthread_mutexattr_settype F
-GLIBC_2.3 __pthread_once F
 GLIBC_2.3 __pthread_rwlock_destroy F
 GLIBC_2.3 __pthread_rwlock_init F
 GLIBC_2.3 __pthread_rwlock_rdlock F
@@ -128,7 +127,6 @@ GLIBC_2.3 pthread_mutexattr_init F
 GLIBC_2.3 pthread_mutexattr_setkind_np F
 GLIBC_2.3 pthread_mutexattr_setpshared F
 GLIBC_2.3 pthread_mutexattr_settype F
-GLIBC_2.3 pthread_once F
 GLIBC_2.3 pthread_rwlock_destroy F
 GLIBC_2.3 pthread_rwlock_init F
 GLIBC_2.3 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 1888ec6e86..f1217ffca5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -425,6 +425,7 @@ GLIBC_2.17 __profile_frequency F
 GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
 GLIBC_2.17 __pthread_cleanup_routine F
+GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -1542,6 +1543,7 @@ GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_init F
 GLIBC_2.17 pthread_mutex_lock F
 GLIBC_2.17 pthread_mutex_unlock F
+GLIBC_2.17 pthread_once F
 GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
@@ -2375,4 +2377,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 884d97efca..a57e807cd0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.17 __pthread_mutex_unlock F
 GLIBC_2.17 __pthread_mutexattr_destroy F
 GLIBC_2.17 __pthread_mutexattr_init F
 GLIBC_2.17 __pthread_mutexattr_settype F
-GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_rwlock_destroy F
@@ -120,7 +119,6 @@ GLIBC_2.17 pthread_mutexattr_setpshared F
 GLIBC_2.17 pthread_mutexattr_setrobust F
 GLIBC_2.17 pthread_mutexattr_setrobust_np F
 GLIBC_2.17 pthread_mutexattr_settype F
-GLIBC_2.17 pthread_once F
 GLIBC_2.17 pthread_rwlock_destroy F
 GLIBC_2.17 pthread_rwlock_init F
 GLIBC_2.17 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 8cd92b1abe..afaabf996e 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -325,6 +325,7 @@ GLIBC_2.33 __profile_frequency F
 GLIBC_2.33 __progname D 0x4
 GLIBC_2.33 __progname_full D 0x4
 GLIBC_2.33 __pthread_cleanup_routine F
+GLIBC_2.33 __pthread_once F
 GLIBC_2.33 __ptsname_r_chk F
 GLIBC_2.33 __pwrite64 F
 GLIBC_2.33 __rawmemchr F
@@ -1382,6 +1383,7 @@ GLIBC_2.33 pthread_mutex_destroy F
 GLIBC_2.33 pthread_mutex_init F
 GLIBC_2.33 pthread_mutex_lock F
 GLIBC_2.33 pthread_mutex_unlock F
+GLIBC_2.33 pthread_once F
 GLIBC_2.33 pthread_self F
 GLIBC_2.33 pthread_setcancelstate F
 GLIBC_2.33 pthread_setcanceltype F
@@ -1942,4 +1944,6 @@ GLIBC_2.33 writev F
 GLIBC_2.33 wscanf F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 71e8f38003..ddf52b427a 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -22,7 +22,6 @@ GLIBC_2.33 __pthread_mutex_unlock F
 GLIBC_2.33 __pthread_mutexattr_destroy F
 GLIBC_2.33 __pthread_mutexattr_init F
 GLIBC_2.33 __pthread_mutexattr_settype F
-GLIBC_2.33 __pthread_once F
 GLIBC_2.33 __pthread_register_cancel F
 GLIBC_2.33 __pthread_register_cancel_defer F
 GLIBC_2.33 __pthread_rwlock_destroy F
@@ -135,7 +134,6 @@ GLIBC_2.33 pthread_mutexattr_setpshared F
 GLIBC_2.33 pthread_mutexattr_setrobust F
 GLIBC_2.33 pthread_mutexattr_setrobust_np F
 GLIBC_2.33 pthread_mutexattr_settype F
-GLIBC_2.33 pthread_once F
 GLIBC_2.33 pthread_rwlock_clockrdlock F
 GLIBC_2.33 pthread_rwlock_clockwrlock F
 GLIBC_2.33 pthread_rwlock_destroy F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 894f01282f..28563980d5 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -336,6 +336,7 @@ GLIBC_2.27 __profile_frequency F
 GLIBC_2.27 __progname D 0x8
 GLIBC_2.27 __progname_full D 0x8
 GLIBC_2.27 __pthread_cleanup_routine F
+GLIBC_2.27 __pthread_once F
 GLIBC_2.27 __ptsname_r_chk F
 GLIBC_2.27 __pwrite64 F
 GLIBC_2.27 __rawmemchr F
@@ -1444,6 +1445,7 @@ GLIBC_2.27 pthread_mutex_destroy F
 GLIBC_2.27 pthread_mutex_init F
 GLIBC_2.27 pthread_mutex_lock F
 GLIBC_2.27 pthread_mutex_unlock F
+GLIBC_2.27 pthread_once F
 GLIBC_2.27 pthread_self F
 GLIBC_2.27 pthread_setcancelstate F
 GLIBC_2.27 pthread_setcanceltype F
@@ -2142,4 +2144,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index f5f9baefb9..b12ec34091 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.27 __pthread_mutex_unlock F
 GLIBC_2.27 __pthread_mutexattr_destroy F
 GLIBC_2.27 __pthread_mutexattr_init F
 GLIBC_2.27 __pthread_mutexattr_settype F
-GLIBC_2.27 __pthread_once F
 GLIBC_2.27 __pthread_register_cancel F
 GLIBC_2.27 __pthread_register_cancel_defer F
 GLIBC_2.27 __pthread_rwlock_destroy F
@@ -121,7 +120,6 @@ GLIBC_2.27 pthread_mutexattr_setpshared F
 GLIBC_2.27 pthread_mutexattr_setrobust F
 GLIBC_2.27 pthread_mutexattr_setrobust_np F
 GLIBC_2.27 pthread_mutexattr_settype F
-GLIBC_2.27 pthread_once F
 GLIBC_2.27 pthread_rwlock_destroy F
 GLIBC_2.27 pthread_rwlock_init F
 GLIBC_2.27 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 8788493ce0..6cfde17d64 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -185,6 +185,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -866,6 +867,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2219,7 +2221,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 518a08ad1e..738e9ab535 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 4596ab72b0..16b2483535 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -370,6 +370,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1293,6 +1294,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2120,7 +2122,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index c21f7cfea6..13a2e8ef91 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -31,7 +31,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -109,7 +108,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index ae16394e8a..a6fd6eb894 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -359,6 +359,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1279,6 +1280,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2089,7 +2091,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 740570ef37..96c70fb45e 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 6e45427e90..f4ba7b4ee8 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -359,6 +359,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1279,6 +1280,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2086,7 +2088,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 740570ef37..96c70fb45e 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 080a036590..70c2a92dfc 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -189,6 +189,7 @@ GLIBC_2.0 __printf_fp F
 GLIBC_2.0 __profile_frequency F
 GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
+GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -869,6 +870,7 @@ GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_unlock F
+GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
@@ -2210,7 +2212,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index e17b5183ef..059ae76802 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.0 __pthread_mutex_unlock F
 GLIBC_2.0 __pthread_mutexattr_destroy F
 GLIBC_2.0 __pthread_mutexattr_init F
 GLIBC_2.0 __pthread_mutexattr_settype F
-GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
@@ -60,7 +59,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_once F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index c8fb7da49f..6f323b3705 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -397,6 +397,7 @@ GLIBC_2.2 __printf_fp F
 GLIBC_2.2 __profile_frequency F
 GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
+GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1322,6 +1323,7 @@ GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_unlock F
+GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2137,7 +2139,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 0565c43c10..3698acd3e9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2 __pthread_mutex_unlock F
 GLIBC_2.2 __pthread_mutexattr_destroy F
 GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
-GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
 GLIBC_2.2 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2 pthread_mutexattr_init F
 GLIBC_2.2 pthread_mutexattr_setkind_np F
 GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
-GLIBC_2.2 pthread_once F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
 GLIBC_2.2 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index cde6fdb49d..35503c7361 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -358,6 +358,7 @@ GLIBC_2.2.5 __printf_fp F
 GLIBC_2.2.5 __profile_frequency F
 GLIBC_2.2.5 __progname D 0x8
 GLIBC_2.2.5 __progname_full D 0x8
+GLIBC_2.2.5 __pthread_once F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __rawmemchr F
 GLIBC_2.2.5 __rcmd_errstr D 0x8
@@ -1290,6 +1291,7 @@ GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
 GLIBC_2.2.5 pthread_mutex_lock F
 GLIBC_2.2.5 pthread_mutex_unlock F
+GLIBC_2.2.5 pthread_once F
 GLIBC_2.2.5 pthread_self F
 GLIBC_2.2.5 pthread_setcancelstate F
 GLIBC_2.2.5 pthread_setcanceltype F
@@ -2096,7 +2098,9 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index f1255816b1..7636fde610 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.2.5 __pthread_mutex_unlock F
 GLIBC_2.2.5 __pthread_mutexattr_destroy F
 GLIBC_2.2.5 __pthread_mutexattr_init F
 GLIBC_2.2.5 __pthread_mutexattr_settype F
-GLIBC_2.2.5 __pthread_once F
 GLIBC_2.2.5 __pthread_rwlock_destroy F
 GLIBC_2.2.5 __pthread_rwlock_init F
 GLIBC_2.2.5 __pthread_rwlock_rdlock F
@@ -108,7 +107,6 @@ GLIBC_2.2.5 pthread_mutexattr_init F
 GLIBC_2.2.5 pthread_mutexattr_setkind_np F
 GLIBC_2.2.5 pthread_mutexattr_setpshared F
 GLIBC_2.2.5 pthread_mutexattr_settype F
-GLIBC_2.2.5 pthread_once F
 GLIBC_2.2.5 pthread_rwlock_destroy F
 GLIBC_2.2.5 pthread_rwlock_init F
 GLIBC_2.2.5 pthread_rwlock_rdlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index e772da1ec4..3af0b4def9 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -340,6 +340,7 @@ GLIBC_2.16 __profile_frequency F
 GLIBC_2.16 __progname D 0x4
 GLIBC_2.16 __progname_full D 0x4
 GLIBC_2.16 __pthread_cleanup_routine F
+GLIBC_2.16 __pthread_once F
 GLIBC_2.16 __ptsname_r_chk F
 GLIBC_2.16 __pwrite64 F
 GLIBC_2.16 __rawmemchr F
@@ -1461,6 +1462,7 @@ GLIBC_2.16 pthread_mutex_destroy F
 GLIBC_2.16 pthread_mutex_init F
 GLIBC_2.16 pthread_mutex_lock F
 GLIBC_2.16 pthread_mutex_unlock F
+GLIBC_2.16 pthread_once F
 GLIBC_2.16 pthread_self F
 GLIBC_2.16 pthread_setcancelstate F
 GLIBC_2.16 pthread_setcanceltype F
@@ -2194,4 +2196,6 @@ GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
+GLIBC_2.34 __pthread_once F
 GLIBC_2.34 pthread_mutex_consistent F
+GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index fdaff69ea6..d15de68e7e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -23,7 +23,6 @@ GLIBC_2.16 __pthread_mutex_unlock F
 GLIBC_2.16 __pthread_mutexattr_destroy F
 GLIBC_2.16 __pthread_mutexattr_init F
 GLIBC_2.16 __pthread_mutexattr_settype F
-GLIBC_2.16 __pthread_once F
 GLIBC_2.16 __pthread_register_cancel F
 GLIBC_2.16 __pthread_register_cancel_defer F
 GLIBC_2.16 __pthread_rwlock_destroy F
@@ -120,7 +119,6 @@ GLIBC_2.16 pthread_mutexattr_setpshared F
 GLIBC_2.16 pthread_mutexattr_setrobust F
 GLIBC_2.16 pthread_mutexattr_setrobust_np F
 GLIBC_2.16 pthread_mutexattr_settype F
-GLIBC_2.16 pthread_once F
 GLIBC_2.16 pthread_rwlock_destroy F
 GLIBC_2.16 pthread_rwlock_init F
 GLIBC_2.16 pthread_rwlock_rdlock F
-- 
2.29.2



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

* [PATCH 09/18] nptl: Move __pthread_unwind_next into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (7 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 08/18] nptl: Move pthread_once and __pthread_once " Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-12 17:49 ` [PATCH 10/18] csu: Move calling main out of __libc_start_main_impl Florian Weimer
                   ` (8 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

It's necessary to stub out __libc_disable_asynccancel and
__libc_enable_asynccancel via rtld-stubbed-symbols because the new
direct references to the unwinder result in symbol conflicts when the
rtld exception handling from libc is linked in during the construction
of librtld.map.

unwind-forcedunwind.c is merged into unwind-resume.c.  libc now needs
the functions that were previously only used in libpthread.

The GLIBC_PRIVATE exports of __libc_longjmp and __libc_siglongjmp are
no longer needed, so switch them to hidden symbols.

The symbol __pthread_unwind_next has been moved using
scripts/move-symbol-to-libc.py.
---
 elf/Makefile                                  |  2 +
 include/setjmp.h                              |  4 +-
 nptl/Makefile                                 |  4 +-
 nptl/Versions                                 |  4 +-
 nptl/forward.c                                |  6 --
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  8 ++-
 nptl/pthread_cancel.c                         | 10 ++-
 nptl/pthread_exit.c                           | 11 +++-
 nptl/unwind.c                                 | 14 ++--
 setjmp/Versions                               |  4 --
 sysdeps/arm/Makefile                          |  5 --
 sysdeps/arm/nptl/unwind-forcedunwind.c        | 25 --------
 sysdeps/arm/pt-arm-unwind-resume.S            | 20 ------
 sysdeps/generic/unwind-resume.c               | 14 ++++
 .../unwind-resume.c}                          |  5 +-
 sysdeps/nptl/pthread-functions.h              |  2 -
 sysdeps/nptl/unwind-forcedunwind.c            | 64 -------------------
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 +
 .../sysv/linux/aarch64/libpthread.abilist     |  1 -
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 +
 .../unix/sysv/linux/alpha/libpthread.abilist  |  1 -
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 +
 .../unix/sysv/linux/arc/libpthread.abilist    |  1 -
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +
 .../unix/sysv/linux/arm/be/libpthread.abilist |  1 -
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +
 .../unix/sysv/linux/arm/le/libpthread.abilist |  1 -
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +
 .../unix/sysv/linux/csky/libpthread.abilist   |  1 -
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +
 .../unix/sysv/linux/hppa/libpthread.abilist   |  1 -
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +
 .../unix/sysv/linux/i386/libpthread.abilist   |  1 -
 sysdeps/unix/sysv/linux/ia64/Makefile         |  2 +-
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  2 +
 .../unix/sysv/linux/ia64/libpthread.abilist   |  1 -
 .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +
 .../linux/m68k/coldfire/libpthread.abilist    |  1 -
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  1 -
 .../sysv/linux/microblaze/be/libc.abilist     |  2 +
 .../linux/microblaze/be/libpthread.abilist    |  1 -
 .../sysv/linux/microblaze/le/libc.abilist     |  2 +
 .../linux/microblaze/le/libpthread.abilist    |  1 -
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +
 .../sysv/linux/mips/mips32/libpthread.abilist |  1 -
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +
 .../sysv/linux/mips/mips64/libpthread.abilist |  1 -
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  2 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  2 +
 .../unix/sysv/linux/nios2/libpthread.abilist  |  1 -
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +
 .../powerpc/powerpc32/libpthread.abilist      |  1 -
 .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  2 +
 .../powerpc/powerpc64/be/libpthread.abilist   |  1 -
 .../linux/powerpc/powerpc64/le/libc.abilist   |  2 +
 .../powerpc/powerpc64/le/libpthread.abilist   |  1 -
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  2 +
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  1 -
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 +
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  1 -
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 +
 .../linux/s390/s390-32/libpthread.abilist     |  1 -
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  2 +
 .../linux/s390/s390-64/libpthread.abilist     |  1 -
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  1 -
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  1 -
 .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +
 .../linux/sparc/sparc32/libpthread.abilist    |  1 -
 .../sysv/linux/sparc/sparc64/libc.abilist     |  2 +
 .../linux/sparc/sparc64/libpthread.abilist    |  1 -
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 +
 .../sysv/linux/x86_64/64/libpthread.abilist   |  1 -
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 +
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  1 -
 80 files changed, 122 insertions(+), 176 deletions(-)
 delete mode 100644 sysdeps/arm/nptl/unwind-forcedunwind.c
 delete mode 100644 sysdeps/arm/pt-arm-unwind-resume.S
 rename sysdeps/{unix/sysv/linux/ia64/unwind-forcedunwind.c => ia64/unwind-resume.c} (87%)
 delete mode 100644 sysdeps/nptl/unwind-forcedunwind.c

diff --git a/elf/Makefile b/elf/Makefile
index 4c9e63dac9..05efa239d8 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -522,6 +522,8 @@ $(objpfx)dl-allobjs.os: $(all-rtld-routines:%=$(objpfx)%.os)
 # discovery mechanism is not compatible with the libc implementation
 # when compiled for libc.
 rtld-stubbed-symbols = \
+  __libc_disable_asynccancel \
+  __libc_enable_asynccancel \
   calloc \
   free \
   malloc \
diff --git a/include/setjmp.h b/include/setjmp.h
index 0a8e4d2eaf..a3936e611d 100644
--- a/include/setjmp.h
+++ b/include/setjmp.h
@@ -20,9 +20,9 @@ extern int __sigjmp_save (jmp_buf __env, int __savemask);
 extern void _longjmp_unwind (jmp_buf env, int val);
 
 extern void __libc_siglongjmp (sigjmp_buf env, int val)
-	  __attribute__ ((noreturn));
+	  __attribute__ ((noreturn)) attribute_hidden;
 extern void __libc_longjmp (sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
+     __attribute__ ((noreturn)) attribute_hidden;
 
 libc_hidden_proto (_setjmp)
 libc_hidden_proto (__sigsetjmp)
diff --git a/nptl/Makefile b/nptl/Makefile
index 910d8c7ebf..c1ade91a0b 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -80,6 +80,7 @@ routines = \
   pthread_self \
   pthread_setschedparam \
   pthread_sigmask \
+  unwind \
 
 shared-only-routines = forward
 static-only-routines = pthread_atfork
@@ -229,15 +230,12 @@ libpthread-routines = \
   sem_wait \
   sigaction \
   tpp \
-  unwind \
-  unwind-forcedunwind \
   vars \
   version \
 
 libpthread-shared-only-routines = \
   pt-allocrtsig \
   pt-interp \
-  unwind-forcedunwind \
   version \
 
 # Since cancellation handling is in large parts handled using exceptions
diff --git a/nptl/Versions b/nptl/Versions
index 74b311d4eb..c241763c13 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -56,6 +56,7 @@ libc {
   }
   GLIBC_2.3.3 {
     __pthread_cleanup_routine;
+    __pthread_unwind_next;
     pthread_attr_setaffinity_np;
     pthread_getaffinity_np;
   }
@@ -119,6 +120,7 @@ libc {
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
     __pthread_getattr_default_np;
+    __pthread_unwind;
   }
 }
 
@@ -324,7 +326,6 @@ libpthread {
     __pthread_register_cancel_defer;
     __pthread_unregister_cancel;
     __pthread_unregister_cancel_restore;
-    __pthread_unwind_next;
     pthread_attr_getaffinity_np;
     pthread_barrierattr_getpshared;
     pthread_condattr_getclock;
@@ -413,6 +414,5 @@ libpthread {
     __pthread_clock_settime;
     __pthread_get_minstack;
     __pthread_initialize_minimal;
-    __pthread_unwind;
   }
 }
diff --git a/nptl/forward.c b/nptl/forward.c
index 0b607436d4..7a7f54f9d9 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -123,9 +123,3 @@ FORWARD (__pthread_setcancelstate, (int state, int *oldstate),
 strong_alias (__pthread_setcancelstate, pthread_setcancelstate)
 
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
-
-FORWARD_NORETURN (__pthread_unwind,
-                  void attribute_hidden __attribute ((noreturn))
-                  __cleanup_fct_attribute attribute_compat_text_section,
-                  (__pthread_unwind_buf_t *buf), (buf),
-                  __safe_fatal ())
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index c2e02b1bf2..d30e8a9bdf 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -95,7 +95,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
     .ptr_nthreads = &__nptl_nthreads,
-    .ptr___pthread_unwind = &__pthread_unwind,
     .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
     .ptr__nptl_setxid = __nptl_setxid,
     .ptr_set_robust = __nptl_set_robust
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index d385deae1a..1a264ab929 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -271,19 +271,21 @@ extern void __pthread_unwind (__pthread_unwind_buf_t *__buf)
      weak_function
 #endif
      ;
+libc_hidden_proto (__pthread_unwind)
 extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
      __cleanup_fct_attribute __attribute ((__noreturn__))
 #ifndef SHARED
      weak_function
 #endif
      ;
+/* NB: No hidden proto for __pthread_unwind_next: inside glibc, the
+   legacy unwinding mechanism is used.  */
+
+#if IS_IN (libpthread)
 extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
      __cleanup_fct_attribute;
 extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
      __cleanup_fct_attribute;
-#if IS_IN (libpthread)
-hidden_proto (__pthread_unwind)
-hidden_proto (__pthread_unwind_next)
 hidden_proto (__pthread_register_cancel)
 hidden_proto (__pthread_unregister_cancel)
 # ifdef SHARED
diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c
index a011d72fa1..060484cdc8 100644
--- a/nptl/pthread_cancel.c
+++ b/nptl/pthread_cancel.c
@@ -23,6 +23,9 @@
 #include <atomic.h>
 #include <sysdep.h>
 #include <unistd.h>
+#include <unwind-link.h>
+#include <stdio.h>
+#include <gnu/lib-names.h>
 
 int
 __pthread_cancel (pthread_t th)
@@ -36,7 +39,12 @@ __pthread_cancel (pthread_t th)
 
 #ifdef SHARED
   /* Trigger an error if libgcc_s cannot be loaded.  */
-  __pthread_unwind_link_get ();
+  {
+    struct unwind_link *unwind_link = __libc_unwind_link_get ();
+    if (unwind_link == NULL)
+      __libc_fatal (LIBGCC_S_SO
+		    " must be installed for pthread_cancel to work\n");
+  }
 #endif
   int result = 0;
   int oldval;
diff --git a/nptl/pthread_exit.c b/nptl/pthread_exit.c
index 4afc406268..aed8c12e17 100644
--- a/nptl/pthread_exit.c
+++ b/nptl/pthread_exit.c
@@ -18,11 +18,20 @@
 
 #include <stdlib.h>
 #include "pthreadP.h"
-
+#include <unwind-link.h>
+#include <stdio.h>
+#include <gnu/lib-names.h>
 
 void
 __pthread_exit (void *value)
 {
+  {
+    struct unwind_link *unwind_link = __libc_unwind_link_get ();
+    if (unwind_link == NULL)
+      __libc_fatal (LIBGCC_S_SO
+                    " must be installed for pthread_exit to work\n");
+  }
+
   THREAD_SETMEM (THREAD_SELF, result, value);
 
   __do_cancel ();
diff --git a/nptl/unwind.c b/nptl/unwind.c
index 9c7ed7d7ca..25a2ca32e6 100644
--- a/nptl/unwind.c
+++ b/nptl/unwind.c
@@ -25,6 +25,7 @@
 #include "pthreadP.h"
 #include <libc-diag.h>
 #include <jmpbuf-unwind.h>
+#include <shlib-compat.h>
 
 #ifdef _STACK_GROWS_DOWN
 # define FRAME_LEFT(frame, other, adj) \
@@ -134,15 +135,20 @@ __pthread_unwind (__pthread_unwind_buf_t *buf)
   /* We better do not get here.  */
   abort ();
 }
-hidden_def (__pthread_unwind)
-
+libc_hidden_def (__pthread_unwind)
 
 void
 __cleanup_fct_attribute __attribute ((noreturn))
-__pthread_unwind_next (__pthread_unwind_buf_t *buf)
+___pthread_unwind_next (__pthread_unwind_buf_t *buf)
 {
   struct pthread_unwind_buf *ibuf = (struct pthread_unwind_buf *) buf;
 
   __pthread_unwind ((__pthread_unwind_buf_t *) ibuf->priv.data.prev);
 }
-hidden_def (__pthread_unwind_next)
+versioned_symbol (libc, ___pthread_unwind_next, __pthread_unwind_next,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_34)
+strong_alias (___pthread_unwind_next, __pthread_unwind_next_alias)
+compat_symbol (libc, __pthread_unwind_next_alias, __pthread_unwind_next,
+	       GLIBC_2_3_3);
+#endif
diff --git a/setjmp/Versions b/setjmp/Versions
index 2baa49ae8a..3c7cf87780 100644
--- a/setjmp/Versions
+++ b/setjmp/Versions
@@ -9,8 +9,4 @@ libc {
     # s*
     setjmp;
   }
-  GLIBC_PRIVATE {
-    # helper functions
-    __libc_longjmp; __libc_siglongjmp;
-  }
 }
diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
index ad2042b93a..fb4164f0d9 100644
--- a/sysdeps/arm/Makefile
+++ b/sysdeps/arm/Makefile
@@ -63,8 +63,3 @@ ifeq ($(subdir),rt)
 librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume
 librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume
 endif
-
-ifeq ($(subdir),nptl)
-libpthread-sysdep_routines += pt-arm-unwind-resume
-libpthread-shared-only-routines += pt-arm-unwind-resume
-endif
diff --git a/sysdeps/arm/nptl/unwind-forcedunwind.c b/sysdeps/arm/nptl/unwind-forcedunwind.c
deleted file mode 100644
index 61db34c0b5..0000000000
--- a/sysdeps/arm/nptl/unwind-forcedunwind.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Unwinder function forwarders for libpthread.  Arm version.
-   Copyright (C) 2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <sysdeps/nptl/unwind-forcedunwind.c>
-
-void *
-__unwind_link_get_resume (void)
-{
-  return UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_Resume);
-}
diff --git a/sysdeps/arm/pt-arm-unwind-resume.S b/sysdeps/arm/pt-arm-unwind-resume.S
deleted file mode 100644
index c056eb38d0..0000000000
--- a/sysdeps/arm/pt-arm-unwind-resume.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/* _Unwind_Resume wrapper for ARM EABI.
-   Copyright (C) 2015-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-/* The implementation in libpthread is identical to the one in libc.  */
-#include <sysdeps/arm/arm-unwind-resume.S>
diff --git a/sysdeps/generic/unwind-resume.c b/sysdeps/generic/unwind-resume.c
index 9e63762bf1..66dbb67e81 100644
--- a/sysdeps/generic/unwind-resume.c
+++ b/sysdeps/generic/unwind-resume.c
@@ -44,3 +44,17 @@ __gcc_personality_v0 PERSONALITY_PROTO
 {
   return UNWIND_LINK_PTR (link (), personality) PERSONALITY_ARGS;
 }
+
+_Unwind_Reason_Code
+_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
+                      void *stop_argument)
+{
+  return UNWIND_LINK_PTR (link (), _Unwind_ForcedUnwind)
+    (exc, stop, stop_argument);
+}
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+  return UNWIND_LINK_PTR (link (), _Unwind_GetCFA) (context);
+}
diff --git a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c b/sysdeps/ia64/unwind-resume.c
similarity index 87%
rename from sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c
rename to sysdeps/ia64/unwind-resume.c
index eaed6cf2ef..f8cf447162 100644
--- a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c
+++ b/sysdeps/ia64/unwind-resume.c
@@ -16,11 +16,10 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <sysdeps/nptl/unwind-forcedunwind.c>
+#include <sysdeps/generic/unwind-resume.c>
 
 _Unwind_Word
 _Unwind_GetBSP (struct _Unwind_Context *context)
 {
-  return UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_GetBSP)
-    (context);
+  return UNWIND_LINK_PTR (link (), _Unwind_GetBSP) (context);
 }
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 6ef7602cb9..280655fe40 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -57,8 +57,6 @@ struct pthread_functions
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
 #define HAVE_PTR_NTHREADS
   unsigned int *ptr_nthreads;
-  void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *)
-       __attribute ((noreturn)) __cleanup_fct_attribute;
   void (*ptr__nptl_deallocate_tsd) (void);
   int (*ptr__nptl_setxid) (struct xid_command *);
   void (*ptr_set_robust) (struct pthread *);
diff --git a/sysdeps/nptl/unwind-forcedunwind.c b/sysdeps/nptl/unwind-forcedunwind.c
deleted file mode 100644
index c0234670cf..0000000000
--- a/sysdeps/nptl/unwind-forcedunwind.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 2003-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.com>.
-
-   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; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <stdio.h>
-#include <unwind-link.h>
-#include <pthreadP.h>
-#include <sysdep.h>
-#include <gnu/lib-names.h>
-#include <unwind-resume.h>
-
-struct unwind_link *
-__pthread_unwind_link_get (void)
-{
-  struct unwind_link *unwind_link = __libc_unwind_link_get ();
-  if (unwind_link == NULL)
-    __libc_fatal (LIBGCC_S_SO
-		  " must be installed for pthread_cancel to work\n");
-  return unwind_link;
-}
-
-#if !HAVE_ARCH_UNWIND_RESUME
-void
-_Unwind_Resume (struct _Unwind_Exception *exc)
-{
-  UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_Resume) (exc);
-}
-#endif
-
-_Unwind_Reason_Code
-__gcc_personality_v0 PERSONALITY_PROTO
-{
-  return UNWIND_LINK_PTR (__pthread_unwind_link_get (), personality)
-    PERSONALITY_ARGS;
-}
-
-_Unwind_Reason_Code
-_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
-		      void *stop_argument)
-{
-  return UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_ForcedUnwind)
-    (exc, stop, stop_argument);
-}
-
-_Unwind_Word
-_Unwind_GetCFA (struct _Unwind_Context *context)
-{
-  return UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_GetCFA)
-    (context);
-}
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 8a11066f9e..a4eec97fd0 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -340,6 +340,7 @@ GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
 GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -2183,5 +2184,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index a57e807cd0..03f9309528 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
-GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __read F
 GLIBC_2.17 __res_state F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index b62c855163..cfd43859bc 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2154,6 +2154,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2264,6 +2265,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 059ae76802..62c3734ee1 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -197,7 +197,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index cd549c654b..f4a38131a0 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -329,6 +329,7 @@ GLIBC_2.32 __progname D 0x4
 GLIBC_2.32 __progname_full D 0x4
 GLIBC_2.32 __pthread_cleanup_routine F
 GLIBC_2.32 __pthread_once F
+GLIBC_2.32 __pthread_unwind_next F
 GLIBC_2.32 __ptsname_r_chk F
 GLIBC_2.32 __pwrite64 F
 GLIBC_2.32 __rawmemchr F
@@ -1943,5 +1944,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 55970eb845..43c2308c10 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -34,7 +34,6 @@ GLIBC_2.32 __pthread_rwlock_wrlock F
 GLIBC_2.32 __pthread_setspecific F
 GLIBC_2.32 __pthread_unregister_cancel F
 GLIBC_2.32 __pthread_unregister_cancel_restore F
-GLIBC_2.32 __pthread_unwind_next F
 GLIBC_2.32 __pwrite64 F
 GLIBC_2.32 __read F
 GLIBC_2.32 __res_state F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 03e5389852..9e6b989de2 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -159,6 +159,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -490,6 +491,7 @@ GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 2e3d644ed9..9e897ccaac 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -69,7 +69,6 @@ GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __read F
 GLIBC_2.4 __res_state F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index ac2fcf7b14..319cf8474a 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -156,6 +156,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -487,6 +488,7 @@ GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 2e3d644ed9..9e897ccaac 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -69,7 +69,6 @@ GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __read F
 GLIBC_2.4 __res_state F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 336a59110e..a9094c6575 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -333,6 +333,7 @@ GLIBC_2.29 __progname D 0x4
 GLIBC_2.29 __progname_full D 0x4
 GLIBC_2.29 __pthread_cleanup_routine F
 GLIBC_2.29 __pthread_once F
+GLIBC_2.29 __pthread_unwind_next F
 GLIBC_2.29 __ptsname_r_chk F
 GLIBC_2.29 __pwrite64 F
 GLIBC_2.29 __rawmemchr F
@@ -2127,5 +2128,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 78e69d3e06..02ecea2de5 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -34,7 +34,6 @@ GLIBC_2.29 __pthread_rwlock_wrlock F
 GLIBC_2.29 __pthread_setspecific F
 GLIBC_2.29 __pthread_unregister_cancel F
 GLIBC_2.29 __pthread_unregister_cancel_restore F
-GLIBC_2.29 __pthread_unwind_next F
 GLIBC_2.29 __pwrite64 F
 GLIBC_2.29 __read F
 GLIBC_2.29 __res_state F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 6d40c40268..63e458dc99 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2003,6 +2003,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2085,6 +2086,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 96c70fb45e..98c5811d37 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -189,7 +189,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 2022f82d81..428ff25c25 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2168,6 +2168,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2252,6 +2253,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index f2be012ea9..13df0ccca6 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -197,7 +197,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/ia64/Makefile b/sysdeps/unix/sysv/linux/ia64/Makefile
index 97fc7df0b1..f6a08d15d0 100644
--- a/sysdeps/unix/sysv/linux/ia64/Makefile
+++ b/sysdeps/unix/sysv/linux/ia64/Makefile
@@ -23,7 +23,7 @@ librt-shared-only-routines += rt-sysdep
 endif
 
 ifeq ($(subdir),nptl)
-libpthread-sysdep_routines += __ia64_longjmp unwind_longjmp __sigstack_longjmp
+sysdep_routines += __ia64_longjmp unwind_longjmp __sigstack_longjmp
 endif
 
 ifeq ($(subdir),conform)
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index b9eeaabb01..3556b0eac4 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2035,6 +2035,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2117,6 +2118,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 3698acd3e9..78c683810a 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -189,7 +189,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 5a099fb3d0..245ae8da1f 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -160,6 +160,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -476,6 +477,7 @@ GLIBC_2.4 __progname D 0x4
 GLIBC_2.4 __progname_full D 0x4
 GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __rawmemchr F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 2e3d644ed9..9e897ccaac 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -69,7 +69,6 @@ GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __pwrite64 F
 GLIBC_2.4 __read F
 GLIBC_2.4 __res_state F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index f81c9cc523..fba3ac0138 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2112,6 +2112,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2197,6 +2198,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index f2be012ea9..13df0ccca6 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -197,7 +197,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index ce50516bc6..6a6d813b2c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -341,6 +341,7 @@ GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
 GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -2178,5 +2179,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 73c70d5c87..51975cabbb 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
-GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __read F
 GLIBC_2.18 __res_state F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 37ecc7c967..7138bb3fe7 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -341,6 +341,7 @@ GLIBC_2.18 __progname D 0x4
 GLIBC_2.18 __progname_full D 0x4
 GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __rawmemchr F
@@ -2175,5 +2176,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 73c70d5c87..51975cabbb 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
-GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __pwrite64 F
 GLIBC_2.18 __read F
 GLIBC_2.18 __res_state F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 6d50fcc64f..d070746259 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2086,6 +2086,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2168,6 +2169,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index faa1ad9d1c..8829753707 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -196,7 +196,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index b4e05e270d..d40d0079fc 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2084,6 +2084,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2166,6 +2167,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index faa1ad9d1c..8829753707 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -196,7 +196,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 71d184c2aa..d56b5a25cb 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2092,6 +2092,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x200
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2174,6 +2175,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 1e792c6705..d334efb37c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2085,6 +2085,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x400
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2168,6 +2169,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 5afc3e8022..4422b5ca92 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -378,6 +378,7 @@ GLIBC_2.21 __progname D 0x4
 GLIBC_2.21 __progname_full D 0x4
 GLIBC_2.21 __pthread_cleanup_routine F
 GLIBC_2.21 __pthread_once F
+GLIBC_2.21 __pthread_unwind_next F
 GLIBC_2.21 __ptsname_r_chk F
 GLIBC_2.21 __pwrite64 F
 GLIBC_2.21 __rawmemchr F
@@ -2216,5 +2217,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 5db41bc85b..f370adca8d 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.21 __pthread_rwlock_wrlock F
 GLIBC_2.21 __pthread_setspecific F
 GLIBC_2.21 __pthread_unregister_cancel F
 GLIBC_2.21 __pthread_unregister_cancel_restore F
-GLIBC_2.21 __pthread_unwind_next F
 GLIBC_2.21 __pwrite64 F
 GLIBC_2.21 __read F
 GLIBC_2.21 __res_state F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 4bfae8faa6..8bd6dd5b48 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2116,6 +2116,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 getcontext F
 GLIBC_2.3.3 gnu_dev_major F
@@ -2224,6 +2225,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 995c88cbce..e354162563 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -197,7 +197,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index dc102f7f29..6bf7342f4c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2149,6 +2149,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 getcontext F
 GLIBC_2.3.3 gnu_dev_major F
@@ -2257,6 +2258,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 9f019c4eac..2d616e24cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -1984,6 +1984,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2087,6 +2088,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 07428bd3d6..3bedf42d7a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -186,7 +186,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index f1217ffca5..247c8f77cf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -426,6 +426,7 @@ GLIBC_2.17 __progname D 0x8
 GLIBC_2.17 __progname_full D 0x8
 GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __rawmemchr F
@@ -2378,5 +2379,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index a57e807cd0..03f9309528 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
-GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __pwrite64 F
 GLIBC_2.17 __read F
 GLIBC_2.17 __res_state F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index afaabf996e..1af16292a7 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -326,6 +326,7 @@ GLIBC_2.33 __progname D 0x4
 GLIBC_2.33 __progname_full D 0x4
 GLIBC_2.33 __pthread_cleanup_routine F
 GLIBC_2.33 __pthread_once F
+GLIBC_2.33 __pthread_unwind_next F
 GLIBC_2.33 __ptsname_r_chk F
 GLIBC_2.33 __pwrite64 F
 GLIBC_2.33 __rawmemchr F
@@ -1945,5 +1946,6 @@ GLIBC_2.33 wscanf F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index ddf52b427a..a9958f0b67 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -34,7 +34,6 @@ GLIBC_2.33 __pthread_rwlock_wrlock F
 GLIBC_2.33 __pthread_setspecific F
 GLIBC_2.33 __pthread_unregister_cancel F
 GLIBC_2.33 __pthread_unregister_cancel_restore F
-GLIBC_2.33 __pthread_unwind_next F
 GLIBC_2.33 __pwrite64 F
 GLIBC_2.33 __read F
 GLIBC_2.33 __res_state F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 28563980d5..54038ac5ba 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -337,6 +337,7 @@ GLIBC_2.27 __progname D 0x8
 GLIBC_2.27 __progname_full D 0x8
 GLIBC_2.27 __pthread_cleanup_routine F
 GLIBC_2.27 __pthread_once F
+GLIBC_2.27 __pthread_unwind_next F
 GLIBC_2.27 __ptsname_r_chk F
 GLIBC_2.27 __pwrite64 F
 GLIBC_2.27 __rawmemchr F
@@ -2145,5 +2146,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index b12ec34091..0c6ae5b20c 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.27 __pthread_rwlock_wrlock F
 GLIBC_2.27 __pthread_setspecific F
 GLIBC_2.27 __pthread_unregister_cancel F
 GLIBC_2.27 __pthread_unregister_cancel_restore F
-GLIBC_2.27 __pthread_unwind_next F
 GLIBC_2.27 __pwrite64 F
 GLIBC_2.27 __read F
 GLIBC_2.27 __res_state F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 6cfde17d64..1e896254ef 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2125,6 +2125,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2222,6 +2223,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 738e9ab535..d72648c9dd 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -198,7 +198,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 16b2483535..3cf10b2ab2 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2029,6 +2029,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2123,6 +2124,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 13a2e8ef91..09c03d66b8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -190,7 +190,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index a6fd6eb894..f7bded858a 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2007,6 +2007,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2092,6 +2093,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 96c70fb45e..98c5811d37 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -189,7 +189,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index f4ba7b4ee8..c8ec299eac 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2007,6 +2007,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2089,6 +2090,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 96c70fb45e..98c5811d37 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -189,7 +189,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 70c2a92dfc..64529443e9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2119,6 +2119,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x104
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2213,6 +2214,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 059ae76802..62c3734ee1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -197,7 +197,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 6f323b3705..5c5ad0af63 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2058,6 +2058,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2140,6 +2141,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 3698acd3e9..78c683810a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -189,7 +189,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_attr_setstack F
 GLIBC_2.3.3 pthread_attr_setstacksize F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 35503c7361..1805cd6b9b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2016,6 +2016,7 @@ GLIBC_2.3.2 pthread_cond_timedwait F
 GLIBC_2.3.2 pthread_cond_wait F
 GLIBC_2.3.2 strptime_l F
 GLIBC_2.3.3 __pthread_cleanup_routine F
+GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 _sys_siglist D 0x208
 GLIBC_2.3.3 gnu_dev_major F
 GLIBC_2.3.3 gnu_dev_makedev F
@@ -2099,6 +2100,7 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 7636fde610..31bb6837f9 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -188,7 +188,6 @@ GLIBC_2.3.3 __pthread_register_cancel F
 GLIBC_2.3.3 __pthread_register_cancel_defer F
 GLIBC_2.3.3 __pthread_unregister_cancel F
 GLIBC_2.3.3 __pthread_unregister_cancel_restore F
-GLIBC_2.3.3 __pthread_unwind_next F
 GLIBC_2.3.3 pthread_attr_getaffinity_np F
 GLIBC_2.3.3 pthread_barrierattr_getpshared F
 GLIBC_2.3.3 pthread_condattr_getclock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 3af0b4def9..780679cb52 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -341,6 +341,7 @@ GLIBC_2.16 __progname D 0x4
 GLIBC_2.16 __progname_full D 0x4
 GLIBC_2.16 __pthread_cleanup_routine F
 GLIBC_2.16 __pthread_once F
+GLIBC_2.16 __pthread_unwind_next F
 GLIBC_2.16 __ptsname_r_chk F
 GLIBC_2.16 __pwrite64 F
 GLIBC_2.16 __rawmemchr F
@@ -2197,5 +2198,6 @@ GLIBC_2.33 stat64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index d15de68e7e..73719e6d11 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.16 __pthread_rwlock_wrlock F
 GLIBC_2.16 __pthread_setspecific F
 GLIBC_2.16 __pthread_unregister_cancel F
 GLIBC_2.16 __pthread_unregister_cancel_restore F
-GLIBC_2.16 __pthread_unwind_next F
 GLIBC_2.16 __pwrite64 F
 GLIBC_2.16 __read F
 GLIBC_2.16 __res_state F
-- 
2.29.2



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

* [PATCH 10/18] csu: Move calling main out of __libc_start_main_impl
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (8 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 09/18] nptl: Move __pthread_unwind_next " Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-12 17:49 ` [PATCH 11/18] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
                   ` (7 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

This code depends on whether glibc has unwinding support for
a particular port.
---
 csu/libc-start.c                       | 74 ++--------------------
 sysdeps/generic/libc_start_call_main.h | 24 +++++++
 sysdeps/nptl/libc_start_call_main.h    | 88 ++++++++++++++++++++++++++
 3 files changed, 116 insertions(+), 70 deletions(-)
 create mode 100644 sysdeps/generic/libc_start_call_main.h
 create mode 100644 sysdeps/nptl/libc_start_call_main.h

diff --git a/csu/libc-start.c b/csu/libc-start.c
index 05ff7afddf..8688cba76d 100644
--- a/csu/libc-start.c
+++ b/csu/libc-start.c
@@ -58,12 +58,6 @@ uintptr_t __pointer_chk_guard_local
 # endif
 #endif
 
-#ifdef HAVE_PTR_NTHREADS
-/* We need atomic operations.  */
-# include <atomic.h>
-#endif
-
-
 #ifndef SHARED
 # include <link.h>
 # include <dl-irel.h>
@@ -123,6 +117,9 @@ apply_irel (void)
 # define ARCH_INIT_CPU_FEATURES()
 #endif
 
+/* Obtain the definition of __libc_start_call_main.  */
+#include <libc_start_call_main.h>
+
 #ifdef SHARED
 /* Initialization for dynamic executables.  Find the main executable
    link map and run its init functions.  */
@@ -245,9 +242,6 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
 		 void (*fini) (void),
 		 void (*rtld_fini) (void), void *stack_end)
 {
-  /* Result of the 'main' function.  */
-  int result;
-
 #ifndef SHARED
   char **ev = &argv[argc + 1];
 
@@ -413,68 +407,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
 #ifndef SHARED
   _dl_debug_initialize (0, LM_ID_BASE);
 #endif
-#ifdef HAVE_CLEANUP_JMP_BUF
-  /* Memory for the cancellation buffer.  */
-  struct pthread_unwind_buf unwind_buf;
-
-  int not_first_call;
-  DIAG_PUSH_NEEDS_COMMENT;
-#if __GNUC_PREREQ (7, 0)
-  /* This call results in a -Wstringop-overflow warning because struct
-     pthread_unwind_buf is smaller than jmp_buf.  setjmp and longjmp
-     do not use anything beyond the common prefix (they never access
-     the saved signal mask), so that is a false positive.  */
-  DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overflow=");
-#endif
-  not_first_call = setjmp ((struct __jmp_buf_tag *) unwind_buf.cancel_jmp_buf);
-  DIAG_POP_NEEDS_COMMENT;
-  if (__glibc_likely (! not_first_call))
-    {
-      struct pthread *self = THREAD_SELF;
-
-      /* Store old info.  */
-      unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf);
-      unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup);
-
-      /* Store the new cleanup handler info.  */
-      THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf);
-
-      /* Run the program.  */
-      result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
-    }
-  else
-    {
-      /* Remove the thread-local data.  */
-# ifdef SHARED
-      PTHFCT_CALL (ptr__nptl_deallocate_tsd, ());
-# else
-      extern void __nptl_deallocate_tsd (void) __attribute ((weak));
-      __nptl_deallocate_tsd ();
-# endif
-
-      /* One less thread.  Decrement the counter.  If it is zero we
-	 terminate the entire process.  */
-      result = 0;
-# ifdef SHARED
-      unsigned int *ptr = __libc_pthread_functions.ptr_nthreads;
-#  ifdef PTR_DEMANGLE
-      PTR_DEMANGLE (ptr);
-#  endif
-# else
-      extern unsigned int __nptl_nthreads __attribute ((weak));
-      unsigned int *const ptr = &__nptl_nthreads;
-# endif
-
-      if (! atomic_decrement_and_test (ptr))
-	/* Not much left to do but to exit the thread, not the process.  */
-	__exit_thread ();
-    }
-#else
-  /* Nothing fancy, just call the function.  */
-  result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
-#endif
 
-  exit (result);
+  __libc_start_call_main (main, argc, argv MAIN_AUXVEC_PARAM);
 }
 
 /* Starting with glibc 2.34, the init parameter is always NULL.  Older
diff --git a/sysdeps/generic/libc_start_call_main.h b/sysdeps/generic/libc_start_call_main.h
new file mode 100644
index 0000000000..8a06eec4a3
--- /dev/null
+++ b/sysdeps/generic/libc_start_call_main.h
@@ -0,0 +1,24 @@
+/* Invoking main from __libc_start.  Generic version without unwinding.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+_Noreturn static __always_inline void
+__libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
+                        int argc, char **argv MAIN_AUXVEC_DECL)
+{
+  exit (main (argc, argv, __environ MAIN_AUXVEC_PARAM));
+}
diff --git a/sysdeps/nptl/libc_start_call_main.h b/sysdeps/nptl/libc_start_call_main.h
new file mode 100644
index 0000000000..5218e7ab1e
--- /dev/null
+++ b/sysdeps/nptl/libc_start_call_main.h
@@ -0,0 +1,88 @@
+/* Invoking main from __libc_start_main.  nptl version.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <atomic.h>
+
+_Noreturn static void
+__libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
+                        int argc, char **argv
+#ifdef LIBC_START_MAIN_AUXVEC_ARG
+                            , ElfW(auxv_t) *auxvec
+#endif
+                        )
+{
+  int result;
+
+  /* Memory for the cancellation buffer.  */
+  struct pthread_unwind_buf unwind_buf;
+
+  int not_first_call;
+  DIAG_PUSH_NEEDS_COMMENT;
+#if __GNUC_PREREQ (7, 0)
+  /* This call results in a -Wstringop-overflow warning because struct
+     pthread_unwind_buf is smaller than jmp_buf.  setjmp and longjmp
+     do not use anything beyond the common prefix (they never access
+     the saved signal mask), so that is a false positive.  */
+  DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overflow=");
+#endif
+  not_first_call = setjmp ((struct __jmp_buf_tag *) unwind_buf.cancel_jmp_buf);
+  DIAG_POP_NEEDS_COMMENT;
+  if (__glibc_likely (! not_first_call))
+    {
+      struct pthread *self = THREAD_SELF;
+
+      /* Store old info.  */
+      unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf);
+      unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup);
+
+      /* Store the new cleanup handler info.  */
+      THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf);
+
+      /* Run the program.  */
+      result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
+    }
+  else
+    {
+      /* Remove the thread-local data.  */
+# ifdef SHARED
+      PTHFCT_CALL (ptr__nptl_deallocate_tsd, ());
+# else
+      extern void __nptl_deallocate_tsd (void) __attribute ((weak));
+      __nptl_deallocate_tsd ();
+# endif
+
+      /* One less thread.  Decrement the counter.  If it is zero we
+         terminate the entire process.  */
+      result = 0;
+# ifdef SHARED
+      unsigned int *ptr = __libc_pthread_functions.ptr_nthreads;
+#  ifdef PTR_DEMANGLE
+      PTR_DEMANGLE (ptr);
+#  endif
+# else
+      extern unsigned int __nptl_nthreads __attribute ((weak));
+      unsigned int *const ptr = &__nptl_nthreads;
+# endif
+
+      if (! atomic_decrement_and_test (ptr))
+        /* Not much left to do but to exit the thread, not the process.  */
+        __exit_thread ();
+    }
+
+  exit (result);
+}
-- 
2.29.2



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

* [PATCH 11/18] nptl: Move internal __nptl_nthreads variable into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (9 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 10/18] csu: Move calling main out of __libc_start_main_impl Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-12 17:49 ` [PATCH 12/18] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
                   ` (6 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

---
 nptl/Makefile                       |  1 +
 nptl/Versions                       |  1 +
 nptl/libc_pthread_init.c            |  1 -
 nptl/nptl-init.c                    |  1 -
 nptl/nptl_nthreads.c                | 23 +++++++++++++++++++++++
 nptl/pthreadP.h                     |  3 ++-
 nptl/pthread_create.c               |  4 ----
 nptl_db/structs.def                 |  2 +-
 sysdeps/nptl/libc_start_call_main.h | 13 ++-----------
 sysdeps/nptl/pthread-functions.h    |  2 --
 10 files changed, 30 insertions(+), 21 deletions(-)
 create mode 100644 nptl/nptl_nthreads.c

diff --git a/nptl/Makefile b/nptl/Makefile
index c1ade91a0b..d7491632b8 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -45,6 +45,7 @@ routines = \
   libc_multiple_threads \
   libc_pthread_init \
   lowlevellock \
+  nptl_nthreads \
   old_pthread_cond_destroy \
   old_pthread_cond_init \
   pthread_atfork \
diff --git a/nptl/Versions b/nptl/Versions
index c241763c13..01a99ac99e 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -108,6 +108,7 @@ libc {
     __lll_lock_wait_private;
     __lll_trylock_elision;
     __lll_unlock_elision;
+    __nptl_nthreads;
     __pthread_attr_copy;
     __pthread_attr_destroy;
     __pthread_attr_init;
diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c
index 3ac54aae13..85fceff930 100644
--- a/nptl/libc_pthread_init.c
+++ b/nptl/libc_pthread_init.c
@@ -27,7 +27,6 @@
 #include <sysdep.h>
 #include <ldsodefs.h>
 
-
 #ifdef TLS_MULTIPLE_THREADS_IN_TCB
 void
 #else
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index d30e8a9bdf..a09d6ed306 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -94,7 +94,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_key_create = __pthread_key_create,
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
-    .ptr_nthreads = &__nptl_nthreads,
     .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
     .ptr__nptl_setxid = __nptl_setxid,
     .ptr_set_robust = __nptl_set_robust
diff --git a/nptl/nptl_nthreads.c b/nptl/nptl_nthreads.c
new file mode 100644
index 0000000000..2245bb3c76
--- /dev/null
+++ b/nptl/nptl_nthreads.c
@@ -0,0 +1,23 @@
+/* Thread counter variable.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <pthreadP.h>
+
+/* Number of threads running.  */
+unsigned int __nptl_nthreads = 1;
+libc_hidden_data_def (__nptl_nthreads)
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 1a264ab929..e00e21de7d 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -220,7 +220,8 @@ extern struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX];
 hidden_proto (__pthread_keys)
 
 /* Number of threads running.  */
-extern unsigned int __nptl_nthreads attribute_hidden;
+extern unsigned int __nptl_nthreads;
+libc_hidden_proto (__nptl_nthreads)
 
 #ifndef __ASSUME_SET_ROBUST_LIST
 /* Negative if we do not have the system call and we can use it.  */
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 6c645aff48..350bf03f5d 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -51,10 +51,6 @@ static td_thr_events_t __nptl_threads_events __attribute_used__;
 /* Pointer to descriptor with the last event.  */
 static struct pthread *__nptl_last_event __attribute_used__;
 
-/* Number of threads running.  */
-unsigned int __nptl_nthreads = 1;
-
-
 /* Code to allocate and deallocate a stack.  */
 #include "allocatestack.c"
 
diff --git a/nptl_db/structs.def b/nptl_db/structs.def
index 999a9fc35a..d0e1cb659a 100644
--- a/nptl_db/structs.def
+++ b/nptl_db/structs.def
@@ -73,7 +73,7 @@ DB_SYMBOL (nptl_version)
 DB_FUNCTION (__nptl_create_event)
 DB_FUNCTION (__nptl_death_event)
 DB_SYMBOL (__nptl_threads_events)
-DB_VARIABLE (__nptl_nthreads)
+DB_MAIN_VARIABLE (__nptl_nthreads)
 DB_VARIABLE (__nptl_last_event)
 DB_VARIABLE (__nptl_initial_report_events)
 
diff --git a/sysdeps/nptl/libc_start_call_main.h b/sysdeps/nptl/libc_start_call_main.h
index 5218e7ab1e..112cc20a7a 100644
--- a/sysdeps/nptl/libc_start_call_main.h
+++ b/sysdeps/nptl/libc_start_call_main.h
@@ -17,6 +17,7 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <atomic.h>
+#include <nptl/pthreadP.h>
 
 _Noreturn static void
 __libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
@@ -69,17 +70,7 @@ __libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
       /* One less thread.  Decrement the counter.  If it is zero we
          terminate the entire process.  */
       result = 0;
-# ifdef SHARED
-      unsigned int *ptr = __libc_pthread_functions.ptr_nthreads;
-#  ifdef PTR_DEMANGLE
-      PTR_DEMANGLE (ptr);
-#  endif
-# else
-      extern unsigned int __nptl_nthreads __attribute ((weak));
-      unsigned int *const ptr = &__nptl_nthreads;
-# endif
-
-      if (! atomic_decrement_and_test (ptr))
+      if (! atomic_decrement_and_test (&__nptl_nthreads))
         /* Not much left to do but to exit the thread, not the process.  */
         __exit_thread ();
     }
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 280655fe40..2fa698b1da 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -55,8 +55,6 @@ struct pthread_functions
   int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *));
   void *(*ptr___pthread_getspecific) (pthread_key_t);
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
-#define HAVE_PTR_NTHREADS
-  unsigned int *ptr_nthreads;
   void (*ptr__nptl_deallocate_tsd) (void);
   int (*ptr__nptl_setxid) (struct xid_command *);
   void (*ptr_set_robust) (struct pthread *);
-- 
2.29.2



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

* [PATCH 12/18] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (10 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 11/18] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
@ 2021-03-12 17:49 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 13/18] nptl: Move __pthread_keys global variable into libc Florian Weimer
                   ` (5 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:49 UTC (permalink / raw)
  To: libc-alpha

And document the reason for DB_ARRAY_VARIABLE.
---
 nptl_db/db-symbols.awk | 1 +
 nptl_db/structs.def    | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/nptl_db/db-symbols.awk b/nptl_db/db-symbols.awk
index eb089e188a..9e981537c8 100644
--- a/nptl_db/db-symbols.awk
+++ b/nptl_db/db-symbols.awk
@@ -4,6 +4,7 @@
 BEGIN {
 %define DB_RTLD_VARIABLE(name) /* Nothing. */
 %define DB_MAIN_VARIABLE(name) /* Nothing. */
+%define DB_MAIN_ARRAY_VARIABLE(name) /* Nothing. */
 %define DB_LOOKUP_NAME(idx, name)		required[STRINGIFY (name)] = 1;
 %define DB_LOOKUP_NAME_TH_UNIQUE(idx, name)	th_unique[STRINGIFY (name)] = 1;
 %include "db-symbols.h"
diff --git a/nptl_db/structs.def b/nptl_db/structs.def
index d0e1cb659a..1522c96f8f 100644
--- a/nptl_db/structs.def
+++ b/nptl_db/structs.def
@@ -26,9 +26,14 @@
 # define DB_RTLD_VARIABLE(name) DB_VARIABLE (name)
 #endif
 
+/* DB_MAIN_VARIABLE and DB_MAIN_ARRAY_VARIABLE are not covered by the
+   libpthread symbol check in db-symbols.awk.  */
 #ifndef DB_MAIN_VARIABLE
 # define DB_MAIN_VARIABLE(name) DB_VARIABLE (name)
 #endif
+#ifndef DB_MAIN_ARRAY_VARIABLE
+# define DB_MAIN_ARRAY_VARIABLE(name) DB_ARRAY_VARIABLE (name)
+#endif
 
 #ifndef DB_RTLD_GLOBAL_FIELD
 # if !IS_IN (libpthread)
-- 
2.29.2



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

* [PATCH 13/18] nptl: Move __pthread_keys global variable into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (11 preceding siblings ...)
  2021-03-12 17:49 ` [PATCH 12/18] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 14/18] nptl: Move __nptl_deallocate_tsd " Florian Weimer
                   ` (4 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

This prepares moving pthread_exit, and later the pthread_key_create
infrastructure.
---
 nptl/Makefile       |  1 +
 nptl/Versions       |  1 +
 nptl/pthreadP.h     |  2 +-
 nptl/pthread_keys.c | 24 ++++++++++++++++++++++++
 nptl/vars.c         |  5 -----
 nptl_db/structs.def |  2 +-
 6 files changed, 28 insertions(+), 7 deletions(-)
 create mode 100644 nptl/pthread_keys.c

diff --git a/nptl/Makefile b/nptl/Makefile
index d7491632b8..c0ae3593ef 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -76,6 +76,7 @@ routines = \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
+  pthread_keys \
   pthread_mutex_consistent \
   pthread_once \
   pthread_self \
diff --git a/nptl/Versions b/nptl/Versions
index 01a99ac99e..87bdcd89ea 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -121,6 +121,7 @@ libc {
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
     __pthread_getattr_default_np;
+    __pthread_keys;
     __pthread_unwind;
   }
 }
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index e00e21de7d..df64d4f8f1 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -217,7 +217,7 @@ extern int __concurrency_level attribute_hidden;
 
 /* Thread-local data key handling.  */
 extern struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX];
-hidden_proto (__pthread_keys)
+libc_hidden_proto (__pthread_keys)
 
 /* Number of threads running.  */
 extern unsigned int __nptl_nthreads;
diff --git a/nptl/pthread_keys.c b/nptl/pthread_keys.c
new file mode 100644
index 0000000000..76e4cfad34
--- /dev/null
+++ b/nptl/pthread_keys.c
@@ -0,0 +1,24 @@
+/* Table of pthread_key_create keys and their destructors.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <pthreadP.h>
+
+/* Table of the key information.  */
+struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]
+  __attribute__ ((nocommon));
+libc_hidden_data_def (__pthread_keys)
diff --git a/nptl/vars.c b/nptl/vars.c
index 51de9fbd54..8de30856b8 100644
--- a/nptl/vars.c
+++ b/nptl/vars.c
@@ -33,8 +33,3 @@ int __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;
    nptl/descr.h for more context on the single-threaded process case.  */
 int __pthread_multiple_threads attribute_hidden;
 #endif
-
-/* Table of the key information.  */
-struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]
-  __attribute__ ((nocommon));
-hidden_data_def (__pthread_keys)
diff --git a/nptl_db/structs.def b/nptl_db/structs.def
index 1522c96f8f..33bf0f9be4 100644
--- a/nptl_db/structs.def
+++ b/nptl_db/structs.def
@@ -82,7 +82,7 @@ DB_MAIN_VARIABLE (__nptl_nthreads)
 DB_VARIABLE (__nptl_last_event)
 DB_VARIABLE (__nptl_initial_report_events)
 
-DB_ARRAY_VARIABLE (__pthread_keys)
+DB_MAIN_ARRAY_VARIABLE (__pthread_keys)
 DB_STRUCT (pthread_key_struct)
 DB_STRUCT_FIELD (pthread_key_struct, seq)
 DB_STRUCT_FIELD (pthread_key_struct, destr)
-- 
2.29.2



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

* [PATCH 14/18] nptl: Move __nptl_deallocate_tsd into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (12 preceding siblings ...)
  2021-03-12 17:50 ` [PATCH 13/18] nptl: Move __pthread_keys global variable into libc Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 15/18] nptl: Move pthread_exit " Florian Weimer
                   ` (3 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

This prepares moving pthread_exit, and later the pthread_key_create
infrastructure.
---
 nptl/Makefile                       |   1 +
 nptl/Versions                       |   1 +
 nptl/nptl-init.c                    |   1 -
 nptl/nptl_deallocate_tsd.c          | 112 ++++++++++++++++++++++++++++
 nptl/pthreadP.h                     |   3 +-
 nptl/pthread_create.c               |  94 -----------------------
 sysdeps/nptl/libc_start_call_main.h |   5 --
 sysdeps/nptl/pthread-functions.h    |   1 -
 8 files changed, 116 insertions(+), 102 deletions(-)
 create mode 100644 nptl/nptl_deallocate_tsd.c

diff --git a/nptl/Makefile b/nptl/Makefile
index c0ae3593ef..e21db8b138 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -45,6 +45,7 @@ routines = \
   libc_multiple_threads \
   libc_pthread_init \
   lowlevellock \
+  nptl_deallocate_tsd \
   nptl_nthreads \
   old_pthread_cond_destroy \
   old_pthread_cond_init \
diff --git a/nptl/Versions b/nptl/Versions
index 87bdcd89ea..5253772e8d 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -108,6 +108,7 @@ libc {
     __lll_lock_wait_private;
     __lll_trylock_elision;
     __lll_unlock_elision;
+    __nptl_deallocate_tsd;
     __nptl_nthreads;
     __pthread_attr_copy;
     __pthread_attr_destroy;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index a09d6ed306..54d9d206b2 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -94,7 +94,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_key_create = __pthread_key_create,
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
-    .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
     .ptr__nptl_setxid = __nptl_setxid,
     .ptr_set_robust = __nptl_set_robust
   };
diff --git a/nptl/nptl_deallocate_tsd.c b/nptl/nptl_deallocate_tsd.c
new file mode 100644
index 0000000000..c665f4a08a
--- /dev/null
+++ b/nptl/nptl_deallocate_tsd.c
@@ -0,0 +1,112 @@
+/* Deallocation thread-specific data structures related to pthread_key_create.
+   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 <pthreadP.h>
+
+/* Deallocate POSIX thread-local-storage.  */
+void
+__nptl_deallocate_tsd (void)
+{
+  struct pthread *self = THREAD_SELF;
+
+  /* Maybe no data was ever allocated.  This happens often so we have
+     a flag for this.  */
+  if (THREAD_GETMEM (self, specific_used))
+    {
+      size_t round;
+      size_t cnt;
+
+      round = 0;
+      do
+        {
+          size_t idx;
+
+          /* So far no new nonzero data entry.  */
+          THREAD_SETMEM (self, specific_used, false);
+
+          for (cnt = idx = 0; cnt < PTHREAD_KEY_1STLEVEL_SIZE; ++cnt)
+            {
+              struct pthread_key_data *level2;
+
+              level2 = THREAD_GETMEM_NC (self, specific, cnt);
+
+              if (level2 != NULL)
+                {
+                  size_t inner;
+
+                  for (inner = 0; inner < PTHREAD_KEY_2NDLEVEL_SIZE;
+                       ++inner, ++idx)
+                    {
+                      void *data = level2[inner].data;
+
+                      if (data != NULL)
+                        {
+                          /* Always clear the data.  */
+                          level2[inner].data = NULL;
+
+                          /* Make sure the data corresponds to a valid
+                             key.  This test fails if the key was
+                             deallocated and also if it was
+                             re-allocated.  It is the user's
+                             responsibility to free the memory in this
+                             case.  */
+                          if (level2[inner].seq
+                              == __pthread_keys[idx].seq
+                              /* It is not necessary to register a destructor
+                                 function.  */
+                              && __pthread_keys[idx].destr != NULL)
+                            /* Call the user-provided destructor.  */
+                            __pthread_keys[idx].destr (data);
+                        }
+                    }
+                }
+              else
+                idx += PTHREAD_KEY_1STLEVEL_SIZE;
+            }
+
+          if (THREAD_GETMEM (self, specific_used) == 0)
+            /* No data has been modified.  */
+            goto just_free;
+        }
+      /* We only repeat the process a fixed number of times.  */
+      while (__builtin_expect (++round < PTHREAD_DESTRUCTOR_ITERATIONS, 0));
+
+      /* Just clear the memory of the first block for reuse.  */
+      memset (&THREAD_SELF->specific_1stblock, '\0',
+              sizeof (self->specific_1stblock));
+
+    just_free:
+      /* Free the memory for the other blocks.  */
+      for (cnt = 1; cnt < PTHREAD_KEY_1STLEVEL_SIZE; ++cnt)
+        {
+          struct pthread_key_data *level2;
+
+          level2 = THREAD_GETMEM_NC (self, specific, cnt);
+          if (level2 != NULL)
+            {
+              /* The first block is allocated as part of the thread
+                 descriptor.  */
+              free (level2);
+              THREAD_SETMEM_NC (self, specific, cnt, NULL);
+            }
+        }
+
+      THREAD_SETMEM (self, specific_used, false);
+    }
+}
+libc_hidden_def (__nptl_deallocate_tsd)
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index df64d4f8f1..e11a3a1945 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -679,7 +679,8 @@ extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
 extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
 					  int execute);
 
-extern void __nptl_deallocate_tsd (void) attribute_hidden;
+extern void __nptl_deallocate_tsd (void);
+libc_hidden_proto (__nptl_deallocate_tsd)
 
 extern void __nptl_setxid_error (struct xid_command *cmdp, int error)
   attribute_hidden;
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 350bf03f5d..58e10e7741 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -242,100 +242,6 @@ __find_in_stack_list (struct pthread *pd)
 }
 
 
-/* Deallocate POSIX thread-local-storage.  */
-void
-attribute_hidden
-__nptl_deallocate_tsd (void)
-{
-  struct pthread *self = THREAD_SELF;
-
-  /* Maybe no data was ever allocated.  This happens often so we have
-     a flag for this.  */
-  if (THREAD_GETMEM (self, specific_used))
-    {
-      size_t round;
-      size_t cnt;
-
-      round = 0;
-      do
-	{
-	  size_t idx;
-
-	  /* So far no new nonzero data entry.  */
-	  THREAD_SETMEM (self, specific_used, false);
-
-	  for (cnt = idx = 0; cnt < PTHREAD_KEY_1STLEVEL_SIZE; ++cnt)
-	    {
-	      struct pthread_key_data *level2;
-
-	      level2 = THREAD_GETMEM_NC (self, specific, cnt);
-
-	      if (level2 != NULL)
-		{
-		  size_t inner;
-
-		  for (inner = 0; inner < PTHREAD_KEY_2NDLEVEL_SIZE;
-		       ++inner, ++idx)
-		    {
-		      void *data = level2[inner].data;
-
-		      if (data != NULL)
-			{
-			  /* Always clear the data.  */
-			  level2[inner].data = NULL;
-
-			  /* Make sure the data corresponds to a valid
-			     key.  This test fails if the key was
-			     deallocated and also if it was
-			     re-allocated.  It is the user's
-			     responsibility to free the memory in this
-			     case.  */
-			  if (level2[inner].seq
-			      == __pthread_keys[idx].seq
-			      /* It is not necessary to register a destructor
-				 function.  */
-			      && __pthread_keys[idx].destr != NULL)
-			    /* Call the user-provided destructor.  */
-			    __pthread_keys[idx].destr (data);
-			}
-		    }
-		}
-	      else
-		idx += PTHREAD_KEY_1STLEVEL_SIZE;
-	    }
-
-	  if (THREAD_GETMEM (self, specific_used) == 0)
-	    /* No data has been modified.  */
-	    goto just_free;
-	}
-      /* We only repeat the process a fixed number of times.  */
-      while (__builtin_expect (++round < PTHREAD_DESTRUCTOR_ITERATIONS, 0));
-
-      /* Just clear the memory of the first block for reuse.  */
-      memset (&THREAD_SELF->specific_1stblock, '\0',
-	      sizeof (self->specific_1stblock));
-
-    just_free:
-      /* Free the memory for the other blocks.  */
-      for (cnt = 1; cnt < PTHREAD_KEY_1STLEVEL_SIZE; ++cnt)
-	{
-	  struct pthread_key_data *level2;
-
-	  level2 = THREAD_GETMEM_NC (self, specific, cnt);
-	  if (level2 != NULL)
-	    {
-	      /* The first block is allocated as part of the thread
-		 descriptor.  */
-	      free (level2);
-	      THREAD_SETMEM_NC (self, specific, cnt, NULL);
-	    }
-	}
-
-      THREAD_SETMEM (self, specific_used, false);
-    }
-}
-
-
 /* Deallocate a thread's stack after optionally making sure the thread
    descriptor is still valid.  */
 void
diff --git a/sysdeps/nptl/libc_start_call_main.h b/sysdeps/nptl/libc_start_call_main.h
index 112cc20a7a..c579c65f78 100644
--- a/sysdeps/nptl/libc_start_call_main.h
+++ b/sysdeps/nptl/libc_start_call_main.h
@@ -60,12 +60,7 @@ __libc_start_call_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
   else
     {
       /* Remove the thread-local data.  */
-# ifdef SHARED
-      PTHFCT_CALL (ptr__nptl_deallocate_tsd, ());
-# else
-      extern void __nptl_deallocate_tsd (void) __attribute ((weak));
       __nptl_deallocate_tsd ();
-# endif
 
       /* One less thread.  Decrement the counter.  If it is zero we
          terminate the entire process.  */
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 2fa698b1da..b28b47ab0d 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -55,7 +55,6 @@ struct pthread_functions
   int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *));
   void *(*ptr___pthread_getspecific) (pthread_key_t);
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
-  void (*ptr__nptl_deallocate_tsd) (void);
   int (*ptr__nptl_setxid) (struct xid_command *);
   void (*ptr_set_robust) (struct pthread *);
 };
-- 
2.29.2



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

* [PATCH 15/18] nptl: Move pthread_exit into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (13 preceding siblings ...)
  2021-03-12 17:50 ` [PATCH 14/18] nptl: Move __nptl_deallocate_tsd " Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 16/18] nptl: Move pthread_setcancelstate " Florian Weimer
                   ` (2 subsequent siblings)
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

The pthread_exit symbol was moved using
scripts/move-symbol-to-libc.py.  No new symbol version is needed
because there was a forwarder.

The new tests nptl/tst-pthread_exit-nothreads and
nptl/tst-pthread_exit-nothreads-static exercise the scenario
that pthread_exit is called without libpthread having been linked in.
This is not possible for the generic code, so these tests do not
live in sysdeps/pthread for now.
---
 nptl/Makefile                                 | 13 +++++++--
 nptl/Versions                                 |  2 +-
 nptl/forward.c                                | 16 -----------
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  1 +
 nptl/pthread_exit.c                           |  5 +---
 nptl/tst-pthread_exit-nothreads-static.c      | 19 +++++++++++++
 nptl/tst-pthread_exit-nothreads.c             | 28 +++++++++++++++++++
 sysdeps/nptl/pthread-functions.h              |  1 -
 sysdeps/pthread/Makefile                      |  2 +-
 .../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 -
 39 files changed, 61 insertions(+), 56 deletions(-)
 create mode 100644 nptl/tst-pthread_exit-nothreads-static.c
 create mode 100644 nptl/tst-pthread_exit-nothreads.c

diff --git a/nptl/Makefile b/nptl/Makefile
index e21db8b138..2b184846ec 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -74,6 +74,7 @@ routines = \
   pthread_condattr_destroy \
   pthread_condattr_init \
   pthread_equal \
+  pthread_exit \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
@@ -150,7 +151,6 @@ libpthread-routines = \
   pthread_condattr_setpshared \
   pthread_create \
   pthread_detach \
-  pthread_exit \
   pthread_getattr_default_np \
   pthread_getconcurrency \
   pthread_getcpuclockid \
@@ -363,7 +363,13 @@ tests = tst-attr2 tst-attr3 tst-default-attr \
 	tst-thread-affinity-sched \
 	tst-pthread-defaultattr-free \
 	tst-pthread-attr-sigmask \
-	tst-pthread-timedlock-lockloop
+	tst-pthread-timedlock-lockloop \
+	tst-pthread_exit-nothreads \
+	tst-pthread_exit-nothreads-static \
+
+tests-nolibpthread = \
+  tst-pthread_exit-nothreads \
+  tst-pthread_exit-nothreads-static \
 
 tests-container =  tst-pthread-getattr
 
@@ -488,7 +494,8 @@ link-libc-static := $(common-objpfx)libc.a $(static-gnulib) \
 tests-static += tst-stackguard1-static \
 		tst-cancel24-static \
 		tst-mutex8-static tst-mutexpi8-static tst-sem11-static \
-		tst-sem12-static tst-cond11-static
+		tst-sem12-static tst-cond11-static \
+		tst-pthread_exit-nothreads-static
 
 tests += tst-cancel24-static
 
diff --git a/nptl/Versions b/nptl/Versions
index 5253772e8d..f897439613 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -120,6 +120,7 @@ libc {
     __pthread_cleanup_upto;
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
+    __pthread_exit;
     __pthread_force_elision;
     __pthread_getattr_default_np;
     __pthread_keys;
@@ -177,7 +178,6 @@ libpthread {
     pthread_cond_wait;
     pthread_create;
     pthread_detach;
-    pthread_exit;
     pthread_getspecific;
     pthread_join;
     pthread_key_create;
diff --git a/nptl/forward.c b/nptl/forward.c
index 7a7f54f9d9..a4a377ba6a 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -41,17 +41,6 @@ name decl								      \
   return PTHFCT_CALL (ptr_##name, params);				      \
 }
 
-/* Same as FORWARD2, only without return.  */
-#define FORWARD_NORETURN(name, rettype, decl, params, defaction) \
-rettype									      \
-name decl								      \
-{									      \
-  if (!__libc_pthread_functions_init)					      \
-    defaction;								      \
-									      \
-  PTHFCT_CALL (ptr_##name, params);					      \
-}
-
 #define FORWARD(name, decl, params, defretval) \
   FORWARD2 (name, int, decl, params, return defretval)
 
@@ -103,11 +92,6 @@ versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
 		  GLIBC_2_3_2);
 
 
-FORWARD_NORETURN (__pthread_exit, void, (void *retval), (retval),
-		  exit (EXIT_SUCCESS))
-strong_alias (__pthread_exit, pthread_exit);
-
-
 FORWARD (pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), 0)
 
 FORWARD (pthread_mutex_init,
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 54d9d206b2..caa06f380a 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -81,7 +81,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_cond_wait_2_0 = __pthread_cond_wait_2_0,
     .ptr___pthread_cond_timedwait_2_0 = __pthread_cond_timedwait_2_0,
 # endif
-    .ptr___pthread_exit = __pthread_exit,
     .ptr_pthread_mutex_destroy = __pthread_mutex_destroy,
     .ptr_pthread_mutex_init = __pthread_mutex_init,
     .ptr_pthread_mutex_lock = __pthread_mutex_lock,
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index e11a3a1945..3c6025d2fe 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -528,6 +528,7 @@ extern int __pthread_detach (pthread_t th);
 extern int __pthread_cancel (pthread_t th);
 extern int __pthread_kill (pthread_t threadid, int signo);
 extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));
+libc_hidden_proto (__pthread_exit)
 extern int __pthread_join (pthread_t threadid, void **thread_return);
 extern int __pthread_setcanceltype (int type, int *oldtype);
 extern int __pthread_enable_asynccancel (void) attribute_hidden;
diff --git a/nptl/pthread_exit.c b/nptl/pthread_exit.c
index aed8c12e17..1a93f371a9 100644
--- a/nptl/pthread_exit.c
+++ b/nptl/pthread_exit.c
@@ -36,8 +36,5 @@ __pthread_exit (void *value)
 
   __do_cancel ();
 }
+libc_hidden_def (__pthread_exit)
 weak_alias (__pthread_exit, pthread_exit)
-
-/* After a thread terminates, __libc_start_main decrements
-   __nptl_nthreads defined in pthread_create.c.  */
-PTHREAD_STATIC_FN_REQUIRE (__pthread_create)
diff --git a/nptl/tst-pthread_exit-nothreads-static.c b/nptl/tst-pthread_exit-nothreads-static.c
new file mode 100644
index 0000000000..e8cf19b1a4
--- /dev/null
+++ b/nptl/tst-pthread_exit-nothreads-static.c
@@ -0,0 +1,19 @@
+/* Check that pthread_exit works if there are no threads.  Static version.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-pthread_exit-nothreads.c"
diff --git a/nptl/tst-pthread_exit-nothreads.c b/nptl/tst-pthread_exit-nothreads.c
new file mode 100644
index 0000000000..d47455c75c
--- /dev/null
+++ b/nptl/tst-pthread_exit-nothreads.c
@@ -0,0 +1,28 @@
+/* Check that pthread_exit works if there are no threads.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+
+static int
+do_test (void)
+{
+  pthread_exit (NULL);
+  return 1;                     /* Not reached.  */
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index b28b47ab0d..8f280b9c25 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -41,7 +41,6 @@ struct pthread_functions
   int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
 					   pthread_mutex_t *,
 					   const struct timespec *);
-  void (*ptr___pthread_exit) (void *) __attribute__ ((__noreturn__));
   int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
   int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
 				 const pthread_mutexattr_t *);
diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile
index 53b65ef349..ed15c1e433 100644
--- a/sysdeps/pthread/Makefile
+++ b/sysdeps/pthread/Makefile
@@ -111,7 +111,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
 
 
 # Files which must not be linked with libpthread.
-tests-nolibpthread = tst-unload
+tests-nolibpthread += tst-unload
 
 # GCC-4.9 compiles 'sprintf(NULL, ...)' into UD2 on x86_64 without -fno-builtin
 CFLAGS-tst-cleanup2.c += -fno-builtin
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 03f9309528..a5bc7c8357 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.17 pthread_condattr_setclock F
 GLIBC_2.17 pthread_condattr_setpshared F
 GLIBC_2.17 pthread_create F
 GLIBC_2.17 pthread_detach F
-GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 62c3734ee1..5fc406b7c1 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 43c2308c10..e4c31d1343 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -97,7 +97,6 @@ GLIBC_2.32 pthread_condattr_setclock F
 GLIBC_2.32 pthread_condattr_setpshared F
 GLIBC_2.32 pthread_create F
 GLIBC_2.32 pthread_detach F
-GLIBC_2.32 pthread_exit F
 GLIBC_2.32 pthread_getattr_default_np F
 GLIBC_2.32 pthread_getconcurrency F
 GLIBC_2.32 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 9e897ccaac..b97115fe03 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -118,7 +118,6 @@ GLIBC_2.4 pthread_condattr_setclock F
 GLIBC_2.4 pthread_condattr_setpshared F
 GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
-GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 9e897ccaac..b97115fe03 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -118,7 +118,6 @@ GLIBC_2.4 pthread_condattr_setclock F
 GLIBC_2.4 pthread_condattr_setpshared F
 GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
-GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 02ecea2de5..7fb16e8387 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -95,7 +95,6 @@ GLIBC_2.29 pthread_condattr_setclock F
 GLIBC_2.29 pthread_condattr_setpshared F
 GLIBC_2.29 pthread_create F
 GLIBC_2.29 pthread_detach F
-GLIBC_2.29 pthread_exit F
 GLIBC_2.29 pthread_getattr_default_np F
 GLIBC_2.29 pthread_getconcurrency F
 GLIBC_2.29 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 98c5811d37..3288c7dd84 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 13df0ccca6..7ff0652b56 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 78c683810a..f42e1d4f2f 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 9e897ccaac..b97115fe03 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -118,7 +118,6 @@ GLIBC_2.4 pthread_condattr_setclock F
 GLIBC_2.4 pthread_condattr_setpshared F
 GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
-GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 13df0ccca6..7ff0652b56 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 51975cabbb..58dc35e926 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.18 pthread_condattr_setclock F
 GLIBC_2.18 pthread_condattr_setpshared F
 GLIBC_2.18 pthread_create F
 GLIBC_2.18 pthread_detach F
-GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 51975cabbb..58dc35e926 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.18 pthread_condattr_setclock F
 GLIBC_2.18 pthread_condattr_setpshared F
 GLIBC_2.18 pthread_create F
 GLIBC_2.18 pthread_detach F
-GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 8829753707..94f17b3c53 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 8829753707..94f17b3c53 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index f370adca8d..2bf7ef83c6 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.21 pthread_condattr_setclock F
 GLIBC_2.21 pthread_condattr_setpshared F
 GLIBC_2.21 pthread_create F
 GLIBC_2.21 pthread_detach F
-GLIBC_2.21 pthread_exit F
 GLIBC_2.21 pthread_getattr_default_np F
 GLIBC_2.21 pthread_getconcurrency F
 GLIBC_2.21 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index e354162563..b642ce0420 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 3bedf42d7a..ba4b580173 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -104,7 +104,6 @@ GLIBC_2.3 pthread_condattr_getpshared F
 GLIBC_2.3 pthread_condattr_setpshared F
 GLIBC_2.3 pthread_create F
 GLIBC_2.3 pthread_detach F
-GLIBC_2.3 pthread_exit F
 GLIBC_2.3 pthread_getconcurrency F
 GLIBC_2.3 pthread_getcpuclockid F
 GLIBC_2.3 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 03f9309528..a5bc7c8357 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.17 pthread_condattr_setclock F
 GLIBC_2.17 pthread_condattr_setpshared F
 GLIBC_2.17 pthread_create F
 GLIBC_2.17 pthread_detach F
-GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index a9958f0b67..4c2ef9c33d 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -97,7 +97,6 @@ GLIBC_2.33 pthread_condattr_setclock F
 GLIBC_2.33 pthread_condattr_setpshared F
 GLIBC_2.33 pthread_create F
 GLIBC_2.33 pthread_detach F
-GLIBC_2.33 pthread_exit F
 GLIBC_2.33 pthread_getattr_default_np F
 GLIBC_2.33 pthread_getconcurrency F
 GLIBC_2.33 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 0c6ae5b20c..81300bbbb4 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.27 pthread_condattr_setclock F
 GLIBC_2.27 pthread_condattr_setpshared F
 GLIBC_2.27 pthread_create F
 GLIBC_2.27 pthread_detach F
-GLIBC_2.27 pthread_exit F
 GLIBC_2.27 pthread_getattr_default_np F
 GLIBC_2.27 pthread_getconcurrency F
 GLIBC_2.27 pthread_getcpuclockid F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index d72648c9dd..d17848f0b1 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 09c03d66b8..1ae431fdf7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 98c5811d37..3288c7dd84 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 98c5811d37..3288c7dd84 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 62c3734ee1..5fc406b7c1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -43,7 +43,6 @@ GLIBC_2.0 pthread_cond_timedwait F
 GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
-GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_create F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 78c683810a..f42e1d4f2f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
-GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 31bb6837f9..49fdd52a28 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.2.5 pthread_condattr_getpshared F
 GLIBC_2.2.5 pthread_condattr_setpshared F
 GLIBC_2.2.5 pthread_create F
 GLIBC_2.2.5 pthread_detach F
-GLIBC_2.2.5 pthread_exit F
 GLIBC_2.2.5 pthread_getconcurrency F
 GLIBC_2.2.5 pthread_getcpuclockid F
 GLIBC_2.2.5 pthread_getspecific F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 73719e6d11..0384eaa51a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -84,7 +84,6 @@ GLIBC_2.16 pthread_condattr_setclock F
 GLIBC_2.16 pthread_condattr_setpshared F
 GLIBC_2.16 pthread_create F
 GLIBC_2.16 pthread_detach F
-GLIBC_2.16 pthread_exit F
 GLIBC_2.16 pthread_getconcurrency F
 GLIBC_2.16 pthread_getcpuclockid F
 GLIBC_2.16 pthread_getname_np F
-- 
2.29.2



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

* [PATCH 16/18] nptl: Move pthread_setcancelstate into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (14 preceding siblings ...)
  2021-03-12 17:50 ` [PATCH 15/18] nptl: Move pthread_exit " Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 17/18] nptl: Move pthread_setcanceltype " Florian Weimer
  2021-03-12 17:50 ` [PATCH 18/18] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

No new symbol version is required because there was a forwarder.

The symbol has been moved using scripts/move-symbol-to-libc.py.
---
 libio/iopopen.c                               |  5 ++---
 misc/error.c                                  | 19 ++++++-------------
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 |  2 +-
 nptl/forward.c                                |  4 ----
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  2 --
 nptl/pthread_setcancelstate.c                 |  6 +++---
 stdlib/fmtmsg.c                               |  9 ++-------
 sysdeps/nptl/libc-lockP.h                     |  4 +---
 sysdeps/nptl/pthread-functions.h              |  1 -
 sysdeps/posix/system.c                        |  5 ++---
 .../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 -
 sysdeps/unix/sysv/linux/fatal-prepare.h       |  4 +---
 .../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 -
 sysdeps/unix/sysv/linux/spawni.c              |  5 ++---
 .../sysv/linux/x86_64/64/libpthread.abilist   |  1 -
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  1 -
 43 files changed, 21 insertions(+), 77 deletions(-)

diff --git a/libio/iopopen.c b/libio/iopopen.c
index 3afca7e173..6b04222c24 100644
--- a/libio/iopopen.c
+++ b/libio/iopopen.c
@@ -282,10 +282,9 @@ _IO_new_proc_close (FILE *fp)
   do
     {
       int state;
-      __libc_ptf_call (__pthread_setcancelstate,
-		       (PTHREAD_CANCEL_DISABLE, &state), 0);
+      __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
       wait_pid = __waitpid (((_IO_proc_file *) fp)->pid, &wstatus, 0);
-      __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+      __pthread_setcancelstate (state, NULL);
     }
   while (wait_pid == -1 && errno == EINTR);
   if (wait_pid == -1)
diff --git a/misc/error.c b/misc/error.c
index 06cc4a5028..0400c84df8 100644
--- a/misc/error.c
+++ b/misc/error.c
@@ -236,12 +236,11 @@ void
 __error_internal (int status, int errnum, const char *message,
 		  va_list args, unsigned int mode_flags)
 {
-#if defined _LIBC && defined __libc_ptf_call
+#if defined _LIBC
   /* We do not want this call to be cut short by a thread
      cancellation.  Therefore disable cancellation for now.  */
   int state = PTHREAD_CANCEL_ENABLE;
-  __libc_ptf_call (__pthread_setcancelstate,
-		   (PTHREAD_CANCEL_DISABLE, &state), 0);
+  __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
 #endif
 
   flush_stdout ();
@@ -263,9 +262,7 @@ __error_internal (int status, int errnum, const char *message,
 
 #ifdef _LIBC
   _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
-  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
-# endif
+  __pthread_setcancelstate (state, NULL);
 #endif
 }
 
@@ -305,13 +302,11 @@ __error_at_line_internal (int status, int errnum, const char *file_name,
       old_line_number = line_number;
     }
 
-#if defined _LIBC && defined __libc_ptf_call
+#if defined _LIBC
   /* We do not want this call to be cut short by a thread
      cancellation.  Therefore disable cancellation for now.  */
   int state = PTHREAD_CANCEL_ENABLE;
-  __libc_ptf_call (__pthread_setcancelstate,
-		   (PTHREAD_CANCEL_DISABLE, &state),
-		   0);
+  __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
 #endif
 
   flush_stdout ();
@@ -341,9 +336,7 @@ __error_at_line_internal (int status, int errnum, const char *file_name,
 
 #ifdef _LIBC
   _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
-  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
-# endif
+  __pthread_setcancelstate (state, NULL);
 #endif
 }
 
diff --git a/nptl/Makefile b/nptl/Makefile
index 2b184846ec..fc0c5a405b 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -82,6 +82,7 @@ routines = \
   pthread_mutex_consistent \
   pthread_once \
   pthread_self \
+  pthread_setcancelstate \
   pthread_setschedparam \
   pthread_sigmask \
   unwind \
@@ -203,7 +204,6 @@ libpthread-routines = \
   pthread_rwlockattr_setpshared \
   pthread_setaffinity \
   pthread_setattr_default_np \
-  pthread_setcancelstate \
   pthread_setcanceltype \
   pthread_setconcurrency \
   pthread_setname \
diff --git a/nptl/Versions b/nptl/Versions
index f897439613..5018649e5d 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -124,6 +124,7 @@ libc {
     __pthread_force_elision;
     __pthread_getattr_default_np;
     __pthread_keys;
+    __pthread_setcancelstate;
     __pthread_unwind;
   }
 }
@@ -193,7 +194,6 @@ libpthread {
     pthread_mutexattr_getkind_np;
     pthread_mutexattr_init;
     pthread_mutexattr_setkind_np;
-    pthread_setcancelstate;
     pthread_setcanceltype;
     pthread_setspecific;
     pthread_sigmask;
diff --git a/nptl/forward.c b/nptl/forward.c
index a4a377ba6a..ef4a17d39b 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -102,8 +102,4 @@ FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0)
 
 FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
 
-FORWARD (__pthread_setcancelstate, (int state, int *oldstate),
-	 (state, oldstate), 0)
-strong_alias (__pthread_setcancelstate, pthread_setcancelstate)
-
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index caa06f380a..e7615ffcb6 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -85,7 +85,6 @@ static const struct pthread_functions pthread_functions =
     .ptr_pthread_mutex_init = __pthread_mutex_init,
     .ptr_pthread_mutex_lock = __pthread_mutex_lock,
     .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
-    .ptr___pthread_setcancelstate = __pthread_setcancelstate,
     .ptr_pthread_setcanceltype = __pthread_setcanceltype,
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 3c6025d2fe..c01cfea4ff 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -381,7 +381,6 @@ extern int __pthread_getschedparam (pthread_t thread_id, int *policy,
 				    struct sched_param *param);
 extern int __pthread_setschedparam (pthread_t thread_id, int policy,
 				    const struct sched_param *param);
-extern int __pthread_setcancelstate (int state, int *oldstate);
 extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
 				 const pthread_mutexattr_t *__mutexattr);
 extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
@@ -553,7 +552,6 @@ hidden_proto (__pthread_rwlock_unlock)
 hidden_proto (__pthread_key_create)
 hidden_proto (__pthread_getspecific)
 hidden_proto (__pthread_setspecific)
-hidden_proto (__pthread_setcancelstate)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
 hidden_proto (__pthread_mutexattr_settype)
diff --git a/nptl/pthread_setcancelstate.c b/nptl/pthread_setcancelstate.c
index a0ffbd9338..e3696ca348 100644
--- a/nptl/pthread_setcancelstate.c
+++ b/nptl/pthread_setcancelstate.c
@@ -19,7 +19,7 @@
 #include <errno.h>
 #include "pthreadP.h"
 #include <atomic.h>
-
+#include <libc-lockP.h>
 
 int
 __pthread_setcancelstate (int state, int *oldstate)
@@ -67,5 +67,5 @@ __pthread_setcancelstate (int state, int *oldstate)
 
   return 0;
 }
-strong_alias (__pthread_setcancelstate, pthread_setcancelstate)
-hidden_def (__pthread_setcancelstate)
+libc_hidden_def (__pthread_setcancelstate)
+weak_alias (__pthread_setcancelstate, pthread_setcancelstate)
diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c
index 2846d34012..428dad07ff 100644
--- a/stdlib/fmtmsg.c
+++ b/stdlib/fmtmsg.c
@@ -122,13 +122,10 @@ fmtmsg (long int classification, const char *label, int severity,
 	return MM_NOTOK;
     }
 
-#ifdef __libc_ptf_call
   /* We do not want this call to be cut short by a thread
      cancellation.  Therefore disable cancellation for now.  */
   int state = PTHREAD_CANCEL_ENABLE;
-  __libc_ptf_call (__pthread_setcancelstate,
-		   (PTHREAD_CANCEL_DISABLE, &state), 0);
-#endif
+  __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
 
   __libc_lock_lock (lock);
 
@@ -197,9 +194,7 @@ fmtmsg (long int classification, const char *label, int severity,
 
   __libc_lock_unlock (lock);
 
-#ifdef __libc_ptf_call
-  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
-#endif
+  __pthread_setcancelstate (state, NULL);
 
   return result;
 }
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index f9f279525d..a3c0f6501d 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -343,7 +343,7 @@ extern int __pthread_atfork (void (*__prepare) (void),
 			     void (*__child) (void));
 
 extern int __pthread_setcancelstate (int state, int *oldstate);
-
+libc_hidden_proto (__pthread_setcancelstate)
 
 /* Make the pthread functions weak so that we can elide them from
    single-threaded processes.  */
@@ -369,7 +369,6 @@ weak_extern (__pthread_setspecific)
 weak_extern (__pthread_getspecific)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
-weak_extern (__pthread_setcancelstate)
 # else
 #  pragma weak __pthread_mutex_init
 #  pragma weak __pthread_mutex_destroy
@@ -390,7 +389,6 @@ weak_extern (__pthread_setcancelstate)
 #  pragma weak __pthread_getspecific
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
-#  pragma weak __pthread_setcancelstate
 # endif
 #endif
 
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 8f280b9c25..ca7673135d 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -46,7 +46,6 @@ struct pthread_functions
 				 const pthread_mutexattr_t *);
   int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
   int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
-  int (*ptr___pthread_setcancelstate) (int, int *);
   int (*ptr_pthread_setcanceltype) (int, int *);
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
index 13c0662f90..48668fb392 100644
--- a/sysdeps/posix/system.c
+++ b/sysdeps/posix/system.c
@@ -82,10 +82,9 @@ cancel_handler (void *arg)
   __kill_noerrno (args->pid, SIGKILL);
 
   int state;
-  __libc_ptf_call (__pthread_setcancelstate,
-                   (PTHREAD_CANCEL_DISABLE, &state), 0);
+  __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
   TEMP_FAILURE_RETRY (__waitpid (args->pid, NULL, 0));
-  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+  __pthread_setcancelstate (state, NULL);
 
   DO_LOCK ();
   if (SUB_REF () == 0)
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index a5bc7c8357..047869a3a0 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.17 pthread_rwlockattr_init F
 GLIBC_2.17 pthread_rwlockattr_setkind_np F
 GLIBC_2.17 pthread_rwlockattr_setpshared F
 GLIBC_2.17 pthread_setaffinity_np F
-GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 5fc406b7c1..5252f34efe 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index e4c31d1343..554b85d779 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -151,7 +151,6 @@ GLIBC_2.32 pthread_rwlockattr_setkind_np F
 GLIBC_2.32 pthread_rwlockattr_setpshared F
 GLIBC_2.32 pthread_setaffinity_np F
 GLIBC_2.32 pthread_setattr_default_np F
-GLIBC_2.32 pthread_setcancelstate F
 GLIBC_2.32 pthread_setcanceltype F
 GLIBC_2.32 pthread_setconcurrency F
 GLIBC_2.32 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index b97115fe03..bbe8d28583 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index b97115fe03..bbe8d28583 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 7fb16e8387..c09b6cd6f4 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -146,7 +146,6 @@ GLIBC_2.29 pthread_rwlockattr_setkind_np F
 GLIBC_2.29 pthread_rwlockattr_setpshared F
 GLIBC_2.29 pthread_setaffinity_np F
 GLIBC_2.29 pthread_setattr_default_np F
-GLIBC_2.29 pthread_setcancelstate F
 GLIBC_2.29 pthread_setcanceltype F
 GLIBC_2.29 pthread_setconcurrency F
 GLIBC_2.29 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/fatal-prepare.h b/sysdeps/unix/sysv/linux/fatal-prepare.h
index ec441bdfbc..e2591c5447 100644
--- a/sysdeps/unix/sysv/linux/fatal-prepare.h
+++ b/sysdeps/unix/sysv/linux/fatal-prepare.h
@@ -19,6 +19,4 @@
 
 /* We have to completely disable cancellation.  assert() must not be a
    cancellation point but the implementation uses write() etc.  */
-#define FATAL_PREPARE \
-  __libc_ptf_call (__pthread_setcancelstate, \
-		   (PTHREAD_CANCEL_DISABLE, NULL), 0)
+#define FATAL_PREPARE __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL)
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 3288c7dd84..424e2cf068 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 7ff0652b56..e145d86e57 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index f42e1d4f2f..2c131140ba 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index b97115fe03..bbe8d28583 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 7ff0652b56..e145d86e57 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 58dc35e926..31d008004d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.18 pthread_rwlockattr_setkind_np F
 GLIBC_2.18 pthread_rwlockattr_setpshared F
 GLIBC_2.18 pthread_setaffinity_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 58dc35e926..31d008004d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.18 pthread_rwlockattr_setkind_np F
 GLIBC_2.18 pthread_rwlockattr_setpshared F
 GLIBC_2.18 pthread_setaffinity_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 94f17b3c53..d4bd5b5ce3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 94f17b3c53..d4bd5b5ce3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 2bf7ef83c6..ed8be1e44b 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.21 pthread_rwlockattr_setkind_np F
 GLIBC_2.21 pthread_rwlockattr_setpshared F
 GLIBC_2.21 pthread_setaffinity_np F
 GLIBC_2.21 pthread_setattr_default_np F
-GLIBC_2.21 pthread_setcancelstate F
 GLIBC_2.21 pthread_setcanceltype F
 GLIBC_2.21 pthread_setconcurrency F
 GLIBC_2.21 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index b642ce0420..d9e3bb5b31 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index ba4b580173..8f393575e1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -141,7 +141,6 @@ GLIBC_2.3 pthread_rwlockattr_getpshared F
 GLIBC_2.3 pthread_rwlockattr_init F
 GLIBC_2.3 pthread_rwlockattr_setkind_np F
 GLIBC_2.3 pthread_rwlockattr_setpshared F
-GLIBC_2.3 pthread_setcancelstate F
 GLIBC_2.3 pthread_setcanceltype F
 GLIBC_2.3 pthread_setconcurrency F
 GLIBC_2.3 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index a5bc7c8357..047869a3a0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.17 pthread_rwlockattr_init F
 GLIBC_2.17 pthread_rwlockattr_setkind_np F
 GLIBC_2.17 pthread_rwlockattr_setpshared F
 GLIBC_2.17 pthread_setaffinity_np F
-GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 4c2ef9c33d..528792a426 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -151,7 +151,6 @@ GLIBC_2.33 pthread_rwlockattr_setkind_np F
 GLIBC_2.33 pthread_rwlockattr_setpshared F
 GLIBC_2.33 pthread_setaffinity_np F
 GLIBC_2.33 pthread_setattr_default_np F
-GLIBC_2.33 pthread_setcancelstate F
 GLIBC_2.33 pthread_setcanceltype F
 GLIBC_2.33 pthread_setconcurrency F
 GLIBC_2.33 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 81300bbbb4..66f871fb89 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.27 pthread_rwlockattr_setkind_np F
 GLIBC_2.27 pthread_rwlockattr_setpshared F
 GLIBC_2.27 pthread_setaffinity_np F
 GLIBC_2.27 pthread_setattr_default_np F
-GLIBC_2.27 pthread_setcancelstate F
 GLIBC_2.27 pthread_setcanceltype F
 GLIBC_2.27 pthread_setconcurrency F
 GLIBC_2.27 pthread_setname_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index d17848f0b1..e69792eba6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 1ae431fdf7..75c5a27854 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -122,7 +122,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 3288c7dd84..424e2cf068 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 3288c7dd84..424e2cf068 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 5fc406b7c1..5252f34efe 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index f42e1d4f2f..2c131140ba 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
index b53b81b8fc..501f8fbccd 100644
--- a/sysdeps/unix/sysv/linux/spawni.c
+++ b/sysdeps/unix/sysv/linux/spawni.c
@@ -354,8 +354,7 @@ __spawnix (pid_t * pid, const char *file,
 
   /* Disable asynchronous cancellation.  */
   int state;
-  __libc_ptf_call (__pthread_setcancelstate,
-                   (PTHREAD_CANCEL_DISABLE, &state), 0);
+  __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
 
   /* Child must set args.err to something non-negative - we rely on
      the parent and child sharing VM.  */
@@ -413,7 +412,7 @@ __spawnix (pid_t * pid, const char *file,
 
   __libc_signal_restore_set (&args.oldmask);
 
-  __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+  __pthread_setcancelstate (state, NULL);
 
   return ec;
 }
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 49fdd52a28..afa8bb1dd8 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2.5 pthread_rwlockattr_getpshared F
 GLIBC_2.2.5 pthread_rwlockattr_init F
 GLIBC_2.2.5 pthread_rwlockattr_setkind_np F
 GLIBC_2.2.5 pthread_rwlockattr_setpshared F
-GLIBC_2.2.5 pthread_setcancelstate F
 GLIBC_2.2.5 pthread_setcanceltype F
 GLIBC_2.2.5 pthread_setconcurrency F
 GLIBC_2.2.5 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 0384eaa51a..b8c545b9c0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.16 pthread_rwlockattr_init F
 GLIBC_2.16 pthread_rwlockattr_setkind_np F
 GLIBC_2.16 pthread_rwlockattr_setpshared F
 GLIBC_2.16 pthread_setaffinity_np F
-GLIBC_2.16 pthread_setcancelstate F
 GLIBC_2.16 pthread_setcanceltype F
 GLIBC_2.16 pthread_setconcurrency F
 GLIBC_2.16 pthread_setname_np F
-- 
2.29.2



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

* [PATCH 17/18] nptl: Move pthread_setcanceltype into libc
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (15 preceding siblings ...)
  2021-03-12 17:50 ` [PATCH 16/18] nptl: Move pthread_setcancelstate " Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  2021-03-12 17:50 ` [PATCH 18/18] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

No new symbol version is required because there was a forwarder.

The symbol has been moved using scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                                  | 2 +-
 nptl/Versions                                                  | 1 -
 nptl/forward.c                                                 | 2 --
 nptl/nptl-init.c                                               | 1 -
 nptl/pthreadP.h                                                | 1 +
 nptl/pthread_setcanceltype.c                                   | 3 ++-
 sysdeps/nptl/pthread-functions.h                               | 1 -
 sysdeps/unix/sysv/linux/aarch64/libpthread.abilist             | 1 -
 sysdeps/unix/sysv/linux/alpha/libpthread.abilist               | 1 -
 sysdeps/unix/sysv/linux/arc/libpthread.abilist                 | 1 -
 sysdeps/unix/sysv/linux/arm/be/libpthread.abilist              | 1 -
 sysdeps/unix/sysv/linux/arm/le/libpthread.abilist              | 1 -
 sysdeps/unix/sysv/linux/csky/libpthread.abilist                | 1 -
 sysdeps/unix/sysv/linux/hppa/libpthread.abilist                | 1 -
 sysdeps/unix/sysv/linux/i386/libpthread.abilist                | 1 -
 sysdeps/unix/sysv/linux/ia64/libpthread.abilist                | 1 -
 sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist         | 1 -
 sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist         | 1 -
 sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist         | 1 -
 sysdeps/unix/sysv/linux/nios2/libpthread.abilist               | 1 -
 sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist   | 1 -
 .../unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist    | 1 -
 .../unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist    | 1 -
 sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist          | 1 -
 sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist          | 1 -
 sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist        | 1 -
 sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist        | 1 -
 sysdeps/unix/sysv/linux/sh/be/libpthread.abilist               | 1 -
 sysdeps/unix/sysv/linux/sh/le/libpthread.abilist               | 1 -
 sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist       | 1 -
 sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist           | 1 -
 sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist          | 1 -
 36 files changed, 4 insertions(+), 36 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index fc0c5a405b..098c31115f 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -83,6 +83,7 @@ routines = \
   pthread_once \
   pthread_self \
   pthread_setcancelstate \
+  pthread_setcanceltype \
   pthread_setschedparam \
   pthread_sigmask \
   unwind \
@@ -204,7 +205,6 @@ libpthread-routines = \
   pthread_rwlockattr_setpshared \
   pthread_setaffinity \
   pthread_setattr_default_np \
-  pthread_setcanceltype \
   pthread_setconcurrency \
   pthread_setname \
   pthread_setschedprio \
diff --git a/nptl/Versions b/nptl/Versions
index 5018649e5d..2838897371 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -194,7 +194,6 @@ libpthread {
     pthread_mutexattr_getkind_np;
     pthread_mutexattr_init;
     pthread_mutexattr_setkind_np;
-    pthread_setcanceltype;
     pthread_setspecific;
     pthread_sigmask;
     pthread_testcancel;
diff --git a/nptl/forward.c b/nptl/forward.c
index ef4a17d39b..de4e9cd6ab 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -101,5 +101,3 @@ FORWARD (pthread_mutex_init,
 FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0)
 
 FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
-
-FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index e7615ffcb6..49d811aed7 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -85,7 +85,6 @@ static const struct pthread_functions pthread_functions =
     .ptr_pthread_mutex_init = __pthread_mutex_init,
     .ptr_pthread_mutex_lock = __pthread_mutex_lock,
     .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
-    .ptr_pthread_setcanceltype = __pthread_setcanceltype,
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
     .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index c01cfea4ff..b7b5e62747 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -530,6 +530,7 @@ extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));
 libc_hidden_proto (__pthread_exit)
 extern int __pthread_join (pthread_t threadid, void **thread_return);
 extern int __pthread_setcanceltype (int type, int *oldtype);
+libc_hidden_proto (__pthread_setcanceltype)
 extern int __pthread_enable_asynccancel (void) attribute_hidden;
 extern void __pthread_disable_asynccancel (int oldtype) attribute_hidden;
 extern void __pthread_testcancel (void);
diff --git a/nptl/pthread_setcanceltype.c b/nptl/pthread_setcanceltype.c
index a9ce9b37fb..5f061d512b 100644
--- a/nptl/pthread_setcanceltype.c
+++ b/nptl/pthread_setcanceltype.c
@@ -68,4 +68,5 @@ __pthread_setcanceltype (int type, int *oldtype)
 
   return 0;
 }
-strong_alias (__pthread_setcanceltype, pthread_setcanceltype)
+libc_hidden_def (__pthread_setcanceltype)
+weak_alias (__pthread_setcanceltype, pthread_setcanceltype)
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index ca7673135d..2092ecef07 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -46,7 +46,6 @@ struct pthread_functions
 				 const pthread_mutexattr_t *);
   int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
   int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
-  int (*ptr_pthread_setcanceltype) (int, int *);
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 047869a3a0..47c5564772 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.17 pthread_rwlockattr_init F
 GLIBC_2.17 pthread_rwlockattr_setkind_np F
 GLIBC_2.17 pthread_rwlockattr_setpshared F
 GLIBC_2.17 pthread_setaffinity_np F
-GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
 GLIBC_2.17 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 5252f34efe..1d834d6d54 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 554b85d779..3c1054101c 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -151,7 +151,6 @@ GLIBC_2.32 pthread_rwlockattr_setkind_np F
 GLIBC_2.32 pthread_rwlockattr_setpshared F
 GLIBC_2.32 pthread_setaffinity_np F
 GLIBC_2.32 pthread_setattr_default_np F
-GLIBC_2.32 pthread_setcanceltype F
 GLIBC_2.32 pthread_setconcurrency F
 GLIBC_2.32 pthread_setname_np F
 GLIBC_2.32 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index bbe8d28583..c2892c4b8d 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
 GLIBC_2.4 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index bbe8d28583..c2892c4b8d 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
 GLIBC_2.4 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index c09b6cd6f4..2d125f11a3 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -146,7 +146,6 @@ GLIBC_2.29 pthread_rwlockattr_setkind_np F
 GLIBC_2.29 pthread_rwlockattr_setpshared F
 GLIBC_2.29 pthread_setaffinity_np F
 GLIBC_2.29 pthread_setattr_default_np F
-GLIBC_2.29 pthread_setcanceltype F
 GLIBC_2.29 pthread_setconcurrency F
 GLIBC_2.29 pthread_setname_np F
 GLIBC_2.29 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 424e2cf068..11fa4711d8 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index e145d86e57..1d84eb35fb 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 2c131140ba..88e178b1c3 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index bbe8d28583..c2892c4b8d 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -164,7 +164,6 @@ GLIBC_2.4 pthread_rwlockattr_init F
 GLIBC_2.4 pthread_rwlockattr_setkind_np F
 GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
-GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
 GLIBC_2.4 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index e145d86e57..1d84eb35fb 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 31d008004d..b19c648328 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.18 pthread_rwlockattr_setkind_np F
 GLIBC_2.18 pthread_rwlockattr_setpshared F
 GLIBC_2.18 pthread_setaffinity_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
 GLIBC_2.18 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 31d008004d..b19c648328 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.18 pthread_rwlockattr_setkind_np F
 GLIBC_2.18 pthread_rwlockattr_setpshared F
 GLIBC_2.18 pthread_setaffinity_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
 GLIBC_2.18 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index d4bd5b5ce3..0d7d23b8f3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index d4bd5b5ce3..0d7d23b8f3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index ed8be1e44b..34c81eb8db 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.21 pthread_rwlockattr_setkind_np F
 GLIBC_2.21 pthread_rwlockattr_setpshared F
 GLIBC_2.21 pthread_setaffinity_np F
 GLIBC_2.21 pthread_setattr_default_np F
-GLIBC_2.21 pthread_setcanceltype F
 GLIBC_2.21 pthread_setconcurrency F
 GLIBC_2.21 pthread_setname_np F
 GLIBC_2.21 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index d9e3bb5b31..9ef23ed6d6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 8f393575e1..5474d3eb4d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -141,7 +141,6 @@ GLIBC_2.3 pthread_rwlockattr_getpshared F
 GLIBC_2.3 pthread_rwlockattr_init F
 GLIBC_2.3 pthread_rwlockattr_setkind_np F
 GLIBC_2.3 pthread_rwlockattr_setpshared F
-GLIBC_2.3 pthread_setcanceltype F
 GLIBC_2.3 pthread_setconcurrency F
 GLIBC_2.3 pthread_setspecific F
 GLIBC_2.3 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 047869a3a0..47c5564772 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.17 pthread_rwlockattr_init F
 GLIBC_2.17 pthread_rwlockattr_setkind_np F
 GLIBC_2.17 pthread_rwlockattr_setpshared F
 GLIBC_2.17 pthread_setaffinity_np F
-GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
 GLIBC_2.17 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 528792a426..e86e8cab1d 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -151,7 +151,6 @@ GLIBC_2.33 pthread_rwlockattr_setkind_np F
 GLIBC_2.33 pthread_rwlockattr_setpshared F
 GLIBC_2.33 pthread_setaffinity_np F
 GLIBC_2.33 pthread_setattr_default_np F
-GLIBC_2.33 pthread_setcanceltype F
 GLIBC_2.33 pthread_setconcurrency F
 GLIBC_2.33 pthread_setname_np F
 GLIBC_2.33 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 66f871fb89..220affa7f0 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -135,7 +135,6 @@ GLIBC_2.27 pthread_rwlockattr_setkind_np F
 GLIBC_2.27 pthread_rwlockattr_setpshared F
 GLIBC_2.27 pthread_setaffinity_np F
 GLIBC_2.27 pthread_setattr_default_np F
-GLIBC_2.27 pthread_setcanceltype F
 GLIBC_2.27 pthread_setconcurrency F
 GLIBC_2.27 pthread_setname_np F
 GLIBC_2.27 pthread_setschedprio F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index e69792eba6..81b8d5ce5c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 75c5a27854..b916709d08 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -122,7 +122,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 424e2cf068..11fa4711d8 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 424e2cf068..11fa4711d8 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 5252f34efe..1d834d6d54 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -58,7 +58,6 @@ GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
 GLIBC_2.0 pthread_mutexattr_setkind_np F
-GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 2c131140ba..88e178b1c3 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2 pthread_rwlockattr_getpshared F
 GLIBC_2.2 pthread_rwlockattr_init F
 GLIBC_2.2 pthread_rwlockattr_setkind_np F
 GLIBC_2.2 pthread_rwlockattr_setpshared F
-GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setconcurrency F
 GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index afa8bb1dd8..f11ffd687f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -121,7 +121,6 @@ GLIBC_2.2.5 pthread_rwlockattr_getpshared F
 GLIBC_2.2.5 pthread_rwlockattr_init F
 GLIBC_2.2.5 pthread_rwlockattr_setkind_np F
 GLIBC_2.2.5 pthread_rwlockattr_setpshared F
-GLIBC_2.2.5 pthread_setcanceltype F
 GLIBC_2.2.5 pthread_setconcurrency F
 GLIBC_2.2.5 pthread_setspecific F
 GLIBC_2.2.5 pthread_spin_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index b8c545b9c0..579d0ffea2 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -133,7 +133,6 @@ GLIBC_2.16 pthread_rwlockattr_init F
 GLIBC_2.16 pthread_rwlockattr_setkind_np F
 GLIBC_2.16 pthread_rwlockattr_setpshared F
 GLIBC_2.16 pthread_setaffinity_np F
-GLIBC_2.16 pthread_setcanceltype F
 GLIBC_2.16 pthread_setconcurrency F
 GLIBC_2.16 pthread_setname_np F
 GLIBC_2.16 pthread_setschedprio F
-- 
2.29.2



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

* [PATCH 18/18] nptl: Invoke the set_robust_list system call directly in fork
  2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
                   ` (16 preceding siblings ...)
  2021-03-12 17:50 ` [PATCH 17/18] nptl: Move pthread_setcanceltype " Florian Weimer
@ 2021-03-12 17:50 ` Florian Weimer
  17 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-12 17:50 UTC (permalink / raw)
  To: libc-alpha

This removes one of the pthread forwarder functions.
---
 nptl/nptl-init.c                 | 21 ---------------------
 sysdeps/nptl/fork.c              | 11 ++---------
 sysdeps/nptl/pthread-functions.h |  1 -
 3 files changed, 2 insertions(+), 31 deletions(-)

diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 49d811aed7..de64e34783 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -60,14 +60,6 @@ int __set_robust_list_avail;
 /* Version of the library, used in libthread_db to detect mismatches.  */
 static const char nptl_version[] __attribute_used__ = VERSION;
 
-
-#ifdef SHARED
-static
-#else
-extern
-#endif
-void __nptl_set_robust (struct pthread *);
-
 #ifdef SHARED
 static const struct pthread_functions pthread_functions =
   {
@@ -92,25 +84,12 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
     .ptr__nptl_setxid = __nptl_setxid,
-    .ptr_set_robust = __nptl_set_robust
   };
 # define ptr_pthread_functions &pthread_functions
 #else
 # define ptr_pthread_functions NULL
 #endif
 
-
-#ifdef SHARED
-static
-#endif
-void
-__nptl_set_robust (struct pthread *self)
-{
-  INTERNAL_SYSCALL_CALL (set_robust_list, &self->robust_head,
-			 sizeof (struct robust_list_head));
-}
-
-
 /* For asynchronous cancellation we use a signal.  This is the handler.  */
 static void
 sigcancel_handler (int sig, siginfo_t *si, void *ctx)
diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c
index ffc8f9d041..a2a0643a1d 100644
--- a/sysdeps/nptl/fork.c
+++ b/sysdeps/nptl/fork.c
@@ -104,15 +104,8 @@ __libc_fork (void)
       self->robust_prev = &self->robust_head;
 #endif
       self->robust_head.list = &self->robust_head;
-#ifdef SHARED
-      if (__builtin_expect (__libc_pthread_functions_init, 0))
-	PTHFCT_CALL (ptr_set_robust, (self));
-#else
-      extern __typeof (__nptl_set_robust) __nptl_set_robust
-	__attribute__((weak));
-      if (__builtin_expect (__nptl_set_robust != NULL, 0))
-	__nptl_set_robust (self);
-#endif
+      INTERNAL_SYSCALL_CALL (set_robust_list, &self->robust_head,
+			     sizeof (struct robust_list_head));
 
       /* Reset the lock state in the multi-threaded case.  */
       if (multiple_threads)
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 2092ecef07..844838cd49 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -53,7 +53,6 @@ struct pthread_functions
   void *(*ptr___pthread_getspecific) (pthread_key_t);
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
   int (*ptr__nptl_setxid) (struct xid_command *);
-  void (*ptr_set_robust) (struct pthread *);
 };
 
 /* Variable in libc.so.  */
-- 
2.29.2


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

* Re: [PATCH 08/18] nptl: Move pthread_once and __pthread_once into libc
  2021-03-12 17:49 ` [PATCH 08/18] nptl: Move pthread_once and __pthread_once " Florian Weimer
@ 2021-03-15 19:24   ` Florian Weimer
  0 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-15 19:24 UTC (permalink / raw)
  To: Florian Weimer via Libc-alpha

* Florian Weimer via Libc-alpha:

> And also the fork generation counter, __fork_generation.  This
> eliminates the need for __fork_generation_pointer.
>
> To simplify symbol management, call pthread_once under the name
> ___libc_once.  (Creating a hidden proto and setting the symbol
> version at the same time is difficult.)

I have since discovered libc_hidden_ver and it works, so I'm going to
use that instead.

Thanks,
Florian


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

* Re: [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-12 17:48 ` [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc Florian Weimer
@ 2021-03-15 19:30   ` Adhemerval Zanella
  2021-03-16  5:42     ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-15 19:30 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 12/03/2021 14:48, Florian Weimer via Libc-alpha wrote:
> And deprecated pthread_mutex_consistent_np, its old name.

Look good, only some remarks about how to deprecate the 
pthread_mutex_consistent_np.

> ---
>  NEWS                                          |  4 +++-
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 | 11 ++++++++--
>  nptl/pthread_mutex_consistent.c               | 22 ++++++++++++++++---
>  sysdeps/nptl/pthread.h                        |  5 +++--
>  sysdeps/pthread/tst-robust1.c                 |  4 ++--
>  sysdeps/pthread/tst-robust8.c                 |  2 +-
>  sysdeps/pthread/tst-robust9.c                 |  4 ++--
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  3 +++
>  .../sysv/linux/aarch64/libpthread.abilist     |  2 --
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  3 +++
>  .../unix/sysv/linux/alpha/libpthread.abilist  |  2 --
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  3 +++
>  .../unix/sysv/linux/arc/libpthread.abilist    |  2 --
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  3 +++
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  2 --
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  3 +++
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  2 --
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  3 +++
>  .../unix/sysv/linux/csky/libpthread.abilist   |  2 --
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  3 +++
>  .../unix/sysv/linux/hppa/libpthread.abilist   |  2 --
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  3 +++
>  .../unix/sysv/linux/i386/libpthread.abilist   |  2 --
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  3 +++
>  .../unix/sysv/linux/ia64/libpthread.abilist   |  2 --
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  3 +++
>  .../linux/m68k/coldfire/libpthread.abilist    |  2 --
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  3 +++
>  .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 --
>  .../sysv/linux/microblaze/be/libc.abilist     |  3 +++
>  .../linux/microblaze/be/libpthread.abilist    |  2 --
>  .../sysv/linux/microblaze/le/libc.abilist     |  3 +++
>  .../linux/microblaze/le/libpthread.abilist    |  2 --
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  3 +++
>  .../sysv/linux/mips/mips32/libpthread.abilist |  2 --
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  3 +++
>  .../sysv/linux/mips/mips64/libpthread.abilist |  2 --
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  3 +++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  3 +++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  3 +++
>  .../unix/sysv/linux/nios2/libpthread.abilist  |  2 --
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  3 +++
>  .../powerpc/powerpc32/libpthread.abilist      |  2 --
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  3 +++
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  3 +++
>  .../powerpc/powerpc64/be/libpthread.abilist   |  2 --
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  3 +++
>  .../powerpc/powerpc64/le/libpthread.abilist   |  2 --
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  3 +++
>  .../sysv/linux/riscv/rv32/libpthread.abilist  |  2 --
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  3 +++
>  .../sysv/linux/riscv/rv64/libpthread.abilist  |  2 --
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  3 +++
>  .../linux/s390/s390-32/libpthread.abilist     |  2 --
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  3 +++
>  .../linux/s390/s390-64/libpthread.abilist     |  2 --
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  3 +++
>  .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 --
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  3 +++
>  .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 --
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  3 +++
>  .../linux/sparc/sparc32/libpthread.abilist    |  2 --
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  3 +++
>  .../linux/sparc/sparc64/libpthread.abilist    |  2 --
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  3 +++
>  .../sysv/linux/x86_64/64/libpthread.abilist   |  2 --
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  3 +++
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 --
>  69 files changed, 136 insertions(+), 72 deletions(-)
> 
> diff --git a/NEWS b/NEWS
> index aa0f10a891..f9d15952f8 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -20,7 +20,9 @@ Major new features:
>  
>  Deprecated and removed features, and other changes affecting compatibility:
>  
> -  [Add deprecations, removals and changes affecting compatibility here]
> +* The function pthread_mutex_consistent_np has been deprecated; programs
> +  should use the equivalent standard function pthread_mutex_consistent
> +  instead.
>  
>  Changes to build and runtime requirements:
>  

Ok.

> diff --git a/nptl/Makefile b/nptl/Makefile
> index b51deff6a3..96bb47e152 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -71,6 +71,7 @@ routines = \
>    pthread_getaffinity \
>    pthread_getattr_np \
>    pthread_getschedparam \
> +  pthread_mutex_consistent \
>    pthread_self \
>    pthread_setschedparam \
>    pthread_sigmask \
> @@ -159,7 +160,6 @@ libpthread-routines = \
>    pthread_kill_other_threads \
>    pthread_mutex_cond_lock \
>    pthread_mutex_conf \
> -  pthread_mutex_consistent \
>    pthread_mutex_destroy \
>    pthread_mutex_getprioceiling \
>    pthread_mutex_init \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 039cff38aa..e38d98709d 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -55,6 +55,12 @@ libc {
>    GLIBC_2.3.4 {
>      pthread_attr_setaffinity_np;
>    }
> +  GLIBC_2.4 {
> +    pthread_mutex_consistent_np;
> +  }
> +  GLIBC_2.12 {
> +    pthread_mutex_consistent;
> +  }
>    # C11 thread symbols.
>    GLIBC_2.28 {
>      thrd_current;

Ok, old compat symbols.

> @@ -70,6 +76,9 @@ libc {
>      pthread_getattr_np;
>      pthread_sigmask;
>    }
> +  GLIBC_2.34 {
> +    pthread_mutex_consistent;
> +  }
>    GLIBC_PRIVATE {
>      __futex_abstimed_wait64;
>      __futex_abstimed_wait_cancelable64;

Ok, adding a new symbol to avoid late crash on older glibc that do not
prevent this symbol (and it should cover dynamic objects that do not
call __libc_start_main).

> @@ -326,7 +335,6 @@ libpthread {
>    }
>  
>    GLIBC_2.4 {
> -    pthread_mutex_consistent_np;
>      pthread_mutex_getprioceiling;
>      pthread_mutex_setprioceiling;
>      pthread_mutexattr_getprioceiling;
> @@ -343,7 +351,6 @@ libpthread {
>  
>    GLIBC_2.12 {
>      pthread_getname_np;
> -    pthread_mutex_consistent;
>      pthread_mutexattr_getrobust;
>      pthread_mutexattr_setrobust;
>      pthread_setname_np;

Ok.

> diff --git a/nptl/pthread_mutex_consistent.c b/nptl/pthread_mutex_consistent.c
> index 937c7c4640..0a84063a2b 100644
> --- a/nptl/pthread_mutex_consistent.c
> +++ b/nptl/pthread_mutex_consistent.c
> @@ -18,10 +18,10 @@
>  
>  #include <errno.h>
>  #include <pthreadP.h>
> -
> +#include <shlib-compat.h>
>  
>  int
> -pthread_mutex_consistent (pthread_mutex_t *mutex)
> +__pthread_mutex_consistent (pthread_mutex_t *mutex)
>  {
>    /* Test whether this is a robust mutex with a dead owner.
>       See concurrency notes regarding __kind in struct __pthread_mutex_s
> @@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
>  
>    return 0;
>  }
> -weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
> +versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
> +                  GLIBC_2_34);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)

Shouldn't be GLIBC_2_12 here?

> +/* Compat symbol with the old libc version, _np alias.  */
> +# undef pthread_mutex_consistent_np

I think should be out of SHLIB_COMPAT.

> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_1)
> +compat_symbol (libc, __pthread_mutex_consistent_1,
> +               pthread_mutex_consistent_np, GLIBC_2_4);
> +#endif
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_34)
> +/* Compat symbol with the old libc version.  */
> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_2)
> +compat_symbol (libc, __pthread_mutex_consistent_2,
> +               pthread_mutex_consistent, GLIBC_2_12);
> +#endif

I think we have compat_symbol_unique exactly for that.

> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
> index a04a3a2754..2ec2caec98 100644
> --- a/sysdeps/nptl/pthread.h
> +++ b/sysdeps/nptl/pthread.h
> @@ -809,8 +809,9 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
>  extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
>       __THROW __nonnull ((1));
>  # ifdef __USE_GNU
> -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
> -     __THROW __nonnull ((1));
> +#  define pthread_mutex_consistent_np __glibc_macro_warning ("\
> +pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent") \
> +  pthread_mutex_consistent
>  # endif
>  #endif
>  

Wouldn't be better to throw a link error instead an empty macro for such
case?

> diff --git a/sysdeps/pthread/tst-robust1.c b/sysdeps/pthread/tst-robust1.c
> index d4b1d88a68..6342fcbbf7 100644
> --- a/sysdeps/pthread/tst-robust1.c
> +++ b/sysdeps/pthread/tst-robust1.c
> @@ -241,14 +241,14 @@ do_test (void)
>  #endif
>  
>  #ifndef NOT_CONSISTENT
> -      e = pthread_mutex_consistent_np (&m1);
> +      e = pthread_mutex_consistent (&m1);
>        if (e != 0)
>  	{
>  	  printf ("%ld: mutex_consistent m1 failed with error %d\n", round, e);
>  	  return 1;
>  	}
>  
> -      e = pthread_mutex_consistent_np (&m2);
> +      e = pthread_mutex_consistent (&m2);
>        if (e != 0)
>  	{
>  	  printf ("%ld: mutex_consistent m2 failed with error %d\n", round, e);

Ok.

> diff --git a/sysdeps/pthread/tst-robust8.c b/sysdeps/pthread/tst-robust8.c
> index 27dd53d2c3..8f135cb516 100644
> --- a/sysdeps/pthread/tst-robust8.c
> +++ b/sysdeps/pthread/tst-robust8.c
> @@ -92,7 +92,7 @@ mutex_timedlock of %d in thread %ld failed with %d\n",
>  	    }
>  
>  	  if (e == EOWNERDEAD)
> -	    pthread_mutex_consistent_np (&map[r]);
> +	    pthread_mutex_consistent (&map[r]);
>  
>  	  if (e == 0 || e == EOWNERDEAD)
>  	    state[r] = 1;

Ok.

> diff --git a/sysdeps/pthread/tst-robust9.c b/sysdeps/pthread/tst-robust9.c
> index befc14f2d8..532aebc4e9 100644
> --- a/sysdeps/pthread/tst-robust9.c
> +++ b/sysdeps/pthread/tst-robust9.c
> @@ -14,10 +14,10 @@ tf (void *data)
>    int err = pthread_mutex_lock (&m);
>    if (err == EOWNERDEAD)
>      {
> -      err = pthread_mutex_consistent_np (&m);
> +      err = pthread_mutex_consistent (&m);
>        if (err)
>  	{
> -	  puts ("pthread_mutex_consistent_np");
> +	  puts ("pthread_mutex_consistent");
>  	  exit (1);
>  	}
>      }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index bac795262d..231330e591 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -1442,6 +1442,8 @@ 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_mutex_consistent F
> +GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_init F
>  GLIBC_2.17 pthread_mutex_lock F
> @@ -2172,3 +2174,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 336ee51e7e..1d4fffb5a6 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -102,8 +102,6 @@ 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
>  GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_getprioceiling F
>  GLIBC_2.17 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 897f70db22..72c1c3ae6a 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -1749,6 +1749,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x458
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x458
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2254,6 +2255,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2437,6 +2439,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 5c87b9baa0..e97e4d4dd5 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 604d259ad6..180b1e6244 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -1369,6 +1369,8 @@ 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_mutex_consistent F
> +GLIBC_2.32 pthread_mutex_consistent_np F
>  GLIBC_2.32 pthread_mutex_destroy F
>  GLIBC_2.32 pthread_mutex_init F
>  GLIBC_2.32 pthread_mutex_lock F
> @@ -1932,3 +1934,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index 1adcbecc2e..2f76de6bfc 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -116,8 +116,6 @@ 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
> -GLIBC_2.32 pthread_mutex_consistent_np F
>  GLIBC_2.32 pthread_mutex_destroy F
>  GLIBC_2.32 pthread_mutex_getprioceiling F
>  GLIBC_2.32 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 094236f713..e3781f0e83 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -156,6 +157,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> @@ -1535,6 +1537,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -136,7 +135,6 @@ 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
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 2bb4d31e81..0cd363cc2d 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -153,6 +154,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> @@ -1532,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -136,7 +135,6 @@ 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
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index d4291fecfb..c1e62a6df3 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -1430,6 +1430,8 @@ 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_mutex_consistent F
> +GLIBC_2.29 pthread_mutex_consistent_np F
>  GLIBC_2.29 pthread_mutex_destroy F
>  GLIBC_2.29 pthread_mutex_init F
>  GLIBC_2.29 pthread_mutex_lock F
> @@ -2116,3 +2118,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index 6ce59276a7..f05530eb2a 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -113,8 +113,6 @@ 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
>  GLIBC_2.29 pthread_mutex_destroy F
>  GLIBC_2.29 pthread_mutex_getprioceiling F
>  GLIBC_2.29 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 1fd2a862f6..50d9080eb6 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x404
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x404
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2075,6 +2076,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2144,6 +2146,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index a7bb15be58..02dca5bd52 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 943331f01e..d172849c32 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -1754,6 +1754,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2242,6 +2243,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2311,6 +2313,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index 017a9d9a86..92acdbc721 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -224,7 +223,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index f530151bde..e9e82e5ec8 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x438
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x438
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2107,6 +2108,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2176,6 +2178,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index 6fb2e05072..1f9d0edbc9 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 6e76b6dcaa..b0c0d7208d 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -34,6 +34,7 @@ GLIBC_2.12 __m68k_read_tp F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -157,6 +158,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
>  GLIBC_2.4 _IO_2_1_stdin_ D 0x98
> @@ -1515,6 +1517,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_mutex_consistent_np 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 b0bb1d0e01..a3516931d6 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -136,7 +135,6 @@ 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
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 7541b8289f..c312a9e726 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -1711,6 +1711,7 @@ GLIBC_2.12 __m68k_read_tp F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2187,6 +2188,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2256,6 +2258,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index 017a9d9a86..92acdbc721 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -224,7 +223,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 6cf1936c42..4e5f7336c3 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -1445,6 +1445,8 @@ 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_mutex_consistent F
> +GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_init F
>  GLIBC_2.18 pthread_mutex_lock F
> @@ -2167,3 +2169,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 9356f6183a..4849b99385 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -103,8 +103,6 @@ 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
>  GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_getprioceiling F
>  GLIBC_2.18 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 98730ebcda..374e48889a 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -1445,6 +1445,8 @@ 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_mutex_consistent F
> +GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_init F
>  GLIBC_2.18 pthread_mutex_lock F
> @@ -2164,3 +2166,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 9356f6183a..4849b99385 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -103,8 +103,6 @@ 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
>  GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_getprioceiling F
>  GLIBC_2.18 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 92fa6cbc73..f4c9a0e288 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
>  GLIBC_2.11 mkstemps F
>  GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.13 fanotify_init F
>  GLIBC_2.13 fanotify_mark F
> @@ -2158,6 +2159,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2225,6 +2227,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 7aff4d018b..23f58b6459 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -92,7 +92,6 @@ GLIBC_2.0 tcdrain F
>  GLIBC_2.0 write F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -225,7 +224,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 265a49e74e..1935dd7207 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
>  GLIBC_2.11 mkstemps F
>  GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.13 fanotify_init F
>  GLIBC_2.13 fanotify_mark F
> @@ -2156,6 +2157,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2223,6 +2225,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 7aff4d018b..23f58b6459 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -92,7 +92,6 @@ GLIBC_2.0 tcdrain F
>  GLIBC_2.0 write F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -225,7 +224,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index cfa5e1111b..130dd19d46 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -1344,6 +1344,7 @@ GLIBC_2.11 mkostemps64 F
>  GLIBC_2.11 mkstemps F
>  GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.13 fanotify_init F
>  GLIBC_2.13 fanotify_mark F
> @@ -2164,6 +2165,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2231,6 +2233,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 8c03ac52cd..a8728b1a57 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -1342,6 +1342,7 @@ GLIBC_2.11 mkostemps64 F
>  GLIBC_2.11 mkstemps F
>  GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.13 fanotify_init F
>  GLIBC_2.13 fanotify_mark F
> @@ -2158,6 +2159,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2225,6 +2227,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 17f5609e06..040ee6c0b6 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -1487,6 +1487,8 @@ 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_mutex_consistent F
> +GLIBC_2.21 pthread_mutex_consistent_np F
>  GLIBC_2.21 pthread_mutex_destroy F
>  GLIBC_2.21 pthread_mutex_init F
>  GLIBC_2.21 pthread_mutex_lock F
> @@ -2205,3 +2207,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 73b4dfbd8e..0c7fe737a0 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -103,8 +103,6 @@ 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
>  GLIBC_2.21 pthread_mutex_destroy F
>  GLIBC_2.21 pthread_mutex_getprioceiling F
>  GLIBC_2.21 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 76a16e2a6d..d51a3a1b32 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -1715,6 +1715,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2214,6 +2215,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2397,6 +2399,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index 0c68fb1b7c..7bdd5c1a03 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 697f072fd4..6b0a6ef07e 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -1715,6 +1715,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2247,6 +2248,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2442,6 +2444,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 2647bb51f1..d4fcc5479a 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x438
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x438
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2077,6 +2078,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2260,6 +2262,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index c7f6167250..335cda5763 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -215,7 +214,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 036b1c8345..bbe387fe61 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -1531,6 +1531,8 @@ 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_mutex_consistent F
> +GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_init F
>  GLIBC_2.17 pthread_mutex_lock F
> @@ -2367,3 +2369,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index 336ee51e7e..1d4fffb5a6 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -102,8 +102,6 @@ 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
>  GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_getprioceiling F
>  GLIBC_2.17 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index ff3225e16f..684acb6795 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -1371,6 +1371,8 @@ 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_mutex_consistent F
> +GLIBC_2.33 pthread_mutex_consistent_np F
>  GLIBC_2.33 pthread_mutex_destroy F
>  GLIBC_2.33 pthread_mutex_init F
>  GLIBC_2.33 pthread_mutex_lock F
> @@ -1934,3 +1936,4 @@ GLIBC_2.33 write F
>  GLIBC_2.33 writev F
>  GLIBC_2.33 wscanf F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 61b3c4ff7a..33b755ed10 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -116,8 +116,6 @@ 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
> -GLIBC_2.33 pthread_mutex_consistent_np F
>  GLIBC_2.33 pthread_mutex_destroy F
>  GLIBC_2.33 pthread_mutex_getprioceiling F
>  GLIBC_2.33 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index fb5ad9909f..6f8afeb03e 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -1433,6 +1433,8 @@ 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_mutex_consistent F
> +GLIBC_2.27 pthread_mutex_consistent_np F
>  GLIBC_2.27 pthread_mutex_destroy F
>  GLIBC_2.27 pthread_mutex_init F
>  GLIBC_2.27 pthread_mutex_lock F
> @@ -2134,3 +2136,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 894c474fcb..4be8886aed 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -102,8 +102,6 @@ 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
>  GLIBC_2.27 pthread_mutex_destroy F
>  GLIBC_2.27 pthread_mutex_getprioceiling F
>  GLIBC_2.27 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index cead75acc5..a4b1c00c78 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -1707,6 +1707,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2212,6 +2213,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2395,6 +2397,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index a198e22445..c3c66c7f6a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 31366dd7e6..c05c18c2bb 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x438
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x438
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2113,6 +2114,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2296,6 +2298,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 6d166d5f97..fa4b4cf747 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index a3a8be8910..635a05bf2f 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2082,6 +2083,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2151,6 +2153,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index a7bb15be58..02dca5bd52 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 8f505c5045..5b09a03eef 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2079,6 +2080,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2148,6 +2150,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index a7bb15be58..02dca5bd52 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -216,7 +215,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 53ef6304f1..7019d97b8d 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -1708,6 +1708,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x21c
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x21c
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2203,6 +2204,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> @@ -2412,6 +2414,7 @@ GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
>  GLIBC_2.4 printf F
>  GLIBC_2.4 printf_size F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 qecvt F
>  GLIBC_2.4 qecvt_r F
>  GLIBC_2.4 qfcvt F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 5c87b9baa0..e97e4d4dd5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -129,7 +129,6 @@ GLIBC_2.1.1 sem_unlink F
>  GLIBC_2.1.2 __libpthread_version_placeholder F
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -226,7 +225,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index eba0cb156d..deb4735664 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -37,6 +37,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x438
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x438
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2130,6 +2131,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2199,6 +2201,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index 6fb2e05072..1f9d0edbc9 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -218,7 +217,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 17ce5dfd58..779b06605b 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -33,6 +33,7 @@ GLIBC_2.11 mkstemps64 F
>  GLIBC_2.12 _sys_errlist D 0x438
>  GLIBC_2.12 _sys_nerr D 0x4
>  GLIBC_2.12 ntp_gettimex F
> +GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 recvmmsg F
>  GLIBC_2.12 sys_errlist D 0x438
>  GLIBC_2.12 sys_nerr D 0x4
> @@ -2089,6 +2090,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> @@ -2158,6 +2160,7 @@ GLIBC_2.4 open_wmemstream F
>  GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 ppoll F
> +GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 readlinkat F
>  GLIBC_2.4 renameat F
>  GLIBC_2.4 symlinkat F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index f85ab1d3cd..01d330cad7 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -1,6 +1,5 @@
>  GLIBC_2.11 pthread_sigqueue F
>  GLIBC_2.12 pthread_getname_np F
> -GLIBC_2.12 pthread_mutex_consistent F
>  GLIBC_2.12 pthread_mutexattr_getrobust F
>  GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
> @@ -215,7 +214,6 @@ GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
>  GLIBC_2.30 sem_clockwait F
>  GLIBC_2.31 pthread_clockjoin_np F
> -GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 17a1c83903..a85d2af101 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -1450,6 +1450,8 @@ 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_mutex_consistent F
> +GLIBC_2.16 pthread_mutex_consistent_np F
>  GLIBC_2.16 pthread_mutex_destroy F
>  GLIBC_2.16 pthread_mutex_init F
>  GLIBC_2.16 pthread_mutex_lock F
> @@ -2186,3 +2188,4 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index 0e24fcd6bf..b470f2eed5 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -102,8 +102,6 @@ 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
>  GLIBC_2.16 pthread_mutex_destroy F
>  GLIBC_2.16 pthread_mutex_getprioceiling F
>  GLIBC_2.16 pthread_mutex_init F
> 

Ok.

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

* Re: [PATCH 02/18] nptl: Move __pthread_cleanup_routine into libc
  2021-03-12 17:49 ` [PATCH 02/18] nptl: Move __pthread_cleanup_routine " Florian Weimer
@ 2021-03-15 19:53   ` Adhemerval Zanella
  2021-03-16  7:09     ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-15 19:53 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer

LGTM with just a suggestion about using compat_symbol_unique.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> ---
>  nptl/Makefile                                        |  2 +-
>  nptl/Versions                                        |  3 ++-
>  nptl/cleanup_routine.c                               | 12 ++++++++++--
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist         |  2 ++
>  sysdeps/unix/sysv/linux/aarch64/libpthread.abilist   |  1 -
>  sysdeps/unix/sysv/linux/alpha/libc.abilist           |  2 ++
>  sysdeps/unix/sysv/linux/alpha/libpthread.abilist     |  1 -
>  sysdeps/unix/sysv/linux/arc/libc.abilist             |  2 ++
>  sysdeps/unix/sysv/linux/arc/libpthread.abilist       |  1 -
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist          |  2 ++
>  sysdeps/unix/sysv/linux/arm/be/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist          |  2 ++
>  sysdeps/unix/sysv/linux/arm/le/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/csky/libc.abilist            |  2 ++
>  sysdeps/unix/sysv/linux/csky/libpthread.abilist      |  1 -
>  sysdeps/unix/sysv/linux/hppa/libc.abilist            |  2 ++
>  sysdeps/unix/sysv/linux/hppa/libpthread.abilist      |  1 -
>  sysdeps/unix/sysv/linux/i386/libc.abilist            |  2 ++
>  sysdeps/unix/sysv/linux/i386/libpthread.abilist      |  1 -
>  sysdeps/unix/sysv/linux/ia64/libc.abilist            |  2 ++
>  sysdeps/unix/sysv/linux/ia64/libpthread.abilist      |  1 -
>  sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist   |  2 ++
>  .../unix/sysv/linux/m68k/coldfire/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist     |  2 ++
>  .../unix/sysv/linux/m68k/m680x0/libpthread.abilist   |  1 -
>  sysdeps/unix/sysv/linux/microblaze/be/libc.abilist   |  2 ++
>  .../unix/sysv/linux/microblaze/be/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/microblaze/le/libc.abilist   |  2 ++
>  .../unix/sysv/linux/microblaze/le/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist |  2 ++
>  .../unix/sysv/linux/mips/mips32/libpthread.abilist   |  1 -
>  .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist   |  2 ++
>  .../unix/sysv/linux/mips/mips64/libpthread.abilist   |  1 -
>  sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist |  2 ++
>  sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist |  2 ++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist           |  2 ++
>  sysdeps/unix/sysv/linux/nios2/libpthread.abilist     |  1 -
>  .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist    |  2 ++
>  .../sysv/linux/powerpc/powerpc32/libpthread.abilist  |  1 -
>  .../sysv/linux/powerpc/powerpc32/nofpu/libc.abilist  |  2 ++
>  .../sysv/linux/powerpc/powerpc64/be/libc.abilist     |  2 ++
>  .../linux/powerpc/powerpc64/be/libpthread.abilist    |  1 -
>  .../sysv/linux/powerpc/powerpc64/le/libc.abilist     |  2 ++
>  .../linux/powerpc/powerpc64/le/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist      |  2 ++
>  .../unix/sysv/linux/riscv/rv32/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist      |  2 ++
>  .../unix/sysv/linux/riscv/rv64/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist    |  2 ++
>  .../unix/sysv/linux/s390/s390-32/libpthread.abilist  |  1 -
>  sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist    |  2 ++
>  .../unix/sysv/linux/s390/s390-64/libpthread.abilist  |  1 -
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist           |  2 ++
>  sysdeps/unix/sysv/linux/sh/be/libpthread.abilist     |  1 -
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist           |  2 ++
>  sysdeps/unix/sysv/linux/sh/le/libpthread.abilist     |  1 -
>  sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist   |  2 ++
>  .../unix/sysv/linux/sparc/sparc32/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist   |  2 ++
>  .../unix/sysv/linux/sparc/sparc64/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/x86_64/64/libc.abilist       |  2 ++
>  sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist      |  2 ++
>  .../unix/sysv/linux/x86_64/x32/libpthread.abilist    |  1 -
>  64 files changed, 77 insertions(+), 33 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 96bb47e152..b951fcb77e 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -30,6 +30,7 @@ extra-libs-others := $(extra-libs)
>  
>  routines = \
>    alloca_cutoff \
> +  cleanup_routine \
>    elision-conf \
>    elision-lock \
>    elision-timed \
> @@ -98,7 +99,6 @@ libpthread-routines = \
>    cleanup_compat \
>    cleanup_defer \
>    cleanup_defer_compat \
> -  cleanup_routine \
>    events \
>    flockfile \
>    ftrylockfile \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index e38d98709d..f2db649f9d 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -49,6 +49,7 @@ libc {
>      pthread_cond_wait;
>    }
>    GLIBC_2.3.3 {
> +    __pthread_cleanup_routine;
>      pthread_attr_setaffinity_np;
>      pthread_getaffinity_np;
>    }
> @@ -77,6 +78,7 @@ libc {
>      pthread_sigmask;
>    }
>    GLIBC_2.34 {
> +    __pthread_cleanup_routine;
>      pthread_mutex_consistent;
>    }
>    GLIBC_PRIVATE {
> @@ -312,7 +314,6 @@ libpthread {
>    }
>  
>    GLIBC_2.3.3 {
> -    __pthread_cleanup_routine;
>      __pthread_register_cancel;
>      __pthread_register_cancel_defer;
>      __pthread_unregister_cancel;

Ok.

> diff --git a/nptl/cleanup_routine.c b/nptl/cleanup_routine.c
> index 973f088be7..9710bf58ec 100644
> --- a/nptl/cleanup_routine.c
> +++ b/nptl/cleanup_routine.c
> @@ -17,11 +17,19 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <pthread.h>
> -
> +#include <shlib-compat.h>
>  
>  void
> -__pthread_cleanup_routine (struct __pthread_cleanup_frame *f)
> +___pthread_cleanup_routine (struct __pthread_cleanup_frame *f)
>  {
>    if (f->__do_it)
>      f->__cancel_routine (f->__cancel_arg);
>  }
> +versioned_symbol (libc, ___pthread_cleanup_routine, __pthread_cleanup_routine,
> +                  GLIBC_2_34);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_34)
> +strong_alias (___pthread_cleanup_routine, __pthread_cleanup_routine_alias)
> +compat_symbol (libc, __pthread_cleanup_routine_alias,
> +               __pthread_cleanup_routine, GLIBC_2_3_3);
> +#endif

I think you can use compat_symbol_unique here.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 231330e591..a55f3d9667 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -338,6 +338,7 @@ GLIBC_2.17 __printf_fp F
>  GLIBC_2.17 __profile_frequency F
>  GLIBC_2.17 __progname D 0x8
>  GLIBC_2.17 __progname_full D 0x8
> +GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __ptsname_r_chk F
>  GLIBC_2.17 __pwrite64 F
>  GLIBC_2.17 __rawmemchr F
> @@ -2174,4 +2175,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 1d4fffb5a6..ad2492cb4c 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.17 __lseek F
>  GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
> -GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 72c1c3ae6a..54a11b7e76 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2147,6 +2147,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2255,6 +2256,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index e97e4d4dd5..1eff0da935 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 180b1e6244..a229125212 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -327,6 +327,7 @@ GLIBC_2.32 __printf_fp F
>  GLIBC_2.32 __profile_frequency F
>  GLIBC_2.32 __progname D 0x4
>  GLIBC_2.32 __progname_full D 0x4
> +GLIBC_2.32 __pthread_cleanup_routine F
>  GLIBC_2.32 __ptsname_r_chk F
>  GLIBC_2.32 __pwrite64 F
>  GLIBC_2.32 __rawmemchr F
> @@ -1934,4 +1935,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index 2f76de6bfc..c635f1dac9 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -12,7 +12,6 @@ GLIBC_2.32 __lseek F
>  GLIBC_2.32 __open F
>  GLIBC_2.32 __open64 F
>  GLIBC_2.32 __pread64 F
> -GLIBC_2.32 __pthread_cleanup_routine F
>  GLIBC_2.32 __pthread_getspecific F
>  GLIBC_2.32 __pthread_key_create F
>  GLIBC_2.32 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index e3781f0e83..cfc58ca510 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -157,6 +157,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
> @@ -485,6 +486,7 @@ GLIBC_2.4 __printf_fp F
>  GLIBC_2.4 __profile_frequency F
>  GLIBC_2.4 __progname D 0x4
>  GLIBC_2.4 __progname_full D 0x4
> +GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
>  GLIBC_2.4 __rawmemchr F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index a3516931d6..79c5f66cff 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create 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 0cd363cc2d..e725ee6217 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -154,6 +154,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
> @@ -482,6 +483,7 @@ GLIBC_2.4 __printf_fp F
>  GLIBC_2.4 __profile_frequency F
>  GLIBC_2.4 __progname D 0x4
>  GLIBC_2.4 __progname_full D 0x4
> +GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
>  GLIBC_2.4 __rawmemchr F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index a3516931d6..79c5f66cff 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create 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 c1e62a6df3..51d9d33b13 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -331,6 +331,7 @@ GLIBC_2.29 __printf_fp F
>  GLIBC_2.29 __profile_frequency F
>  GLIBC_2.29 __progname D 0x4
>  GLIBC_2.29 __progname_full D 0x4
> +GLIBC_2.29 __pthread_cleanup_routine F
>  GLIBC_2.29 __ptsname_r_chk F
>  GLIBC_2.29 __pwrite64 F
>  GLIBC_2.29 __rawmemchr F
> @@ -2118,4 +2119,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index f05530eb2a..e242edb9c3 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -12,7 +12,6 @@ GLIBC_2.29 __lseek F
>  GLIBC_2.29 __open F
>  GLIBC_2.29 __open64 F
>  GLIBC_2.29 __pread64 F
> -GLIBC_2.29 __pthread_cleanup_routine F
>  GLIBC_2.29 __pthread_getspecific F
>  GLIBC_2.29 __pthread_key_create F
>  GLIBC_2.29 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 50d9080eb6..914aef5f35 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -1996,6 +1996,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2076,6 +2077,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index 02dca5bd52..8ce3580478 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index d172849c32..f7ca08f695 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2161,6 +2161,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2243,6 +2244,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index 92acdbc721..d3fc0f2d70 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index e9e82e5ec8..a77ab9816b 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2028,6 +2028,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2108,6 +2109,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index 1f9d0edbc9..d7000f415e 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index b0c0d7208d..49a3997d83 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -158,6 +158,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
> @@ -471,6 +472,7 @@ GLIBC_2.4 __printf_fp F
>  GLIBC_2.4 __profile_frequency F
>  GLIBC_2.4 __progname D 0x4
>  GLIBC_2.4 __progname_full D 0x4
> +GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
>  GLIBC_2.4 __rawmemchr F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index a3516931d6..79c5f66cff 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -47,7 +47,6 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create 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 c312a9e726..9969b02829 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2105,6 +2105,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2188,6 +2189,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index 92acdbc721..d3fc0f2d70 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 4e5f7336c3..eb6d753ae8 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -339,6 +339,7 @@ GLIBC_2.18 __printf_fp F
>  GLIBC_2.18 __profile_frequency F
>  GLIBC_2.18 __progname D 0x4
>  GLIBC_2.18 __progname_full D 0x4
> +GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __ptsname_r_chk F
>  GLIBC_2.18 __pwrite64 F
>  GLIBC_2.18 __rawmemchr F
> @@ -2169,4 +2170,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 4849b99385..c096915557 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.18 __lseek F
>  GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
> -GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 374e48889a..7c3d154267 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -339,6 +339,7 @@ GLIBC_2.18 __printf_fp F
>  GLIBC_2.18 __profile_frequency F
>  GLIBC_2.18 __progname D 0x4
>  GLIBC_2.18 __progname_full D 0x4
> +GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __ptsname_r_chk F
>  GLIBC_2.18 __pwrite64 F
>  GLIBC_2.18 __rawmemchr F
> @@ -2166,4 +2167,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 4849b99385..c096915557 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.18 __lseek F
>  GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
> -GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index f4c9a0e288..bb2c61d8b4 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2079,6 +2079,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x200
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2159,6 +2160,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 23f58b6459..358a13524a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -200,7 +200,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 1935dd7207..7a418b2e12 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2077,6 +2077,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x200
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2157,6 +2158,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 23f58b6459..358a13524a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -200,7 +200,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 130dd19d46..29d9e4045a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2085,6 +2085,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x200
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2165,6 +2166,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index a8728b1a57..404789db07 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2078,6 +2078,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x400
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2159,6 +2160,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 040ee6c0b6..468444aa86 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -376,6 +376,7 @@ GLIBC_2.21 __printf_fp F
>  GLIBC_2.21 __profile_frequency F
>  GLIBC_2.21 __progname D 0x4
>  GLIBC_2.21 __progname_full D 0x4
> +GLIBC_2.21 __pthread_cleanup_routine F
>  GLIBC_2.21 __ptsname_r_chk F
>  GLIBC_2.21 __pwrite64 F
>  GLIBC_2.21 __rawmemchr F
> @@ -2207,4 +2208,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 0c7fe737a0..6379c1f86c 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.21 __lseek F
>  GLIBC_2.21 __open F
>  GLIBC_2.21 __open64 F
>  GLIBC_2.21 __pread64 F
> -GLIBC_2.21 __pthread_cleanup_routine F
>  GLIBC_2.21 __pthread_getspecific F
>  GLIBC_2.21 __pthread_key_create F
>  GLIBC_2.21 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index d51a3a1b32..41ba4fdb29 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2109,6 +2109,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 getcontext F
>  GLIBC_2.3.3 gnu_dev_major F
> @@ -2215,6 +2216,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index 7bdd5c1a03..7c6e78f6ce 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 6b0a6ef07e..1d030db5f7 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2142,6 +2142,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 getcontext F
>  GLIBC_2.3.3 gnu_dev_major F
> @@ -2248,6 +2249,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index d4fcc5479a..9f86b81d65 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -1977,6 +1977,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2078,6 +2079,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 335cda5763..773d873bd1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -190,7 +190,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index bbe387fe61..599d06d56f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -424,6 +424,7 @@ GLIBC_2.17 __printf_fp F
>  GLIBC_2.17 __profile_frequency F
>  GLIBC_2.17 __progname D 0x8
>  GLIBC_2.17 __progname_full D 0x8
> +GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __ptsname_r_chk F
>  GLIBC_2.17 __pwrite64 F
>  GLIBC_2.17 __rawmemchr F
> @@ -2369,4 +2370,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index 1d4fffb5a6..ad2492cb4c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.17 __lseek F
>  GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
> -GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 684acb6795..9f0068ba1c 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -324,6 +324,7 @@ GLIBC_2.33 __printf_fp F
>  GLIBC_2.33 __profile_frequency F
>  GLIBC_2.33 __progname D 0x4
>  GLIBC_2.33 __progname_full D 0x4
> +GLIBC_2.33 __pthread_cleanup_routine F
>  GLIBC_2.33 __ptsname_r_chk F
>  GLIBC_2.33 __pwrite64 F
>  GLIBC_2.33 __rawmemchr F
> @@ -1936,4 +1937,5 @@ GLIBC_2.33 write F
>  GLIBC_2.33 writev F
>  GLIBC_2.33 wscanf F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 33b755ed10..76484b8073 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -12,7 +12,6 @@ GLIBC_2.33 __lseek F
>  GLIBC_2.33 __open F
>  GLIBC_2.33 __open64 F
>  GLIBC_2.33 __pread64 F
> -GLIBC_2.33 __pthread_cleanup_routine F
>  GLIBC_2.33 __pthread_getspecific F
>  GLIBC_2.33 __pthread_key_create F
>  GLIBC_2.33 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 6f8afeb03e..833d6f11d6 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -335,6 +335,7 @@ GLIBC_2.27 __printf_fp F
>  GLIBC_2.27 __profile_frequency F
>  GLIBC_2.27 __progname D 0x8
>  GLIBC_2.27 __progname_full D 0x8
> +GLIBC_2.27 __pthread_cleanup_routine F
>  GLIBC_2.27 __ptsname_r_chk F
>  GLIBC_2.27 __pwrite64 F
>  GLIBC_2.27 __rawmemchr F
> @@ -2136,4 +2137,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 4be8886aed..2332ba5927 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.27 __lseek F
>  GLIBC_2.27 __open F
>  GLIBC_2.27 __open64 F
>  GLIBC_2.27 __pread64 F
> -GLIBC_2.27 __pthread_cleanup_routine F
>  GLIBC_2.27 __pthread_getspecific F
>  GLIBC_2.27 __pthread_key_create F
>  GLIBC_2.27 __pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index a4b1c00c78..a3e732e82f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2118,6 +2118,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2213,6 +2214,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index c3c66c7f6a..28cf9cfcee 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -203,7 +203,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index c05c18c2bb..4443545ed0 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2022,6 +2022,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2114,6 +2115,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index fa4b4cf747..5baa0fdd6f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -195,7 +195,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 635a05bf2f..f9cb4195cd 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2000,6 +2000,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2083,6 +2084,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index 02dca5bd52..8ce3580478 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 5b09a03eef..e1ae67a464 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2000,6 +2000,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2080,6 +2081,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index 02dca5bd52..8ce3580478 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 7019d97b8d..9ca458b1c5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2112,6 +2112,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x104
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2204,6 +2205,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index e97e4d4dd5..1eff0da935 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -201,7 +201,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index deb4735664..6af3cc116b 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2051,6 +2051,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2131,6 +2132,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index 1f9d0edbc9..d7000f415e 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -193,7 +193,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 779b06605b..e267cc2a23 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2009,6 +2009,7 @@ GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
>  GLIBC_2.3.2 strptime_l F
> +GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 _sys_siglist D 0x208
>  GLIBC_2.3.3 gnu_dev_major F
>  GLIBC_2.3.3 gnu_dev_makedev F
> @@ -2090,6 +2091,7 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index 01d330cad7..f0271930eb 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -192,7 +192,6 @@ GLIBC_2.3.2 pthread_cond_broadcast F
>  GLIBC_2.3.2 pthread_cond_signal F
>  GLIBC_2.3.2 pthread_cond_timedwait F
>  GLIBC_2.3.2 pthread_cond_wait F
> -GLIBC_2.3.3 __pthread_cleanup_routine F
>  GLIBC_2.3.3 __pthread_register_cancel F
>  GLIBC_2.3.3 __pthread_register_cancel_defer F
>  GLIBC_2.3.3 __pthread_unregister_cancel F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index a85d2af101..50e860fe40 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -339,6 +339,7 @@ GLIBC_2.16 __printf_fp F
>  GLIBC_2.16 __profile_frequency F
>  GLIBC_2.16 __progname D 0x4
>  GLIBC_2.16 __progname_full D 0x4
> +GLIBC_2.16 __pthread_cleanup_routine F
>  GLIBC_2.16 __ptsname_r_chk F
>  GLIBC_2.16 __pwrite64 F
>  GLIBC_2.16 __rawmemchr F
> @@ -2188,4 +2189,5 @@ GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.34 __libc_start_main F
> +GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 pthread_mutex_consistent F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index b470f2eed5..aa9e127bad 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.16 __lseek F
>  GLIBC_2.16 __open F
>  GLIBC_2.16 __open64 F
>  GLIBC_2.16 __pread64 F
> -GLIBC_2.16 __pthread_cleanup_routine F
>  GLIBC_2.16 __pthread_getspecific F
>  GLIBC_2.16 __pthread_key_create F
>  GLIBC_2.16 __pthread_mutex_destroy F
> 

Ok.

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

* Re: [PATCH 03/18] nptl: Move legacy unwinding implementation into libc
  2021-03-12 17:49 ` [PATCH 03/18] nptl: Move legacy unwinding implementation " Florian Weimer
@ 2021-03-15 20:02   ` Adhemerval Zanella
  2021-03-16  7:03     ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-15 20:02 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> It is still used internally.  Since unwinding is now available
> unconditionally, avoid indirect calls through function pointers loaded
> from the stack by inlining the non-cancellation cleanup code.  This
> avoids a regression in security hardening.
> 
> The out-of-line  __libc_cleanup_routine implementation is no longer
> needed because the inline definition is now static __always_inline.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  nptl/Versions                    |  2 +
>  nptl/cleanup_defer_compat.c      | 56 ++--------------------------
>  nptl/libc-cleanup.c              | 64 ++++++++++++++++++++++++++++++--
>  nptl/nptl-init.c                 |  2 -
>  sysdeps/nptl/libc-lock.h         | 59 ++++++++++++++---------------
>  sysdeps/nptl/libc-lockP.h        | 26 +------------
>  sysdeps/nptl/pthread-functions.h |  4 --
>  7 files changed, 97 insertions(+), 116 deletions(-)
> 
> diff --git a/nptl/Versions b/nptl/Versions
> index f2db649f9d..e3eb686a04 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -86,6 +86,8 @@ libc {
>      __futex_abstimed_wait_cancelable64;
>      __libc_alloca_cutoff;
>      __libc_allocate_rtsig_private;
> +    __libc_cleanup_pop_restore;
> +    __libc_cleanup_push_defer;
>      __libc_current_sigrtmax_private;
>      __libc_current_sigrtmin_private;
>      __libc_dl_error_tsd;

Ok.

> diff --git a/nptl/cleanup_defer_compat.c b/nptl/cleanup_defer_compat.c
> index 49ef53ea60..1957318208 100644
> --- a/nptl/cleanup_defer_compat.c
> +++ b/nptl/cleanup_defer_compat.c
> @@ -17,41 +17,15 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include "pthreadP.h"
> -
> +#include <libc-lock.h>
>  
>  void
>  _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
>  			     void (*routine) (void *), void *arg)
>  {
> -  struct pthread *self = THREAD_SELF;
> -
>    buffer->__routine = routine;
>    buffer->__arg = arg;
> -  buffer->__prev = THREAD_GETMEM (self, cleanup);
> -
> -  int cancelhandling = THREAD_GETMEM (self, cancelhandling);
> -
> -  /* Disable asynchronous cancellation for now.  */
> -  if (__glibc_unlikely (cancelhandling & CANCELTYPE_BITMASK))
> -    while (1)
> -      {
> -	int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> -						cancelhandling
> -						& ~CANCELTYPE_BITMASK,
> -						cancelhandling);
> -	if (__glibc_likely (curval == cancelhandling))
> -	  /* Successfully replaced the value.  */
> -	  break;
> -
> -	/* Prepare for the next round.  */
> -	cancelhandling = curval;
> -      }
> -
> -  buffer->__canceltype = (cancelhandling & CANCELTYPE_BITMASK
> -			  ? PTHREAD_CANCEL_ASYNCHRONOUS
> -			  : PTHREAD_CANCEL_DEFERRED);
> -
> -  THREAD_SETMEM (self, cleanup, buffer);
> +  __libc_cleanup_push_defer (buffer);
>  }
>  strong_alias (_pthread_cleanup_push_defer, __pthread_cleanup_push_defer)
>  

Ok.

> @@ -60,31 +34,7 @@ void
>  _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
>  			      int execute)
>  {
> -  struct pthread *self = THREAD_SELF;
> -
> -  THREAD_SETMEM (self, cleanup, buffer->__prev);
> -
> -  int cancelhandling;
> -  if (__builtin_expect (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED, 0)
> -      && ((cancelhandling = THREAD_GETMEM (self, cancelhandling))
> -	  & CANCELTYPE_BITMASK) == 0)
> -    {
> -      while (1)
> -	{
> -	  int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> -						  cancelhandling
> -						  | CANCELTYPE_BITMASK,
> -						  cancelhandling);
> -	  if (__glibc_likely (curval == cancelhandling))
> -	    /* Successfully replaced the value.  */
> -	    break;
> -
> -	  /* Prepare for the next round.  */
> -	  cancelhandling = curval;
> -	}
> -
> -      CANCELLATION_P (self);
> -    }
> +  __libc_cleanup_pop_restore (buffer);
>  
>    /* If necessary call the cleanup routine after we removed the
>       current cleanup block from the list.  */

Ok.

> diff --git a/nptl/libc-cleanup.c b/nptl/libc-cleanup.c
> index 61f97eceda..14ccfe9285 100644
> --- a/nptl/libc-cleanup.c
> +++ b/nptl/libc-cleanup.c
> @@ -17,11 +17,69 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include "pthreadP.h"
> +#include <tls.h>
> +#include <libc-lock.h>
>  
> +void
> +__libc_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer)
> +{
> +  struct pthread *self = THREAD_SELF;
> +
> +  buffer->__prev = THREAD_GETMEM (self, cleanup);
> +
> +  int cancelhandling = THREAD_GETMEM (self, cancelhandling);
> +
> +  /* Disable asynchronous cancellation for now.  */
> +  if (__glibc_unlikely (cancelhandling & CANCELTYPE_BITMASK))
> +    while (1)
> +      {
> +	int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> +						cancelhandling
> +						& ~CANCELTYPE_BITMASK,
> +						cancelhandling);
> +	if (__glibc_likely (curval == cancelhandling))
> +	  /* Successfully replaced the value.  */
> +	  break;
> +
> +	/* Prepare for the next round.  */
> +	cancelhandling = curval;
> +      }
> +
> +  buffer->__canceltype = (cancelhandling & CANCELTYPE_BITMASK
> +			  ? PTHREAD_CANCEL_ASYNCHRONOUS
> +			  : PTHREAD_CANCEL_DEFERRED);
> +
> +  THREAD_SETMEM (self, cleanup, buffer);
> +}
> +libc_hidden_def (__libc_cleanup_push_defer)
>  
>  void
> -__libc_cleanup_routine (struct __pthread_cleanup_frame *f)
> +__libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer)
>  {
> -  if (f->__do_it)
> -    f->__cancel_routine (f->__cancel_arg);
> +  struct pthread *self = THREAD_SELF;
> +
> +  THREAD_SETMEM (self, cleanup, buffer->__prev);
> +
> +  int cancelhandling;
> +  if (__builtin_expect (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED, 0)
> +      && ((cancelhandling = THREAD_GETMEM (self, cancelhandling))
> +	  & CANCELTYPE_BITMASK) == 0)
> +    {
> +      while (1)
> +	{
> +	  int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> +						  cancelhandling
> +						  | CANCELTYPE_BITMASK,
> +						  cancelhandling);
> +	  if (__glibc_likely (curval == cancelhandling))
> +	    /* Successfully replaced the value.  */
> +	    break;
> +
> +	  /* Prepare for the next round.  */
> +	  cancelhandling = curval;
> +	}
> +
> +      CANCELLATION_P (self);
> +    }
>  }
> +libc_hidden_def (__libc_cleanup_pop_restore)

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 865ee8db29..c2b563cc68 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -96,8 +96,6 @@ static const struct pthread_functions pthread_functions =
>      .ptr___pthread_key_create = __pthread_key_create,
>      .ptr___pthread_getspecific = __pthread_getspecific,
>      .ptr___pthread_setspecific = __pthread_setspecific,
> -    .ptr__pthread_cleanup_push_defer = __pthread_cleanup_push_defer,
> -    .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore,
>      .ptr_nthreads = &__nptl_nthreads,
>      .ptr___pthread_unwind = &__pthread_unwind,
>      .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,

Ok.

> diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h
> index dea96121b3..56fe83f69f 100644
> --- a/sysdeps/nptl/libc-lock.h
> +++ b/sysdeps/nptl/libc-lock.h
> @@ -143,39 +143,40 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
>    __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
>  #endif
>  
> -/* Note that for I/O cleanup handling we are using the old-style
> -   cancel handling.  It does not have to be integrated with C++ since
> -   no C++ code is called in the middle.  The old-style handling is
> -   faster and the support is not going away.  */
> -extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
> -					 void (*routine) (void *), void *arg);
> -extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
> -					  int execute);
> +/* Put the unwind buffer BUFFER on the per-thread callback stack.  The
> +   caller must fill BUFFER->__routine and BUFFER->__arg before calling
> +   this function.  */
> +void __libc_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer);
> +libc_hidden_proto (__libc_cleanup_push_defer)
> +/* Remove BUFFER from the unwind callback stack.  The caller must invoke
> +   the callback if desired.  */
> +void __libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer);
> +libc_hidden_proto (__libc_cleanup_pop_restore)
>  

Ok.

>  /* Start critical region with cleanup.  */
> -#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
> -  { struct _pthread_cleanup_buffer _buffer;				      \
> -    int _avail;								      \
> -    if (DOIT) {								      \
> -      _avail = PTFAVAIL (_pthread_cleanup_push_defer);			      \
> -      if (_avail) {							      \
> -	__libc_ptf_call_always (_pthread_cleanup_push_defer, (&_buffer, FCT,  \
> -							      ARG));	      \
> -      } else {								      \
> -	_buffer.__routine = (FCT);					      \
> -	_buffer.__arg = (ARG);						      \
> -      }									      \
> -    } else {								      \
> -      _avail = 0;							      \
> -    }
> +#define __libc_cleanup_region_start(DOIT, FCT, ARG)			\
> +  {   bool _cleanup_start_doit;						\
> +  struct _pthread_cleanup_buffer _buffer;				\
> +  /* Non-addresable copy of FCT, so that we avoid indirect calls on	\

s/addresable/addressable

> +     the non-unwinding path.  */					\
> +  void (*_cleanup_routine) (void *) = (FCT);				\
> +  _buffer.__arg = (ARG);						\
> +  if (DOIT)								\
> +    {									\
> +      _cleanup_start_doit = true;					\
> +      _buffer.__routine = _cleanup_routine;				\
> +      __libc_cleanup_push_defer (&_buffer);				\
> +    }									\
> +  else									\
> +      _cleanup_start_doit = false;
>  
>  /* End critical region with cleanup.  */
> -#define __libc_cleanup_region_end(DOIT) \
> -    if (_avail) {							      \
> -      __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
> -    } else if (DOIT)							      \
> -      _buffer.__routine (_buffer.__arg);				      \
> -  }
> +#define __libc_cleanup_region_end(DOIT)		\
> +  if (_cleanup_start_doit)			\
> +    __libc_cleanup_pop_restore (&_buffer);	\
> +  if (DOIT)					\
> +    _cleanup_routine (_buffer.__arg);		\
> +  } /* matches __libc_cleanup_region_start */
>  

Ok.

>  
>  /* Hide the definitions which are only supposed to be used inside libc in
> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 4a0b96e6d9..1a861b0d3f 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -251,32 +251,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  /* Get once control variable.  */
>  #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)
>  
> -/* Note that for I/O cleanup handling we are using the old-style
> -   cancel handling.  It does not have to be integrated with C++ snce
> -   no C++ code is called in the middle.  The old-style handling is
> -   faster and the support is not going away.  */
> -extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
> -				   void (*routine) (void *), void *arg);
> -extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
> -				  int execute);
> -extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
> -					 void (*routine) (void *), void *arg);
> -extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
> -					  int execute);
> -
> -/* Sometimes we have to exit the block in the middle.  */
> -#define __libc_cleanup_end(DOIT) \
> -    if (_avail) {							      \
> -      __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
> -    } else if (DOIT)							      \
> -      _buffer.__routine (_buffer.__arg)
> -
>  /* __libc_cleanup_push and __libc_cleanup_pop depend on exception
>     handling and stack unwinding.  */
>  #ifdef __EXCEPTIONS
>  

Ok.

>  /* Normal cleanup handling, based on C cleanup attribute.  */
> -__extern_inline void
> +static __always_inline void
>  __libc_cleanup_routine (struct __pthread_cleanup_frame *f)
>  {
>    if (f->__do_it)
> @@ -396,8 +376,6 @@ weak_extern (__pthread_once)
>  weak_extern (__pthread_initialize)
>  weak_extern (__pthread_atfork)
>  weak_extern (__pthread_setcancelstate)
> -weak_extern (_pthread_cleanup_push_defer)
> -weak_extern (_pthread_cleanup_pop_restore)
>  # else
>  #  pragma weak __pthread_mutex_init
>  #  pragma weak __pthread_mutex_destroy
> @@ -420,8 +398,6 @@ weak_extern (_pthread_cleanup_pop_restore)
>  #  pragma weak __pthread_initialize
>  #  pragma weak __pthread_atfork
>  #  pragma weak __pthread_setcancelstate
> -#  pragma weak _pthread_cleanup_push_defer
> -#  pragma weak _pthread_cleanup_pop_restore
>  # endif
>  #endif
>  
> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 97a5c48939..4268084b66 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -57,10 +57,6 @@ struct pthread_functions
>    int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *));
>    void *(*ptr___pthread_getspecific) (pthread_key_t);
>    int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
> -  void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer *,
> -					   void (*) (void *), void *);
> -  void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *,
> -					    int);
>  #define HAVE_PTR_NTHREADS
>    unsigned int *ptr_nthreads;
>    void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *)
> 

Ok.

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

* Re: [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-15 19:30   ` Adhemerval Zanella
@ 2021-03-16  5:42     ` Florian Weimer
  2021-03-16 13:49       ` Adhemerval Zanella
  0 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-16  5:42 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> index 937c7c4640..0a84063a2b 100644
>> --- a/nptl/pthread_mutex_consistent.c
>> +++ b/nptl/pthread_mutex_consistent.c
>> @@ -18,10 +18,10 @@
>>  
>>  #include <errno.h>
>>  #include <pthreadP.h>
>> -
>> +#include <shlib-compat.h>
>>  
>>  int
>> -pthread_mutex_consistent (pthread_mutex_t *mutex)
>> +__pthread_mutex_consistent (pthread_mutex_t *mutex)
>>  {
>>    /* Test whether this is a robust mutex with a dead owner.
>>       See concurrency notes regarding __kind in struct __pthread_mutex_s
>> @@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
>>  
>>    return 0;
>>  }
>> -weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
>> +versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
>> +                  GLIBC_2_34);
>> +
>> +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)
>
> Shouldn't be GLIBC_2_12 here?

Where exactly?  There are so many symbol versions.  The _np variant was
introduced in GLIBC_2.4, so GLIBC_2_4 is correct here.  It ran parallel
with the non-_np variant until GLIBC_2.34, so that's the end range.

>> +/* Compat symbol with the old libc version, _np alias.  */
>> +# undef pthread_mutex_consistent_np
>
> I think should be out of SHLIB_COMPAT.

It will go away if I switch to __REDIRECT.

>> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_1)
>> +compat_symbol (libc, __pthread_mutex_consistent_1,
>> +               pthread_mutex_consistent_np, GLIBC_2_4);
>> +#endif
>> +
>> +#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_34)
>> +/* Compat symbol with the old libc version.  */
>> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_2)
>> +compat_symbol (libc, __pthread_mutex_consistent_2,
>> +               pthread_mutex_consistent, GLIBC_2_12);
>> +#endif
>
> I think we have compat_symbol_unique exactly for that.

It doesn't apply here because the symbol names are different
(__pthread_mutex_consistent vs pthread_mutex_consistent):

# define compat_symbol_unique(lib, name, version) \

The macro has just one name argument.

>> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
>> index a04a3a2754..2ec2caec98 100644
>> --- a/sysdeps/nptl/pthread.h
>> +++ b/sysdeps/nptl/pthread.h
>> @@ -809,8 +809,9 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
>>  extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
>>       __THROW __nonnull ((1));
>>  # ifdef __USE_GNU
>> -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
>> -     __THROW __nonnull ((1));
>> +#  define pthread_mutex_consistent_np __glibc_macro_warning ("\
>> +pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent") \
>> +  pthread_mutex_consistent
>>  # endif
>>  #endif
>>  
>
> Wouldn't be better to throw a link error instead an empty macro for such
> case?

It's not an empty macro, there's a third line.  I can see if I can use
__REDIRECT instead if that's clearer.

Thanks,
Florian


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

* Re: [PATCH 03/18] nptl: Move legacy unwinding implementation into libc
  2021-03-15 20:02   ` Adhemerval Zanella
@ 2021-03-16  7:03     ` Florian Weimer
  0 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-16  7:03 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> +#define __libc_cleanup_region_start(DOIT, FCT, ARG)			\
>> +  {   bool _cleanup_start_doit;						\
>> +  struct _pthread_cleanup_buffer _buffer;				\
>> +  /* Non-addresable copy of FCT, so that we avoid indirect calls on	\
>
> s/addresable/addressable

Thanks, fixed.

Florian


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

* Re: [PATCH 02/18] nptl: Move __pthread_cleanup_routine into libc
  2021-03-15 19:53   ` Adhemerval Zanella
@ 2021-03-16  7:09     ` Florian Weimer
  0 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-16  7:09 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> +#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_34)
>> +strong_alias (___pthread_cleanup_routine, __pthread_cleanup_routine_alias)
>> +compat_symbol (libc, __pthread_cleanup_routine_alias,
>> +               __pthread_cleanup_routine, GLIBC_2_3_3);
>> +#endif
>
> I think you can use compat_symbol_unique here.

No, the symbol names are still different (___ vs __ prefix).

Thanks,
Florian


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

* Re: [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-16  5:42     ` Florian Weimer
@ 2021-03-16 13:49       ` Adhemerval Zanella
  2021-03-16 13:53         ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 13:49 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 16/03/2021 02:42, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> index 937c7c4640..0a84063a2b 100644
>>> --- a/nptl/pthread_mutex_consistent.c
>>> +++ b/nptl/pthread_mutex_consistent.c
>>> @@ -18,10 +18,10 @@
>>>  
>>>  #include <errno.h>
>>>  #include <pthreadP.h>
>>> -
>>> +#include <shlib-compat.h>
>>>  
>>>  int
>>> -pthread_mutex_consistent (pthread_mutex_t *mutex)
>>> +__pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>  {
>>>    /* Test whether this is a robust mutex with a dead owner.
>>>       See concurrency notes regarding __kind in struct __pthread_mutex_s
>>> @@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>  
>>>    return 0;
>>>  }
>>> -weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
>>> +versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
>>> +                  GLIBC_2_34);
>>> +
>>> +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)
>>
>> Shouldn't be GLIBC_2_12 here?
> 
> Where exactly?  There are so many symbol versions.  The _np variant was
> introduced in GLIBC_2.4, so GLIBC_2_4 is correct here.  It ran parallel
> with the non-_np variant until GLIBC_2.34, so that's the end range.

I meant 'SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)'

> 
>>> +/* Compat symbol with the old libc version, _np alias.  */
>>> +# undef pthread_mutex_consistent_np
>>
>> I think should be out of SHLIB_COMPAT.
> 
> It will go away if I switch to __REDIRECT.
> 
>>> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_1)
>>> +compat_symbol (libc, __pthread_mutex_consistent_1,
>>> +               pthread_mutex_consistent_np, GLIBC_2_4);
>>> +#endif
>>> +
>>> +#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_34)
>>> +/* Compat symbol with the old libc version.  */
>>> +strong_alias (__pthread_mutex_consistent, __pthread_mutex_consistent_2)
>>> +compat_symbol (libc, __pthread_mutex_consistent_2,
>>> +               pthread_mutex_consistent, GLIBC_2_12);
>>> +#endif
>>
>> I think we have compat_symbol_unique exactly for that.
> 
> It doesn't apply here because the symbol names are different
> (__pthread_mutex_consistent vs pthread_mutex_consistent):
> 
> # define compat_symbol_unique(lib, name, version) \
> 
> The macro has just one name argument.

Indeed, I will add a macro similar to compat_symbol_unique, but
that redirects to a an alias instead.

> 
>>> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
>>> index a04a3a2754..2ec2caec98 100644
>>> --- a/sysdeps/nptl/pthread.h
>>> +++ b/sysdeps/nptl/pthread.h
>>> @@ -809,8 +809,9 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
>>>  extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
>>>       __THROW __nonnull ((1));
>>>  # ifdef __USE_GNU
>>> -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
>>> -     __THROW __nonnull ((1));
>>> +#  define pthread_mutex_consistent_np __glibc_macro_warning ("\
>>> +pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent") \
>>> +  pthread_mutex_consistent
>>>  # endif
>>>  #endif
>>>  
>>
>> Wouldn't be better to throw a link error instead an empty macro for such
>> case?
> 
> It's not an empty macro, there's a third line.  I can see if I can use
> __REDIRECT instead if that's clearer.

Ah right, I didn't noticed the last 'pthread_mutex_consistent'.  

Patch look ok then, I think if you could remove the extra 
pthread_mutex_consistent define on the installed header would be better
but it not a blocker.

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

* Re: [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-16 13:49       ` Adhemerval Zanella
@ 2021-03-16 13:53         ` Florian Weimer
  2021-03-16 14:07           ` Adhemerval Zanella
  0 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-16 13:53 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 16/03/2021 02:42, Florian Weimer wrote:
>> * Adhemerval Zanella:
>> 
>>>> index 937c7c4640..0a84063a2b 100644
>>>> --- a/nptl/pthread_mutex_consistent.c
>>>> +++ b/nptl/pthread_mutex_consistent.c
>>>> @@ -18,10 +18,10 @@
>>>>  
>>>>  #include <errno.h>
>>>>  #include <pthreadP.h>
>>>> -
>>>> +#include <shlib-compat.h>
>>>>  
>>>>  int
>>>> -pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>> +__pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>>  {
>>>>    /* Test whether this is a robust mutex with a dead owner.
>>>>       See concurrency notes regarding __kind in struct __pthread_mutex_s
>>>> @@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>>  
>>>>    return 0;
>>>>  }
>>>> -weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
>>>> +versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
>>>> +                  GLIBC_2_34);
>>>> +
>>>> +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)
>>>
>>> Shouldn't be GLIBC_2_12 here?
>> 
>> Where exactly?  There are so many symbol versions.  The _np variant was
>> introduced in GLIBC_2.4, so GLIBC_2_4 is correct here.  It ran parallel
>> with the non-_np variant until GLIBC_2.34, so that's the end range.
>
> I meant 'SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)'

This would be wrong because until glibc 2.33, both symbols existed in
parallel AFAICS.

>>> I think we have compat_symbol_unique exactly for that.
>> 
>> It doesn't apply here because the symbol names are different
>> (__pthread_mutex_consistent vs pthread_mutex_consistent):
>> 
>> # define compat_symbol_unique(lib, name, version) \
>> 
>> The macro has just one name argument.
>
> Indeed, I will add a macro similar to compat_symbol_unique, but
> that redirects to a an alias instead.

We could teach compat_symbol to always create an alias first.

> Ah right, I didn't noticed the last 'pthread_mutex_consistent'.  
>
> Patch look ok then, I think if you could remove the extra 
> pthread_mutex_consistent define on the installed header would be better
> but it not a blocker.

I'm going to repost it as part of the ongoing series.  I could get
__REDIRECT to work.

Thanks,
Florian


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

* Re: [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc
  2021-03-16 13:53         ` Florian Weimer
@ 2021-03-16 14:07           ` Adhemerval Zanella
  0 siblings, 0 replies; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 14:07 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 16/03/2021 10:53, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 16/03/2021 02:42, Florian Weimer wrote:
>>> * Adhemerval Zanella:
>>>
>>>>> index 937c7c4640..0a84063a2b 100644
>>>>> --- a/nptl/pthread_mutex_consistent.c
>>>>> +++ b/nptl/pthread_mutex_consistent.c
>>>>> @@ -18,10 +18,10 @@
>>>>>  
>>>>>  #include <errno.h>
>>>>>  #include <pthreadP.h>
>>>>> -
>>>>> +#include <shlib-compat.h>
>>>>>  
>>>>>  int
>>>>> -pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>>> +__pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>>>  {
>>>>>    /* Test whether this is a robust mutex with a dead owner.
>>>>>       See concurrency notes regarding __kind in struct __pthread_mutex_s
>>>>> @@ -35,4 +35,20 @@ pthread_mutex_consistent (pthread_mutex_t *mutex)
>>>>>  
>>>>>    return 0;
>>>>>  }
>>>>> -weak_alias (pthread_mutex_consistent, pthread_mutex_consistent_np)
>>>>> +versioned_symbol (libc, __pthread_mutex_consistent, pthread_mutex_consistent,
>>>>> +                  GLIBC_2_34);
>>>>> +
>>>>> +#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_34)
>>>>
>>>> Shouldn't be GLIBC_2_12 here?
>>>
>>> Where exactly?  There are so many symbol versions.  The _np variant was
>>> introduced in GLIBC_2.4, so GLIBC_2_4 is correct here.  It ran parallel
>>> with the non-_np variant until GLIBC_2.34, so that's the end range.
>>
>> I meant 'SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)'
> 
> This would be wrong because until glibc 2.33, both symbols existed in
> parallel AFAICS.
> 

Yeah, you are right.

>>>> I think we have compat_symbol_unique exactly for that.
>>>
>>> It doesn't apply here because the symbol names are different
>>> (__pthread_mutex_consistent vs pthread_mutex_consistent):
>>>
>>> # define compat_symbol_unique(lib, name, version) \
>>>
>>> The macro has just one name argument.
>>
>> Indeed, I will add a macro similar to compat_symbol_unique, but
>> that redirects to a an alias instead.
> 
> We could teach compat_symbol to always create an alias first.
> 
>> Ah right, I didn't noticed the last 'pthread_mutex_consistent'.  
>>
>> Patch look ok then, I think if you could remove the extra 
>> pthread_mutex_consistent define on the installed header would be better
>> but it not a blocker.
> 
> I'm going to repost it as part of the ongoing series.  I could get
> __REDIRECT to work.
> 
> Thanks,
> Florian
> 

Ok.

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

* Re: [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols
  2021-03-12 17:49 ` [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
@ 2021-03-16 14:09   ` Adhemerval Zanella
  2021-03-16 14:45     ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 14:09 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> This affects _pthread_cleanup_pop, _pthread_cleanup_pop_restore,
> _pthread_cleanup_push, _pthread_cleanup_push_defer.  The symbols
> have been moved using scripts/move-symbol-to-libc.py.
> 
> No new symbol versions are added because the symbols are turned into
> compatibility symbols at the same time.

Looks good, only two new entries on nptl/Versions that don't really get it.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  nptl/Makefile                                 | 15 ++++++++++----
>  nptl/Versions                                 | 10 ++++++----
>  nptl/cleanup_compat.c                         | 16 +++++++++------
>  nptl/cleanup_defer_compat.c                   | 20 ++++++++++++-------
>  nptl/pthreadP.h                               | 17 ++++++++--------
>  nptl/tst-cleanup4.c                           |  5 +++++
>  nptl/tst-cleanup4aux.c                        |  5 +++++
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  4 ++++
>  .../sysv/linux/aarch64/libpthread.abilist     |  4 ----
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  4 ++++
>  .../unix/sysv/linux/alpha/libpthread.abilist  |  4 ----
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  4 ++++
>  .../unix/sysv/linux/arc/libpthread.abilist    |  4 ----
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  4 ++++
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  4 ----
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  4 ++++
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  4 ----
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  4 ++++
>  .../unix/sysv/linux/csky/libpthread.abilist   |  4 ----
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  4 ++++
>  .../unix/sysv/linux/hppa/libpthread.abilist   |  4 ----
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  4 ++++
>  .../unix/sysv/linux/i386/libpthread.abilist   |  4 ----
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  4 ++++
>  .../unix/sysv/linux/ia64/libpthread.abilist   |  4 ----
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  4 ++++
>  .../linux/m68k/coldfire/libpthread.abilist    |  4 ----
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  4 ++++
>  .../sysv/linux/m68k/m680x0/libpthread.abilist |  4 ----
>  .../sysv/linux/microblaze/be/libc.abilist     |  4 ++++
>  .../linux/microblaze/be/libpthread.abilist    |  4 ----
>  .../sysv/linux/microblaze/le/libc.abilist     |  4 ++++
>  .../linux/microblaze/le/libpthread.abilist    |  4 ----
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  4 ++++
>  .../sysv/linux/mips/mips32/libpthread.abilist |  4 ----
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  4 ++++
>  .../sysv/linux/mips/mips64/libpthread.abilist |  4 ----
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  4 ++++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  4 ++++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  4 ++++
>  .../unix/sysv/linux/nios2/libpthread.abilist  |  4 ----
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  4 ++++
>  .../powerpc/powerpc32/libpthread.abilist      |  4 ----
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  4 ++++
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  4 ++++
>  .../powerpc/powerpc64/be/libpthread.abilist   |  4 ----
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  4 ++++
>  .../powerpc/powerpc64/le/libpthread.abilist   |  4 ----
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  4 ++++
>  .../sysv/linux/riscv/rv32/libpthread.abilist  |  4 ----
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  4 ++++
>  .../sysv/linux/riscv/rv64/libpthread.abilist  |  4 ----
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  4 ++++
>  .../linux/s390/s390-32/libpthread.abilist     |  4 ----
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  4 ++++
>  .../linux/s390/s390-64/libpthread.abilist     |  4 ----
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  4 ++++
>  .../unix/sysv/linux/sh/be/libpthread.abilist  |  4 ----
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  4 ++++
>  .../unix/sysv/linux/sh/le/libpthread.abilist  |  4 ----
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  4 ++++
>  .../linux/sparc/sparc32/libpthread.abilist    |  4 ----
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  4 ++++
>  .../linux/sparc/sparc64/libpthread.abilist    |  4 ----
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  4 ++++
>  .../sysv/linux/x86_64/64/libpthread.abilist   |  4 ----
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  4 ++++
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  4 ----
>  68 files changed, 186 insertions(+), 146 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index b951fcb77e..147a8d3d59 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -30,6 +30,8 @@ extra-libs-others := $(extra-libs)
>  
>  routines = \
>    alloca_cutoff \
> +  cleanup_compat \
> +  cleanup_defer_compat \
>    cleanup_routine \
>    elision-conf \
>    elision-lock \
> @@ -96,9 +98,7 @@ libpthread-routines = \
>    $(pthread-compat-wrappers) \
>    cancellation \
>    cleanup \
> -  cleanup_compat \
>    cleanup_defer \
> -  cleanup_defer_compat \
>    events \
>    flockfile \
>    ftrylockfile \

Ok.

> @@ -344,7 +344,6 @@ tests = tst-attr2 tst-attr3 tst-default-attr \
>  	tst-tsd3 tst-tsd4 \
>  	tst-cancel4_1 tst-cancel4_2 \
>  	tst-cancel7 tst-cancel17 tst-cancel24 \
> -	tst-cleanup4 \
>  	tst-signal3 \
>  	tst-exec4 tst-exec5 \
>  	tst-stack2 tst-stack3 tst-stack4 \
> @@ -418,7 +417,7 @@ endif
>  
>  LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
>  
> -tests += tst-cancelx7 tst-cancelx17 tst-cleanupx4
> +tests += tst-cancelx7 tst-cancelx17
>  
>  ifeq ($(build-shared),yes)
>  tests += tst-compat-forwarder tst-audit-threads

Ok.

> @@ -438,6 +437,14 @@ extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \
>  		   tst-cleanup4aux.o tst-cleanupx4aux.o
>  test-extras += tst-cleanup4aux tst-cleanupx4aux
>  
> +# This test exercises compat symbols removed in glibc 2.34.
> +ifdef have-GLIBC_2.33
> +tests += tst-cleanup4
> +ifeq ($(build-shared),yes)
> +tests += tst-cleanupx4
> +endif
> +endif
> +
>  tst-tls3mod.so-no-z-defs = yes
>  tst-tls5mod.so-no-z-defs = yes
>  tst-tls5moda.so-no-z-defs = yes

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index e3eb686a04..ff6eae2566 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -1,5 +1,9 @@
>  libc {
>    GLIBC_2.0 {
> +    _pthread_cleanup_pop;
> +    _pthread_cleanup_pop_restore;
> +    _pthread_cleanup_push;
> +    _pthread_cleanup_push_defer;
>      pthread_attr_destroy;
>      pthread_attr_getdetachstate;
>      pthread_attr_getinheritsched;
> @@ -103,6 +107,8 @@ libc {
>      __pthread_attr_init;
>      __pthread_attr_setaffinity_np;
>      __pthread_attr_setsigmask_internal;
> +    __pthread_cleanup_pop;
> +    __pthread_cleanup_push;
>      __pthread_cond_destroy; # Used by the C11 threads.
>      __pthread_cond_init; # Used by the C11 threads.
>      __pthread_force_elision;

Why are you exporting the double underscore __pthread_cleanup_[pop,push]
on older versions here?

> @@ -141,10 +147,6 @@ libpthread {
>      __sigaction;
>      __write;
>      _exit;
> -    _pthread_cleanup_pop;
> -    _pthread_cleanup_pop_restore;
> -    _pthread_cleanup_push;
> -    _pthread_cleanup_push_defer;
>      accept;
>      close;
>      connect;

Ok.

> diff --git a/nptl/cleanup_compat.c b/nptl/cleanup_compat.c
> index fec88c2f86..b5fd657c38 100644
> --- a/nptl/cleanup_compat.c
> +++ b/nptl/cleanup_compat.c
> @@ -16,12 +16,12 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> +#include <shlib-compat.h>
>  #include <stdlib.h>
>  #include "pthreadP.h"
>  
> -
>  void
> -_pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
> +__pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
>  		       void (*routine) (void *), void *arg)
>  {
>    struct pthread *self = THREAD_SELF;
> @@ -32,11 +32,10 @@ _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
>  
>    THREAD_SETMEM (self, cleanup, buffer);
>  }
> -strong_alias (_pthread_cleanup_push, __pthread_cleanup_push)
> -
> +libc_hidden_def (__pthread_cleanup_push)
>  
>  void
> -_pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
> +__pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
>  {
>    struct pthread *self __attribute ((unused)) = THREAD_SELF;
>  
> @@ -47,4 +46,9 @@ _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, int execute)
>    if (execute)
>      buffer->__routine (buffer->__arg);
>  }
> -strong_alias (_pthread_cleanup_pop, __pthread_cleanup_pop)
> +libc_hidden_def (__pthread_cleanup_pop)
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libc, __pthread_cleanup_push, _pthread_cleanup_push, GLIBC_2_0);
> +compat_symbol (libc, __pthread_cleanup_pop, _pthread_cleanup_pop, GLIBC_2_0);
> +#endif /* SHLIB_COMPAT  */

Ok.

> diff --git a/nptl/cleanup_defer_compat.c b/nptl/cleanup_defer_compat.c
> index 1957318208..a172218b42 100644
> --- a/nptl/cleanup_defer_compat.c
> +++ b/nptl/cleanup_defer_compat.c
> @@ -16,10 +16,13 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include "pthreadP.h"
> -#include <libc-lock.h>
> +#include <shlib-compat.h>
>  
> -void
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +# include "pthreadP.h"
> +# include <libc-lock.h>
> +
> +void attribute_compat_text_section
>  _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
>  			     void (*routine) (void *), void *arg)
>  {
> @@ -27,10 +30,10 @@ _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
>    buffer->__arg = arg;
>    __libc_cleanup_push_defer (buffer);
>  }
> -strong_alias (_pthread_cleanup_push_defer, __pthread_cleanup_push_defer)
> -
> +compat_symbol (libc, _pthread_cleanup_push_defer,
> +	       _pthread_cleanup_push_defer, GLIBC_2_0);
>  
> -void
> +void attribute_compat_text_section
>  _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
>  			      int execute)
>  {
> @@ -41,4 +44,7 @@ _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
>    if (execute)
>      buffer->__routine (buffer->__arg);
>  }
> -strong_alias (_pthread_cleanup_pop_restore, __pthread_cleanup_pop_restore)
> +compat_symbol (libc, _pthread_cleanup_pop_restore,
> +	       _pthread_cleanup_pop_restore, GLIBC_2_0);
> +
> +#endif /* SHLIB_COMPAT */

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index c8538de44f..781bc65c1c 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -585,11 +585,10 @@ libc_hidden_proto (__pthread_attr_setsigmask_internal)
>  extern __typeof (pthread_attr_getsigmask_np) __pthread_attr_getsigmask_np;
>  libc_hidden_proto (__pthread_attr_getsigmask_np)
>  
> -#if IS_IN (libpthread)
>  /* Special versions which use non-exported functions.  */
>  extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
> -				    void (*routine) (void *), void *arg)
> -     attribute_hidden;
> +				    void (*routine) (void *), void *arg);
> +libc_hidden_proto (__pthread_cleanup_push)
>  
>  /* Replace cleanup macros defined in <pthread.h> with internal
>     versions that don't depend on unwind info and better support
> @@ -600,12 +599,13 @@ extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
>    __pthread_cleanup_push (&_buffer, (routine), (arg));
>  
>  extern void __pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
> -				   int execute) attribute_hidden;
> +				   int execute);
> +libc_hidden_proto (__pthread_cleanup_pop)
>  # undef pthread_cleanup_pop
>  # define pthread_cleanup_pop(execute)                   \
>    __pthread_cleanup_pop (&_buffer, (execute)); }
>  
> -# if defined __EXCEPTIONS && !defined __cplusplus
> +#if defined __EXCEPTIONS && !defined __cplusplus
>  /* Structure to hold the cleanup handler information.  */
>  struct __pthread_cleanup_combined_frame
>  {
> @@ -646,7 +646,7 @@ __pthread_cleanup_combined_routine_voidptr (void *__arg)
>      }
>  }
>  
> -#  define pthread_cleanup_combined_push(routine, arg) \
> +# define pthread_cleanup_combined_push(routine, arg) \
>    do {									      \
>      void (*__cancel_routine) (void *) = (routine);			      \
>      struct __pthread_cleanup_combined_frame __clframe			      \
> @@ -657,15 +657,14 @@ __pthread_cleanup_combined_routine_voidptr (void *__arg)
>  			    __pthread_cleanup_combined_routine_voidptr,	      \
>  			    &__clframe);
>  
> -#  define pthread_cleanup_combined_pop(execute) \
> +# define pthread_cleanup_combined_pop(execute) \
>      __pthread_cleanup_pop (&__clframe.__buffer, 0);			      \
>      __clframe.__do_it = 0;						      \
>      if (execute)							      \
>        __cancel_routine (__clframe.__cancel_arg);			      \
>    } while (0)
>  
> -# endif
> -#endif
> +#endif /* __EXCEPTIONS && !defined __cplusplus */
>  
>  extern void __pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
>  					  void (*routine) (void *), void *arg);

Ok.

> diff --git a/nptl/tst-cleanup4.c b/nptl/tst-cleanup4.c
> index 24c062db1a..4eb51580bc 100644
> --- a/nptl/tst-cleanup4.c
> +++ b/nptl/tst-cleanup4.c
> @@ -17,6 +17,7 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <pthread.h>
> +#include <shlib-compat.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> @@ -25,8 +26,12 @@
>  extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
>                                     void (*__routine) (void *),
>                                     void *__arg);
> +compat_symbol_reference (libc, _pthread_cleanup_push,
> +                         _pthread_cleanup_push, GLIBC_2_0);
>  extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
>                                    int __execute);
> +compat_symbol_reference (libc, _pthread_cleanup_pop,
> +                         _pthread_cleanup_pop, GLIBC_2_0);
>  
>  static int fds[2];
>  static pthread_barrier_t b2;

Ok.

> diff --git a/nptl/tst-cleanup4aux.c b/nptl/tst-cleanup4aux.c
> index d20730ddf2..7713f9c612 100644
> --- a/nptl/tst-cleanup4aux.c
> +++ b/nptl/tst-cleanup4aux.c
> @@ -17,6 +17,7 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <pthread.h>
> +#include <shlib-compat.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> @@ -24,8 +25,12 @@
>  extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
>                                     void (*__routine) (void *),
>                                     void *__arg);
> +compat_symbol_reference (libc, _pthread_cleanup_push,
> +                         _pthread_cleanup_push, GLIBC_2_0);
>  extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
>                                    int __execute);
> +compat_symbol_reference (libc, _pthread_cleanup_pop,
> +                         _pthread_cleanup_pop, GLIBC_2_0);
>  
>  extern void clh (void *arg);
>  extern void fn0 (void);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index a55f3d9667..a585f7d30d 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -538,6 +538,10 @@ GLIBC_2.17 _obstack_begin_1 F
>  GLIBC_2.17 _obstack_free F
>  GLIBC_2.17 _obstack_memory_used F
>  GLIBC_2.17 _obstack_newchunk F
> +GLIBC_2.17 _pthread_cleanup_pop F
> +GLIBC_2.17 _pthread_cleanup_pop_restore F
> +GLIBC_2.17 _pthread_cleanup_push F
> +GLIBC_2.17 _pthread_cleanup_push_defer F
>  GLIBC_2.17 _res D 0x238
>  GLIBC_2.17 _res_hconf D 0x48
>  GLIBC_2.17 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index ad2492cb4c..6047fa274f 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.17 __res_state F
>  GLIBC_2.17 __send F
>  GLIBC_2.17 __sigaction F
>  GLIBC_2.17 __write F
> -GLIBC_2.17 _pthread_cleanup_pop F
> -GLIBC_2.17 _pthread_cleanup_pop_restore F
> -GLIBC_2.17 _pthread_cleanup_push F
> -GLIBC_2.17 _pthread_cleanup_push_defer F
>  GLIBC_2.17 accept F
>  GLIBC_2.17 close F
>  GLIBC_2.17 connect F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 54a11b7e76..c9ac935ccf 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -277,6 +277,10 @@ GLIBC_2.0 _obstack_newchunk F
>  GLIBC_2.0 _outb F
>  GLIBC_2.0 _outl F
>  GLIBC_2.0 _outw F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x238
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 1eff0da935..5f8c13bb69 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index a229125212..27fecc5c8a 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -506,6 +506,10 @@ GLIBC_2.32 _obstack_begin_1 F
>  GLIBC_2.32 _obstack_free F
>  GLIBC_2.32 _obstack_memory_used F
>  GLIBC_2.32 _obstack_newchunk F
> +GLIBC_2.32 _pthread_cleanup_pop F
> +GLIBC_2.32 _pthread_cleanup_pop_restore F
> +GLIBC_2.32 _pthread_cleanup_push F
> +GLIBC_2.32 _pthread_cleanup_push_defer F
>  GLIBC_2.32 _res D 0x200
>  GLIBC_2.32 _res_hconf D 0x30
>  GLIBC_2.32 _setjmp F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index c635f1dac9..9713a20071 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -42,10 +42,6 @@ GLIBC_2.32 __res_state F
>  GLIBC_2.32 __send F
>  GLIBC_2.32 __sigaction F
>  GLIBC_2.32 __write F
> -GLIBC_2.32 _pthread_cleanup_pop F
> -GLIBC_2.32 _pthread_cleanup_pop_restore F
> -GLIBC_2.32 _pthread_cleanup_push F
> -GLIBC_2.32 _pthread_cleanup_push_defer F
>  GLIBC_2.32 accept F
>  GLIBC_2.32 call_once F
>  GLIBC_2.32 close F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index cfc58ca510..2383d95094 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -683,6 +683,10 @@ GLIBC_2.4 _obstack_begin_1 F
>  GLIBC_2.4 _obstack_free F
>  GLIBC_2.4 _obstack_memory_used F
>  GLIBC_2.4 _obstack_newchunk F
> +GLIBC_2.4 _pthread_cleanup_pop F
> +GLIBC_2.4 _pthread_cleanup_pop_restore F
> +GLIBC_2.4 _pthread_cleanup_push F
> +GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 _res D 0x200
>  GLIBC_2.4 _res_hconf D 0x30
>  GLIBC_2.4 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index 79c5f66cff..c2e78416b8 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
>  GLIBC_2.4 __send F
>  GLIBC_2.4 __sigaction F
>  GLIBC_2.4 __write F
> -GLIBC_2.4 _pthread_cleanup_pop F
> -GLIBC_2.4 _pthread_cleanup_pop_restore F
> -GLIBC_2.4 _pthread_cleanup_push F
> -GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 accept F
>  GLIBC_2.4 close F
>  GLIBC_2.4 connect F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index e725ee6217..bb46b8b5e3 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -680,6 +680,10 @@ GLIBC_2.4 _obstack_begin_1 F
>  GLIBC_2.4 _obstack_free F
>  GLIBC_2.4 _obstack_memory_used F
>  GLIBC_2.4 _obstack_newchunk F
> +GLIBC_2.4 _pthread_cleanup_pop F
> +GLIBC_2.4 _pthread_cleanup_pop_restore F
> +GLIBC_2.4 _pthread_cleanup_push F
> +GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 _res D 0x200
>  GLIBC_2.4 _res_hconf D 0x30
>  GLIBC_2.4 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index 79c5f66cff..c2e78416b8 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
>  GLIBC_2.4 __send F
>  GLIBC_2.4 __sigaction F
>  GLIBC_2.4 __write F
> -GLIBC_2.4 _pthread_cleanup_pop F
> -GLIBC_2.4 _pthread_cleanup_pop_restore F
> -GLIBC_2.4 _pthread_cleanup_push F
> -GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 accept F
>  GLIBC_2.4 close F
>  GLIBC_2.4 connect F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 51d9d33b13..684e451f83 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -515,6 +515,10 @@ GLIBC_2.29 _obstack_begin_1 F
>  GLIBC_2.29 _obstack_free F
>  GLIBC_2.29 _obstack_memory_used F
>  GLIBC_2.29 _obstack_newchunk F
> +GLIBC_2.29 _pthread_cleanup_pop F
> +GLIBC_2.29 _pthread_cleanup_pop_restore F
> +GLIBC_2.29 _pthread_cleanup_push F
> +GLIBC_2.29 _pthread_cleanup_push_defer F
>  GLIBC_2.29 _res D 0x200
>  GLIBC_2.29 _res_hconf D 0x30
>  GLIBC_2.29 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index e242edb9c3..bb8a51a51d 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -42,10 +42,6 @@ GLIBC_2.29 __res_state F
>  GLIBC_2.29 __send F
>  GLIBC_2.29 __sigaction F
>  GLIBC_2.29 __write F
> -GLIBC_2.29 _pthread_cleanup_pop F
> -GLIBC_2.29 _pthread_cleanup_pop_restore F
> -GLIBC_2.29 _pthread_cleanup_push F
> -GLIBC_2.29 _pthread_cleanup_push_defer F
>  GLIBC_2.29 accept F
>  GLIBC_2.29 call_once F
>  GLIBC_2.29 close F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 914aef5f35..8dde237f8b 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -502,6 +502,10 @@ GLIBC_2.2 _obstack_begin_1 F
>  GLIBC_2.2 _obstack_free F
>  GLIBC_2.2 _obstack_memory_used F
>  GLIBC_2.2 _obstack_newchunk F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x200
>  GLIBC_2.2 _res_hconf D 0x30
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index 8ce3580478..8d7aa63a02 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index f7ca08f695..cc2226be23 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index d3fc0f2d70..ee156d6f49 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index a77ab9816b..438f3bd131 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -514,6 +514,10 @@ GLIBC_2.2 _obstack_newchunk F
>  GLIBC_2.2 _outb F
>  GLIBC_2.2 _outl F
>  GLIBC_2.2 _outw F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x238
>  GLIBC_2.2 _res_hconf D 0x48
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index d7000f415e..ab6a5cfb78 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 49a3997d83..5add3e607a 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -671,6 +671,10 @@ GLIBC_2.4 _obstack_begin_1 F
>  GLIBC_2.4 _obstack_free F
>  GLIBC_2.4 _obstack_memory_used F
>  GLIBC_2.4 _obstack_newchunk F
> +GLIBC_2.4 _pthread_cleanup_pop F
> +GLIBC_2.4 _pthread_cleanup_pop_restore F
> +GLIBC_2.4 _pthread_cleanup_push F
> +GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 _res D 0x1fe
>  GLIBC_2.4 _res_hconf D 0x30
>  GLIBC_2.4 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index 79c5f66cff..c2e78416b8 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -77,10 +77,6 @@ GLIBC_2.4 __res_state F
>  GLIBC_2.4 __send F
>  GLIBC_2.4 __sigaction F
>  GLIBC_2.4 __write F
> -GLIBC_2.4 _pthread_cleanup_pop F
> -GLIBC_2.4 _pthread_cleanup_pop_restore F
> -GLIBC_2.4 _pthread_cleanup_push F
> -GLIBC_2.4 _pthread_cleanup_push_defer F
>  GLIBC_2.4 accept F
>  GLIBC_2.4 close F
>  GLIBC_2.4 connect F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 9969b02829..2e7c9f9b47 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x1fe
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index d3fc0f2d70..ee156d6f49 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index eb6d753ae8..493f7ddaa0 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -541,6 +541,10 @@ GLIBC_2.18 _obstack_begin_1 F
>  GLIBC_2.18 _obstack_free F
>  GLIBC_2.18 _obstack_memory_used F
>  GLIBC_2.18 _obstack_newchunk F
> +GLIBC_2.18 _pthread_cleanup_pop F
> +GLIBC_2.18 _pthread_cleanup_pop_restore F
> +GLIBC_2.18 _pthread_cleanup_push F
> +GLIBC_2.18 _pthread_cleanup_push_defer F
>  GLIBC_2.18 _res D 0x200
>  GLIBC_2.18 _res_hconf D 0x30
>  GLIBC_2.18 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index c096915557..1f516569ba 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.18 __res_state F
>  GLIBC_2.18 __send F
>  GLIBC_2.18 __sigaction F
>  GLIBC_2.18 __write F
> -GLIBC_2.18 _pthread_cleanup_pop F
> -GLIBC_2.18 _pthread_cleanup_pop_restore F
> -GLIBC_2.18 _pthread_cleanup_push F
> -GLIBC_2.18 _pthread_cleanup_push_defer F
>  GLIBC_2.18 accept F
>  GLIBC_2.18 close F
>  GLIBC_2.18 connect F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 7c3d154267..ec83b89aa3 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -541,6 +541,10 @@ GLIBC_2.18 _obstack_begin_1 F
>  GLIBC_2.18 _obstack_free F
>  GLIBC_2.18 _obstack_memory_used F
>  GLIBC_2.18 _obstack_newchunk F
> +GLIBC_2.18 _pthread_cleanup_pop F
> +GLIBC_2.18 _pthread_cleanup_pop_restore F
> +GLIBC_2.18 _pthread_cleanup_push F
> +GLIBC_2.18 _pthread_cleanup_push_defer F
>  GLIBC_2.18 _res D 0x200
>  GLIBC_2.18 _res_hconf D 0x30
>  GLIBC_2.18 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index c096915557..1f516569ba 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.18 __res_state F
>  GLIBC_2.18 __send F
>  GLIBC_2.18 __sigaction F
>  GLIBC_2.18 __write F
> -GLIBC_2.18 _pthread_cleanup_pop F
> -GLIBC_2.18 _pthread_cleanup_pop_restore F
> -GLIBC_2.18 _pthread_cleanup_push F
> -GLIBC_2.18 _pthread_cleanup_push_defer F
>  GLIBC_2.18 accept F
>  GLIBC_2.18 close F
>  GLIBC_2.18 connect F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index bb2c61d8b4..cb0ab4bc19 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 358a13524a..903f49957f 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 7a418b2e12..2be2623e99 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 358a13524a..903f49957f 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 29d9e4045a..09147861b5 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -262,6 +262,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 404789db07..4a0208c8c8 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -260,6 +260,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x238
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 468444aa86..078025a7d6 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -582,6 +582,10 @@ GLIBC_2.21 _obstack_begin_1 F
>  GLIBC_2.21 _obstack_free F
>  GLIBC_2.21 _obstack_memory_used F
>  GLIBC_2.21 _obstack_newchunk F
> +GLIBC_2.21 _pthread_cleanup_pop F
> +GLIBC_2.21 _pthread_cleanup_pop_restore F
> +GLIBC_2.21 _pthread_cleanup_push F
> +GLIBC_2.21 _pthread_cleanup_push_defer F
>  GLIBC_2.21 _res D 0x200
>  GLIBC_2.21 _res_hconf D 0x30
>  GLIBC_2.21 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 6379c1f86c..cd41c7d42b 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.21 __res_state F
>  GLIBC_2.21 __send F
>  GLIBC_2.21 __sigaction F
>  GLIBC_2.21 __write F
> -GLIBC_2.21 _pthread_cleanup_pop F
> -GLIBC_2.21 _pthread_cleanup_pop_restore F
> -GLIBC_2.21 _pthread_cleanup_push F
> -GLIBC_2.21 _pthread_cleanup_push_defer F
>  GLIBC_2.21 accept F
>  GLIBC_2.21 close F
>  GLIBC_2.21 connect F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 41ba4fdb29..bc79b844a5 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -275,6 +275,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index 7c6e78f6ce..589a865796 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 1d030db5f7..63c05472ed 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -275,6 +275,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 9f86b81d65..37e4ee564d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -561,6 +561,10 @@ GLIBC_2.3 _obstack_begin_1 F
>  GLIBC_2.3 _obstack_free F
>  GLIBC_2.3 _obstack_memory_used F
>  GLIBC_2.3 _obstack_newchunk F
> +GLIBC_2.3 _pthread_cleanup_pop F
> +GLIBC_2.3 _pthread_cleanup_pop_restore F
> +GLIBC_2.3 _pthread_cleanup_push F
> +GLIBC_2.3 _pthread_cleanup_push_defer F
>  GLIBC_2.3 _res D 0x238
>  GLIBC_2.3 _res_hconf D 0x48
>  GLIBC_2.3 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 773d873bd1..7c1553be29 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.3 __res_state F
>  GLIBC_2.3 __send F
>  GLIBC_2.3 __sigaction F
>  GLIBC_2.3 __write F
> -GLIBC_2.3 _pthread_cleanup_pop F
> -GLIBC_2.3 _pthread_cleanup_pop_restore F
> -GLIBC_2.3 _pthread_cleanup_push F
> -GLIBC_2.3 _pthread_cleanup_push_defer F
>  GLIBC_2.3 accept F
>  GLIBC_2.3 close F
>  GLIBC_2.3 connect F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 599d06d56f..1888ec6e86 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -627,6 +627,10 @@ GLIBC_2.17 _obstack_begin_1 F
>  GLIBC_2.17 _obstack_free F
>  GLIBC_2.17 _obstack_memory_used F
>  GLIBC_2.17 _obstack_newchunk F
> +GLIBC_2.17 _pthread_cleanup_pop F
> +GLIBC_2.17 _pthread_cleanup_pop_restore F
> +GLIBC_2.17 _pthread_cleanup_push F
> +GLIBC_2.17 _pthread_cleanup_push_defer F
>  GLIBC_2.17 _res D 0x238
>  GLIBC_2.17 _res_hconf D 0x48
>  GLIBC_2.17 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index ad2492cb4c..6047fa274f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.17 __res_state F
>  GLIBC_2.17 __send F
>  GLIBC_2.17 __sigaction F
>  GLIBC_2.17 __write F
> -GLIBC_2.17 _pthread_cleanup_pop F
> -GLIBC_2.17 _pthread_cleanup_pop_restore F
> -GLIBC_2.17 _pthread_cleanup_push F
> -GLIBC_2.17 _pthread_cleanup_push_defer F
>  GLIBC_2.17 accept F
>  GLIBC_2.17 close F
>  GLIBC_2.17 connect F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 9f0068ba1c..8cd92b1abe 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -500,6 +500,10 @@ GLIBC_2.33 _obstack_begin_1 F
>  GLIBC_2.33 _obstack_free F
>  GLIBC_2.33 _obstack_memory_used F
>  GLIBC_2.33 _obstack_newchunk F
> +GLIBC_2.33 _pthread_cleanup_pop F
> +GLIBC_2.33 _pthread_cleanup_pop_restore F
> +GLIBC_2.33 _pthread_cleanup_push F
> +GLIBC_2.33 _pthread_cleanup_push_defer F
>  GLIBC_2.33 _res D 0x200
>  GLIBC_2.33 _res_hconf D 0x30
>  GLIBC_2.33 _setjmp F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 76484b8073..71e8f38003 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -42,10 +42,6 @@ GLIBC_2.33 __res_state F
>  GLIBC_2.33 __send F
>  GLIBC_2.33 __sigaction F
>  GLIBC_2.33 __write F
> -GLIBC_2.33 _pthread_cleanup_pop F
> -GLIBC_2.33 _pthread_cleanup_pop_restore F
> -GLIBC_2.33 _pthread_cleanup_push F
> -GLIBC_2.33 _pthread_cleanup_push_defer F
>  GLIBC_2.33 accept F
>  GLIBC_2.33 call_once F
>  GLIBC_2.33 close F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 833d6f11d6..894f01282f 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -521,6 +521,10 @@ GLIBC_2.27 _obstack_begin_1 F
>  GLIBC_2.27 _obstack_free F
>  GLIBC_2.27 _obstack_memory_used F
>  GLIBC_2.27 _obstack_newchunk F
> +GLIBC_2.27 _pthread_cleanup_pop F
> +GLIBC_2.27 _pthread_cleanup_pop_restore F
> +GLIBC_2.27 _pthread_cleanup_push F
> +GLIBC_2.27 _pthread_cleanup_push_defer F
>  GLIBC_2.27 _res D 0x238
>  GLIBC_2.27 _res_hconf D 0x48
>  GLIBC_2.27 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 2332ba5927..f5f9baefb9 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.27 __res_state F
>  GLIBC_2.27 __send F
>  GLIBC_2.27 __sigaction F
>  GLIBC_2.27 __write F
> -GLIBC_2.27 _pthread_cleanup_pop F
> -GLIBC_2.27 _pthread_cleanup_pop_restore F
> -GLIBC_2.27 _pthread_cleanup_push F
> -GLIBC_2.27 _pthread_cleanup_push_defer F
>  GLIBC_2.27 accept F
>  GLIBC_2.27 close F
>  GLIBC_2.27 connect F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index a3e732e82f..8788493ce0 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -265,6 +265,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index 28cf9cfcee..7aa725ccae 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 4443545ed0..4596ab72b0 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -519,6 +519,10 @@ GLIBC_2.2 _obstack_begin_1 F
>  GLIBC_2.2 _obstack_free F
>  GLIBC_2.2 _obstack_memory_used F
>  GLIBC_2.2 _obstack_newchunk F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x238
>  GLIBC_2.2 _res_hconf D 0x48
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 5baa0fdd6f..25da7ea8dc 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -47,10 +47,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index f9cb4195cd..ae16394e8a 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -505,6 +505,10 @@ GLIBC_2.2 _obstack_begin_1 F
>  GLIBC_2.2 _obstack_free F
>  GLIBC_2.2 _obstack_memory_used F
>  GLIBC_2.2 _obstack_newchunk F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x200
>  GLIBC_2.2 _res_hconf D 0x30
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index 8ce3580478..8d7aa63a02 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index e1ae67a464..6e45427e90 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -505,6 +505,10 @@ GLIBC_2.2 _obstack_begin_1 F
>  GLIBC_2.2 _obstack_free F
>  GLIBC_2.2 _obstack_memory_used F
>  GLIBC_2.2 _obstack_newchunk F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x200
>  GLIBC_2.2 _res_hconf D 0x30
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index 8ce3580478..8d7aa63a02 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 9ca458b1c5..080a036590 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -267,6 +267,10 @@ GLIBC_2.0 _obstack_begin_1 F
>  GLIBC_2.0 _obstack_free F
>  GLIBC_2.0 _obstack_memory_used F
>  GLIBC_2.0 _obstack_newchunk F
> +GLIBC_2.0 _pthread_cleanup_pop F
> +GLIBC_2.0 _pthread_cleanup_pop_restore F
> +GLIBC_2.0 _pthread_cleanup_push F
> +GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 _res D 0x200
>  GLIBC_2.0 _rpc_dtablesize F
>  GLIBC_2.0 _seterr_reply F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 1eff0da935..5f8c13bb69 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -24,10 +24,6 @@ GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
>  GLIBC_2.0 __write F
> -GLIBC_2.0 _pthread_cleanup_pop F
> -GLIBC_2.0 _pthread_cleanup_pop_restore F
> -GLIBC_2.0 _pthread_cleanup_push F
> -GLIBC_2.0 _pthread_cleanup_push_defer F
>  GLIBC_2.0 accept F
>  GLIBC_2.0 close F
>  GLIBC_2.0 connect F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 6af3cc116b..c8fb7da49f 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -547,6 +547,10 @@ GLIBC_2.2 _obstack_begin_1 F
>  GLIBC_2.2 _obstack_free F
>  GLIBC_2.2 _obstack_memory_used F
>  GLIBC_2.2 _obstack_newchunk F
> +GLIBC_2.2 _pthread_cleanup_pop F
> +GLIBC_2.2 _pthread_cleanup_pop_restore F
> +GLIBC_2.2 _pthread_cleanup_push F
> +GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 _res D 0x238
>  GLIBC_2.2 _res_hconf D 0x48
>  GLIBC_2.2 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index d7000f415e..ab6a5cfb78 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2 __res_state F
>  GLIBC_2.2 __send F
>  GLIBC_2.2 __sigaction F
>  GLIBC_2.2 __write F
> -GLIBC_2.2 _pthread_cleanup_pop F
> -GLIBC_2.2 _pthread_cleanup_pop_restore F
> -GLIBC_2.2 _pthread_cleanup_push F
> -GLIBC_2.2 _pthread_cleanup_push_defer F
>  GLIBC_2.2 accept F
>  GLIBC_2.2 close F
>  GLIBC_2.2 connect F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index e267cc2a23..cde6fdb49d 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -508,6 +508,10 @@ GLIBC_2.2.5 _obstack_begin_1 F
>  GLIBC_2.2.5 _obstack_free F
>  GLIBC_2.2.5 _obstack_memory_used F
>  GLIBC_2.2.5 _obstack_newchunk F
> +GLIBC_2.2.5 _pthread_cleanup_pop F
> +GLIBC_2.2.5 _pthread_cleanup_pop_restore F
> +GLIBC_2.2.5 _pthread_cleanup_push F
> +GLIBC_2.2.5 _pthread_cleanup_push_defer F
>  GLIBC_2.2.5 _res D 0x238
>  GLIBC_2.2.5 _res_hconf D 0x48
>  GLIBC_2.2.5 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index f0271930eb..301c0817b8 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -45,10 +45,6 @@ GLIBC_2.2.5 __res_state F
>  GLIBC_2.2.5 __send F
>  GLIBC_2.2.5 __sigaction F
>  GLIBC_2.2.5 __write F
> -GLIBC_2.2.5 _pthread_cleanup_pop F
> -GLIBC_2.2.5 _pthread_cleanup_pop_restore F
> -GLIBC_2.2.5 _pthread_cleanup_push F
> -GLIBC_2.2.5 _pthread_cleanup_push_defer F
>  GLIBC_2.2.5 accept F
>  GLIBC_2.2.5 close F
>  GLIBC_2.2.5 connect F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 50e860fe40..e772da1ec4 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -542,6 +542,10 @@ GLIBC_2.16 _obstack_begin_1 F
>  GLIBC_2.16 _obstack_free F
>  GLIBC_2.16 _obstack_memory_used F
>  GLIBC_2.16 _obstack_newchunk F
> +GLIBC_2.16 _pthread_cleanup_pop F
> +GLIBC_2.16 _pthread_cleanup_pop_restore F
> +GLIBC_2.16 _pthread_cleanup_push F
> +GLIBC_2.16 _pthread_cleanup_push_defer F
>  GLIBC_2.16 _res D 0x200
>  GLIBC_2.16 _res_hconf D 0x30
>  GLIBC_2.16 _rpc_dtablesize F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index aa9e127bad..31322dfabb 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -43,10 +43,6 @@ GLIBC_2.16 __res_state F
>  GLIBC_2.16 __send F
>  GLIBC_2.16 __sigaction F
>  GLIBC_2.16 __write F
> -GLIBC_2.16 _pthread_cleanup_pop F
> -GLIBC_2.16 _pthread_cleanup_pop_restore F
> -GLIBC_2.16 _pthread_cleanup_push F
> -GLIBC_2.16 _pthread_cleanup_push_defer F
>  GLIBC_2.16 accept F
>  GLIBC_2.16 close F
>  GLIBC_2.16 connect F
> 

Ok.

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

* Re: [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread
  2021-03-12 17:49 ` [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
@ 2021-03-16 14:13   ` Adhemerval Zanella
  2021-03-16 14:39     ` Florian Weimer
  0 siblings, 1 reply; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 14:13 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> The definitions in libc are sufficient, the forwarders are no longer
> needed.
> 
> The symbols have been moved using scripts/move-symbol-to-libc.py.
> s390-linux-gnu and s390x-linux-gnu need a new version placeholder
> to keep the GLIBC_2.19 symbol version in libpthread.
> 
> Tested on i386-linux-gnu, powerpc64le-linux-gnu, s390x-linux-gnu,
> x86_64-linux-gnu.  Built with build-many-glibcs.py.

Patch looks good, I was working on a similar one as well.  The only
suggestion is to keep the x86 _Static_assert regarding the priv field 
in struct pthread_unwind_buf has space to store shadow stack pointer.

I have done it by adding a new x86 longjmp implementation:

diff --git a/sysdeps/unix/sysv/linux/x86/longjmp.c b/sysdeps/unix/sysv/linux/x86/longjmp.c
new file mode 100644
index 0000000000..104592fd48
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/x86/longjmp.c
@@ -0,0 +1,39 @@
+/* __libc_siglongjmp for Linux/x86
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/x86/longjmp.c>
+
+#include <nptl/pthreadP.h>
+#include <jmp_buf-ssp.h>
+
+#ifdef __x86_64__
+# define SHADOW_STACK_POINTER_SIZE 8
+#else
+# define SHADOW_STACK_POINTER_SIZE 4
+#endif
+
+/* Assert that the priv field in struct pthread_unwind_buf has space
+   to store shadow stack pointer.  */
+_Static_assert ((offsetof (struct pthread_unwind_buf, priv)
+                <= SHADOW_STACK_POINTER_OFFSET)
+               && ((offsetof (struct pthread_unwind_buf, priv)
+                    + sizeof (((struct pthread_unwind_buf *) 0)->priv))
+                   >= (SHADOW_STACK_POINTER_OFFSET
+                       + SHADOW_STACK_POINTER_SIZE)),
+               "Shadow stack pointer is not within private storage "
+               "of pthread_unwind_buf.");

> ---
>  nptl/Makefile                                 |  1 -
>  nptl/Versions                                 |  2 -
>  nptl/pt-longjmp.c                             | 49 -------------
>  .../sysv/linux/aarch64/libpthread.abilist     |  2 -
>  .../unix/sysv/linux/alpha/libpthread.abilist  |  2 -
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  2 -
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  2 -
>  .../unix/sysv/linux/hppa/libpthread.abilist   |  2 -
>  .../unix/sysv/linux/i386/libpthread.abilist   |  2 -
>  .../unix/sysv/linux/ia64/libpthread.abilist   |  2 -
>  .../linux/m68k/coldfire/libpthread.abilist    |  2 -
>  .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 -
>  .../linux/microblaze/be/libpthread.abilist    |  2 -
>  .../linux/microblaze/le/libpthread.abilist    |  2 -
>  .../sysv/linux/mips/mips32/libpthread.abilist |  2 -
>  .../sysv/linux/mips/mips64/libpthread.abilist |  2 -
>  .../unix/sysv/linux/nios2/libpthread.abilist  |  2 -
>  .../powerpc/powerpc32/libpthread.abilist      |  4 --
>  .../powerpc/powerpc64/be/libpthread.abilist   |  4 --
>  .../powerpc/powerpc64/le/libpthread.abilist   |  2 -
>  sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c  | 61 ----------------
>  sysdeps/unix/sysv/linux/s390/Versions         |  2 +-
>  .../unix/sysv/linux/s390/libpthread-compat.c  | 25 +++++++
>  sysdeps/unix/sysv/linux/s390/pt-longjmp.c     | 33 ---------
>  .../linux/s390/s390-32/libpthread.abilist     |  5 +-
>  .../linux/s390/s390-64/libpthread.abilist     |  5 +-
>  .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 -
>  .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 -
>  .../linux/sparc/sparc32/libpthread.abilist    |  2 -
>  .../linux/sparc/sparc64/libpthread.abilist    |  2 -
>  .../sysv/linux/x86_64/64/libpthread.abilist   |  2 -
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 -
>  sysdeps/x86/nptl/pt-longjmp.c                 | 71 -------------------
>  33 files changed, 28 insertions(+), 276 deletions(-)
>  delete mode 100644 nptl/pt-longjmp.c
>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
>  create mode 100644 sysdeps/unix/sysv/linux/s390/libpthread-compat.c
>  delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c
>  delete mode 100644 sysdeps/x86/nptl/pt-longjmp.c
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 147a8d3d59..7e566675f2 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -116,7 +116,6 @@ libpthread-routines = \
>    pt-cleanup \
>    pt-fcntl \
>    pt-interp \
> -  pt-longjmp \
>    pt-raise \
>    pt-system \
>    pthread_attr_getaffinity \
> diff --git a/nptl/Versions b/nptl/Versions
> index ff6eae2566..cf4d5b677d 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -155,7 +155,6 @@ libpthread {
>      fsync;
>      ftrylockfile;
>      funlockfile;
> -    longjmp;
>      lseek;
>      msync;
>      open;
> @@ -205,7 +204,6 @@ libpthread {
>      sendmsg;
>      sendto;
>      sigaction;
> -    siglongjmp;
>      sigwait;
>      system;
>      tcdrain;
> diff --git a/nptl/pt-longjmp.c b/nptl/pt-longjmp.c
> deleted file mode 100644
> index 3f903495dc..0000000000
> --- a/nptl/pt-longjmp.c
> +++ /dev/null
> @@ -1,49 +0,0 @@
> -/* ABI compatibility for 'longjmp' and 'siglongjmp' symbols in libpthread ABI.
> -   Copyright (C) 2002-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   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 <setjmp.h>
> -#include <shlib-compat.h>
> -
> -/* libpthread once had its own longjmp (and siglongjmp alias), though there
> -   was no apparent reason for it.  There is no use in having a separate
> -   symbol in libpthread, but the historical ABI requires it.  For static
> -   linking, there is no need to provide anything here--the libc version
> -   will be linked in.  For shared library ABI compatibility, there must be
> -   longjmp and siglongjmp symbols in libpthread.so.
> -
> -   With an IFUNC resolver, it would be possible to avoid the indirection,
> -   but the IFUNC resolver might run before the __libc_longjmp symbol has
> -   been relocated, in which case the IFUNC resolver would not be able to
> -   provide the correct address.  */
> -
> -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
> -
> -static void __attribute__ ((noreturn, used))
> -longjmp_compat (jmp_buf env, int val)
> -{
> -  __libc_longjmp (env, val);
> -}
> -
> -strong_alias (longjmp_compat, longjmp_alias)
> -compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0);
> -
> -strong_alias (longjmp_alias, siglongjmp_alias)
> -compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0);
> -
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 6047fa274f..884d97efca 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.17 flockfile F
>  GLIBC_2.17 fsync F
>  GLIBC_2.17 ftrylockfile F
>  GLIBC_2.17 funlockfile F
> -GLIBC_2.17 longjmp F
>  GLIBC_2.17 lseek F
>  GLIBC_2.17 lseek64 F
>  GLIBC_2.17 msync F
> @@ -175,7 +174,6 @@ GLIBC_2.17 send F
>  GLIBC_2.17 sendmsg F
>  GLIBC_2.17 sendto F
>  GLIBC_2.17 sigaction F
> -GLIBC_2.17 siglongjmp F
>  GLIBC_2.17 sigwait F
>  GLIBC_2.17 system F
>  GLIBC_2.17 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 5f8c13bb69..e17b5183ef 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index c2e78416b8..e75c83d47f 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
>  GLIBC_2.4 fsync F
>  GLIBC_2.4 ftrylockfile F
>  GLIBC_2.4 funlockfile F
> -GLIBC_2.4 longjmp F
>  GLIBC_2.4 lseek F
>  GLIBC_2.4 lseek64 F
>  GLIBC_2.4 msync F
> @@ -204,7 +203,6 @@ GLIBC_2.4 send F
>  GLIBC_2.4 sendmsg F
>  GLIBC_2.4 sendto F
>  GLIBC_2.4 sigaction F
> -GLIBC_2.4 siglongjmp F
>  GLIBC_2.4 sigwait F
>  GLIBC_2.4 system F
>  GLIBC_2.4 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index c2e78416b8..e75c83d47f 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
>  GLIBC_2.4 fsync F
>  GLIBC_2.4 ftrylockfile F
>  GLIBC_2.4 funlockfile F
> -GLIBC_2.4 longjmp F
>  GLIBC_2.4 lseek F
>  GLIBC_2.4 lseek64 F
>  GLIBC_2.4 msync F
> @@ -204,7 +203,6 @@ GLIBC_2.4 send F
>  GLIBC_2.4 sendmsg F
>  GLIBC_2.4 sendto F
>  GLIBC_2.4 sigaction F
> -GLIBC_2.4 siglongjmp F
>  GLIBC_2.4 sigwait F
>  GLIBC_2.4 system F
>  GLIBC_2.4 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index 8d7aa63a02..740570ef37 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index ee156d6f49..0b8c5b9104 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index ab6a5cfb78..0565c43c10 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index c2e78416b8..e75c83d47f 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.4 flockfile F
>  GLIBC_2.4 fsync F
>  GLIBC_2.4 ftrylockfile F
>  GLIBC_2.4 funlockfile F
> -GLIBC_2.4 longjmp F
>  GLIBC_2.4 lseek F
>  GLIBC_2.4 lseek64 F
>  GLIBC_2.4 msync F
> @@ -204,7 +203,6 @@ GLIBC_2.4 send F
>  GLIBC_2.4 sendmsg F
>  GLIBC_2.4 sendto F
>  GLIBC_2.4 sigaction F
> -GLIBC_2.4 siglongjmp F
>  GLIBC_2.4 sigwait F
>  GLIBC_2.4 system F
>  GLIBC_2.4 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index ee156d6f49..0b8c5b9104 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 1f516569ba..3798ae24be 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.18 flockfile F
>  GLIBC_2.18 fsync F
>  GLIBC_2.18 ftrylockfile F
>  GLIBC_2.18 funlockfile F
> -GLIBC_2.18 longjmp F
>  GLIBC_2.18 lseek F
>  GLIBC_2.18 lseek64 F
>  GLIBC_2.18 msync F
> @@ -177,7 +176,6 @@ GLIBC_2.18 send F
>  GLIBC_2.18 sendmsg F
>  GLIBC_2.18 sendto F
>  GLIBC_2.18 sigaction F
> -GLIBC_2.18 siglongjmp F
>  GLIBC_2.18 sigwait F
>  GLIBC_2.18 system F
>  GLIBC_2.18 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 1f516569ba..3798ae24be 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.18 flockfile F
>  GLIBC_2.18 fsync F
>  GLIBC_2.18 ftrylockfile F
>  GLIBC_2.18 funlockfile F
> -GLIBC_2.18 longjmp F
>  GLIBC_2.18 lseek F
>  GLIBC_2.18 lseek64 F
>  GLIBC_2.18 msync F
> @@ -177,7 +176,6 @@ GLIBC_2.18 send F
>  GLIBC_2.18 sendmsg F
>  GLIBC_2.18 sendto F
>  GLIBC_2.18 sigaction F
> -GLIBC_2.18 siglongjmp F
>  GLIBC_2.18 sigwait F
>  GLIBC_2.18 system F
>  GLIBC_2.18 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 903f49957f..79da59eb81 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 903f49957f..79da59eb81 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index cd41c7d42b..9dadbc85cc 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.21 flockfile F
>  GLIBC_2.21 fsync F
>  GLIBC_2.21 ftrylockfile F
>  GLIBC_2.21 funlockfile F
> -GLIBC_2.21 longjmp F
>  GLIBC_2.21 lseek F
>  GLIBC_2.21 lseek64 F
>  GLIBC_2.21 msync F
> @@ -177,7 +176,6 @@ GLIBC_2.21 send F
>  GLIBC_2.21 sendmsg F
>  GLIBC_2.21 sendto F
>  GLIBC_2.21 sigaction F
> -GLIBC_2.21 siglongjmp F
>  GLIBC_2.21 sigwait F
>  GLIBC_2.21 system F
>  GLIBC_2.21 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index 589a865796..c852fcc147 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> @@ -209,11 +207,9 @@ GLIBC_2.3.3 pthread_condattr_setclock F
>  GLIBC_2.3.3 pthread_setaffinity_np F
>  GLIBC_2.3.3 pthread_timedjoin_np F
>  GLIBC_2.3.3 pthread_tryjoin_np F
> -GLIBC_2.3.4 longjmp F
>  GLIBC_2.3.4 pthread_attr_getaffinity_np F
>  GLIBC_2.3.4 pthread_setaffinity_np F
>  GLIBC_2.3.4 pthread_setschedprio F
> -GLIBC_2.3.4 siglongjmp F
>  GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 7c1553be29..b7d0c8b743 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -74,7 +74,6 @@ GLIBC_2.3 flockfile F
>  GLIBC_2.3 fsync F
>  GLIBC_2.3 ftrylockfile F
>  GLIBC_2.3 funlockfile F
> -GLIBC_2.3 longjmp F
>  GLIBC_2.3 lseek F
>  GLIBC_2.3 lseek64 F
>  GLIBC_2.3 msync F
> @@ -177,7 +176,6 @@ GLIBC_2.3 send F
>  GLIBC_2.3 sendmsg F
>  GLIBC_2.3 sendto F
>  GLIBC_2.3 sigaction F
> -GLIBC_2.3 siglongjmp F
>  GLIBC_2.3 sigwait F
>  GLIBC_2.3 system F
>  GLIBC_2.3 tcdrain F
> @@ -198,11 +196,9 @@ GLIBC_2.3.3 pthread_condattr_setclock F
>  GLIBC_2.3.3 pthread_setaffinity_np F
>  GLIBC_2.3.3 pthread_timedjoin_np F
>  GLIBC_2.3.3 pthread_tryjoin_np F
> -GLIBC_2.3.4 longjmp F
>  GLIBC_2.3.4 pthread_attr_getaffinity_np F
>  GLIBC_2.3.4 pthread_setaffinity_np F
>  GLIBC_2.3.4 pthread_setschedprio F
> -GLIBC_2.3.4 siglongjmp F
>  GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index 6047fa274f..884d97efca 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.17 flockfile F
>  GLIBC_2.17 fsync F
>  GLIBC_2.17 ftrylockfile F
>  GLIBC_2.17 funlockfile F
> -GLIBC_2.17 longjmp F
>  GLIBC_2.17 lseek F
>  GLIBC_2.17 lseek64 F
>  GLIBC_2.17 msync F
> @@ -175,7 +174,6 @@ GLIBC_2.17 send F
>  GLIBC_2.17 sendmsg F
>  GLIBC_2.17 sendto F
>  GLIBC_2.17 sigaction F
> -GLIBC_2.17 siglongjmp F
>  GLIBC_2.17 sigwait F
>  GLIBC_2.17 system F
>  GLIBC_2.17 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c b/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
> deleted file mode 100644
> index ed6b2a5db1..0000000000
> --- a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/* Copyright (C) 2002-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   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 <setjmp.h>
> -#include <stdlib.h>
> -#include <bits/wordsize.h>
> -#include "pthreadP.h"
> -#include  <shlib-compat.h>
> -#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3_4)
> -
> -/* These functions are not declared anywhere since they shouldn't be
> -   used at another place but here.  */
> -extern void __novmx__libc_siglongjmp (sigjmp_buf env, int val)
> -     __attribute__ ((noreturn));
> -extern void __novmx__libc_longjmp (sigjmp_buf env, int val)
> -     __attribute__ ((noreturn));
> -
> -
> -void __novmx_siglongjmp (sigjmp_buf env, int val)
> -{
> -  __novmx__libc_siglongjmp (env, val);
> -}
> -
> -void __novmx_longjmp (jmp_buf env, int val)
> -{
> -  __novmx__libc_longjmp (env, val);
> -}
> -
> -compat_symbol (libpthread, __novmx_longjmp, longjmp, GLIBC_2_0);
> -compat_symbol (libpthread, __novmx_siglongjmp, siglongjmp, GLIBC_2_0);
> -#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4))  */
> -
> -void
> -__vmx_longjmp (jmp_buf env, int val)
> -{
> -  __libc_longjmp (env, val);
> -}
> -
> -void
> -__vmx_siglongjmp (jmp_buf env, int val)
> -{
> -  __libc_siglongjmp (env, val);
> -}
> -
> -versioned_symbol (libpthread, __vmx_longjmp, longjmp, GLIBC_2_3_4);
> -versioned_symbol (libpthread, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
> diff --git a/sysdeps/unix/sysv/linux/s390/Versions b/sysdeps/unix/sysv/linux/s390/Versions
> index 55518a7e5f..548397fcff 100644
> --- a/sysdeps/unix/sysv/linux/s390/Versions
> +++ b/sysdeps/unix/sysv/linux/s390/Versions
> @@ -11,6 +11,6 @@ libc {
>  
>  libpthread {
>    GLIBC_2.19 {
> -    longjmp; siglongjmp;
> +    __libpthread_version_placeholder;
>    }
>  }
> diff --git a/sysdeps/unix/sysv/linux/s390/libpthread-compat.c b/sysdeps/unix/sysv/linux/s390/libpthread-compat.c
> new file mode 100644
> index 0000000000..e8a7b6db5e
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/s390/libpthread-compat.c
> @@ -0,0 +1,25 @@
> +/* Placeholder definitions to pull in removed symbol versions.  s390 version.
> +   Copyright (C) 2019-2021 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <nptl/libpthread-compat.c>
> +
> +/* GLIBC_2.19 was used by a longjmp compatibility symbol.  */
> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))
> +compat_symbol_unique (libpthread,
> +                      __libpthread_version_placeholder, GLIBC_2_19);
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
> deleted file mode 100644
> index 6e97ed538b..0000000000
> --- a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -/* Copyright (C) 2014-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.
> -
> -   Versioned copy of nptl/pt-longjmp.c modified for versioning
> -   the reverted jmpbuf extension.  */
> -
> -#include  <shlib-compat.h>
> -
> -#include <nptl/pt-longjmp.c>
> -
> -#if SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
> -/* In glibc release 2.19 new versions of longjmp-functions were introduced,
> -   but were reverted before 2.20. Thus both versions are the same function.  */
> -
> -strong_alias (longjmp_alias, __v2longjmp)
> -compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
> -strong_alias (siglongjmp_alias, __v2siglongjmp)
> -compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
> -#endif /* SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))  */
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index 7aa725ccae..518a08ad1e 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> @@ -130,8 +128,7 @@ GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
>  GLIBC_2.18 pthread_getattr_default_np F
>  GLIBC_2.18 pthread_setattr_default_np F
> -GLIBC_2.19 longjmp F
> -GLIBC_2.19 siglongjmp F
> +GLIBC_2.19 __libpthread_version_placeholder F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 25da7ea8dc..c21f7cfea6 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -5,8 +5,7 @@ GLIBC_2.12 pthread_mutexattr_setrobust F
>  GLIBC_2.12 pthread_setname_np F
>  GLIBC_2.18 pthread_getattr_default_np F
>  GLIBC_2.18 pthread_setattr_default_np F
> -GLIBC_2.19 longjmp F
> -GLIBC_2.19 siglongjmp F
> +GLIBC_2.19 __libpthread_version_placeholder F
>  GLIBC_2.2 _IO_flockfile F
>  GLIBC_2.2 _IO_ftrylockfile F
>  GLIBC_2.2 _IO_funlockfile F
> @@ -55,7 +54,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -159,7 +157,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index 8d7aa63a02..740570ef37 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index 8d7aa63a02..740570ef37 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 5f8c13bb69..e17b5183ef 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -32,7 +32,6 @@ GLIBC_2.0 flockfile F
>  GLIBC_2.0 fsync F
>  GLIBC_2.0 ftrylockfile F
>  GLIBC_2.0 funlockfile F
> -GLIBC_2.0 longjmp F
>  GLIBC_2.0 lseek F
>  GLIBC_2.0 msync F
>  GLIBC_2.0 open F
> @@ -81,7 +80,6 @@ GLIBC_2.0 send F
>  GLIBC_2.0 sendmsg F
>  GLIBC_2.0 sendto F
>  GLIBC_2.0 sigaction F
> -GLIBC_2.0 siglongjmp F
>  GLIBC_2.0 sigwait F
>  GLIBC_2.0 system F
>  GLIBC_2.0 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index ab6a5cfb78..0565c43c10 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2 flockfile F
>  GLIBC_2.2 fsync F
>  GLIBC_2.2 ftrylockfile F
>  GLIBC_2.2 funlockfile F
> -GLIBC_2.2 longjmp F
>  GLIBC_2.2 lseek F
>  GLIBC_2.2 lseek64 F
>  GLIBC_2.2 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2 send F
>  GLIBC_2.2 sendmsg F
>  GLIBC_2.2 sendto F
>  GLIBC_2.2 sigaction F
> -GLIBC_2.2 siglongjmp F
>  GLIBC_2.2 sigwait F
>  GLIBC_2.2 system F
>  GLIBC_2.2 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index 301c0817b8..f1255816b1 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -53,7 +53,6 @@ GLIBC_2.2.5 flockfile F
>  GLIBC_2.2.5 fsync F
>  GLIBC_2.2.5 ftrylockfile F
>  GLIBC_2.2.5 funlockfile F
> -GLIBC_2.2.5 longjmp F
>  GLIBC_2.2.5 lseek F
>  GLIBC_2.2.5 lseek64 F
>  GLIBC_2.2.5 msync F
> @@ -157,7 +156,6 @@ GLIBC_2.2.5 send F
>  GLIBC_2.2.5 sendmsg F
>  GLIBC_2.2.5 sendto F
>  GLIBC_2.2.5 sigaction F
> -GLIBC_2.2.5 siglongjmp F
>  GLIBC_2.2.5 sigwait F
>  GLIBC_2.2.5 system F
>  GLIBC_2.2.5 tcdrain F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index 31322dfabb..fdaff69ea6 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -51,7 +51,6 @@ GLIBC_2.16 flockfile F
>  GLIBC_2.16 fsync F
>  GLIBC_2.16 ftrylockfile F
>  GLIBC_2.16 funlockfile F
> -GLIBC_2.16 longjmp F
>  GLIBC_2.16 lseek F
>  GLIBC_2.16 lseek64 F
>  GLIBC_2.16 msync F
> @@ -175,7 +174,6 @@ GLIBC_2.16 send F
>  GLIBC_2.16 sendmsg F
>  GLIBC_2.16 sendto F
>  GLIBC_2.16 sigaction F
> -GLIBC_2.16 siglongjmp F
>  GLIBC_2.16 sigwait F
>  GLIBC_2.16 system F
>  GLIBC_2.16 tcdrain F
> diff --git a/sysdeps/x86/nptl/pt-longjmp.c b/sysdeps/x86/nptl/pt-longjmp.c
> deleted file mode 100644
> index 77b32667ee..0000000000
> --- a/sysdeps/x86/nptl/pt-longjmp.c
> +++ /dev/null
> @@ -1,71 +0,0 @@
> -/* ABI compatibility for 'longjmp' and 'siglongjmp' symbols in libpthread ABI.
> -   X86 version.
> -   Copyright (C) 1918-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <pthreadP.h>
> -#include <jmp_buf-ssp.h>
> -
> -#ifdef __x86_64__
> -# define SHADOW_STACK_POINTER_SIZE 8
> -#else
> -# define SHADOW_STACK_POINTER_SIZE 4
> -#endif
> -
> -/* Assert that the priv field in struct pthread_unwind_buf has space
> -   to store shadow stack pointer.  */
> -_Static_assert ((offsetof (struct pthread_unwind_buf, priv)
> -		 <= SHADOW_STACK_POINTER_OFFSET)
> -		&& ((offsetof (struct pthread_unwind_buf, priv)
> -		     + sizeof (((struct pthread_unwind_buf *) 0)->priv))
> -		    >= (SHADOW_STACK_POINTER_OFFSET
> -			+ SHADOW_STACK_POINTER_SIZE)),
> -		"Shadow stack pointer is not within private storage "
> -		"of pthread_unwind_buf.");
> -
> -#include <shlib-compat.h>
> -
> -/* libpthread once had its own longjmp (and siglongjmp alias), though there
> -   was no apparent reason for it.  There is no use in having a separate
> -   symbol in libpthread, but the historical ABI requires it.  For static
> -   linking, there is no need to provide anything here--the libc version
> -   will be linked in.  For shared library ABI compatibility, there must be
> -   longjmp and siglongjmp symbols in libpthread.so.
> -
> -   With an IFUNC resolver, it would be possible to avoid the indirection,
> -   but the IFUNC resolver might run before the __libc_longjmp symbol has
> -   been relocated, in which case the IFUNC resolver would not be able to
> -   provide the correct address.  */
> -
> -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
> -
> -static void __attribute__ ((noreturn, used))
> -longjmp_compat (jmp_buf env, int val)
> -{
> -  /* NB: We call __libc_siglongjmp,  instead of __libc_longjmp, since
> -     __libc_longjmp is a private interface for cancellation which
> -     doesn't restore shadow stack register.  */
> -  __libc_siglongjmp (env, val);
> -}
> -
> -strong_alias (longjmp_compat, longjmp_alias)
> -compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0);
> -
> -strong_alias (longjmp_alias, siglongjmp_alias)
> -compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0);
> -
> -#endif
> 

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

* Re: [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA
  2021-03-12 17:49 ` [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA Florian Weimer
@ 2021-03-16 14:14   ` Adhemerval Zanella
  0 siblings, 0 replies; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 14:14 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> It is not actually used by the legacy unwinder linked into
> libc.so, and it conflicts with the unwind-link functionality
> in libpthread.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/generic/unwind-dw2.c | 8 --------
>  1 file changed, 8 deletions(-)
> 
> diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c
> index 618fa8885f..da971279be 100644
> --- a/sysdeps/generic/unwind-dw2.c
> +++ b/sysdeps/generic/unwind-dw2.c
> @@ -177,14 +177,6 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index)
>    return * (_Unwind_Word *) context->reg[index];
>  }
>  
> -/* Get the value of the CFA as saved in CONTEXT.  */
> -
> -_Unwind_Word
> -_Unwind_GetCFA (struct _Unwind_Context *context)
> -{
> -  return (_Unwind_Ptr) context->cfa;
> -}
> -
>  /* Overwrite the saved value for register REG in CONTEXT with VAL.  */
>  
>  inline void
> 

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

* Re: [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc
  2021-03-12 17:49 ` [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
@ 2021-03-16 14:35   ` Adhemerval Zanella
  0 siblings, 0 replies; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 14:35 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
> This internal symbol is used as part of the longjmp implementation.
> Rename the file from nptl/pt-cleanup.c to nptl/pthread_cleanup_upto.c
> so that the pt-* files remain restricted to libpthread.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  nptl/Makefile                                 | 2 +-
>  nptl/Versions                                 | 1 +
>  nptl/nptl-init.c                              | 1 -
>  nptl/pthreadP.h                               | 4 +---
>  nptl/{pt-cleanup.c => pthread_cleanup_upto.c} | 2 +-
>  sysdeps/nptl/jmp-unwind.c                     | 8 ++------
>  sysdeps/nptl/pthread-functions.h              | 1 -
>  sysdeps/unix/sysv/linux/s390/jmp-unwind.c     | 7 ++-----
>  8 files changed, 8 insertions(+), 18 deletions(-)
>  rename nptl/{pt-cleanup.c => pthread_cleanup_upto.c} (98%)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 7e566675f2..8847c4dd49 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -66,6 +66,7 @@ routines = \
>    pthread_attr_setscope \
>    pthread_attr_setsigmask \
>    pthread_attr_setsigmask_internal \
> +  pthread_cleanup_upto \
>    pthread_cond_destroy \
>    pthread_cond_init \
>    pthread_condattr_destroy \
> @@ -113,7 +114,6 @@ libpthread-routines = \
>    old_pthread_cond_timedwait \
>    old_pthread_cond_wait \
>    pt-allocrtsig \
> -  pt-cleanup \
>    pt-fcntl \
>    pt-interp \
>    pt-raise \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index cf4d5b677d..8fa0d178db 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -109,6 +109,7 @@ libc {
>      __pthread_attr_setsigmask_internal;
>      __pthread_cleanup_pop;
>      __pthread_cleanup_push;
> +    __pthread_cleanup_upto;
>      __pthread_cond_destroy; # Used by the C11 threads.
>      __pthread_cond_init; # Used by the C11 threads.
>      __pthread_force_elision;

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index c2b563cc68..41527dcad1 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -88,7 +88,6 @@ static const struct pthread_functions pthread_functions =
>      .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
>      .ptr___pthread_setcancelstate = __pthread_setcancelstate,
>      .ptr_pthread_setcanceltype = __pthread_setcanceltype,
> -    .ptr___pthread_cleanup_upto = __pthread_cleanup_upto,
>      .ptr___pthread_once = __pthread_once,
>      .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
>      .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 781bc65c1c..8f3d2cc8c9 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -332,9 +332,7 @@ extern int __make_stacks_executable (void **stack_endp) attribute_hidden;
>  
>  /* longjmp handling.  */
>  extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
> -#if IS_IN (libpthread)
> -hidden_proto (__pthread_cleanup_upto)
> -#endif
> +libc_hidden_proto (__pthread_cleanup_upto)
>  
>  
>  /* Functions with versioned interfaces.  */

Ok.

> diff --git a/nptl/pt-cleanup.c b/nptl/pthread_cleanup_upto.c
> similarity index 98%
> rename from nptl/pt-cleanup.c
> rename to nptl/pthread_cleanup_upto.c

Ok.

> index 541533230d..89da3e5229 100644
> --- a/nptl/pt-cleanup.c
> +++ b/nptl/pthread_cleanup_upto.c
> @@ -59,4 +59,4 @@ __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
>  
>    THREAD_SETMEM (self, cleanup, cbuf);
>  }
> -hidden_def (__pthread_cleanup_upto)
> +libc_hidden_def (__pthread_cleanup_upto)

Ok.

> diff --git a/sysdeps/nptl/jmp-unwind.c b/sysdeps/nptl/jmp-unwind.c
> index a79c792e82..96c4862c74 100644
> --- a/sysdeps/nptl/jmp-unwind.c
> +++ b/sysdeps/nptl/jmp-unwind.c
> @@ -19,14 +19,10 @@
>  #include <setjmp.h>
>  #include <stddef.h>
>  #include <libc-lock.h>
> -
> -extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
> -#pragma weak __pthread_cleanup_upto
> -
> +#include <nptl/pthreadP.h>
>  
>  void
>  _longjmp_unwind (jmp_buf env, int val)
>  {
> -  __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf,
> -					    CURRENT_STACK_FRAME), 0);
> +  __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME);
>  }

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 4268084b66..1bbe609598 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -49,7 +49,6 @@ struct pthread_functions
>    int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
>    int (*ptr___pthread_setcancelstate) (int, int *);
>    int (*ptr_pthread_setcanceltype) (int, int *);
> -  void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *);
>    int (*ptr___pthread_once) (pthread_once_t *, void (*) (void));
>    int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c b/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
> index 2bdde57ec7..8e0399a3e9 100644
> --- a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
> +++ b/sysdeps/unix/sysv/linux/s390/jmp-unwind.c
> @@ -19,15 +19,12 @@
>  #include <setjmp.h>
>  #include <stddef.h>
>  #include <libc-lock.h>
> -
> -extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
> -#pragma weak __pthread_cleanup_upto
> -
> +#include <nptl/pthreadP.h>
>  
>  void
>  _longjmp_unwind (jmp_buf env, int val)
>  {
>    char local_var;
>  
> -  __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf, &local_var), 0);
> +  __pthread_cleanup_upto (env->__jmpbuf, &local_var);
>  }
> 


Ok.

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

* Re: [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread
  2021-03-16 14:13   ` Adhemerval Zanella
@ 2021-03-16 14:39     ` Florian Weimer
  0 siblings, 0 replies; 36+ messages in thread
From: Florian Weimer @ 2021-03-16 14:39 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 12/03/2021 14:49, Florian Weimer via Libc-alpha wrote:
>> The definitions in libc are sufficient, the forwarders are no longer
>> needed.
>> 
>> The symbols have been moved using scripts/move-symbol-to-libc.py.
>> s390-linux-gnu and s390x-linux-gnu need a new version placeholder
>> to keep the GLIBC_2.19 symbol version in libpthread.
>> 
>> Tested on i386-linux-gnu, powerpc64le-linux-gnu, s390x-linux-gnu,
>> x86_64-linux-gnu.  Built with build-many-glibcs.py.
>
> Patch looks good, I was working on a similar one as well.  The only
> suggestion is to keep the x86 _Static_assert regarding the priv field 
> in struct pthread_unwind_buf has space to store shadow stack pointer.
>
> I have done it by adding a new x86 longjmp implementation:
>
> diff --git a/sysdeps/unix/sysv/linux/x86/longjmp.c b/sysdeps/unix/sysv/linux/x86/longjmp.c
> new file mode 100644
> index 0000000000..104592fd48
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/x86/longjmp.c
> @@ -0,0 +1,39 @@
> +/* __libc_siglongjmp for Linux/x86
> +   Copyright (C) 2021 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <sysdeps/x86/longjmp.c>
> +
> +#include <nptl/pthreadP.h>
> +#include <jmp_buf-ssp.h>
> +
> +#ifdef __x86_64__
> +# define SHADOW_STACK_POINTER_SIZE 8
> +#else
> +# define SHADOW_STACK_POINTER_SIZE 4
> +#endif
> +
> +/* Assert that the priv field in struct pthread_unwind_buf has space
> +   to store shadow stack pointer.  */
> +_Static_assert ((offsetof (struct pthread_unwind_buf, priv)
> +                <= SHADOW_STACK_POINTER_OFFSET)
> +               && ((offsetof (struct pthread_unwind_buf, priv)
> +                    + sizeof (((struct pthread_unwind_buf *) 0)->priv))
> +                   >= (SHADOW_STACK_POINTER_OFFSET
> +                       + SHADOW_STACK_POINTER_SIZE)),
> +               "Shadow stack pointer is not within private storage "
> +               "of pthread_unwind_buf.");

Thanks, I've merged this into the series.

Florian


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

* Re: [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols
  2021-03-16 14:09   ` Adhemerval Zanella
@ 2021-03-16 14:45     ` Florian Weimer
  2021-03-16 18:14       ` Adhemerval Zanella
  0 siblings, 1 reply; 36+ messages in thread
From: Florian Weimer @ 2021-03-16 14:45 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> diff --git a/nptl/Versions b/nptl/Versions
>> index e3eb686a04..ff6eae2566 100644
>> --- a/nptl/Versions
>> +++ b/nptl/Versions
>> @@ -1,5 +1,9 @@
>>  libc {
>>    GLIBC_2.0 {
>> +    _pthread_cleanup_pop;
>> +    _pthread_cleanup_pop_restore;
>> +    _pthread_cleanup_push;
>> +    _pthread_cleanup_push_defer;
>>      pthread_attr_destroy;
>>      pthread_attr_getdetachstate;
>>      pthread_attr_getinheritsched;
>> @@ -103,6 +107,8 @@ libc {
>>      __pthread_attr_init;
>>      __pthread_attr_setaffinity_np;
>>      __pthread_attr_setsigmask_internal;
>> +    __pthread_cleanup_pop;
>> +    __pthread_cleanup_push;
>>      __pthread_cond_destroy; # Used by the C11 threads.
>>      __pthread_cond_init; # Used by the C11 threads.
>>      __pthread_force_elision;
>
> Why are you exporting the double underscore __pthread_cleanup_[pop,push]
> on older versions here?

More patch context:

   GLIBC_PRIVATE {
     __futex_abstimed_wait64;
     __futex_abstimed_wait_cancelable64;
     __libc_alloca_cutoff;
     __libc_allocate_rtsig_private;
     __libc_cleanup_pop_restore;
     __libc_cleanup_push_defer;
     __libc_current_sigrtmax_private;
     __libc_current_sigrtmin_private;
     __libc_dl_error_tsd;
     __libc_pthread_init;
     __lll_clocklock_elision;
     __lll_lock_elision;
     __lll_lock_wait;
     __lll_lock_wait_private;
     __lll_trylock_elision;
     __lll_unlock_elision;
     __pthread_attr_copy;
     __pthread_attr_destroy;
     __pthread_attr_init;
     __pthread_attr_setaffinity_np;
     __pthread_attr_setsigmask_internal;
+    __pthread_cleanup_pop;
+    __pthread_cleanup_push;
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
     __pthread_getattr_default_np;
   }

I've added this to the commit message:

__pthread_cleanup_pop and __pthread_cleanup_push are added as
GLIBC_PRIVATE symbols because they are also used internally, for
glibc's own cancellation handling.

Thanks,
Florian


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

* Re: [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols
  2021-03-16 14:45     ` Florian Weimer
@ 2021-03-16 18:14       ` Adhemerval Zanella
  0 siblings, 0 replies; 36+ messages in thread
From: Adhemerval Zanella @ 2021-03-16 18:14 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 16/03/2021 11:45, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> diff --git a/nptl/Versions b/nptl/Versions
>>> index e3eb686a04..ff6eae2566 100644
>>> --- a/nptl/Versions
>>> +++ b/nptl/Versions
>>> @@ -1,5 +1,9 @@
>>>  libc {
>>>    GLIBC_2.0 {
>>> +    _pthread_cleanup_pop;
>>> +    _pthread_cleanup_pop_restore;
>>> +    _pthread_cleanup_push;
>>> +    _pthread_cleanup_push_defer;
>>>      pthread_attr_destroy;
>>>      pthread_attr_getdetachstate;
>>>      pthread_attr_getinheritsched;
>>> @@ -103,6 +107,8 @@ libc {
>>>      __pthread_attr_init;
>>>      __pthread_attr_setaffinity_np;
>>>      __pthread_attr_setsigmask_internal;
>>> +    __pthread_cleanup_pop;
>>> +    __pthread_cleanup_push;
>>>      __pthread_cond_destroy; # Used by the C11 threads.
>>>      __pthread_cond_init; # Used by the C11 threads.
>>>      __pthread_force_elision;
>>
>> Why are you exporting the double underscore __pthread_cleanup_[pop,push]
>> on older versions here?
> 
> More patch context:
> 
>    GLIBC_PRIVATE {
>      __futex_abstimed_wait64;
>      __futex_abstimed_wait_cancelable64;
>      __libc_alloca_cutoff;
>      __libc_allocate_rtsig_private;
>      __libc_cleanup_pop_restore;
>      __libc_cleanup_push_defer;
>      __libc_current_sigrtmax_private;
>      __libc_current_sigrtmin_private;
>      __libc_dl_error_tsd;
>      __libc_pthread_init;
>      __lll_clocklock_elision;
>      __lll_lock_elision;
>      __lll_lock_wait;
>      __lll_lock_wait_private;
>      __lll_trylock_elision;
>      __lll_unlock_elision;
>      __pthread_attr_copy;
>      __pthread_attr_destroy;
>      __pthread_attr_init;
>      __pthread_attr_setaffinity_np;
>      __pthread_attr_setsigmask_internal;
> +    __pthread_cleanup_pop;
> +    __pthread_cleanup_push;
>      __pthread_cond_destroy; # Used by the C11 threads.
>      __pthread_cond_init; # Used by the C11 threads.
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
>    }
> 
> I've added this to the commit message:
> 
> __pthread_cleanup_pop and __pthread_cleanup_push are added as
> GLIBC_PRIVATE symbols because they are also used internally, for
> glibc's own cancellation handling.


Ack I missed this.

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

end of thread, other threads:[~2021-03-16 18:14 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-12 17:48 [PATCH 00/18] Repost of pending libpthread removal patches Florian Weimer
2021-03-12 17:48 ` [PATCH 01/18] nptl: Move pthread_mutex_consistent into libc Florian Weimer
2021-03-15 19:30   ` Adhemerval Zanella
2021-03-16  5:42     ` Florian Weimer
2021-03-16 13:49       ` Adhemerval Zanella
2021-03-16 13:53         ` Florian Weimer
2021-03-16 14:07           ` Adhemerval Zanella
2021-03-12 17:49 ` [PATCH 02/18] nptl: Move __pthread_cleanup_routine " Florian Weimer
2021-03-15 19:53   ` Adhemerval Zanella
2021-03-16  7:09     ` Florian Weimer
2021-03-12 17:49 ` [PATCH 03/18] nptl: Move legacy unwinding implementation " Florian Weimer
2021-03-15 20:02   ` Adhemerval Zanella
2021-03-16  7:03     ` Florian Weimer
2021-03-12 17:49 ` [PATCH 04/18] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
2021-03-16 14:09   ` Adhemerval Zanella
2021-03-16 14:45     ` Florian Weimer
2021-03-16 18:14       ` Adhemerval Zanella
2021-03-12 17:49 ` [PATCH 05/18] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
2021-03-16 14:13   ` Adhemerval Zanella
2021-03-16 14:39     ` Florian Weimer
2021-03-12 17:49 ` [PATCH 06/18] Legacy unwinder: Remove definition of _Unwind_GetCFA Florian Weimer
2021-03-16 14:14   ` Adhemerval Zanella
2021-03-12 17:49 ` [PATCH 07/18] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
2021-03-16 14:35   ` Adhemerval Zanella
2021-03-12 17:49 ` [PATCH 08/18] nptl: Move pthread_once and __pthread_once " Florian Weimer
2021-03-15 19:24   ` Florian Weimer
2021-03-12 17:49 ` [PATCH 09/18] nptl: Move __pthread_unwind_next " Florian Weimer
2021-03-12 17:49 ` [PATCH 10/18] csu: Move calling main out of __libc_start_main_impl Florian Weimer
2021-03-12 17:49 ` [PATCH 11/18] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
2021-03-12 17:49 ` [PATCH 12/18] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
2021-03-12 17:50 ` [PATCH 13/18] nptl: Move __pthread_keys global variable into libc Florian Weimer
2021-03-12 17:50 ` [PATCH 14/18] nptl: Move __nptl_deallocate_tsd " Florian Weimer
2021-03-12 17:50 ` [PATCH 15/18] nptl: Move pthread_exit " Florian Weimer
2021-03-12 17:50 ` [PATCH 16/18] nptl: Move pthread_setcancelstate " Florian Weimer
2021-03-12 17:50 ` [PATCH 17/18] nptl: Move pthread_setcanceltype " Florian Weimer
2021-03-12 17:50 ` [PATCH 18/18] nptl: Invoke the set_robust_list system call directly in fork 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).