public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone
@ 2021-03-16 17:27 Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc Florian Weimer
                   ` (38 more replies)
  0 siblings, 39 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 UTC (permalink / raw)
  To: libc-alpha

This series gets us to the point where no libc → libpthread function
forwarding exists anymore.  It has been tested on i686-linux-gnu and
x86_64-linux-gnu, and built by build-many-glibcs.py.  (A full bootstrap
cycle is still under way.)

I incorporated Adhemerval feedback and his suggestion for keeping a
static assert.

The TSD changes sort-of depend on the dlerror cleanup I originally
posted separately, so I'm including them here as well.

The _Unwind_GetCFA cleanup is gone because I've pushed that separately.

The additional patches are basically more of the same, except that I had
to move some of the libpthread early initialization into ld.so, so that
previously impossible scenarios (like calling pthread_key_create without
linking in libpthread) become supported.  This series does not add tests
to cover those scenarios.  Similarly, I have to initialize more libc
configuration things from __libc_early_init because those variables live
in libc, not ld.so.

I had to remove the x86 low-level lock optimization, and redid it at the
mutex level.  This way, it now works even if libpthread is linked in.
This was a change I wanted to make eventually anyway, but it turns out
the libpthread move invalidated the optimization (similar to the generic
optimization we had for private mutexes), so I had to do something about
it.

I moved the mutex and conditional variable functions in two blocks
because of the many interdependencies, and the potential breakage from
real/stub implementation mismatches.

Obviously, a lot of work still remains to do, but I believe at this
stage, we are already in a much better shape when it comes to late
loading of libpthread because we no longer use any stub implementations
that produce state the real implementations cannot consume.

Thanks,
Florian

Adhemerval Zanella (1):
  x86: Restore compile-time check for shadow stack pointer in longjmp

Florian Weimer (36):
  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
  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
  dlfcn: Failures after dlmopen should not terminate process [BZ #24772]
  dlfcn: dlerror needs to call free from the base namespace [BZ #24773]
  Remove pthread_key_create-related internals from libc-lock.h
  elf: Introduce __tls_init_tp for second-phase TCB initialization
  nptl: Move part of TCB initialization from libpthread to __tls_init_tp
  nptl: Move pthread_key_create, __pthread_key_create into libc
  nptl: Move pthread_getspecific, __pthread_getspecific into libc
  nptl: Move pthread_setspecific, __pthread_setspecific into libc
  nptl: Move pthread_key_delete into libc.
  nptl: Move rwlock functions with forwarders into libc
  nptl: Move the internal thread priority protection symbols into libc
  pthread: Introduce __pthread_early_init
  nptl: Move internal symbol __mutex_aconf into libc
  nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded
    optimization
  x86: Remove low-level lock optimization
  nptl: Move core mutex functions into libc
  nptl: Move core condition variable functions into libc
  nptl: Move setxid broadcast implementation into libc
  nptl: Remove remnants of the libc/libpthread forwarder interface

 NEWS                                          |   4 +-
 csu/libc-start.c                              |  74 +----
 csu/libc-tls.c                                |   8 +-
 dlfcn/Makefile                                |   3 +-
 dlfcn/Versions                                |   6 +-
 dlfcn/dlerror.c                               | 297 ++++++++----------
 dlfcn/dlerror.h                               |  74 +++++
 dlfcn/libc_dlerror_result.c                   |  39 +++
 elf/Makefile                                  |  12 +-
 elf/dl-error-skeleton.c                       |  12 +
 elf/dl-exception.c                            |  11 +
 elf/dl-tls_init_tp.c                          |  24 ++
 elf/libc_early_init.c                         |   3 +
 elf/rtld.c                                    |  16 +-
 elf/tst-dlmopen-dlerror-mod.c                 |  58 ++++
 elf/tst-dlmopen-dlerror.c                     |  49 +++
 include/dlfcn.h                               |   2 -
 include/setjmp.h                              |   4 +-
 libio/iopopen.c                               |   5 +-
 malloc/set-freeres.c                          |  10 +-
 malloc/thread-freeres.c                       |   2 +
 misc/error.c                                  |  19 +-
 nptl/Makefile                                 |  92 +++---
 nptl/Versions                                 | 138 +++++---
 nptl/allocatestack.c                          | 209 ------------
 nptl/cleanup_compat.c                         |  16 +-
 nptl/cleanup_defer_compat.c                   |  72 +----
 nptl/cleanup_routine.c                        |  12 +-
 nptl/forward.c                                | 131 --------
 nptl/libc-cleanup.c                           |  64 +++-
 nptl/libc_pthread_init.c                      |  36 +--
 nptl/libpthread-compat.c                      |   5 +
 nptl/nptl-init.c                              | 152 +--------
 nptl/nptl_deallocate_tsd.c                    | 112 +++++++
 nptl/nptl_nthreads.c                          |  23 ++
 nptl/nptl_setxid.c                            | 279 ++++++++++++++++
 nptl/old_pthread_cond_broadcast.c             |   4 +-
 nptl/old_pthread_cond_signal.c                |   4 +-
 nptl/old_pthread_cond_timedwait.c             |   4 +-
 nptl/old_pthread_cond_wait.c                  |   4 +-
 nptl/pt-longjmp.c                             |  49 ---
 nptl/pthreadP.h                               | 106 ++++---
 nptl/pthread_cancel.c                         |  10 +-
 nptl/{pt-cleanup.c => pthread_cleanup_upto.c} |   2 +-
 nptl/pthread_cond_broadcast.c                 |  11 +-
 nptl/pthread_cond_signal.c                    |   9 +-
 nptl/pthread_cond_wait.c                      |  66 ++--
 nptl/pthread_create.c                         | 102 +-----
 nptl/pthread_exit.c                           |  16 +-
 nptl/pthread_getspecific.c                    |  22 +-
 nptl/pthread_key_create.c                     |  21 +-
 nptl/pthread_key_delete.c                     |  17 +-
 nptl/pthread_keys.c                           |  24 ++
 nptl/pthread_mutex_cond_lock.c                |   4 +-
 nptl/pthread_mutex_conf.c                     |   1 +
 nptl/pthread_mutex_consistent.c               |  22 +-
 nptl/pthread_mutex_destroy.c                  |  18 +-
 nptl/pthread_mutex_init.c                     |  18 +-
 nptl/pthread_mutex_lock.c                     |  47 ++-
 nptl/pthread_mutex_unlock.c                   |  36 ++-
 nptl/pthread_once.c                           |  21 +-
 nptl/pthread_rwlock_rdlock.c                  |  22 +-
 nptl/pthread_rwlock_unlock.c                  |  22 +-
 nptl/pthread_rwlock_wrlock.c                  |  22 +-
 nptl/pthread_setcancelstate.c                 |   6 +-
 nptl/pthread_setcanceltype.c                  |   3 +-
 nptl/pthread_setspecific.c                    |  22 +-
 nptl/tpp.c                                    |   6 +-
 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/arm/pt-arm-unwind-resume.S            |  20 --
 sysdeps/generic/ldsodefs.h                    |  21 ++
 sysdeps/generic/libc-lock.h                   |  12 -
 sysdeps/generic/libc_start_call_main.h        |  24 ++
 sysdeps/generic/unwind-resume.c               |  14 +
 sysdeps/htl/libc-lockP.h                      |  13 -
 sysdeps/i386/nptl/pthread_spin_lock.S         |   1 -
 .../unwind-resume.c}                          |   5 +-
 sysdeps/nptl/dl-tls_init_tp.c                 |  67 ++++
 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                     | 154 ++-------
 sysdeps/nptl/libc_start_call_main.h           |  74 +++++
 sysdeps/nptl/pthread-functions.h              |  88 ------
 sysdeps/nptl/pthread.h                        |  10 +-
 .../nptl/pthread_early_init.h                 |  22 +-
 {nptl => sysdeps/nptl}/pthread_mutex_conf.h   |   9 +-
 sysdeps/nptl/setxid.h                         |  26 +-
 sysdeps/nptl/unwind-forcedunwind.c            |  64 ----
 sysdeps/posix/system.c                        |   5 +-
 sysdeps/pthread/Makefile                      |   2 +-
 sysdeps/pthread/pthread_early_init.h          |  29 ++
 .../pthread/pthread_mutex_conf.h              |  17 +-
 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  |  51 +++
 .../sysv/linux/aarch64/libpthread.abilist     |  41 ---
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  51 +++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  46 +--
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  51 +++
 .../unix/sysv/linux/arc/libpthread.abilist    |  39 ---
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  51 +++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  41 ---
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  51 +++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  41 ---
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  51 +++
 .../unix/sysv/linux/csky/libpthread.abilist   |  39 ---
 sysdeps/unix/sysv/linux/fatal-prepare.h       |   4 +-
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  51 +++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  46 +--
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  51 +++
 .../unix/sysv/linux/i386/libpthread.abilist   |  46 +--
 sysdeps/unix/sysv/linux/ia64/Makefile         |   2 +-
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  51 +++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  46 +--
 sysdeps/unix/sysv/linux/internal-signals.h    |   4 -
 .../sysv/linux/m68k/coldfire/libc.abilist     |  51 +++
 .../linux/m68k/coldfire/libpthread.abilist    |  41 ---
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  51 +++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  46 +--
 .../sysv/linux/microblaze/be/libc.abilist     |  51 +++
 .../linux/microblaze/be/libpthread.abilist    |  41 ---
 .../sysv/linux/microblaze/le/libc.abilist     |  51 +++
 .../linux/microblaze/le/libpthread.abilist    |  41 ---
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  51 +++
 .../sysv/linux/mips/mips32/libpthread.abilist |  46 +--
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  51 +++
 .../sysv/linux/mips/mips64/libpthread.abilist |  46 +--
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  51 +++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  51 +++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  51 +++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  41 ---
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  51 +++
 .../powerpc/powerpc32/libpthread.abilist      |  48 +--
 .../powerpc/powerpc32/nofpu/libc.abilist      |  51 +++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  51 +++
 .../powerpc/powerpc64/be/libpthread.abilist   |  48 +--
 .../linux/powerpc/powerpc64/le/libc.abilist   |  51 +++
 .../powerpc/powerpc64/le/libpthread.abilist   |  41 ---
 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c  |  61 ----
 sysdeps/unix/sysv/linux/pthread-pids.h        |  29 --
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  51 +++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  39 ---
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  51 +++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  39 ---
 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 |  51 +++
 .../linux/s390/s390-32/libpthread.abilist     |  49 +--
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  51 +++
 .../linux/s390/s390-64/libpthread.abilist     |  49 +--
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  51 +++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  46 +--
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  51 +++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  46 +--
 .../sysv/linux/sparc/sparc32/libc.abilist     |  51 +++
 .../linux/sparc/sparc32/libpthread.abilist    |  46 +--
 .../sysv/linux/sparc/sparc64/libc.abilist     |  51 +++
 .../linux/sparc/sparc64/libpthread.abilist    |  46 +--
 sysdeps/unix/sysv/linux/spawni.c              |   5 +-
 sysdeps/unix/sysv/linux/x86/longjmp.c         |  39 +++
 sysdeps/unix/sysv/linux/x86/lowlevellock.h    |  87 -----
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  51 +++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  46 +--
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  51 +++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  41 ---
 sysdeps/x86/nptl/pt-longjmp.c                 |  71 -----
 sysdeps/x86_64/nptl/pthread_spin_lock.S       |   1 -
 183 files changed, 3682 insertions(+), 3305 deletions(-)
 create mode 100644 dlfcn/dlerror.h
 create mode 100644 dlfcn/libc_dlerror_result.c
 create mode 100644 elf/dl-tls_init_tp.c
 create mode 100644 elf/tst-dlmopen-dlerror-mod.c
 create mode 100644 elf/tst-dlmopen-dlerror.c
 delete mode 100644 nptl/forward.c
 create mode 100644 nptl/nptl_deallocate_tsd.c
 create mode 100644 nptl/nptl_nthreads.c
 create mode 100644 nptl/nptl_setxid.c
 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
 delete mode 100644 sysdeps/arm/pt-arm-unwind-resume.S
 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/dl-tls_init_tp.c
 create mode 100644 sysdeps/nptl/libc_start_call_main.h
 delete mode 100644 sysdeps/nptl/pthread-functions.h
 rename nptl/pthread-pids.h => sysdeps/nptl/pthread_early_init.h (61%)
 rename {nptl => sysdeps/nptl}/pthread_mutex_conf.h (86%)
 delete mode 100644 sysdeps/nptl/unwind-forcedunwind.c
 create mode 100644 sysdeps/pthread/pthread_early_init.h
 rename dlfcn/dlfreeres.c => sysdeps/pthread/pthread_mutex_conf.h (74%)
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
 delete mode 100644 sysdeps/unix/sysv/linux/pthread-pids.h
 create mode 100644 sysdeps/unix/sysv/linux/s390/libpthread-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c
 create mode 100644 sysdeps/unix/sysv/linux/x86/longjmp.c
 delete mode 100644 sysdeps/unix/sysv/linux/x86/lowlevellock.h
 delete mode 100644 sysdeps/x86/nptl/pt-longjmp.c

-- 
2.29.2


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

* [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
@ 2021-03-16 17:27 ` Florian Weimer
  2021-03-17 11:36   ` Adhemerval Zanella
  2021-03-16 17:27 ` [PATCH v3 02/37] nptl: Move __pthread_cleanup_routine " Florian Weimer
                   ` (37 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 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                        | 10 +++++++--
 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, 141 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..23bcd51d91 100644
--- a/sysdeps/nptl/pthread.h
+++ b/sysdeps/nptl/pthread.h
@@ -809,8 +809,14 @@ 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));
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (pthread_mutex_consistent_np, (pthread_mutex_t *),
+			   pthread_mutex_consistent) __nonnull ((1))
+  __attribute_deprecated_msg__ ("\
+pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent");
+#  else
+#   define pthread_mutex_consistent_np pthread_mutex_consistent
+#  endif
 # 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] 99+ messages in thread

* [PATCH v3 02/37] nptl: Move __pthread_cleanup_routine into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc Florian Weimer
@ 2021-03-16 17:27 ` Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 03/37] nptl: Move legacy unwinding implementation " Florian Weimer
                   ` (36 subsequent siblings)
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 UTC (permalink / raw)
  To: libc-alpha

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
---
 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] 99+ messages in thread

* [PATCH v3 03/37] nptl: Move legacy unwinding implementation into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 02/37] nptl: Move __pthread_cleanup_routine " Florian Weimer
@ 2021-03-16 17:27 ` Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 04/37] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
                   ` (35 subsequent siblings)
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 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.

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;
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..e8a5e68a12 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-addressable 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] 99+ messages in thread

* [PATCH v3 04/37] nptl: Move legacy cancelation handling into libc as compat symbols
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (2 preceding siblings ...)
  2021-03-16 17:27 ` [PATCH v3 03/37] nptl: Move legacy unwinding implementation " Florian Weimer
@ 2021-03-16 17:27 ` Florian Weimer
  2021-03-16 17:27 ` [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
                   ` (34 subsequent siblings)
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 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.

__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.

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 \
@@ -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] 99+ messages in thread

* [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (3 preceding siblings ...)
  2021-03-16 17:27 ` [PATCH v3 04/37] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
@ 2021-03-16 17:27 ` Florian Weimer
  2021-03-17 11:38   ` Adhemerval Zanella
  2021-03-16 17:28 ` [PATCH v3 06/37] x86: Restore compile-time check for shadow stack pointer in longjmp Florian Weimer
                   ` (33 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:27 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] 99+ messages in thread

* [PATCH v3 06/37] x86: Restore compile-time check for shadow stack pointer in longjmp
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (4 preceding siblings ...)
  2021-03-16 17:27 ` [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
@ 2021-03-16 17:28 ` Florian Weimer
  2021-03-16 17:28 ` [PATCH v3 07/37] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
                   ` (32 subsequent siblings)
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:28 UTC (permalink / raw)
  To: libc-alpha

From: Adhemerval Zanella <adhemerval.zanella@linaro.org>

---
 sysdeps/unix/sysv/linux/x86/longjmp.c | 39 +++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/x86/longjmp.c

diff --git a/sysdeps/unix/sysv/linux/x86/longjmp.c b/sysdeps/unix/sysv/linux/x86/longjmp.c
new file mode 100644
index 0000000000..1cc8b8dfad
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/x86/longjmp.c
@@ -0,0 +1,39 @@
+/* __libc_siglongjmp for Linux/x86
+   Copyright (C) 2018-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.");
-- 
2.29.2



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

* [PATCH v3 07/37] nptl: Move __pthread_cleanup_upto into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (5 preceding siblings ...)
  2021-03-16 17:28 ` [PATCH v3 06/37] x86: Restore compile-time check for shadow stack pointer in longjmp Florian Weimer
@ 2021-03-16 17:28 ` Florian Weimer
  2021-03-16 17:28 ` [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once " Florian Weimer
                   ` (31 subsequent siblings)
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:28 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.

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 \
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] 99+ messages in thread

* [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (6 preceding siblings ...)
  2021-03-16 17:28 ` [PATCH v3 07/37] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
@ 2021-03-16 17:28 ` Florian Weimer
  2021-03-17 13:30   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 09/37] nptl: Move __pthread_unwind_next " Florian Weimer
                   ` (30 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:28 UTC (permalink / raw)
  To: libc-alpha

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

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                                 |  6 ++++--
 nptl/libc_pthread_init.c                      |  8 +------
 nptl/nptl-init.c                              |  4 +---
 nptl/pthreadP.h                               |  8 +++----
 nptl/pthread_once.c                           | 21 +++++++++++++++----
 sysdeps/nptl/fork.c                           |  3 +--
 sysdeps/nptl/fork.h                           |  3 ---
 sysdeps/nptl/libc-lockP.h                     | 13 ++----------
 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, 158 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..49133585e4 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,7 +85,9 @@ libc {
   }
   GLIBC_2.34 {
     __pthread_cleanup_routine;
+    __pthread_once;
     pthread_mutex_consistent;
+    pthread_once;
   }
   GLIBC_PRIVATE {
     __futex_abstimed_wait64;
@@ -141,7 +145,6 @@ libpthread {
     __pthread_mutexattr_destroy;
     __pthread_mutexattr_init;
     __pthread_mutexattr_settype;
-    __pthread_once;
     __pthread_setspecific;
     __read;
     __send;
@@ -184,7 +187,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..9f2990217c 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,
@@ -519,6 +517,7 @@ extern void *__pthread_getspecific (pthread_key_t key);
 extern int __pthread_setspecific (pthread_key_t key, const void *value);
 extern int __pthread_once (pthread_once_t *once_control,
 			   void (*init_routine) (void));
+libc_hidden_proto (__pthread_once)
 extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
 			     void (*child) (void));
 extern pthread_t __pthread_self (void);
@@ -551,7 +550,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..7335150485 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))
+__pthread_once_1 (pthread_once_t *once_control, void (*init_routine) (void))
 {
   /* Fast path.  See __pthread_once_slow.  */
   int val;
@@ -142,5 +144,16 @@ __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)
+versioned_symbol (libc, __pthread_once_1, __pthread_once, GLIBC_2_34);
+libc_hidden_ver (__pthread_once_1, __pthread_once)
+
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_once_1, __pthread_once_2)
+strong_alias (__pthread_once_1, __pthread_once_3)
+strong_alias (__pthread_once_1, __pthread_once_4)
+
+versioned_symbol (libc, __pthread_once_2, pthread_once, GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, __pthread_once_3, __pthread_once, GLIBC_2_0);
+compat_symbol (libc, __pthread_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..9550bc37e4 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -238,15 +238,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 
 /* 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)
+  __pthread_once (&(ONCE_CONTROL), INIT_FUNCTION)
 
 /* Get once control variable.  */
 #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)
@@ -342,6 +334,7 @@ extern void *__pthread_getspecific (pthread_key_t __key);
 
 extern int __pthread_once (pthread_once_t *__once_control,
 			   void (*__init_routine) (void));
+libc_hidden_proto (__pthread_once)
 
 extern int __pthread_atfork (void (*__prepare) (void),
 			     void (*__parent) (void),
@@ -372,7 +365,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 +386,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] 99+ messages in thread

* [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (7 preceding siblings ...)
  2021-03-16 17:28 ` [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-17 19:42   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl Florian Weimer
                   ` (29 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 3b8e13e066..936d4cf276 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -519,6 +519,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 49133585e4..8f1cd3f7c4 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;
   }
@@ -118,6 +119,7 @@ libc {
     __pthread_cond_init; # Used by the C11 threads.
     __pthread_force_elision;
     __pthread_getattr_default_np;
+    __pthread_unwind;
   }
 }
 
@@ -323,7 +325,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;
@@ -412,6 +413,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 9f2990217c..f78bf03a52 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] 99+ messages in thread

* [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (8 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 09/37] nptl: Move __pthread_unwind_next " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-17 20:45   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
                   ` (28 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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] 99+ messages in thread

* [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (9 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:42   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
                   ` (27 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 8f1cd3f7c4..968c4fba35 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -107,6 +107,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 f78bf03a52..b136aeae4d 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] 99+ messages in thread

* [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (10 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:43   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc Florian Weimer
                   ` (26 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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] 99+ messages in thread

* [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (11 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:44   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd " Florian Weimer
                   ` (25 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 968c4fba35..13198d1e89 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -120,6 +120,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 b136aeae4d..d28610150c 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] 99+ messages in thread

* [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (12 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:46   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 15/37] nptl: Move pthread_exit " Florian Weimer
                   ` (24 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 13198d1e89..72909b961c 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -107,6 +107,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 d28610150c..4f814287ae 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -680,7 +680,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] 99+ messages in thread

* [PATCH v3 15/37] nptl: Move pthread_exit into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (13 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:49   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 16/37] nptl: Move pthread_setcancelstate " Florian Weimer
                   ` (23 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 72909b961c..f8178409dd 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -119,6 +119,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;
@@ -176,7 +177,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 4f814287ae..7d88754e67 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -529,6 +529,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] 99+ messages in thread

* [PATCH v3 16/37] nptl: Move pthread_setcancelstate into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (14 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 15/37] nptl: Move pthread_exit " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:52   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 17/37] nptl: Move pthread_setcanceltype " Florian Weimer
                   ` (22 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 f8178409dd..32e7acfcae 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -123,6 +123,7 @@ libc {
     __pthread_force_elision;
     __pthread_getattr_default_np;
     __pthread_keys;
+    __pthread_setcancelstate;
     __pthread_unwind;
   }
 }
@@ -192,7 +193,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 7d88754e67..9f07aa718b 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);
@@ -554,7 +553,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 9550bc37e4..df62ce0e61 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -341,7 +341,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.  */
@@ -367,7 +367,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
@@ -388,7 +387,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] 99+ messages in thread

* [PATCH v3 17/37] nptl: Move pthread_setcanceltype into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (15 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 16/37] nptl: Move pthread_setcancelstate " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:53   ` Adhemerval Zanella
  2021-03-16 17:29 ` [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
                   ` (21 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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 32e7acfcae..b619df41fb 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -193,7 +193,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 9f07aa718b..4b486b3577 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -531,6 +531,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] 99+ messages in thread

* [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (16 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 17/37] nptl: Move pthread_setcanceltype " Florian Weimer
@ 2021-03-16 17:29 ` Florian Weimer
  2021-03-18 12:54   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772] Florian Weimer
                   ` (20 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:29 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] 99+ messages in thread

* [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772]
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (17 preceding siblings ...)
  2021-03-16 17:29 ` [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-19 19:56   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773] Florian Weimer
                   ` (19 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

Commit 9e78f6f6e7134a5f299cc8de77370218f8019237 ("Implement
_dl_catch_error, _dl_signal_error in libc.so [BZ #16628]") has the
side effect that distinct namespaces, as created by dlmopen, now have
separate implementations of the rtld exception mechanism.  This means
that the call to _dl_catch_error from libdl in a secondary namespace
does not actually install an exception handler because the
thread-local variable catch_hook in the libc.so copy in the secondary
namespace is distinct from that of the base namepace.  As a result, a
dlsym/dlopen/… failure in a secondary namespace terminates the process
with a dynamic linker error because it looks to the exception handler
mechanism as if no handler has been installed.

This commit restores GLRO (dl_catch_error) and uses it to set the
handler in the base namespace.
---
 dlfcn/dlerror.c               |  6 +++--
 elf/Makefile                  |  8 ++++++-
 elf/dl-error-skeleton.c       | 12 ++++++++++
 elf/rtld.c                    |  1 +
 elf/tst-dlmopen-dlerror-mod.c | 41 +++++++++++++++++++++++++++++++++++
 elf/tst-dlmopen-dlerror.c     | 37 +++++++++++++++++++++++++++++++
 sysdeps/generic/ldsodefs.h    |  9 ++++++++
 7 files changed, 111 insertions(+), 3 deletions(-)
 create mode 100644 elf/tst-dlmopen-dlerror-mod.c
 create mode 100644 elf/tst-dlmopen-dlerror.c

diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index 48b4c25bea..947b7c10c6 100644
--- a/dlfcn/dlerror.c
+++ b/dlfcn/dlerror.c
@@ -167,8 +167,10 @@ _dlerror_run (void (*operate) (void *), void *args)
       result->errstring = NULL;
     }
 
-  result->errcode = _dl_catch_error (&result->objname, &result->errstring,
-				     &result->malloced, operate, args);
+  result->errcode = GLRO (dl_catch_error) (&result->objname,
+					   &result->errstring,
+					   &result->malloced,
+					   operate, args);
 
   /* If no error we mark that no error string is available.  */
   result->returned = result->errstring == NULL;
diff --git a/elf/Makefile b/elf/Makefile
index 936d4cf276..deb76aed99 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -222,7 +222,8 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
 	 tst-audit14 tst-audit15 tst-audit16 \
 	 tst-single_threaded tst-single_threaded-pthread \
 	 tst-tls-ie tst-tls-ie-dlmopen argv0test \
-	 tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask
+	 tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask \
+	 tst-dlmopen-dlerror
 #	 reldep9
 tests-internal += loadtest unload unload2 circleload1 \
 	 neededtest neededtest2 neededtest3 neededtest4 \
@@ -344,6 +345,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 		libmarkermod2-1 libmarkermod2-2 \
 		libmarkermod3-1 libmarkermod3-2 libmarkermod3-3 \
 		libmarkermod4-1 libmarkermod4-2 libmarkermod4-3 libmarkermod4-4 \
+		tst-ldconfig-ld-mod tst-dlmopen-dlerror-mod \
 
 # Most modules build with _ISOMAC defined, but those filtered out
 # depend on internal headers.
@@ -1580,6 +1582,10 @@ $(objpfx)tst-sonamemove-dlopen.out: \
   $(objpfx)tst-sonamemove-runmod1.so \
   $(objpfx)tst-sonamemove-runmod2.so
 
+$(objpfx)tst-dlmopen-dlerror: $(libdl)
+$(objpfx)tst-dlmopen-dlerror-mod.so: $(libdl) $(libsupport)
+$(objpfx)tst-dlmopen-dlerror.out: $(objpfx)tst-dlmopen-dlerror-mod.so
+
 # Override -z defs, so that we can reference an undefined symbol.
 # Force lazy binding for the same reason.
 LDFLAGS-tst-latepthreadmod.so = \
diff --git a/elf/dl-error-skeleton.c b/elf/dl-error-skeleton.c
index 2fd62777cf..b699936c6e 100644
--- a/elf/dl-error-skeleton.c
+++ b/elf/dl-error-skeleton.c
@@ -248,4 +248,16 @@ _dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
   catch_hook = old_catch;
   receiver = old_receiver;
 }
+
+/* Forwarder used for initializing GLRO (_dl_catch_error).  */
+int
+_rtld_catch_error (const char **objname, const char **errstring,
+		   bool *mallocedp, void (*operate) (void *),
+		   void *args)
+{
+  /* The reference to _dl_catch_error will eventually be relocated to
+     point to the implementation in libc.so.  */
+  return _dl_catch_error (objname, errstring, mallocedp, operate, args);
+}
+
 #endif /* DL_ERROR_BOOTSTRAP */
diff --git a/elf/rtld.c b/elf/rtld.c
index 94a00e2049..fd02438936 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -368,6 +368,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
     ._dl_lookup_symbol_x = _dl_lookup_symbol_x,
     ._dl_open = _dl_open,
     ._dl_close = _dl_close,
+    ._dl_catch_error = _rtld_catch_error,
     ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
 #ifdef HAVE_DL_DISCOVER_OSVERSION
     ._dl_discover_osversion = _dl_discover_osversion
diff --git a/elf/tst-dlmopen-dlerror-mod.c b/elf/tst-dlmopen-dlerror-mod.c
new file mode 100644
index 0000000000..dcb94320b4
--- /dev/null
+++ b/elf/tst-dlmopen-dlerror-mod.c
@@ -0,0 +1,41 @@
+/* Check that dlfcn errors are reported properly after dlmopen.  Test module.
+   Copyright (C) 2019 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <dlfcn.h>
+#include <stddef.h>
+#include <support/check.h>
+
+/* Note: This object is not linked into the main program, so we cannot
+   use delayed test failure reporting via TEST_VERIFY etc., and have
+   to use FAIL_EXIT1 (or something else that calls exit).  */
+
+void
+call_dlsym (void)
+{
+  void *ptr = dlsym (NULL, "does not exist");
+  if (ptr != NULL)
+    FAIL_EXIT1 ("dlsym did not fail as expected");
+}
+
+void
+call_dlopen (void)
+{
+  void *handle = dlopen ("tst-dlmopen-dlerror does not exist", RTLD_NOW);
+  if (handle != NULL)
+    FAIL_EXIT1 ("dlopen did not fail as expected");
+}
diff --git a/elf/tst-dlmopen-dlerror.c b/elf/tst-dlmopen-dlerror.c
new file mode 100644
index 0000000000..65638f7f38
--- /dev/null
+++ b/elf/tst-dlmopen-dlerror.c
@@ -0,0 +1,37 @@
+/* Check that dlfcn errors are reported properly after dlmopen.
+   Copyright (C) 2019 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <support/check.h>
+#include <support/xdlfcn.h>
+
+static int
+do_test (void)
+{
+  void *handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-dlerror-mod.so",
+                           RTLD_NOW);
+  void (*call_dlsym) (void) = xdlsym (handle, "call_dlsym");
+  void (*call_dlopen) (void) = xdlsym (handle, "call_dlopen");
+
+  call_dlsym ();
+  call_dlopen ();
+
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index ea3f7a69d0..b207f229c3 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -662,6 +662,12 @@ struct rtld_global_ro
   void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
 		     Lmid_t nsid, int argc, char *argv[], char *env[]);
   void (*_dl_close) (void *map);
+  /* libdl in a secondary namespace (after dlopen) must use
+     _dl_catch_error from the main namespace, so it has to be
+     exported in some way.  */
+  int (*_dl_catch_error) (const char **objname, const char **errstring,
+			  bool *mallocedp, void (*operate) (void *),
+			  void *args);
   void *(*_dl_tls_get_addr_soft) (struct link_map *);
 #ifdef HAVE_DL_DISCOVER_OSVERSION
   int (*_dl_discover_osversion) (void);
@@ -900,6 +906,9 @@ extern int _dl_catch_error (const char **objname, const char **errstring,
 			    void *args);
 libc_hidden_proto (_dl_catch_error)
 
+/* Used for initializing GLRO (_dl_catch_error).  */
+extern __typeof__ (_dl_catch_error) _rtld_catch_error attribute_hidden;
+
 /* Call OPERATE (ARGS).  If no error occurs, set *EXCEPTION to zero.
    Otherwise, store a copy of the raised exception in *EXCEPTION,
    which has to be freed by _dl_exception_free.  As a special case, if
-- 
2.29.2



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

* [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773]
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (18 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772] Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-23 14:47   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h Florian Weimer
                   ` (18 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

Calling free directly may end up freeing a pointer allocated by the
dynamic loader using malloc from libc.so in the base namespace using
the allocator from libc.so in a secondary namespace, which results in
crashes.

This commit redirects the free call through GLRO and the dynamic
linker, to reach the correct namespace.  It also cleans up the dlerror
handling along the way, so that pthread_setspecific is no longer
needed (which avoids triggering bug 24774).
---
 dlfcn/Makefile                |   3 +-
 dlfcn/Versions                |   6 +-
 dlfcn/dlerror.c               | 299 ++++++++++++++--------------------
 dlfcn/dlerror.h               |  74 +++++++++
 dlfcn/dlfreeres.c             |  29 ----
 dlfcn/libc_dlerror_result.c   |  39 +++++
 elf/dl-exception.c            |  11 ++
 elf/rtld.c                    |   1 +
 elf/tst-dlmopen-dlerror-mod.c |  29 +++-
 elf/tst-dlmopen-dlerror.c     |  22 ++-
 include/dlfcn.h               |   2 -
 malloc/set-freeres.c          |  10 +-
 malloc/thread-freeres.c       |   2 +
 sysdeps/generic/ldsodefs.h    |   7 +
 14 files changed, 307 insertions(+), 227 deletions(-)
 create mode 100644 dlfcn/dlerror.h
 delete mode 100644 dlfcn/dlfreeres.c
 create mode 100644 dlfcn/libc_dlerror_result.c

diff --git a/dlfcn/Makefile b/dlfcn/Makefile
index d51fd08c33..994a3afee6 100644
--- a/dlfcn/Makefile
+++ b/dlfcn/Makefile
@@ -22,9 +22,10 @@ include ../Makeconfig
 headers		:= bits/dlfcn.h dlfcn.h
 extra-libs	:= libdl
 libdl-routines	:= dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \
-		   dlmopen dlfcn dlfreeres
+		   dlmopen dlfcn
 routines	:= $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines)))
 elide-routines.os := $(routines)
+routines += libc_dlerror_result
 
 extra-libs-others := libdl
 
diff --git a/dlfcn/Versions b/dlfcn/Versions
index 1df6925a92..f07cb929aa 100644
--- a/dlfcn/Versions
+++ b/dlfcn/Versions
@@ -1,3 +1,8 @@
+libc {
+  GLIBC_PRIVATE {
+    __libc_dlerror_result;
+  }
+}
 libdl {
   GLIBC_2.0 {
     dladdr; dlclose; dlerror; dlopen; dlsym;
@@ -13,6 +18,5 @@ libdl {
   }
   GLIBC_PRIVATE {
     _dlfcn_hook;
-    __libdl_freeres;
   }
 }
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index 947b7c10c6..e0dedbe3a6 100644
--- a/dlfcn/dlerror.c
+++ b/dlfcn/dlerror.c
@@ -25,6 +25,8 @@
 #include <libc-lock.h>
 #include <ldsodefs.h>
 #include <libc-symbols.h>
+#include <assert.h>
+#include <dlerror.h>
 
 #if !defined SHARED && IS_IN (libdl)
 
@@ -36,89 +38,70 @@ dlerror (void)
 
 #else
 
-/* Type for storing results of dynamic loading actions.  */
-struct dl_action_result
-  {
-    int errcode;
-    int returned;
-    bool malloced;
-    const char *objname;
-    const char *errstring;
-  };
-static struct dl_action_result last_result;
-static struct dl_action_result *static_buf;
-
-/* This is the key for the thread specific memory.  */
-static __libc_key_t key;
-__libc_once_define (static, once);
-
-/* Destructor for the thread-specific data.  */
-static void init (void);
-static void free_key_mem (void *mem);
-
-
 char *
 __dlerror (void)
 {
-  char *buf = NULL;
-  struct dl_action_result *result;
-
 # ifdef SHARED
   if (!rtld_active ())
     return _dlfcn_hook->dlerror ();
 # endif
 
-  /* If we have not yet initialized the buffer do it now.  */
-  __libc_once (once, init);
+  struct dl_action_result *result = __libc_dlerror_result;
 
-  /* Get error string.  */
-  if (static_buf != NULL)
-    result = static_buf;
-  else
+  /* No libdl function has been called.  No error is possible.  */
+  if (result == NULL)
+    return NULL;
+
+  /* For an early malloc failure, clear the error flag and return the
+     error message.  This marks the error as delivered.  */
+  if (result == dl_action_result_malloc_failed ())
     {
-      /* init () has been run and we don't use the static buffer.
-	 So we have a valid key.  */
-      result = (struct dl_action_result *) __libc_getspecific (key);
-      if (result == NULL)
-	result = &last_result;
+      __libc_dlerror_result = NULL;
+      return (char *) "out of memory";
     }
 
-  /* Test whether we already returned the string.  */
-  if (result->returned != 0)
+  /* Placeholder object.  This can be observed in a recursive call,
+     e.g. from an ELF constructor.  */
+  if (result->errstring == NULL)
+    return NULL;
+
+  /* If we have already reported the error, we can free the result
+     and return NULL.  */
+  if (result->returned)
     {
-      /* We can now free the string.  */
-      if (result->errstring != NULL)
-	{
-	  if (strcmp (result->errstring, "out of memory") != 0)
-	    free ((char *) result->errstring);
-	  result->errstring = NULL;
-	}
+      __libc_dlerror_result = NULL;
+      dl_action_result_errstring_free (result);
+      free (result);
+      return NULL;
     }
-  else if (result->errstring != NULL)
-    {
-      buf = (char *) result->errstring;
-      int n;
-      if (result->errcode == 0)
-	n = __asprintf (&buf, "%s%s%s",
-			result->objname,
-			result->objname[0] == '\0' ? "" : ": ",
-			_(result->errstring));
-      else
-	n = __asprintf (&buf, "%s%s%s: %s",
-			result->objname,
-			result->objname[0] == '\0' ? "" : ": ",
-			_(result->errstring),
-			strerror (result->errcode));
-      if (n != -1)
-	{
-	  /* We don't need the error string anymore.  */
-	  if (strcmp (result->errstring, "out of memory") != 0)
-	    free ((char *) result->errstring);
-	  result->errstring = buf;
-	}
 
-      /* Mark the error as returned.  */
-      result->returned = 1;
+  assert (result->errstring != NULL);
+
+  /* Create the combined error message.  */
+  char *buf;
+  int n;
+  if (result->errcode == 0)
+    n = __asprintf (&buf, "%s%s%s",
+		    result->objname,
+		    result->objname[0] == '\0' ? "" : ": ",
+		    _(result->errstring));
+  else
+    n = __asprintf (&buf, "%s%s%s: %s",
+		    result->objname,
+		    result->objname[0] == '\0' ? "" : ": ",
+		    _(result->errstring),
+		    strerror (result->errcode));
+
+  /* Mark the error as delivered.  */
+  result->returned = true;
+
+  if (n >= 0)
+    {
+      /* Replace the error string with the newly allocated one.  */
+      dl_action_result_errstring_free (result);
+      result->errstring = buf;
+      result->errstring_source = dl_action_result_errstring_local;
+      return buf;
     }
 
   return buf;
@@ -130,130 +113,94 @@ strong_alias (__dlerror, dlerror)
 int
 _dlerror_run (void (*operate) (void *), void *args)
 {
-  struct dl_action_result *result;
-
-  /* If we have not yet initialized the buffer do it now.  */
-  __libc_once (once, init);
-
-  /* Get error string and number.  */
-  if (static_buf != NULL)
-    result = static_buf;
-  else
+  struct dl_action_result *result = __libc_dlerror_result;
+  if (result != NULL)
     {
-      /* We don't use the static buffer and so we have a key.  Use it
-	 to get the thread-specific buffer.  */
-      result = __libc_getspecific (key);
-      if (result == NULL)
+      if (result == dl_action_result_malloc_failed ())
 	{
-	  result = (struct dl_action_result *) calloc (1, sizeof (*result));
-	  if (result == NULL)
-	    /* We are out of memory.  Since this is no really critical
-	       situation we carry on by using the global variable.
-	       This might lead to conflicts between the threads but
-	       they soon all will have memory problems.  */
-	    result = &last_result;
-	  else
-	    /* Set the tsd.  */
-	    __libc_setspecific (key, result);
+	  /* Clear the previous error.  */
+	  __libc_dlerror_result = NULL;
+	  result = NULL;
+	}
+      else
+	{
+	  /* There is an existing object.  Free its error string, but
+	     keep the object.  */
+	  dl_action_result_errstring_free (result);
+	  /* Mark the object as not containing an error.  This ensures
+	     that call to dlerror from, for example, an ELF
+	     constructor will not notice this result object.  */
+	  result->errstring = NULL;
 	}
     }
 
-  if (result->errstring != NULL)
-    {
-      /* Free the error string from the last failed command.  This can
-	 happen if `dlerror' was not run after an error was found.  */
-      if (result->malloced)
-	free ((char *) result->errstring);
-      result->errstring = NULL;
-    }
-
-  result->errcode = GLRO (dl_catch_error) (&result->objname,
-					   &result->errstring,
-					   &result->malloced,
-					   operate, args);
+  const char *objname;
+  const char *errstring;
+  bool malloced;
+  int errcode = GLRO (dl_catch_error) (&objname, &errstring, &malloced,
+				       operate, args);
 
-  /* If no error we mark that no error string is available.  */
-  result->returned = result->errstring == NULL;
+  /* ELF constructors or destructors may have indirectly altered the
+     value of __libc_dlerror_result, therefore reload it.  */
+  result = __libc_dlerror_result;
 
-  return result->errstring != NULL;
-}
-
-
-/* Initialize buffers for results.  */
-static void
-init (void)
-{
-  if (__libc_key_create (&key, free_key_mem))
-    /* Creating the key failed.  This means something really went
-       wrong.  In any case use a static buffer which is better than
-       nothing.  */
-    static_buf = &last_result;
-}
-
-
-static void
-check_free (struct dl_action_result *rec)
-{
-  if (rec->errstring != NULL
-      && strcmp (rec->errstring, "out of memory") != 0)
+  if (errstring == NULL)
     {
-      /* We can free the string only if the allocation happened in the
-	 C library used by the dynamic linker.  This means, it is
-	 always the C library in the base namespace.  When we're statically
-         linked, the dynamic linker is part of the program and so always
-	 uses the same C library we use here.  */
-#ifdef SHARED
-      struct link_map *map = NULL;
-      Dl_info info;
-      if (_dl_addr (check_free, &info, &map, NULL) != 0 && map->l_ns == 0)
-#endif
+      /* There is no error.  We no longer need the result object if it
+	 does not contain an error.  However, a recursive call may
+	 have added an error even if this call did not cause it.  Keep
+	 the other error.  */
+      if (result != NULL && result->errstring == NULL)
 	{
-	  free ((char *) rec->errstring);
-	  rec->errstring = NULL;
+	  __libc_dlerror_result = NULL;
+	  free (result);
 	}
+      return 0;
     }
-}
-
-
-static void
-__attribute__ ((destructor))
-fini (void)
-{
-  check_free (&last_result);
-}
-
-
-/* Free the thread specific data, this is done if a thread terminates.  */
-static void
-free_key_mem (void *mem)
-{
-  check_free ((struct dl_action_result *) mem);
+  else
+    {
+      /* A new error occurred.  Check if a result object has to be
+	 allocated.  */
+      if (result == NULL || result == dl_action_result_malloc_failed ())
+	{
+	  /* Allocating storage for the error message after the fact
+	     is not ideal.  But this avoids an infinite recursion in
+	     case malloc itself calls libdl functions (without
+	     triggering errors).  */
+	  result = malloc (sizeof (*result));
+	  if (result == NULL)
+	    {
+	      /* Assume that the dlfcn failure was due to a malloc
+		 failure, too.  */
+	      if (malloced)
+		dl_error_free ((char *) errstring);
+	      __libc_dlerror_result = dl_action_result_malloc_failed ();
+	      return 1;
+	    }
+	  __libc_dlerror_result = result;
+	}
+      else
+	/* Deallocate the existing error message from a recursive
+	   call, but reuse the result object.  */
+	dl_action_result_errstring_free (result);
+
+      result->errcode = errcode;
+      result->objname = objname;
+      result->errstring = (char *) errstring;
+      result->returned = false;
+      /* In case of an error, the malloced flag indicates whether the
+	 error string is constant or not.  */
+      if (malloced)
+	result->errstring_source = dl_action_result_errstring_rtld;
+      else
+	result->errstring_source = dl_action_result_errstring_constant;
 
-  free (mem);
-  __libc_setspecific (key, NULL);
+      return 1;
+    }
 }
 
 # ifdef SHARED
 
-/* Free the dlerror-related resources.  */
-void
-__dlerror_main_freeres (void)
-{
-  /* Free the global memory if used.  */
-  check_free (&last_result);
-
-  if (__libc_once_get (once) && static_buf == NULL)
-    {
-      /* init () has been run and we don't use the static buffer.
-	 So we have a valid key.  */
-      void *mem;
-      /* Free the TSD memory if used.  */
-      mem = __libc_getspecific (key);
-      if (mem != NULL)
-	free_key_mem (mem);
-    }
-}
-
 struct dlfcn_hook *_dlfcn_hook __attribute__((nocommon));
 libdl_hidden_data_def (_dlfcn_hook)
 
diff --git a/dlfcn/dlerror.h b/dlfcn/dlerror.h
new file mode 100644
index 0000000000..ae07495139
--- /dev/null
+++ b/dlfcn/dlerror.h
@@ -0,0 +1,74 @@
+#ifndef _DLERROR_H
+#define _DLERROR_H
+
+#include <dlfcn.h>
+#include <ldsodefs.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/* Source of the errstring member in struct dl_action_result, for
+   finding the right deallocation routine.  */
+enum dl_action_result_errstring_source
+  {
+   dl_action_result_errstring_constant, /* String literal, no deallocation.  */
+   dl_action_result_errstring_rtld, /* libc in the primary namespace.  */
+   dl_action_result_errstring_local, /* libc in the current namespace.  */
+  };
+
+struct dl_action_result
+{
+  int errcode;
+  char errstring_source;
+  bool returned;
+  const char *objname;
+  char *errstring;
+};
+
+/* Used to free the errstring member of struct dl_action_result in the
+   dl_action_result_errstring_rtld case.  */
+static inline void
+dl_error_free (void *ptr)
+{
+#ifdef SHARED
+  /* In the shared case, ld.so may use a different malloc than this
+     namespace.  */
+  GLRO (dl_error_free (ptr));
+#else
+  /* Call the implementation directly.  It still has to check for
+     pointers which cannot be freed, so do not call free directly
+     here.  */
+  _dl_error_free (ptr);
+#endif
+}
+
+/* Deallocate RESULT->errstring, leaving *RESULT itself allocated.  */
+static inline void
+dl_action_result_errstring_free (struct dl_action_result *result)
+{
+  switch (result->errstring_source)
+    {
+    case dl_action_result_errstring_constant:
+      break;
+    case dl_action_result_errstring_rtld:
+      dl_error_free (result->errstring);
+      break;
+    case dl_action_result_errstring_local:
+      free (result->errstring);
+      break;
+    }
+}
+
+static inline struct dl_action_result *
+dl_action_result_malloc_failed (void)
+{
+  return (struct dl_action_result *) (intptr_t) -1;
+}
+
+/* Thread-local variable for storing dlfcn failures for subsequent
+   reporting via dlerror.  */
+extern __thread struct dl_action_result *__libc_dlerror_result
+  attribute_tls_model_ie;
+void __libc_dlerror_result_free (void) attribute_hidden;
+
+#endif /* _DLERROR_H */
diff --git a/dlfcn/dlfreeres.c b/dlfcn/dlfreeres.c
deleted file mode 100644
index 856b76416d..0000000000
--- a/dlfcn/dlfreeres.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Clean up allocated libdl memory on demand.
-   Copyright (C) 2018-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 <set-hooks.h>
-#include <libc-symbols.h>
-#include <dlfcn.h>
-
-/* Free libdl.so resources.
-   Note: Caller ensures we are called only once.  */
-void
-__libdl_freeres (void)
-{
-  call_function_static_weak (__dlerror_main_freeres);
-}
diff --git a/dlfcn/libc_dlerror_result.c b/dlfcn/libc_dlerror_result.c
new file mode 100644
index 0000000000..11468937a2
--- /dev/null
+++ b/dlfcn/libc_dlerror_result.c
@@ -0,0 +1,39 @@
+/* Thread-local variable holding the dlerror result.
+   Copyright (C) 2019 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <dlerror.h>
+
+/* This pointer is either NULL, dl_action_result_malloc_failed (), or
+   has been allocated using malloc by the namespace that also contains
+   this instance of the thread-local variable.  */
+__thread struct dl_action_result *__libc_dlerror_result attribute_tls_model_ie;
+
+/* Called during thread shutdown to free resources.  */
+void
+__libc_dlerror_result_free (void)
+{
+  if (__libc_dlerror_result != NULL)
+    {
+      if (__libc_dlerror_result != dl_action_result_malloc_failed ())
+        {
+          dl_action_result_errstring_free (__libc_dlerror_result);
+          free (__libc_dlerror_result);
+        }
+      __libc_dlerror_result = NULL;
+    }
+}
diff --git a/elf/dl-exception.c b/elf/dl-exception.c
index 30adb7d1dc..8eaad418cb 100644
--- a/elf/dl-exception.c
+++ b/elf/dl-exception.c
@@ -30,6 +30,17 @@
    a pointer comparison.  See below and in dlfcn/dlerror.c.  */
 static const char _dl_out_of_memory[] = "out of memory";
 
+/* Call free in the main libc.so.  This allows other namespaces to
+   free pointers on the main libc heap, via GLRO (dl_error_free).  It
+   also avoids calling free on the special, pre-allocated
+   out-of-memory error message.  */
+void
+_dl_error_free (void *ptr)
+{
+  if (ptr != _dl_out_of_memory)
+    free (ptr);
+}
+
 /* Dummy allocation object used if allocating the message buffer
    fails.  */
 static void
diff --git a/elf/rtld.c b/elf/rtld.c
index fd02438936..c2ca4b7ce3 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -369,6 +369,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
     ._dl_open = _dl_open,
     ._dl_close = _dl_close,
     ._dl_catch_error = _rtld_catch_error,
+    ._dl_error_free = _dl_error_free,
     ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
 #ifdef HAVE_DL_DISCOVER_OSVERSION
     ._dl_discover_osversion = _dl_discover_osversion
diff --git a/elf/tst-dlmopen-dlerror-mod.c b/elf/tst-dlmopen-dlerror-mod.c
index dcb94320b4..25188750fb 100644
--- a/elf/tst-dlmopen-dlerror-mod.c
+++ b/elf/tst-dlmopen-dlerror-mod.c
@@ -18,6 +18,8 @@
 
 #include <dlfcn.h>
 #include <stddef.h>
+#include <stdio.h>
+#include <string.h>
 #include <support/check.h>
 
 /* Note: This object is not linked into the main program, so we cannot
@@ -25,17 +27,32 @@
    to use FAIL_EXIT1 (or something else that calls exit).  */
 
 void
-call_dlsym (void)
+call_dlsym (const char *name)
 {
-  void *ptr = dlsym (NULL, "does not exist");
+  void *ptr = dlsym (NULL, name);
   if (ptr != NULL)
-    FAIL_EXIT1 ("dlsym did not fail as expected");
+    FAIL_EXIT1 ("dlsym did not fail as expected for: %s", name);
+  const char *message = dlerror ();
+  if (strstr (message, ": undefined symbol: does not exist X") == NULL)
+    FAIL_EXIT1 ("invalid dlsym error message for [[%s]]: %s", name, message);
+  message = dlerror ();
+  if (message != NULL)
+    FAIL_EXIT1 ("second dlsym for [[%s]]: %s", name, message);
 }
 
 void
-call_dlopen (void)
+call_dlopen (const char *name)
 {
-  void *handle = dlopen ("tst-dlmopen-dlerror does not exist", RTLD_NOW);
+  void *handle = dlopen (name, RTLD_NOW);
   if (handle != NULL)
-    FAIL_EXIT1 ("dlopen did not fail as expected");
+    FAIL_EXIT1 ("dlopen did not fail as expected for: %s", name);
+  const char *message = dlerror ();
+  if (strstr (message, "X: cannot open shared object file:"
+              " No such file or directory") == NULL
+      && strstr (message, "X: cannot open shared object file:"
+                 " File name too long") == NULL)
+    FAIL_EXIT1 ("invalid dlopen error message for [[%s]]: %s", name, message);
+  message = dlerror ();
+  if (message != NULL)
+    FAIL_EXIT1 ("second dlopen for [[%s]]: %s", name, message);
 }
diff --git a/elf/tst-dlmopen-dlerror.c b/elf/tst-dlmopen-dlerror.c
index 65638f7f38..d02993847d 100644
--- a/elf/tst-dlmopen-dlerror.c
+++ b/elf/tst-dlmopen-dlerror.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
+#include <string.h>
 #include <support/check.h>
 #include <support/xdlfcn.h>
 
@@ -25,11 +26,22 @@ do_test (void)
 {
   void *handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-dlerror-mod.so",
                            RTLD_NOW);
-  void (*call_dlsym) (void) = xdlsym (handle, "call_dlsym");
-  void (*call_dlopen) (void) = xdlsym (handle, "call_dlopen");
-
-  call_dlsym ();
-  call_dlopen ();
+  void (*call_dlsym) (const char *name) = xdlsym (handle, "call_dlsym");
+  void (*call_dlopen) (const char *name) = xdlsym (handle, "call_dlopen");
+
+  /* Iterate over various name lengths.  This changes the size of
+     error messages allocated by ld.so and has been shown to trigger
+     detectable heap corruption if malloc/free calls in different
+     namespaces are mixed.  */
+  char buffer[2048];
+  char *buffer_end = &buffer[sizeof (buffer) - 2];
+  for (char *p = stpcpy (buffer, "does not exist "); p < buffer_end; ++p)
+    {
+      p[0] = 'X';
+      p[1] = '\0';
+      call_dlsym (buffer);
+      call_dlopen (buffer);
+    }
 
   return 0;
 }
diff --git a/include/dlfcn.h b/include/dlfcn.h
index a1816e4991..a8d48bdada 100644
--- a/include/dlfcn.h
+++ b/include/dlfcn.h
@@ -156,7 +156,5 @@ extern void __libc_register_dlfcn_hook (struct link_map *map)
      attribute_hidden;
 #endif
 
-extern void __dlerror_main_freeres (void) attribute_hidden;
-
 #endif
 #endif
diff --git a/malloc/set-freeres.c b/malloc/set-freeres.c
index 817fbea8b8..d404250151 100644
--- a/malloc/set-freeres.c
+++ b/malloc/set-freeres.c
@@ -20,6 +20,7 @@
 #include <set-hooks.h>
 #include <libc-internal.h>
 #include <unwind-link.h>
+#include <dlfcn/dlerror.h>
 
 #include "../nss/nsswitch.h"
 #include "../libio/libioP.h"
@@ -28,8 +29,6 @@ DEFINE_HOOK (__libc_subfreeres, (void));
 
 symbol_set_define (__libc_freeres_ptrs);
 
-extern __attribute__ ((weak)) void __libdl_freeres (void);
-
 extern __attribute__ ((weak)) void __libpthread_freeres (void);
 
 void __libc_freeres_fn_section
@@ -52,11 +51,6 @@ __libc_freeres (void)
       /* We run the resource freeing after IO cleanup.  */
       RUN_HOOK (__libc_subfreeres, ());
 
-      /* Call the libdl list of cleanup functions
-	 (weak-ref-and-check).  */
-      if (&__libdl_freeres != NULL)
-	__libdl_freeres ();
-
       /* Call the libpthread list of cleanup functions
 	 (weak-ref-and-check).  */
       if (&__libpthread_freeres != NULL)
@@ -66,6 +60,8 @@ __libc_freeres (void)
       __libc_unwind_link_freeres ();
 #endif
 
+      call_function_static_weak (__libc_dlerror_result_free);
+
       for (p = symbol_set_first_element (__libc_freeres_ptrs);
            !symbol_set_end_p (__libc_freeres_ptrs, p); ++p)
         free (*p);
diff --git a/malloc/thread-freeres.c b/malloc/thread-freeres.c
index da76a3dca7..77a204f9fa 100644
--- a/malloc/thread-freeres.c
+++ b/malloc/thread-freeres.c
@@ -16,6 +16,7 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <dlfcn/dlerror.h>
 #include <libc-internal.h>
 #include <malloc-internal.h>
 #include <resolv/resolv-internal.h>
@@ -36,6 +37,7 @@ __libc_thread_freeres (void)
 #endif
   call_function_static_weak (__res_thread_freeres);
   __glibc_tls_internal_free ();
+  call_function_static_weak (__libc_dlerror_result_free);
 
   /* This should come last because it shuts down malloc for this
      thread and the other shutdown functions might well call free.  */
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index b207f229c3..dfc117a445 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -668,6 +668,9 @@ struct rtld_global_ro
   int (*_dl_catch_error) (const char **objname, const char **errstring,
 			  bool *mallocedp, void (*operate) (void *),
 			  void *args);
+  /* libdl in a secondary namespace must use free from the base
+     namespace.  */
+  void (*_dl_error_free) (void *);
   void *(*_dl_tls_get_addr_soft) (struct link_map *);
 #ifdef HAVE_DL_DISCOVER_OSVERSION
   int (*_dl_discover_osversion) (void);
@@ -823,6 +826,10 @@ void _dl_exception_create (struct dl_exception *, const char *object,
   __attribute__ ((nonnull (1, 3)));
 rtld_hidden_proto (_dl_exception_create)
 
+/* Used internally to implement dlerror message freeing.  See
+   include/dlfcn.h and dlfcn/dlerror.c.  */
+void _dl_error_free (void *ptr) attribute_hidden;
+
 /* Like _dl_exception_create, but create errstring from a format
    string FMT.  Currently, only "%s" and "%%" are supported as format
    directives.  */
-- 
2.29.2



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

* [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (19 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773] Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-23 16:39   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization Florian Weimer
                   ` (17 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

And libc-lockP.h.  This is no longer used because all internal
TLS use goes directly to the thread descriptor/TCB or uses ELF TLS.
---
 sysdeps/generic/libc-lock.h | 12 ------------
 sysdeps/htl/libc-lockP.h    | 13 -------------
 sysdeps/nptl/libc-lockP.h   | 24 ------------------------
 3 files changed, 49 deletions(-)

diff --git a/sysdeps/generic/libc-lock.h b/sysdeps/generic/libc-lock.h
index 6b1e98e34d..c538e858ea 100644
--- a/sysdeps/generic/libc-lock.h
+++ b/sysdeps/generic/libc-lock.h
@@ -125,16 +125,4 @@
 /* We need portable names for some of the functions.  */
 #define __libc_mutex_unlock
 
-/* Type for key of thread specific data.  */
-typedef int __libc_key_t;
-
-/* Create key for thread specific data.  */
-#define __libc_key_create(KEY,DEST)	((void) (KEY), (void) (DEST), -1)
-
-/* Set thread-specific data associated with KEY to VAL.  */
-#define __libc_setspecific(KEY,VAL)	((void) (KEY), (void) (VAL))
-
-/* Get thread-specific data associated with KEY.  */
-#define __libc_getspecific(KEY)		((void) (KEY), (void *) 0)
-
 #endif	/* libc-lock.h */
diff --git a/sysdeps/htl/libc-lockP.h b/sysdeps/htl/libc-lockP.h
index f183bde680..eb09171c85 100644
--- a/sysdeps/htl/libc-lockP.h
+++ b/sysdeps/htl/libc-lockP.h
@@ -22,9 +22,6 @@
 #include <pthread.h>
 #include <pthread-functions.h>
 
-/* Type for key to thread-specific data.  */
-typedef pthread_key_t __libc_key_t;
-
 /* If we check for a weakly referenced symbol and then perform a
    normal jump to it te code generated for some platforms in case of
    PIC is unnecessarily slow.  What would happen is that the function
@@ -109,16 +106,6 @@ extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
 
 extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
 
-extern int __pthread_key_create (pthread_key_t *__key,
-				 void (*__destr_function) (void *));
-
-extern int __pthread_key_delete (pthread_key_t __key);
-
-extern int __pthread_setspecific (pthread_key_t __key,
-				  const void *__pointer);
-
-extern void *__pthread_getspecific (pthread_key_t __key);
-
 extern int __pthread_once (pthread_once_t *__once_control,
 			   void (*__init_routine) (void));
 
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index df62ce0e61..d032463dd0 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -49,9 +49,6 @@ typedef int __libc_lock_t;
 typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
 typedef pthread_rwlock_t __libc_rwlock_t;
 
-/* Type for key to thread-specific data.  */
-typedef pthread_key_t __libc_key_t;
-
 /* Define a lock variable NAME with storage class CLASS.  The lock must be
    initialized with __libc_lock_init before it can be used (or define it
    with __libc_lock_define_initialized, below).  Use `extern' for CLASS to
@@ -267,19 +264,6 @@ __libc_cleanup_routine (struct __pthread_cleanup_frame *f)
   } while (0)
 #endif /* __EXCEPTIONS */
 
-/* Create thread-specific key.  */
-#define __libc_key_create(KEY, DESTRUCTOR) \
-  __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1)
-
-/* Get thread-specific data.  */
-#define __libc_getspecific(KEY) \
-  __libc_ptf_call (__pthread_getspecific, (KEY), NULL)
-
-/* Set thread-specific data.  */
-#define __libc_setspecific(KEY, VALUE) \
-  __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0)
-
-
 /* Register handlers to execute before and after `fork'.  Note that the
    last parameter is NULL.  The handlers registered by the libc are
    never removed so this is OK.  */
@@ -324,14 +308,6 @@ extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
 
 extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
 
-extern int __pthread_key_create (pthread_key_t *__key,
-				 void (*__destr_function) (void *));
-
-extern int __pthread_setspecific (pthread_key_t __key,
-				  const void *__pointer);
-
-extern void *__pthread_getspecific (pthread_key_t __key);
-
 extern int __pthread_once (pthread_once_t *__once_control,
 			   void (*__init_routine) (void));
 libc_hidden_proto (__pthread_once)
-- 
2.29.2



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

* [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (20 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-23 18:25   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp Florian Weimer
                   ` (16 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

TLS_INIT_TP is processor-specific, so it is not a good place to
put thread library initialization code (it would have to be repeated
for all CPUs).  Introduce __tls_init_tp as a separate function,
to be called immediately after TLS_INIT_TP.  Move the existing
stack list setup code for NPTL to this function.
---
 csu/libc-tls.c                |  8 +-------
 elf/Makefile                  |  2 +-
 elf/dl-tls_init_tp.c          | 24 ++++++++++++++++++++++++
 elf/rtld.c                    | 14 ++------------
 sysdeps/generic/ldsodefs.h    |  5 +++++
 sysdeps/nptl/dl-tls_init_tp.c | 30 ++++++++++++++++++++++++++++++
 6 files changed, 63 insertions(+), 20 deletions(-)
 create mode 100644 elf/dl-tls_init_tp.c
 create mode 100644 sysdeps/nptl/dl-tls_init_tp.c

diff --git a/csu/libc-tls.c b/csu/libc-tls.c
index f3a6a6a075..22f8e4838d 100644
--- a/csu/libc-tls.c
+++ b/csu/libc-tls.c
@@ -24,7 +24,6 @@
 #include <stdio.h>
 #include <sys/param.h>
 #include <array_length.h>
-#include <list.h>
 
 #ifdef SHARED
  #error makefile bug, this file is for static only
@@ -193,12 +192,7 @@ __libc_setup_tls (void)
 #endif
   if (__builtin_expect (lossage != NULL, 0))
     _startup_fatal (lossage);
-
-#if THREAD_GSCOPE_IN_TCB
-  INIT_LIST_HEAD (&_dl_stack_used);
-  INIT_LIST_HEAD (&_dl_stack_user);
-  list_add (&THREAD_SELF->list, &_dl_stack_user);
-#endif
+  __tls_init_tp ();
 
   /* Update the executable's link map with enough information to make
      the TLS routines happy.  */
diff --git a/elf/Makefile b/elf/Makefile
index deb76aed99..22b3a06cab 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -35,7 +35,7 @@ dl-routines	= $(addprefix dl-,load lookup object reloc deps \
 				  execstack open close trampoline \
 				  exception sort-maps lookup-direct \
 				  call-libc-early-init write \
-				  thread_gscope_wait)
+				  thread_gscope_wait tls_init_tp)
 ifeq (yes,$(use-ldconfig))
 dl-routines += dl-cache
 endif
diff --git a/elf/dl-tls_init_tp.c b/elf/dl-tls_init_tp.c
new file mode 100644
index 0000000000..728cd84c00
--- /dev/null
+++ b/elf/dl-tls_init_tp.c
@@ -0,0 +1,24 @@
+/* Completion of TCB initialization after TLS_INIT_TP.  Generic 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 <ldsodefs.h>
+
+void
+__tls_init_tp (void)
+{
+}
diff --git a/elf/rtld.c b/elf/rtld.c
index c2ca4b7ce3..34879016ad 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -48,7 +48,6 @@
 #include <array_length.h>
 #include <libc-early-init.h>
 #include <dl-main.h>
-#include <list.h>
 #include <gnu/lib-names.h>
 #include <dl-tunables.h>
 
@@ -807,9 +806,7 @@ cannot allocate TLS data structures for initial thread\n");
   const char *lossage = TLS_INIT_TP (tcbp);
   if (__glibc_unlikely (lossage != NULL))
     _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
-#if THREAD_GSCOPE_IN_TCB
-  list_add (&THREAD_SELF->list, &GL (dl_stack_user));
-#endif
+  __tls_init_tp ();
   tls_init_tp_called = true;
 
   return tcbp;
@@ -1150,11 +1147,6 @@ dl_main (const ElfW(Phdr) *phdr,
   GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive;
 #endif
 
-#if THREAD_GSCOPE_IN_TCB
-  INIT_LIST_HEAD (&GL (dl_stack_used));
-  INIT_LIST_HEAD (&GL (dl_stack_user));
-#endif
-
   /* The explicit initialization here is cheaper than processing the reloc
      in the _rtld_local definition's initializer.  */
   GL(dl_make_stack_executable_hook) = &_dl_make_stack_executable;
@@ -2454,9 +2446,7 @@ dl_main (const ElfW(Phdr) *phdr,
       if (__glibc_unlikely (lossage != NULL))
 	_dl_fatal_printf ("cannot set up thread-local storage: %s\n",
 			  lossage);
-#if THREAD_GSCOPE_IN_TCB
-      list_add (&THREAD_SELF->list, &GL (dl_stack_user));
-#endif
+      __tls_init_tp ();
     }
 
   /* Make sure no new search directories have been added.  */
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index dfc117a445..67c6686015 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -1163,6 +1163,11 @@ extern void _dl_determine_tlsoffset (void) attribute_hidden;
    number of audit modules are loaded.  */
 void _dl_tls_static_surplus_init (size_t naudit) attribute_hidden;
 
+/* This function is called after processor-specific initialization of
+   the TCB and thread pointer via TLS_INIT_TP, to complete very early
+   initialization of the thread library.  */
+void __tls_init_tp (void) attribute_hidden;
+
 #ifndef SHARED
 /* Set up the TCB for statically linked applications.  This is called
    early during startup because we always use TLS (for errno and the
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
new file mode 100644
index 0000000000..8983808233
--- /dev/null
+++ b/sysdeps/nptl/dl-tls_init_tp.c
@@ -0,0 +1,30 @@
+/* Completion of TCB initialization after TLS_INIT_TP.  NPTL version.
+   Copyright (C) 2020-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 <ldsodefs.h>
+#include <list.h>
+#include <tls.h>
+
+void
+__tls_init_tp (void)
+{
+  /* Set up thread stack list management.  */
+  INIT_LIST_HEAD (&GL (dl_stack_used));
+  INIT_LIST_HEAD (&GL (dl_stack_user));
+  list_add (&THREAD_SELF->list, &GL (dl_stack_user));
+}
-- 
2.29.2



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

* [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (21 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-24 13:56   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc Florian Weimer
                   ` (15 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

This initalization should only happen once for the main thread's TCB.
At present, auditors can achieve this by not linking against
libpthread.  If libpthread becomes part of libc, doing this
initialization in libc would happen for every audit namespace,
or too late (if it happens from the main libc only).  That's why
moving this code into ld.so seems the right thing to do, right after
the TCB initialization.

For !__ASSUME_SET_ROBUST_LIST ports, this also moves the symbol
__set_robust_list_avail into ld.so, as __nptl_set_robust_list_avail.
It also turned into a proper boolean flag.

Inline the __pthread_initialize_pids function because it seems no
longer useful as a separate function.
---
 nptl/Versions                          |  6 +++++
 nptl/nptl-init.c                       | 36 ++-----------------------
 nptl/pthread-pids.h                    | 29 --------------------
 nptl/pthreadP.h                        |  6 +++--
 nptl/pthread_create.c                  |  4 +--
 nptl/pthread_mutex_init.c              |  2 +-
 sysdeps/nptl/dl-tls_init_tp.c          | 37 ++++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/pthread-pids.h | 29 --------------------
 8 files changed, 52 insertions(+), 97 deletions(-)
 delete mode 100644 nptl/pthread-pids.h
 delete mode 100644 sysdeps/unix/sysv/linux/pthread-pids.h

diff --git a/nptl/Versions b/nptl/Versions
index b619df41fb..c50a5442af 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -417,3 +417,9 @@ libpthread {
     __pthread_initialize_minimal;
   }
 }
+
+ld {
+  GLIBC_PRIVATE {
+     __nptl_set_robust_list_avail;
+  }
+}
\ No newline at end of file
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index de64e34783..5913bf7272 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -36,7 +36,6 @@
 #include <futex-internal.h>
 #include <kernel-features.h>
 #include <libc-pointer-arith.h>
-#include <pthread-pids.h>
 #include <pthread_mutex_conf.h>
 
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
@@ -48,15 +47,6 @@ int *__libc_multiple_threads_ptr attribute_hidden;
 size_t __static_tls_size;
 size_t __static_tls_align_m1;
 
-#ifndef __ASSUME_SET_ROBUST_LIST
-/* Negative if we do not have the system call and we can use it.  */
-int __set_robust_list_avail;
-# define set_robust_list_not_avail() \
-  __set_robust_list_avail = -1
-#else
-# define set_robust_list_not_avail() do { } while (0)
-#endif
-
 /* Version of the library, used in libthread_db to detect mismatches.  */
 static const char nptl_version[] __attribute_used__ = VERSION;
 
@@ -194,31 +184,9 @@ static bool __nptl_initial_report_events __attribute_used__;
 void
 __pthread_initialize_minimal_internal (void)
 {
-  /* Minimal initialization of the thread descriptor.  */
+  /* Partial initialization of the TCB already happened in TLS_INIT_TP
+     and __tls_init_tp.  */
   struct pthread *pd = THREAD_SELF;
-  __pthread_initialize_pids (pd);
-  THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
-  THREAD_SETMEM (pd, user_stack, true);
-
-  /* Initialize the robust mutex data.  */
-  {
-#if __PTHREAD_MUTEX_HAVE_PREV
-    pd->robust_prev = &pd->robust_head;
-#endif
-    pd->robust_head.list = &pd->robust_head;
-    pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
-				    - offsetof (pthread_mutex_t,
-						__data.__list.__next));
-    int res = INTERNAL_SYSCALL_CALL (set_robust_list, &pd->robust_head,
-				     sizeof (struct robust_list_head));
-    if (INTERNAL_SYSCALL_ERROR_P (res))
-      set_robust_list_not_avail ();
-  }
-
-  /* Set initial thread's stack block from 0 up to __libc_stack_end.
-     It will be bigger than it actually is, but for unwind.c/pt-longjmp.c
-     purposes this is good enough.  */
-  THREAD_SETMEM (pd, stackblock_size, (size_t) __libc_stack_end);
 
   /* Before initializing GL (dl_stack_user), the debugger could not
      find us and had to set __nptl_initial_report_events.  Propagate
diff --git a/nptl/pthread-pids.h b/nptl/pthread-pids.h
deleted file mode 100644
index 1a0e9ade41..0000000000
--- a/nptl/pthread-pids.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Initialize pid and tid fields of struct pthread.  Stub version.
-   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/>.  */
-
-#include <pthreadP.h>
-
-/* Initialize PD->pid and PD->tid for the initial thread.  If there is
-   setup required to arrange that __exit_thread causes PD->tid to be
-   cleared and futex-woken, then this function should do that as well.  */
-static inline void
-__pthread_initialize_pids (struct pthread *pd)
-{
-#error "sysdeps pthread-pids.h file required"
-  pd->pid = pd->tid = -1;
-}
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 4b486b3577..68f8ef5aa1 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -224,8 +224,10 @@ 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.  */
-extern int __set_robust_list_avail attribute_hidden;
+/* True if the set_robust_list system call works.  Initialized in
+   __tls_init_tp.  */
+extern bool __nptl_set_robust_list_avail;
+rtld_hidden_proto (__nptl_set_robust_list_avail)
 #endif
 
 /* Thread Priority Protection.  */
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 58e10e7741..51340acc4d 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -289,7 +289,7 @@ START_THREAD_DEFN
   __ctype_init ();
 
 #ifndef __ASSUME_SET_ROBUST_LIST
-  if (__set_robust_list_avail >= 0)
+  if (__nptl_set_robust_list_avail)
 #endif
     {
       /* This call should never fail because the initial call in init.c
@@ -439,7 +439,7 @@ START_THREAD_DEFN
   /* We let the kernel do the notification if it is able to do so.
      If we have to do it here there for sure are no PI mutexes involved
      since the kernel support for them is even more recent.  */
-  if (__set_robust_list_avail < 0
+  if (!__nptl_set_robust_list_avail
       && __builtin_expect (robust != (void *) &pd->robust_head, 0))
     {
       do
diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
index 233cebc504..f5c3a4b464 100644
--- a/nptl/pthread_mutex_init.c
+++ b/nptl/pthread_mutex_init.c
@@ -95,7 +95,7 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
     {
 #ifndef __ASSUME_SET_ROBUST_LIST
       if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_PSHARED) != 0
-	  && __set_robust_list_avail < 0)
+	  && !__nptl_set_robust_list_avail)
 	return ENOTSUP;
 #endif
 
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
index 8983808233..c5172b7613 100644
--- a/sysdeps/nptl/dl-tls_init_tp.c
+++ b/sysdeps/nptl/dl-tls_init_tp.c
@@ -16,10 +16,17 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <kernel-features.h>
 #include <ldsodefs.h>
 #include <list.h>
+#include <nptl/pthreadP.h>
 #include <tls.h>
 
+#ifndef __ASSUME_SET_ROBUST_LIST
+bool __nptl_set_robust_list_avail;
+rtld_hidden_data_def (__nptl_set_robust_list_avail)
+#endif
+
 void
 __tls_init_tp (void)
 {
@@ -27,4 +34,34 @@ __tls_init_tp (void)
   INIT_LIST_HEAD (&GL (dl_stack_used));
   INIT_LIST_HEAD (&GL (dl_stack_user));
   list_add (&THREAD_SELF->list, &GL (dl_stack_user));
+
+   /* Early initialization of the TCB.   */
+   struct pthread *pd = THREAD_SELF;
+   pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, &pd->tid);
+   THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
+   THREAD_SETMEM (pd, user_stack, true);
+
+  /* Initialize the robust mutex data.  */
+  {
+#if __PTHREAD_MUTEX_HAVE_PREV
+    pd->robust_prev = &pd->robust_head;
+#endif
+    pd->robust_head.list = &pd->robust_head;
+    pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
+                                    - offsetof (pthread_mutex_t,
+                                                __data.__list.__next));
+    int res = INTERNAL_SYSCALL_CALL (set_robust_list, &pd->robust_head,
+                                     sizeof (struct robust_list_head));
+    if (!INTERNAL_SYSCALL_ERROR_P (res))
+      {
+#ifndef __ASSUME_SET_ROBUST_LIST
+        __nptl_set_robust_list_avail = true;
+#endif
+      }
+  }
+
+  /* Set initial thread's stack block from 0 up to __libc_stack_end.
+     It will be bigger than it actually is, but for unwind.c/pt-longjmp.c
+     purposes this is good enough.  */
+  THREAD_SETMEM (pd, stackblock_size, (size_t) __libc_stack_end);
 }
diff --git a/sysdeps/unix/sysv/linux/pthread-pids.h b/sysdeps/unix/sysv/linux/pthread-pids.h
deleted file mode 100644
index 10b58899f5..0000000000
--- a/sysdeps/unix/sysv/linux/pthread-pids.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Initialize pid and tid fields of struct pthread.  Linux version.
-   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/>.  */
-
-#include <pthreadP.h>
-#include <sysdep.h>
-
-/* Initialize PD->pid and PD->tid for the initial thread.  If there is
-   setup required to arrange that __exit_thread causes PD->tid to be
-   cleared and futex-woken, then this function should do that as well.  */
-static inline void
-__pthread_initialize_pids (struct pthread *pd)
-{
-  pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, &pd->tid);
-}
-- 
2.29.2



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

* [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (22 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-24 14:09   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific " Florian Weimer
                   ` (14 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

The symbols have been moved using scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 |  6 ++++--
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  1 -
 nptl/pthread_key_create.c                     | 21 +++++++++++++++----
 sysdeps/nptl/libc-lockP.h                     |  2 --
 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 --
 68 files changed, 150 insertions(+), 70 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 098c31115f..4255953fad 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -78,6 +78,7 @@ routines = \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
+  pthread_key_create \
   pthread_keys \
   pthread_mutex_consistent \
   pthread_once \
@@ -160,7 +161,6 @@ libpthread-routines = \
   pthread_getspecific \
   pthread_join \
   pthread_join_common \
-  pthread_key_create \
   pthread_key_delete \
   pthread_kill \
   pthread_kill_other_threads \
diff --git a/nptl/Versions b/nptl/Versions
index c50a5442af..d44958f5b6 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -1,5 +1,6 @@
 libc {
   GLIBC_2.0 {
+    __pthread_key_create;
     __pthread_once;
     _pthread_cleanup_pop;
     _pthread_cleanup_pop_restore;
@@ -28,6 +29,7 @@ libc {
     pthread_equal;
     pthread_exit;
     pthread_getschedparam;
+    pthread_key_create;
     pthread_mutex_destroy;
     pthread_mutex_init;
     pthread_mutex_lock;
@@ -86,7 +88,9 @@ libc {
   }
   GLIBC_2.34 {
     __pthread_cleanup_routine;
+    __pthread_key_create;
     __pthread_once;
+    pthread_key_create;
     pthread_mutex_consistent;
     pthread_once;
   }
@@ -143,7 +147,6 @@ libpthread {
     __open;
     __pthread_atfork;
     __pthread_getspecific;
-    __pthread_key_create;
     __pthread_mutex_destroy;
     __pthread_mutex_init;
     __pthread_mutex_lock;
@@ -180,7 +183,6 @@ libpthread {
     pthread_detach;
     pthread_getspecific;
     pthread_join;
-    pthread_key_create;
     pthread_key_delete;
     pthread_kill;
     pthread_kill_other_threads_np;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 5913bf7272..b1a8b1a95b 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
     .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
-    .ptr___pthread_key_create = __pthread_key_create,
     .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
     .ptr__nptl_setxid = __nptl_setxid,
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 68f8ef5aa1..38aeed1dfc 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -553,7 +553,6 @@ hidden_proto (__pthread_mutex_unlock)
 hidden_proto (__pthread_rwlock_rdlock)
 hidden_proto (__pthread_rwlock_wrlock)
 hidden_proto (__pthread_rwlock_unlock)
-hidden_proto (__pthread_key_create)
 hidden_proto (__pthread_getspecific)
 hidden_proto (__pthread_setspecific)
 hidden_proto (__pthread_testcancel)
diff --git a/nptl/pthread_key_create.c b/nptl/pthread_key_create.c
index 5b725c56e2..5b3726e9f3 100644
--- a/nptl/pthread_key_create.c
+++ b/nptl/pthread_key_create.c
@@ -19,10 +19,10 @@
 #include <errno.h>
 #include "pthreadP.h"
 #include <atomic.h>
-
+#include <shlib-compat.h>
 
 int
-__pthread_key_create (pthread_key_t *key, void (*destr) (void *))
+__pthread_key_create_1 (pthread_key_t *key, void (*destr) (void *))
 {
   /* Find a slot in __pthread_keys which is unused.  */
   for (size_t cnt = 0; cnt < PTHREAD_KEYS_MAX; ++cnt)
@@ -47,5 +47,18 @@ __pthread_key_create (pthread_key_t *key, void (*destr) (void *))
 
   return EAGAIN;
 }
-weak_alias (__pthread_key_create, pthread_key_create)
-hidden_def (__pthread_key_create)
+versioned_symbol (libc, __pthread_key_create_1, __pthread_key_create,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_key_create_1, __pthread_key_create)
+
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_key_create_1, __pthread_key_create_2)
+strong_alias (__pthread_key_create_1, __pthread_key_create_3)
+strong_alias (__pthread_key_create_1, __pthread_key_create_4)
+
+versioned_symbol (libc, __pthread_key_create_2, pthread_key_create,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, __pthread_key_create_3, __pthread_key_create, GLIBC_2_0);
+compat_symbol (libc, __pthread_key_create_4, pthread_key_create, GLIBC_2_0);
+#endif
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index d032463dd0..64c7a99bbf 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -338,7 +338,6 @@ weak_extern (__pthread_rwlock_tryrdlock)
 weak_extern (__pthread_rwlock_wrlock)
 weak_extern (__pthread_rwlock_trywrlock)
 weak_extern (__pthread_rwlock_unlock)
-weak_extern (__pthread_key_create)
 weak_extern (__pthread_setspecific)
 weak_extern (__pthread_getspecific)
 weak_extern (__pthread_initialize)
@@ -358,7 +357,6 @@ weak_extern (__pthread_atfork)
 #  pragma weak __pthread_rwlock_wrlock
 #  pragma weak __pthread_rwlock_trywrlock
 #  pragma weak __pthread_rwlock_unlock
-#  pragma weak __pthread_key_create
 #  pragma weak __pthread_setspecific
 #  pragma weak __pthread_getspecific
 #  pragma weak __pthread_initialize
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 844838cd49..69ba1d8278 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -49,7 +49,6 @@ struct pthread_functions
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
-  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 *);
   int (*ptr__nptl_setxid) (struct xid_command *);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index a4eec97fd0..edd8ff4e1a 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_key_create F
 GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
@@ -1449,6 +1450,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
@@ -2183,7 +2185,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 47c5564772..620915eca6 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
 GLIBC_2.17 __pthread_getspecific F
-GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_mutex_destroy F
 GLIBC_2.17 __pthread_mutex_init F
 GLIBC_2.17 __pthread_mutex_lock F
@@ -89,7 +88,6 @@ GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
-GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index cfd43859bc..ad921167a2 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
@@ -888,6 +889,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2264,8 +2266,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 1d834d6d54..85a6f26e5d 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index f4a38131a0..2bdf0fffdb 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_key_create F
 GLIBC_2.32 __pthread_once F
 GLIBC_2.32 __pthread_unwind_next F
 GLIBC_2.32 __ptsname_r_chk F
@@ -1376,6 +1377,7 @@ GLIBC_2.32 pthread_exit F
 GLIBC_2.32 pthread_getaffinity_np F
 GLIBC_2.32 pthread_getattr_np F
 GLIBC_2.32 pthread_getschedparam F
+GLIBC_2.32 pthread_key_create F
 GLIBC_2.32 pthread_mutex_consistent F
 GLIBC_2.32 pthread_mutex_consistent_np F
 GLIBC_2.32 pthread_mutex_destroy F
@@ -1943,7 +1945,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 3c1054101c..d79ba9adbf 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.32 __open F
 GLIBC_2.32 __open64 F
 GLIBC_2.32 __pread64 F
 GLIBC_2.32 __pthread_getspecific F
-GLIBC_2.32 __pthread_key_create F
 GLIBC_2.32 __pthread_mutex_destroy F
 GLIBC_2.32 __pthread_mutex_init F
 GLIBC_2.32 __pthread_mutex_lock F
@@ -103,7 +102,6 @@ GLIBC_2.32 pthread_getcpuclockid F
 GLIBC_2.32 pthread_getname_np F
 GLIBC_2.32 pthread_getspecific F
 GLIBC_2.32 pthread_join F
-GLIBC_2.32 pthread_key_create F
 GLIBC_2.32 pthread_key_delete F
 GLIBC_2.32 pthread_kill F
 GLIBC_2.32 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 9e6b989de2..451c02d687 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -158,8 +158,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -490,6 +492,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_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1548,6 +1551,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_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index c2892c4b8d..d00e0e9258 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -48,7 +48,6 @@ GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
 GLIBC_2.4 __pthread_getspecific F
-GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
-GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 319cf8474a..873d6c3f22 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -155,8 +155,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -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_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1545,6 +1548,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_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index c2892c4b8d..d00e0e9258 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -48,7 +48,6 @@ GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
 GLIBC_2.4 __pthread_getspecific F
-GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
-GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index a9094c6575..d9149b68cc 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_key_create F
 GLIBC_2.29 __pthread_once F
 GLIBC_2.29 __pthread_unwind_next F
 GLIBC_2.29 __ptsname_r_chk F
@@ -1437,6 +1438,7 @@ GLIBC_2.29 pthread_exit F
 GLIBC_2.29 pthread_getaffinity_np F
 GLIBC_2.29 pthread_getattr_np F
 GLIBC_2.29 pthread_getschedparam F
+GLIBC_2.29 pthread_key_create F
 GLIBC_2.29 pthread_mutex_consistent F
 GLIBC_2.29 pthread_mutex_consistent_np F
 GLIBC_2.29 pthread_mutex_destroy F
@@ -2127,7 +2129,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 2d125f11a3..e3721d98e6 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.29 __open F
 GLIBC_2.29 __open64 F
 GLIBC_2.29 __pread64 F
 GLIBC_2.29 __pthread_getspecific F
-GLIBC_2.29 __pthread_key_create F
 GLIBC_2.29 __pthread_mutex_destroy F
 GLIBC_2.29 __pthread_mutex_init F
 GLIBC_2.29 __pthread_mutex_lock F
@@ -101,7 +100,6 @@ GLIBC_2.29 pthread_getcpuclockid F
 GLIBC_2.29 pthread_getname_np F
 GLIBC_2.29 pthread_getspecific F
 GLIBC_2.29 pthread_join F
-GLIBC_2.29 pthread_key_create F
 GLIBC_2.29 pthread_key_delete F
 GLIBC_2.29 pthread_kill F
 GLIBC_2.29 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 63e458dc99..938fa14288 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1272,6 +1273,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2085,8 +2087,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 428ff25c25..425d1df5a3 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -865,6 +866,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2252,8 +2254,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 1d84eb35fb..b186b3039b 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 3556b0eac4..c34b5a157d 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1293,6 +1294,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2117,8 +2119,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 88e178b1c3..b49b6ef57a 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 245ae8da1f..56d55caed9 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -159,8 +159,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.4 _Exit F
@@ -476,6 +478,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_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1528,6 +1531,7 @@ GLIBC_2.4 pthread_exit F
 GLIBC_2.4 pthread_getaffinity_np F
 GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
+GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index c2892c4b8d..d00e0e9258 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -48,7 +48,6 @@ GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
 GLIBC_2.4 __pthread_getspecific F
-GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
-GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index fba3ac0138..a3b3bf4f74 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -864,6 +865,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2197,8 +2199,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 1d84eb35fb..b186b3039b 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 6a6d813b2c..75213c08d4 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_key_create F
 GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
@@ -1452,6 +1453,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
@@ -2178,7 +2180,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 b19c648328..ca115fe783 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
 GLIBC_2.18 __pthread_getspecific F
-GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_mutex_destroy F
 GLIBC_2.18 __pthread_mutex_init F
 GLIBC_2.18 __pthread_mutex_lock F
@@ -90,7 +89,6 @@ GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
-GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 7138bb3fe7..014d53f893 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_key_create F
 GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
@@ -1452,6 +1453,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
@@ -2175,7 +2177,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 b19c648328..ca115fe783 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
 GLIBC_2.18 __pthread_getspecific F
-GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_mutex_destroy F
 GLIBC_2.18 __pthread_mutex_init F
 GLIBC_2.18 __pthread_mutex_lock F
@@ -90,7 +89,6 @@ GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
-GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index d070746259..46c7716ee6 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2168,8 +2170,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 0d7d23b8f3..2b830751c8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index d40d0079fc..5666362839 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2166,8 +2168,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 0d7d23b8f3..2b830751c8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index d56b5a25cb..97866f80c7 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2174,8 +2176,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 d334efb37c..3d9321f9e0 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
@@ -859,6 +860,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2168,8 +2170,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 4422b5ca92..3a0c0c5d8a 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_key_create F
 GLIBC_2.21 __pthread_once F
 GLIBC_2.21 __pthread_unwind_next F
 GLIBC_2.21 __ptsname_r_chk F
@@ -1494,6 +1495,7 @@ GLIBC_2.21 pthread_exit F
 GLIBC_2.21 pthread_getaffinity_np F
 GLIBC_2.21 pthread_getattr_np F
 GLIBC_2.21 pthread_getschedparam F
+GLIBC_2.21 pthread_key_create F
 GLIBC_2.21 pthread_mutex_consistent F
 GLIBC_2.21 pthread_mutex_consistent_np F
 GLIBC_2.21 pthread_mutex_destroy F
@@ -2216,7 +2218,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 34c81eb8db..06500b1865 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.21 __open F
 GLIBC_2.21 __open64 F
 GLIBC_2.21 __pread64 F
 GLIBC_2.21 __pthread_getspecific F
-GLIBC_2.21 __pthread_key_create F
 GLIBC_2.21 __pthread_mutex_destroy F
 GLIBC_2.21 __pthread_mutex_init F
 GLIBC_2.21 __pthread_mutex_lock F
@@ -90,7 +89,6 @@ GLIBC_2.21 pthread_getcpuclockid F
 GLIBC_2.21 pthread_getname_np F
 GLIBC_2.21 pthread_getspecific F
 GLIBC_2.21 pthread_join F
-GLIBC_2.21 pthread_key_create F
 GLIBC_2.21 pthread_key_delete F
 GLIBC_2.21 pthread_kill F
 GLIBC_2.21 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 8bd6dd5b48..c01a200e83 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -872,6 +873,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2224,8 +2226,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 9ef23ed6d6..d36522b751 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 6bf7342f4c..3eced88f9f 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -872,6 +873,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2257,8 +2259,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 2d616e24cd..35b689a767 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_key_create F
 GLIBC_2.3 __pthread_once F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __rawmemchr F
@@ -1379,6 +1380,7 @@ GLIBC_2.3 pthread_equal F
 GLIBC_2.3 pthread_exit F
 GLIBC_2.3 pthread_getattr_np F
 GLIBC_2.3 pthread_getschedparam F
+GLIBC_2.3 pthread_key_create F
 GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
 GLIBC_2.3 pthread_mutex_lock F
@@ -2087,8 +2089,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 5474d3eb4d..2d24956efe 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -42,7 +42,6 @@ GLIBC_2.3 __open F
 GLIBC_2.3 __open64 F
 GLIBC_2.3 __pread64 F
 GLIBC_2.3 __pthread_getspecific F
-GLIBC_2.3 __pthread_key_create F
 GLIBC_2.3 __pthread_mutex_destroy F
 GLIBC_2.3 __pthread_mutex_init F
 GLIBC_2.3 __pthread_mutex_lock F
@@ -108,7 +107,6 @@ GLIBC_2.3 pthread_getconcurrency F
 GLIBC_2.3 pthread_getcpuclockid F
 GLIBC_2.3 pthread_getspecific F
 GLIBC_2.3 pthread_join F
-GLIBC_2.3 pthread_key_create F
 GLIBC_2.3 pthread_key_delete F
 GLIBC_2.3 pthread_kill F
 GLIBC_2.3 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 247c8f77cf..d54a37f8ad 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_key_create F
 GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
@@ -1538,6 +1539,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
@@ -2378,7 +2380,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 47c5564772..620915eca6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
 GLIBC_2.17 __pthread_getspecific F
-GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_mutex_destroy F
 GLIBC_2.17 __pthread_mutex_init F
 GLIBC_2.17 __pthread_mutex_lock F
@@ -89,7 +88,6 @@ GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
-GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 1af16292a7..e82a4a7a90 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_key_create F
 GLIBC_2.33 __pthread_once F
 GLIBC_2.33 __pthread_unwind_next F
 GLIBC_2.33 __ptsname_r_chk F
@@ -1378,6 +1379,7 @@ GLIBC_2.33 pthread_exit F
 GLIBC_2.33 pthread_getaffinity_np F
 GLIBC_2.33 pthread_getattr_np F
 GLIBC_2.33 pthread_getschedparam F
+GLIBC_2.33 pthread_key_create F
 GLIBC_2.33 pthread_mutex_consistent F
 GLIBC_2.33 pthread_mutex_consistent_np F
 GLIBC_2.33 pthread_mutex_destroy F
@@ -1945,7 +1947,9 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 e86e8cab1d..c2dd7f8dee 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -13,7 +13,6 @@ GLIBC_2.33 __open F
 GLIBC_2.33 __open64 F
 GLIBC_2.33 __pread64 F
 GLIBC_2.33 __pthread_getspecific F
-GLIBC_2.33 __pthread_key_create F
 GLIBC_2.33 __pthread_mutex_destroy F
 GLIBC_2.33 __pthread_mutex_init F
 GLIBC_2.33 __pthread_mutex_lock F
@@ -103,7 +102,6 @@ GLIBC_2.33 pthread_getcpuclockid F
 GLIBC_2.33 pthread_getname_np F
 GLIBC_2.33 pthread_getspecific F
 GLIBC_2.33 pthread_join F
-GLIBC_2.33 pthread_key_create F
 GLIBC_2.33 pthread_key_delete F
 GLIBC_2.33 pthread_kill F
 GLIBC_2.33 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 54038ac5ba..0c81f1a72c 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_key_create F
 GLIBC_2.27 __pthread_once F
 GLIBC_2.27 __pthread_unwind_next F
 GLIBC_2.27 __ptsname_r_chk F
@@ -1440,6 +1441,7 @@ GLIBC_2.27 pthread_exit F
 GLIBC_2.27 pthread_getaffinity_np F
 GLIBC_2.27 pthread_getattr_np F
 GLIBC_2.27 pthread_getschedparam F
+GLIBC_2.27 pthread_key_create F
 GLIBC_2.27 pthread_mutex_consistent F
 GLIBC_2.27 pthread_mutex_consistent_np F
 GLIBC_2.27 pthread_mutex_destroy F
@@ -2145,7 +2147,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 220affa7f0..d53306f3cb 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.27 __open F
 GLIBC_2.27 __open64 F
 GLIBC_2.27 __pread64 F
 GLIBC_2.27 __pthread_getspecific F
-GLIBC_2.27 __pthread_key_create F
 GLIBC_2.27 __pthread_mutex_destroy F
 GLIBC_2.27 __pthread_mutex_init F
 GLIBC_2.27 __pthread_mutex_lock F
@@ -90,7 +89,6 @@ GLIBC_2.27 pthread_getcpuclockid F
 GLIBC_2.27 pthread_getname_np F
 GLIBC_2.27 pthread_getspecific F
 GLIBC_2.27 pthread_join F
-GLIBC_2.27 pthread_key_create F
 GLIBC_2.27 pthread_key_delete F
 GLIBC_2.27 pthread_kill F
 GLIBC_2.27 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 1e896254ef..ca08d2f3f5 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -863,6 +864,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2222,8 +2224,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 81b8d5ce5c..accbf2be59 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 3cf10b2ab2..061e0c6ffa 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1290,6 +1291,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2123,8 +2125,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 b916709d08..9d6d87494a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -22,7 +22,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -89,7 +88,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index f7bded858a..d102c24997 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1276,6 +1277,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2092,8 +2094,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index c8ec299eac..3ed1b31c84 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1276,6 +1277,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2089,8 +2091,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 64529443e9..78f69c96ab 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_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
@@ -866,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2213,8 +2215,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 1d834d6d54..85a6f26e5d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
 GLIBC_2.0 __pthread_getspecific F
-GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 5c5ad0af63..49d6360768 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_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1319,6 +1320,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2140,8 +2142,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 88e178b1c3..b49b6ef57a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_getspecific F
-GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 1805cd6b9b..c795ffb505 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_key_create F
 GLIBC_2.2.5 __pthread_once F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __rawmemchr F
@@ -1287,6 +1288,7 @@ GLIBC_2.2.5 pthread_equal F
 GLIBC_2.2.5 pthread_exit F
 GLIBC_2.2.5 pthread_getattr_np F
 GLIBC_2.2.5 pthread_getschedparam F
+GLIBC_2.2.5 pthread_key_create F
 GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
 GLIBC_2.2.5 pthread_mutex_lock F
@@ -2099,8 +2101,10 @@ 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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 f11ffd687f..0408564253 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2.5 __open F
 GLIBC_2.2.5 __open64 F
 GLIBC_2.2.5 __pread64 F
 GLIBC_2.2.5 __pthread_getspecific F
-GLIBC_2.2.5 __pthread_key_create F
 GLIBC_2.2.5 __pthread_mutex_destroy F
 GLIBC_2.2.5 __pthread_mutex_init F
 GLIBC_2.2.5 __pthread_mutex_lock F
@@ -88,7 +87,6 @@ GLIBC_2.2.5 pthread_getconcurrency F
 GLIBC_2.2.5 pthread_getcpuclockid F
 GLIBC_2.2.5 pthread_getspecific F
 GLIBC_2.2.5 pthread_join F
-GLIBC_2.2.5 pthread_key_create F
 GLIBC_2.2.5 pthread_key_delete F
 GLIBC_2.2.5 pthread_kill F
 GLIBC_2.2.5 pthread_kill_other_threads_np F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 780679cb52..74ccdc4905 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_key_create F
 GLIBC_2.16 __pthread_once F
 GLIBC_2.16 __pthread_unwind_next F
 GLIBC_2.16 __ptsname_r_chk F
@@ -1457,6 +1458,7 @@ GLIBC_2.16 pthread_exit F
 GLIBC_2.16 pthread_getaffinity_np F
 GLIBC_2.16 pthread_getattr_np F
 GLIBC_2.16 pthread_getschedparam F
+GLIBC_2.16 pthread_key_create F
 GLIBC_2.16 pthread_mutex_consistent F
 GLIBC_2.16 pthread_mutex_consistent_np F
 GLIBC_2.16 pthread_mutex_destroy F
@@ -2197,7 +2199,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_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_key_create 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 579d0ffea2..79ab1b8cef 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -14,7 +14,6 @@ GLIBC_2.16 __open F
 GLIBC_2.16 __open64 F
 GLIBC_2.16 __pread64 F
 GLIBC_2.16 __pthread_getspecific F
-GLIBC_2.16 __pthread_key_create F
 GLIBC_2.16 __pthread_mutex_destroy F
 GLIBC_2.16 __pthread_mutex_init F
 GLIBC_2.16 __pthread_mutex_lock F
@@ -89,7 +88,6 @@ GLIBC_2.16 pthread_getcpuclockid F
 GLIBC_2.16 pthread_getname_np F
 GLIBC_2.16 pthread_getspecific F
 GLIBC_2.16 pthread_join F
-GLIBC_2.16 pthread_key_create F
 GLIBC_2.16 pthread_key_delete F
 GLIBC_2.16 pthread_kill F
 GLIBC_2.16 pthread_kill_other_threads_np F
-- 
2.29.2



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

* [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (23 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-24 14:12   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific " Florian Weimer
                   ` (13 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

The symbols have been moved using scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 |  6 +++--
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  2 +-
 nptl/pthread_getspecific.c                    | 22 +++++++++++++++----
 sysdeps/nptl/libc-lockP.h                     |  2 --
 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 --
 68 files changed, 152 insertions(+), 70 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 4255953fad..c66e4dccab 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -78,6 +78,7 @@ routines = \
   pthread_getaffinity \
   pthread_getattr_np \
   pthread_getschedparam \
+  pthread_getspecific \
   pthread_key_create \
   pthread_keys \
   pthread_mutex_consistent \
@@ -158,7 +159,6 @@ libpthread-routines = \
   pthread_getconcurrency \
   pthread_getcpuclockid \
   pthread_getname \
-  pthread_getspecific \
   pthread_join \
   pthread_join_common \
   pthread_key_delete \
diff --git a/nptl/Versions b/nptl/Versions
index d44958f5b6..218d6bbbf8 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -1,5 +1,6 @@
 libc {
   GLIBC_2.0 {
+    __pthread_getspecific;
     __pthread_key_create;
     __pthread_once;
     _pthread_cleanup_pop;
@@ -29,6 +30,7 @@ libc {
     pthread_equal;
     pthread_exit;
     pthread_getschedparam;
+    pthread_getspecific;
     pthread_key_create;
     pthread_mutex_destroy;
     pthread_mutex_init;
@@ -88,8 +90,10 @@ libc {
   }
   GLIBC_2.34 {
     __pthread_cleanup_routine;
+    __pthread_getspecific;
     __pthread_key_create;
     __pthread_once;
+    pthread_getspecific;
     pthread_key_create;
     pthread_mutex_consistent;
     pthread_once;
@@ -146,7 +150,6 @@ libpthread {
     __lseek;
     __open;
     __pthread_atfork;
-    __pthread_getspecific;
     __pthread_mutex_destroy;
     __pthread_mutex_init;
     __pthread_mutex_lock;
@@ -181,7 +184,6 @@ libpthread {
     pthread_cond_wait;
     pthread_create;
     pthread_detach;
-    pthread_getspecific;
     pthread_join;
     pthread_key_delete;
     pthread_kill;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index b1a8b1a95b..5be58fc966 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
     .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
-    .ptr___pthread_getspecific = __pthread_getspecific,
     .ptr___pthread_setspecific = __pthread_setspecific,
     .ptr__nptl_setxid = __nptl_setxid,
   };
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 38aeed1dfc..1d69a0f617 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -518,6 +518,7 @@ extern int __pthread_condattr_init (pthread_condattr_t *attr);
 extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
 extern int __pthread_key_delete (pthread_key_t key);
 extern void *__pthread_getspecific (pthread_key_t key);
+libc_hidden_proto (__pthread_getspecific)
 extern int __pthread_setspecific (pthread_key_t key, const void *value);
 extern int __pthread_once (pthread_once_t *once_control,
 			   void (*init_routine) (void));
@@ -553,7 +554,6 @@ hidden_proto (__pthread_mutex_unlock)
 hidden_proto (__pthread_rwlock_rdlock)
 hidden_proto (__pthread_rwlock_wrlock)
 hidden_proto (__pthread_rwlock_unlock)
-hidden_proto (__pthread_getspecific)
 hidden_proto (__pthread_setspecific)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
diff --git a/nptl/pthread_getspecific.c b/nptl/pthread_getspecific.c
index d38847e1c2..320ff2aa35 100644
--- a/nptl/pthread_getspecific.c
+++ b/nptl/pthread_getspecific.c
@@ -18,10 +18,10 @@
 
 #include <stdlib.h>
 #include "pthreadP.h"
-
+#include <shlib-compat.h>
 
 void *
-__pthread_getspecific (pthread_key_t key)
+__pthread_getspecific_1 (pthread_key_t key)
 {
   struct pthread_key_data *data;
 
@@ -63,5 +63,19 @@ __pthread_getspecific (pthread_key_t key)
 
   return result;
 }
-weak_alias (__pthread_getspecific, pthread_getspecific)
-hidden_def (__pthread_getspecific)
+versioned_symbol (libc, __pthread_getspecific_1, __pthread_getspecific,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_getspecific_1, __pthread_getspecific)
+
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_getspecific_1, __pthread_getspecific_2)
+strong_alias (__pthread_getspecific_1, __pthread_getspecific_3)
+strong_alias (__pthread_getspecific_1, __pthread_getspecific_4)
+
+versioned_symbol (libc, __pthread_getspecific_2, pthread_getspecific,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, __pthread_getspecific_3,
+	       __pthread_getspecific, GLIBC_2_0);
+compat_symbol (libc, __pthread_getspecific_4, pthread_getspecific, GLIBC_2_0);
+#endif
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 64c7a99bbf..bf92a035f8 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -339,7 +339,6 @@ weak_extern (__pthread_rwlock_wrlock)
 weak_extern (__pthread_rwlock_trywrlock)
 weak_extern (__pthread_rwlock_unlock)
 weak_extern (__pthread_setspecific)
-weak_extern (__pthread_getspecific)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 # else
@@ -358,7 +357,6 @@ weak_extern (__pthread_atfork)
 #  pragma weak __pthread_rwlock_trywrlock
 #  pragma weak __pthread_rwlock_unlock
 #  pragma weak __pthread_setspecific
-#  pragma weak __pthread_getspecific
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
 # endif
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 69ba1d8278..4b4816b873 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -49,7 +49,6 @@ struct pthread_functions
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
-  void *(*ptr___pthread_getspecific) (pthread_key_t);
   int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
   int (*ptr__nptl_setxid) (struct xid_command *);
 };
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index edd8ff4e1a..ae0e7a313e 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_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_unwind_next F
@@ -1450,6 +1451,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
@@ -2185,9 +2187,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 620915eca6..667e00551a 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_getspecific F
 GLIBC_2.17 __pthread_mutex_destroy F
 GLIBC_2.17 __pthread_mutex_init F
 GLIBC_2.17 __pthread_mutex_lock F
@@ -86,7 +85,6 @@ GLIBC_2.17 pthread_detach F
 GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
-GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index ad921167a2..d27a8d9ad4 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
@@ -889,6 +890,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2266,9 +2268,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 85a6f26e5d..66f17908e0 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 2bdf0fffdb..f740f0d40a 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_getspecific F
 GLIBC_2.32 __pthread_key_create F
 GLIBC_2.32 __pthread_once F
 GLIBC_2.32 __pthread_unwind_next F
@@ -1377,6 +1378,7 @@ GLIBC_2.32 pthread_exit F
 GLIBC_2.32 pthread_getaffinity_np F
 GLIBC_2.32 pthread_getattr_np F
 GLIBC_2.32 pthread_getschedparam F
+GLIBC_2.32 pthread_getspecific F
 GLIBC_2.32 pthread_key_create F
 GLIBC_2.32 pthread_mutex_consistent F
 GLIBC_2.32 pthread_mutex_consistent_np F
@@ -1945,9 +1947,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 d79ba9adbf..977e964a47 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_getspecific F
 GLIBC_2.32 __pthread_mutex_destroy F
 GLIBC_2.32 __pthread_mutex_init F
 GLIBC_2.32 __pthread_mutex_lock F
@@ -100,7 +99,6 @@ GLIBC_2.32 pthread_getattr_default_np F
 GLIBC_2.32 pthread_getconcurrency F
 GLIBC_2.32 pthread_getcpuclockid F
 GLIBC_2.32 pthread_getname_np F
-GLIBC_2.32 pthread_getspecific F
 GLIBC_2.32 pthread_join F
 GLIBC_2.32 pthread_key_delete F
 GLIBC_2.32 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 451c02d687..60baeff299 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -158,9 +158,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
@@ -492,6 +494,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_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
@@ -1551,6 +1554,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_getspecific F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index d00e0e9258..d6612a1e9e 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_getspecific F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
-GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 873d6c3f22..3525e76e3c 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -155,9 +155,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
@@ -489,6 +491,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_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
@@ -1548,6 +1551,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_getspecific F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index d00e0e9258..d6612a1e9e 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_getspecific F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
-GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index d9149b68cc..ec6b7f2755 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_getspecific F
 GLIBC_2.29 __pthread_key_create F
 GLIBC_2.29 __pthread_once F
 GLIBC_2.29 __pthread_unwind_next F
@@ -1438,6 +1439,7 @@ GLIBC_2.29 pthread_exit F
 GLIBC_2.29 pthread_getaffinity_np F
 GLIBC_2.29 pthread_getattr_np F
 GLIBC_2.29 pthread_getschedparam F
+GLIBC_2.29 pthread_getspecific F
 GLIBC_2.29 pthread_key_create F
 GLIBC_2.29 pthread_mutex_consistent F
 GLIBC_2.29 pthread_mutex_consistent_np F
@@ -2129,9 +2131,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 e3721d98e6..78eb06a880 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_getspecific F
 GLIBC_2.29 __pthread_mutex_destroy F
 GLIBC_2.29 __pthread_mutex_init F
 GLIBC_2.29 __pthread_mutex_lock F
@@ -98,7 +97,6 @@ GLIBC_2.29 pthread_getattr_default_np F
 GLIBC_2.29 pthread_getconcurrency F
 GLIBC_2.29 pthread_getcpuclockid F
 GLIBC_2.29 pthread_getname_np F
-GLIBC_2.29 pthread_getspecific F
 GLIBC_2.29 pthread_join F
 GLIBC_2.29 pthread_key_delete F
 GLIBC_2.29 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 938fa14288..0ef57987cd 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1273,6 +1274,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2087,9 +2089,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index bf871d121b..cc98751c47 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 425d1df5a3..fa7a28a5e3 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -866,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2254,9 +2256,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index b186b3039b..6c0211a134 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index c34b5a157d..078315ddda 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1294,6 +1295,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2119,9 +2121,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index b49b6ef57a..f18ff271c2 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 56d55caed9..e297ce158e 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -159,9 +159,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
@@ -478,6 +480,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_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
 GLIBC_2.4 __pthread_unwind_next F
@@ -1531,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_getspecific F
 GLIBC_2.4 pthread_key_create F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index d00e0e9258..d6612a1e9e 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_getspecific F
 GLIBC_2.4 __pthread_mutex_destroy F
 GLIBC_2.4 __pthread_mutex_init F
 GLIBC_2.4 __pthread_mutex_lock F
@@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
 GLIBC_2.4 pthread_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
-GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index a3b3bf4f74..10c54ce3ab 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -865,6 +866,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2199,9 +2201,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index b186b3039b..6c0211a134 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 75213c08d4..e6d033a29b 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_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_unwind_next F
@@ -1453,6 +1454,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
@@ -2180,9 +2182,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 ca115fe783..4751a8e6c5 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_getspecific F
 GLIBC_2.18 __pthread_mutex_destroy F
 GLIBC_2.18 __pthread_mutex_init F
 GLIBC_2.18 __pthread_mutex_lock F
@@ -87,7 +86,6 @@ GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
-GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 014d53f893..448c257562 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_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
 GLIBC_2.18 __pthread_unwind_next F
@@ -1453,6 +1454,7 @@ GLIBC_2.18 pthread_exit F
 GLIBC_2.18 pthread_getaffinity_np F
 GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
+GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_key_create F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
@@ -2177,9 +2179,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 ca115fe783..4751a8e6c5 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_getspecific F
 GLIBC_2.18 __pthread_mutex_destroy F
 GLIBC_2.18 __pthread_mutex_init F
 GLIBC_2.18 __pthread_mutex_lock F
@@ -87,7 +86,6 @@ GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
-GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 46c7716ee6..8f5df09289 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2170,9 +2172,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 2b830751c8..ea9a850ba9 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 5666362839..4d39526a30 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2168,9 +2170,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 2b830751c8..ea9a850ba9 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 97866f80c7..3cfb9e62db 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2176,9 +2178,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 3d9321f9e0..9b5cc5db4c 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x8
@@ -860,6 +861,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2170,9 +2172,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 3a0c0c5d8a..1335395b2f 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_getspecific F
 GLIBC_2.21 __pthread_key_create F
 GLIBC_2.21 __pthread_once F
 GLIBC_2.21 __pthread_unwind_next F
@@ -1495,6 +1496,7 @@ GLIBC_2.21 pthread_exit F
 GLIBC_2.21 pthread_getaffinity_np F
 GLIBC_2.21 pthread_getattr_np F
 GLIBC_2.21 pthread_getschedparam F
+GLIBC_2.21 pthread_getspecific F
 GLIBC_2.21 pthread_key_create F
 GLIBC_2.21 pthread_mutex_consistent F
 GLIBC_2.21 pthread_mutex_consistent_np F
@@ -2218,9 +2220,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 06500b1865..e6354e8a80 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_getspecific F
 GLIBC_2.21 __pthread_mutex_destroy F
 GLIBC_2.21 __pthread_mutex_init F
 GLIBC_2.21 __pthread_mutex_lock F
@@ -87,7 +86,6 @@ GLIBC_2.21 pthread_getattr_default_np F
 GLIBC_2.21 pthread_getconcurrency F
 GLIBC_2.21 pthread_getcpuclockid F
 GLIBC_2.21 pthread_getname_np F
-GLIBC_2.21 pthread_getspecific F
 GLIBC_2.21 pthread_join F
 GLIBC_2.21 pthread_key_delete F
 GLIBC_2.21 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index c01a200e83..eb5f9814e8 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -873,6 +874,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2226,9 +2228,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index d36522b751..a56ee2d7ca 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 3eced88f9f..b0372c3178 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -873,6 +874,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2259,9 +2261,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 35b689a767..aa4aadbbb4 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_getspecific F
 GLIBC_2.3 __pthread_key_create F
 GLIBC_2.3 __pthread_once F
 GLIBC_2.3 __pwrite64 F
@@ -1380,6 +1381,7 @@ GLIBC_2.3 pthread_equal F
 GLIBC_2.3 pthread_exit F
 GLIBC_2.3 pthread_getattr_np F
 GLIBC_2.3 pthread_getschedparam F
+GLIBC_2.3 pthread_getspecific F
 GLIBC_2.3 pthread_key_create F
 GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
@@ -2089,9 +2091,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 2d24956efe..6b2c9bba60 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.3 __lseek F
 GLIBC_2.3 __open F
 GLIBC_2.3 __open64 F
 GLIBC_2.3 __pread64 F
-GLIBC_2.3 __pthread_getspecific F
 GLIBC_2.3 __pthread_mutex_destroy F
 GLIBC_2.3 __pthread_mutex_init F
 GLIBC_2.3 __pthread_mutex_lock F
@@ -105,7 +104,6 @@ GLIBC_2.3 pthread_create F
 GLIBC_2.3 pthread_detach F
 GLIBC_2.3 pthread_getconcurrency F
 GLIBC_2.3 pthread_getcpuclockid F
-GLIBC_2.3 pthread_getspecific F
 GLIBC_2.3 pthread_join F
 GLIBC_2.3 pthread_key_delete F
 GLIBC_2.3 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index d54a37f8ad..045912572c 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_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
 GLIBC_2.17 __pthread_unwind_next F
@@ -1539,6 +1540,7 @@ GLIBC_2.17 pthread_exit F
 GLIBC_2.17 pthread_getaffinity_np F
 GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
+GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_key_create F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
@@ -2380,9 +2382,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 620915eca6..667e00551a 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_getspecific F
 GLIBC_2.17 __pthread_mutex_destroy F
 GLIBC_2.17 __pthread_mutex_init F
 GLIBC_2.17 __pthread_mutex_lock F
@@ -86,7 +85,6 @@ GLIBC_2.17 pthread_detach F
 GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
-GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index e82a4a7a90..5ef9b35b6d 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_getspecific F
 GLIBC_2.33 __pthread_key_create F
 GLIBC_2.33 __pthread_once F
 GLIBC_2.33 __pthread_unwind_next F
@@ -1379,6 +1380,7 @@ GLIBC_2.33 pthread_exit F
 GLIBC_2.33 pthread_getaffinity_np F
 GLIBC_2.33 pthread_getattr_np F
 GLIBC_2.33 pthread_getschedparam F
+GLIBC_2.33 pthread_getspecific F
 GLIBC_2.33 pthread_key_create F
 GLIBC_2.33 pthread_mutex_consistent F
 GLIBC_2.33 pthread_mutex_consistent_np F
@@ -1947,9 +1949,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 c2dd7f8dee..5665726bbb 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_getspecific F
 GLIBC_2.33 __pthread_mutex_destroy F
 GLIBC_2.33 __pthread_mutex_init F
 GLIBC_2.33 __pthread_mutex_lock F
@@ -100,7 +99,6 @@ GLIBC_2.33 pthread_getattr_default_np F
 GLIBC_2.33 pthread_getconcurrency F
 GLIBC_2.33 pthread_getcpuclockid F
 GLIBC_2.33 pthread_getname_np F
-GLIBC_2.33 pthread_getspecific F
 GLIBC_2.33 pthread_join F
 GLIBC_2.33 pthread_key_delete F
 GLIBC_2.33 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 0c81f1a72c..7f7385d87c 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_getspecific F
 GLIBC_2.27 __pthread_key_create F
 GLIBC_2.27 __pthread_once F
 GLIBC_2.27 __pthread_unwind_next F
@@ -1441,6 +1442,7 @@ GLIBC_2.27 pthread_exit F
 GLIBC_2.27 pthread_getaffinity_np F
 GLIBC_2.27 pthread_getattr_np F
 GLIBC_2.27 pthread_getschedparam F
+GLIBC_2.27 pthread_getspecific F
 GLIBC_2.27 pthread_key_create F
 GLIBC_2.27 pthread_mutex_consistent F
 GLIBC_2.27 pthread_mutex_consistent_np F
@@ -2147,9 +2149,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 d53306f3cb..5abf715b3b 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_getspecific F
 GLIBC_2.27 __pthread_mutex_destroy F
 GLIBC_2.27 __pthread_mutex_init F
 GLIBC_2.27 __pthread_mutex_lock F
@@ -87,7 +86,6 @@ GLIBC_2.27 pthread_getattr_default_np F
 GLIBC_2.27 pthread_getconcurrency F
 GLIBC_2.27 pthread_getcpuclockid F
 GLIBC_2.27 pthread_getname_np F
-GLIBC_2.27 pthread_getspecific F
 GLIBC_2.27 pthread_join F
 GLIBC_2.27 pthread_key_delete F
 GLIBC_2.27 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index ca08d2f3f5..c062cbcde7 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -864,6 +865,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2224,9 +2226,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index accbf2be59..bfeb7b715f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 061e0c6ffa..cfc797c7fb 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1291,6 +1292,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2125,9 +2127,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 9d6d87494a..3de726cb37 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -21,7 +21,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -86,7 +85,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index d102c24997..08db66df29 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1277,6 +1278,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2094,9 +2096,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index bf871d121b..cc98751c47 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 3ed1b31c84..10b8352efb 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1277,6 +1278,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2091,9 +2093,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index bf871d121b..cc98751c47 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 78f69c96ab..dce478788e 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_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -867,6 +868,7 @@ GLIBC_2.0 pthread_condattr_init F
 GLIBC_2.0 pthread_equal F
 GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
+GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
@@ -2215,9 +2217,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 85a6f26e5d..66f17908e0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_mutex_destroy F
 GLIBC_2.0 __pthread_mutex_init F
 GLIBC_2.0 __pthread_mutex_lock F
@@ -42,7 +41,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_getspecific F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 49d6360768..1dc6c45074 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_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
 GLIBC_2.2 __pwrite64 F
@@ -1320,6 +1321,7 @@ GLIBC_2.2 pthread_condattr_init F
 GLIBC_2.2 pthread_equal F
 GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
+GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
@@ -2142,9 +2144,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index b49b6ef57a..f18ff271c2 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_mutex_destroy F
 GLIBC_2.2 __pthread_mutex_init F
 GLIBC_2.2 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
 GLIBC_2.2 pthread_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
-GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index c795ffb505..e74d5c43c6 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_getspecific F
 GLIBC_2.2.5 __pthread_key_create F
 GLIBC_2.2.5 __pthread_once F
 GLIBC_2.2.5 __pwrite64 F
@@ -1288,6 +1289,7 @@ GLIBC_2.2.5 pthread_equal F
 GLIBC_2.2.5 pthread_exit F
 GLIBC_2.2.5 pthread_getattr_np F
 GLIBC_2.2.5 pthread_getschedparam F
+GLIBC_2.2.5 pthread_getspecific F
 GLIBC_2.2.5 pthread_key_create F
 GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
@@ -2101,9 +2103,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 0408564253..5ea8f8020b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2.5 __lseek F
 GLIBC_2.2.5 __open F
 GLIBC_2.2.5 __open64 F
 GLIBC_2.2.5 __pread64 F
-GLIBC_2.2.5 __pthread_getspecific F
 GLIBC_2.2.5 __pthread_mutex_destroy F
 GLIBC_2.2.5 __pthread_mutex_init F
 GLIBC_2.2.5 __pthread_mutex_lock F
@@ -85,7 +84,6 @@ GLIBC_2.2.5 pthread_create F
 GLIBC_2.2.5 pthread_detach F
 GLIBC_2.2.5 pthread_getconcurrency F
 GLIBC_2.2.5 pthread_getcpuclockid F
-GLIBC_2.2.5 pthread_getspecific F
 GLIBC_2.2.5 pthread_join F
 GLIBC_2.2.5 pthread_key_delete F
 GLIBC_2.2.5 pthread_kill F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 74ccdc4905..007dd401d3 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_getspecific F
 GLIBC_2.16 __pthread_key_create F
 GLIBC_2.16 __pthread_once F
 GLIBC_2.16 __pthread_unwind_next F
@@ -1458,6 +1459,7 @@ GLIBC_2.16 pthread_exit F
 GLIBC_2.16 pthread_getaffinity_np F
 GLIBC_2.16 pthread_getattr_np F
 GLIBC_2.16 pthread_getschedparam F
+GLIBC_2.16 pthread_getspecific F
 GLIBC_2.16 pthread_key_create F
 GLIBC_2.16 pthread_mutex_consistent F
 GLIBC_2.16 pthread_mutex_consistent_np F
@@ -2199,9 +2201,11 @@ 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_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create 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 79ab1b8cef..6e3cb18549 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_getspecific F
 GLIBC_2.16 __pthread_mutex_destroy F
 GLIBC_2.16 __pthread_mutex_init F
 GLIBC_2.16 __pthread_mutex_lock F
@@ -86,7 +85,6 @@ GLIBC_2.16 pthread_detach F
 GLIBC_2.16 pthread_getconcurrency F
 GLIBC_2.16 pthread_getcpuclockid F
 GLIBC_2.16 pthread_getname_np F
-GLIBC_2.16 pthread_getspecific F
 GLIBC_2.16 pthread_join F
 GLIBC_2.16 pthread_key_delete F
 GLIBC_2.16 pthread_kill F
-- 
2.29.2



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

* [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (24 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific " Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-24 14:26   ` Adhemerval Zanella
  2021-03-16 17:30 ` [PATCH v3 27/37] nptl: Move pthread_key_delete " Florian Weimer
                   ` (12 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

The symbols have been moved using scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  2 +-
 nptl/Versions                                 |  6 +++--
 nptl/nptl-init.c                              |  1 -
 nptl/pthreadP.h                               |  2 +-
 nptl/pthread_setspecific.c                    | 22 +++++++++++++++----
 sysdeps/nptl/libc-lockP.h                     |  2 --
 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 --
 68 files changed, 152 insertions(+), 70 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index c66e4dccab..fa8bcf8c62 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -87,6 +87,7 @@ routines = \
   pthread_setcancelstate \
   pthread_setcanceltype \
   pthread_setschedparam \
+  pthread_setspecific \
   pthread_sigmask \
   unwind \
 
@@ -208,7 +209,6 @@ libpthread-routines = \
   pthread_setconcurrency \
   pthread_setname \
   pthread_setschedprio \
-  pthread_setspecific \
   pthread_sigqueue \
   pthread_spin_destroy \
   pthread_spin_init \
diff --git a/nptl/Versions b/nptl/Versions
index 218d6bbbf8..58a37b8816 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -3,6 +3,7 @@ libc {
     __pthread_getspecific;
     __pthread_key_create;
     __pthread_once;
+    __pthread_setspecific;
     _pthread_cleanup_pop;
     _pthread_cleanup_pop_restore;
     _pthread_cleanup_push;
@@ -41,6 +42,7 @@ libc {
     pthread_setcancelstate;
     pthread_setcanceltype;
     pthread_setschedparam;
+    pthread_setspecific;
     pthread_sigmask;
   }
   GLIBC_2.1 {
@@ -93,10 +95,12 @@ libc {
     __pthread_getspecific;
     __pthread_key_create;
     __pthread_once;
+    __pthread_setspecific;
     pthread_getspecific;
     pthread_key_create;
     pthread_mutex_consistent;
     pthread_once;
+    pthread_setspecific;
   }
   GLIBC_PRIVATE {
     __futex_abstimed_wait64;
@@ -158,7 +162,6 @@ libpthread {
     __pthread_mutexattr_destroy;
     __pthread_mutexattr_init;
     __pthread_mutexattr_settype;
-    __pthread_setspecific;
     __read;
     __send;
     __sigaction;
@@ -197,7 +200,6 @@ libpthread {
     pthread_mutexattr_getkind_np;
     pthread_mutexattr_init;
     pthread_mutexattr_setkind_np;
-    pthread_setspecific;
     pthread_sigmask;
     pthread_testcancel;
     raise;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 5be58fc966..cacbf045a7 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
     .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
     .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
     .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
-    .ptr___pthread_setspecific = __pthread_setspecific,
     .ptr__nptl_setxid = __nptl_setxid,
   };
 # define ptr_pthread_functions &pthread_functions
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 1d69a0f617..c9e845e4a2 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -520,6 +520,7 @@ extern int __pthread_key_delete (pthread_key_t key);
 extern void *__pthread_getspecific (pthread_key_t key);
 libc_hidden_proto (__pthread_getspecific)
 extern int __pthread_setspecific (pthread_key_t key, const void *value);
+libc_hidden_proto (__pthread_setspecific)
 extern int __pthread_once (pthread_once_t *once_control,
 			   void (*init_routine) (void));
 libc_hidden_proto (__pthread_once)
@@ -554,7 +555,6 @@ hidden_proto (__pthread_mutex_unlock)
 hidden_proto (__pthread_rwlock_rdlock)
 hidden_proto (__pthread_rwlock_wrlock)
 hidden_proto (__pthread_rwlock_unlock)
-hidden_proto (__pthread_setspecific)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
 hidden_proto (__pthread_mutexattr_settype)
diff --git a/nptl/pthread_setspecific.c b/nptl/pthread_setspecific.c
index a6e84cd001..892a4307e7 100644
--- a/nptl/pthread_setspecific.c
+++ b/nptl/pthread_setspecific.c
@@ -19,10 +19,10 @@
 #include <errno.h>
 #include <stdlib.h>
 #include "pthreadP.h"
-
+#include <shlib-compat.h>
 
 int
-__pthread_setspecific (pthread_key_t key, const void *value)
+__pthread_setspecific_1 (pthread_key_t key, const void *value)
 {
   struct pthread *self;
   unsigned int idx1st;
@@ -89,5 +89,19 @@ __pthread_setspecific (pthread_key_t key, const void *value)
 
   return 0;
 }
-weak_alias (__pthread_setspecific, pthread_setspecific)
-hidden_def (__pthread_setspecific)
+versioned_symbol (libc, __pthread_setspecific_1, __pthread_setspecific,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_setspecific_1, __pthread_setspecific)
+
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_setspecific_1, __pthread_setspecific_2)
+strong_alias (__pthread_setspecific_1, __pthread_setspecific_3)
+strong_alias (__pthread_setspecific_1, __pthread_setspecific_4)
+
+versioned_symbol (libc, __pthread_setspecific_2, pthread_setspecific,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libc, __pthread_setspecific_3,
+	       __pthread_setspecific, GLIBC_2_0);
+compat_symbol (libc, __pthread_setspecific_4, pthread_setspecific, GLIBC_2_0);
+#endif
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index bf92a035f8..10a24568a9 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -338,7 +338,6 @@ weak_extern (__pthread_rwlock_tryrdlock)
 weak_extern (__pthread_rwlock_wrlock)
 weak_extern (__pthread_rwlock_trywrlock)
 weak_extern (__pthread_rwlock_unlock)
-weak_extern (__pthread_setspecific)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 # else
@@ -356,7 +355,6 @@ weak_extern (__pthread_atfork)
 #  pragma weak __pthread_rwlock_wrlock
 #  pragma weak __pthread_rwlock_trywrlock
 #  pragma weak __pthread_rwlock_unlock
-#  pragma weak __pthread_setspecific
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
 # endif
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 4b4816b873..2d89013ff5 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -49,7 +49,6 @@ struct pthread_functions
   int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
   int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
-  int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
   int (*ptr__nptl_setxid) (struct xid_command *);
 };
 
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index ae0e7a313e..2601be32bf 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -342,6 +342,7 @@ GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
@@ -1464,6 +1465,7 @@ GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setschedparam F
+GLIBC_2.17 pthread_setspecific F
 GLIBC_2.17 pthread_sigmask F
 GLIBC_2.17 ptrace F
 GLIBC_2.17 ptsname F
@@ -2190,8 +2192,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 667e00551a..778eb45ffc 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.17 __pthread_rwlock_tryrdlock F
 GLIBC_2.17 __pthread_rwlock_trywrlock F
 GLIBC_2.17 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -132,7 +131,6 @@ GLIBC_2.17 pthread_setaffinity_np F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
 GLIBC_2.17 pthread_setschedprio F
-GLIBC_2.17 pthread_setspecific F
 GLIBC_2.17 pthread_sigqueue F
 GLIBC_2.17 pthread_spin_destroy F
 GLIBC_2.17 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index d27a8d9ad4..d334d0759d 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -191,6 +191,7 @@ GLIBC_2.0 __progname_full D 0x8
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x8
@@ -901,6 +902,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2271,11 +2273,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 66f17908e0..8ccbe19154 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index f740f0d40a..49034a2bdd 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -331,6 +331,7 @@ GLIBC_2.32 __pthread_cleanup_routine F
 GLIBC_2.32 __pthread_getspecific F
 GLIBC_2.32 __pthread_key_create F
 GLIBC_2.32 __pthread_once F
+GLIBC_2.32 __pthread_setspecific F
 GLIBC_2.32 __pthread_unwind_next F
 GLIBC_2.32 __ptsname_r_chk F
 GLIBC_2.32 __pwrite64 F
@@ -1391,6 +1392,7 @@ GLIBC_2.32 pthread_self F
 GLIBC_2.32 pthread_setcancelstate F
 GLIBC_2.32 pthread_setcanceltype F
 GLIBC_2.32 pthread_setschedparam F
+GLIBC_2.32 pthread_setspecific F
 GLIBC_2.32 pthread_sigmask F
 GLIBC_2.32 ptrace F
 GLIBC_2.32 ptsname F
@@ -1950,8 +1952,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 977e964a47..fba129cfad 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -29,7 +29,6 @@ GLIBC_2.32 __pthread_rwlock_tryrdlock F
 GLIBC_2.32 __pthread_rwlock_trywrlock F
 GLIBC_2.32 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -150,7 +149,6 @@ GLIBC_2.32 pthread_setattr_default_np F
 GLIBC_2.32 pthread_setconcurrency F
 GLIBC_2.32 pthread_setname_np F
 GLIBC_2.32 pthread_setschedprio F
-GLIBC_2.32 pthread_setspecific F
 GLIBC_2.32 pthread_sigqueue F
 GLIBC_2.32 pthread_spin_destroy F
 GLIBC_2.32 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 60baeff299..3727e33898 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -161,11 +161,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -497,6 +499,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
@@ -1566,6 +1569,7 @@ GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setschedparam F
+GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_sigmask F
 GLIBC_2.4 ptrace F
 GLIBC_2.4 ptsname F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index d6612a1e9e..2cb1f0e2f5 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
-GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_spin_destroy F
 GLIBC_2.4 pthread_spin_init F
 GLIBC_2.4 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 3525e76e3c..a7bc3a9a8e 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -158,11 +158,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
@@ -494,6 +496,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
@@ -1563,6 +1566,7 @@ GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setschedparam F
+GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_sigmask F
 GLIBC_2.4 ptrace F
 GLIBC_2.4 ptsname F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index d6612a1e9e..2cb1f0e2f5 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
-GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_spin_destroy F
 GLIBC_2.4 pthread_spin_init F
 GLIBC_2.4 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index ec6b7f2755..61de7117bd 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -335,6 +335,7 @@ GLIBC_2.29 __pthread_cleanup_routine F
 GLIBC_2.29 __pthread_getspecific F
 GLIBC_2.29 __pthread_key_create F
 GLIBC_2.29 __pthread_once F
+GLIBC_2.29 __pthread_setspecific F
 GLIBC_2.29 __pthread_unwind_next F
 GLIBC_2.29 __ptsname_r_chk F
 GLIBC_2.29 __pwrite64 F
@@ -1452,6 +1453,7 @@ GLIBC_2.29 pthread_self F
 GLIBC_2.29 pthread_setcancelstate F
 GLIBC_2.29 pthread_setcanceltype F
 GLIBC_2.29 pthread_setschedparam F
+GLIBC_2.29 pthread_setspecific F
 GLIBC_2.29 pthread_sigmask F
 GLIBC_2.29 ptrace F
 GLIBC_2.29 ptsname F
@@ -2134,8 +2136,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 78eb06a880..760740a4ed 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -29,7 +29,6 @@ GLIBC_2.29 __pthread_rwlock_tryrdlock F
 GLIBC_2.29 __pthread_rwlock_trywrlock F
 GLIBC_2.29 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -145,7 +144,6 @@ GLIBC_2.29 pthread_setattr_default_np F
 GLIBC_2.29 pthread_setconcurrency F
 GLIBC_2.29 pthread_setname_np F
 GLIBC_2.29 pthread_setschedprio F
-GLIBC_2.29 pthread_setspecific F
 GLIBC_2.29 pthread_sigqueue F
 GLIBC_2.29 pthread_spin_destroy F
 GLIBC_2.29 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 0ef57987cd..c380a422ca 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -359,6 +359,7 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1285,6 +1286,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2092,11 +2094,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index fa7a28a5e3..dd10b08625 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -878,6 +879,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2259,11 +2261,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 6c0211a134..6b644a2513 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 078315ddda..fe64b5c1f0 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -363,6 +363,7 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1306,6 +1307,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2124,11 +2126,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 f18ff271c2..1669fb860d 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index e297ce158e..1af30ff1b3 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -162,11 +162,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
@@ -483,6 +485,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
 GLIBC_2.4 __pwrite64 F
@@ -1546,6 +1549,7 @@ GLIBC_2.4 pthread_self F
 GLIBC_2.4 pthread_setcancelstate F
 GLIBC_2.4 pthread_setcanceltype F
 GLIBC_2.4 pthread_setschedparam F
+GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_sigmask F
 GLIBC_2.4 ptrace F
 GLIBC_2.4 ptsname F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index d6612a1e9e..2cb1f0e2f5 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
 GLIBC_2.4 pthread_setaffinity_np F
 GLIBC_2.4 pthread_setconcurrency F
 GLIBC_2.4 pthread_setschedprio F
-GLIBC_2.4 pthread_setspecific F
 GLIBC_2.4 pthread_spin_destroy F
 GLIBC_2.4 pthread_spin_init F
 GLIBC_2.4 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 10c54ce3ab..372bb9db63 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -877,6 +878,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2204,11 +2206,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 6c0211a134..6b644a2513 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index e6d033a29b..7b1b02ff24 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -343,6 +343,7 @@ GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
@@ -1467,6 +1468,7 @@ GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setschedparam F
+GLIBC_2.18 pthread_setspecific F
 GLIBC_2.18 pthread_sigmask F
 GLIBC_2.18 ptrace F
 GLIBC_2.18 ptsname F
@@ -2185,8 +2187,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 4751a8e6c5..64e0587af6 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.18 __pthread_rwlock_tryrdlock F
 GLIBC_2.18 __pthread_rwlock_trywrlock F
 GLIBC_2.18 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -134,7 +133,6 @@ GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
 GLIBC_2.18 pthread_setschedprio F
-GLIBC_2.18 pthread_setspecific F
 GLIBC_2.18 pthread_sigqueue F
 GLIBC_2.18 pthread_spin_destroy F
 GLIBC_2.18 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 448c257562..07ec814a0d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -343,6 +343,7 @@ GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
 GLIBC_2.18 __pwrite64 F
@@ -1467,6 +1468,7 @@ GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
 GLIBC_2.18 pthread_setschedparam F
+GLIBC_2.18 pthread_setspecific F
 GLIBC_2.18 pthread_sigmask F
 GLIBC_2.18 ptrace F
 GLIBC_2.18 ptsname F
@@ -2182,8 +2184,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 4751a8e6c5..64e0587af6 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.18 __pthread_rwlock_tryrdlock F
 GLIBC_2.18 __pthread_rwlock_trywrlock F
 GLIBC_2.18 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -134,7 +133,6 @@ GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.18 pthread_setconcurrency F
 GLIBC_2.18 pthread_setname_np F
 GLIBC_2.18 pthread_setschedprio F
-GLIBC_2.18 pthread_setspecific F
 GLIBC_2.18 pthread_sigqueue F
 GLIBC_2.18 pthread_spin_destroy F
 GLIBC_2.18 pthread_spin_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 8f5df09289..51253a4216 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2175,11 +2177,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 ea9a850ba9..1118a25c82 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 4d39526a30..2574b7627e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2173,11 +2175,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 ea9a850ba9..1118a25c82 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 3cfb9e62db..0580b260e2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2181,11 +2183,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 9b5cc5db4c..40fe64ea6b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x8
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x8
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x8
@@ -872,6 +873,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2175,11 +2177,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 1335395b2f..b9400803eb 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -380,6 +380,7 @@ GLIBC_2.21 __pthread_cleanup_routine F
 GLIBC_2.21 __pthread_getspecific F
 GLIBC_2.21 __pthread_key_create F
 GLIBC_2.21 __pthread_once F
+GLIBC_2.21 __pthread_setspecific F
 GLIBC_2.21 __pthread_unwind_next F
 GLIBC_2.21 __ptsname_r_chk F
 GLIBC_2.21 __pwrite64 F
@@ -1509,6 +1510,7 @@ GLIBC_2.21 pthread_self F
 GLIBC_2.21 pthread_setcancelstate F
 GLIBC_2.21 pthread_setcanceltype F
 GLIBC_2.21 pthread_setschedparam F
+GLIBC_2.21 pthread_setspecific F
 GLIBC_2.21 pthread_sigmask F
 GLIBC_2.21 ptrace F
 GLIBC_2.21 ptsname F
@@ -2223,8 +2225,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index e6354e8a80..96d1cd0f49 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.21 __pthread_rwlock_tryrdlock F
 GLIBC_2.21 __pthread_rwlock_trywrlock F
 GLIBC_2.21 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -134,7 +133,6 @@ GLIBC_2.21 pthread_setattr_default_np F
 GLIBC_2.21 pthread_setconcurrency F
 GLIBC_2.21 pthread_setname_np F
 GLIBC_2.21 pthread_setschedprio F
-GLIBC_2.21 pthread_setspecific F
 GLIBC_2.21 pthread_sigqueue F
 GLIBC_2.21 pthread_spin_destroy F
 GLIBC_2.21 pthread_spin_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 eb5f9814e8..9f27e4aa50 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -197,6 +197,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -885,6 +886,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2231,11 +2233,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 a56ee2d7ca..a8111f4b92 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index b0372c3178..9c91e65fc1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -197,6 +197,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -885,6 +886,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2264,11 +2266,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 aa4aadbbb4..0ef070e285 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -412,6 +412,7 @@ GLIBC_2.3 __progname_full D 0x8
 GLIBC_2.3 __pthread_getspecific F
 GLIBC_2.3 __pthread_key_create F
 GLIBC_2.3 __pthread_once F
+GLIBC_2.3 __pthread_setspecific F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __rawmemchr F
 GLIBC_2.3 __rcmd_errstr D 0x8
@@ -1392,6 +1393,7 @@ GLIBC_2.3 pthread_self F
 GLIBC_2.3 pthread_setcancelstate F
 GLIBC_2.3 pthread_setcanceltype F
 GLIBC_2.3 pthread_setschedparam F
+GLIBC_2.3 pthread_setspecific F
 GLIBC_2.3 pthread_sigmask F
 GLIBC_2.3 ptrace F
 GLIBC_2.3 ptsname F
@@ -2094,11 +2096,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 6b2c9bba60..a0f5dffd25 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -56,7 +56,6 @@ GLIBC_2.3 __pthread_rwlock_tryrdlock F
 GLIBC_2.3 __pthread_rwlock_trywrlock F
 GLIBC_2.3 __pthread_rwlock_unlock F
 GLIBC_2.3 __pthread_rwlock_wrlock F
-GLIBC_2.3 __pthread_setspecific F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __read F
 GLIBC_2.3 __res_state F
@@ -138,7 +137,6 @@ 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_setconcurrency F
-GLIBC_2.3 pthread_setspecific F
 GLIBC_2.3 pthread_spin_destroy F
 GLIBC_2.3 pthread_spin_init F
 GLIBC_2.3 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 045912572c..4a6de68ece 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -428,6 +428,7 @@ GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
 GLIBC_2.17 __pwrite64 F
@@ -1553,6 +1554,7 @@ GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
 GLIBC_2.17 pthread_setschedparam F
+GLIBC_2.17 pthread_setspecific F
 GLIBC_2.17 pthread_sigmask F
 GLIBC_2.17 ptrace F
 GLIBC_2.17 ptsname F
@@ -2385,8 +2387,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 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 667e00551a..778eb45ffc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.17 __pthread_rwlock_tryrdlock F
 GLIBC_2.17 __pthread_rwlock_trywrlock F
 GLIBC_2.17 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -132,7 +131,6 @@ GLIBC_2.17 pthread_setaffinity_np F
 GLIBC_2.17 pthread_setconcurrency F
 GLIBC_2.17 pthread_setname_np F
 GLIBC_2.17 pthread_setschedprio F
-GLIBC_2.17 pthread_setspecific F
 GLIBC_2.17 pthread_sigqueue F
 GLIBC_2.17 pthread_spin_destroy F
 GLIBC_2.17 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 5ef9b35b6d..62f9d06cc6 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -328,6 +328,7 @@ GLIBC_2.33 __pthread_cleanup_routine F
 GLIBC_2.33 __pthread_getspecific F
 GLIBC_2.33 __pthread_key_create F
 GLIBC_2.33 __pthread_once F
+GLIBC_2.33 __pthread_setspecific F
 GLIBC_2.33 __pthread_unwind_next F
 GLIBC_2.33 __ptsname_r_chk F
 GLIBC_2.33 __pwrite64 F
@@ -1393,6 +1394,7 @@ GLIBC_2.33 pthread_self F
 GLIBC_2.33 pthread_setcancelstate F
 GLIBC_2.33 pthread_setcanceltype F
 GLIBC_2.33 pthread_setschedparam F
+GLIBC_2.33 pthread_setspecific F
 GLIBC_2.33 pthread_sigmask F
 GLIBC_2.33 ptrace F
 GLIBC_2.33 ptsname F
@@ -1952,8 +1954,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 5665726bbb..dc38dee1ae 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -29,7 +29,6 @@ GLIBC_2.33 __pthread_rwlock_tryrdlock F
 GLIBC_2.33 __pthread_rwlock_trywrlock F
 GLIBC_2.33 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -150,7 +149,6 @@ GLIBC_2.33 pthread_setattr_default_np F
 GLIBC_2.33 pthread_setconcurrency F
 GLIBC_2.33 pthread_setname_np F
 GLIBC_2.33 pthread_setschedprio F
-GLIBC_2.33 pthread_setspecific F
 GLIBC_2.33 pthread_sigqueue F
 GLIBC_2.33 pthread_spin_destroy F
 GLIBC_2.33 pthread_spin_init F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 7f7385d87c..63976e8487 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -339,6 +339,7 @@ GLIBC_2.27 __pthread_cleanup_routine F
 GLIBC_2.27 __pthread_getspecific F
 GLIBC_2.27 __pthread_key_create F
 GLIBC_2.27 __pthread_once F
+GLIBC_2.27 __pthread_setspecific F
 GLIBC_2.27 __pthread_unwind_next F
 GLIBC_2.27 __ptsname_r_chk F
 GLIBC_2.27 __pwrite64 F
@@ -1455,6 +1456,7 @@ GLIBC_2.27 pthread_self F
 GLIBC_2.27 pthread_setcancelstate F
 GLIBC_2.27 pthread_setcanceltype F
 GLIBC_2.27 pthread_setschedparam F
+GLIBC_2.27 pthread_setspecific F
 GLIBC_2.27 pthread_sigmask F
 GLIBC_2.27 ptrace F
 GLIBC_2.27 ptsname F
@@ -2152,8 +2154,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 5abf715b3b..a78a847c1a 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.27 __pthread_rwlock_tryrdlock F
 GLIBC_2.27 __pthread_rwlock_trywrlock F
 GLIBC_2.27 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -134,7 +133,6 @@ GLIBC_2.27 pthread_setattr_default_np F
 GLIBC_2.27 pthread_setconcurrency F
 GLIBC_2.27 pthread_setname_np F
 GLIBC_2.27 pthread_setschedprio F
-GLIBC_2.27 pthread_setspecific F
 GLIBC_2.27 pthread_sigqueue F
 GLIBC_2.27 pthread_spin_destroy F
 GLIBC_2.27 pthread_spin_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 c062cbcde7..8b159936e4 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -876,6 +877,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2229,11 +2231,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 bfeb7b715f..5f9f4da233 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index cfc797c7fb..5bbf8fdbb4 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -373,6 +373,7 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1303,6 +1304,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2130,11 +2132,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 3de726cb37..ec27acf8c2 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -36,7 +36,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -119,7 +118,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 08db66df29..10ea3c59b9 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -362,6 +362,7 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1289,6 +1290,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2099,11 +2101,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 10b8352efb..12d492b088 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -362,6 +362,7 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x4
@@ -1289,6 +1290,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2096,11 +2098,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index dce478788e..3bb06d6ce0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -192,6 +192,7 @@ GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
 GLIBC_2.0 __pthread_once F
+GLIBC_2.0 __pthread_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
 GLIBC_2.0 __read F
 GLIBC_2.0 __realloc_hook D 0x4
@@ -879,6 +880,7 @@ GLIBC_2.0 pthread_self F
 GLIBC_2.0 pthread_setcancelstate F
 GLIBC_2.0 pthread_setcanceltype F
 GLIBC_2.0 pthread_setschedparam F
+GLIBC_2.0 pthread_setspecific F
 GLIBC_2.0 pthread_sigmask F
 GLIBC_2.0 ptrace F
 GLIBC_2.0 putc F
@@ -2220,11 +2222,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 66f17908e0..8ccbe19154 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -16,7 +16,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_setspecific F
 GLIBC_2.0 __read F
 GLIBC_2.0 __send F
 GLIBC_2.0 __sigaction F
@@ -54,7 +53,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_setspecific F
 GLIBC_2.0 pthread_testcancel F
 GLIBC_2.0 raise F
 GLIBC_2.0 read F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 1dc6c45074..8a32fa3e95 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -400,6 +400,7 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __rcmd_errstr D 0x8
@@ -1332,6 +1333,7 @@ GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
 GLIBC_2.2 pthread_setschedparam F
+GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_sigmask F
 GLIBC_2.2 ptrace F
 GLIBC_2.2 ptsname F
@@ -2147,11 +2149,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 f18ff271c2..1669fb860d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
 GLIBC_2.2 __pthread_rwlock_wrlock F
-GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2 pthread_setspecific F
 GLIBC_2.2 pthread_spin_destroy F
 GLIBC_2.2 pthread_spin_init F
 GLIBC_2.2 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index e74d5c43c6..e05acdd11a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -361,6 +361,7 @@ GLIBC_2.2.5 __progname_full D 0x8
 GLIBC_2.2.5 __pthread_getspecific F
 GLIBC_2.2.5 __pthread_key_create F
 GLIBC_2.2.5 __pthread_once F
+GLIBC_2.2.5 __pthread_setspecific F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __rawmemchr F
 GLIBC_2.2.5 __rcmd_errstr D 0x8
@@ -1300,6 +1301,7 @@ GLIBC_2.2.5 pthread_self F
 GLIBC_2.2.5 pthread_setcancelstate F
 GLIBC_2.2.5 pthread_setcanceltype F
 GLIBC_2.2.5 pthread_setschedparam F
+GLIBC_2.2.5 pthread_setspecific F
 GLIBC_2.2.5 pthread_sigmask F
 GLIBC_2.2.5 ptrace F
 GLIBC_2.2.5 ptsname F
@@ -2106,11 +2108,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_setspecific 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 5ea8f8020b..f4d633ca96 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -35,7 +35,6 @@ GLIBC_2.2.5 __pthread_rwlock_tryrdlock F
 GLIBC_2.2.5 __pthread_rwlock_trywrlock F
 GLIBC_2.2.5 __pthread_rwlock_unlock F
 GLIBC_2.2.5 __pthread_rwlock_wrlock F
-GLIBC_2.2.5 __pthread_setspecific F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __read F
 GLIBC_2.2.5 __res_state F
@@ -118,7 +117,6 @@ 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_setconcurrency F
-GLIBC_2.2.5 pthread_setspecific F
 GLIBC_2.2.5 pthread_spin_destroy F
 GLIBC_2.2.5 pthread_spin_init F
 GLIBC_2.2.5 pthread_spin_lock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 007dd401d3..8800e570a4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -343,6 +343,7 @@ GLIBC_2.16 __pthread_cleanup_routine F
 GLIBC_2.16 __pthread_getspecific F
 GLIBC_2.16 __pthread_key_create F
 GLIBC_2.16 __pthread_once F
+GLIBC_2.16 __pthread_setspecific F
 GLIBC_2.16 __pthread_unwind_next F
 GLIBC_2.16 __ptsname_r_chk F
 GLIBC_2.16 __pwrite64 F
@@ -1472,6 +1473,7 @@ GLIBC_2.16 pthread_self F
 GLIBC_2.16 pthread_setcancelstate F
 GLIBC_2.16 pthread_setcanceltype F
 GLIBC_2.16 pthread_setschedparam F
+GLIBC_2.16 pthread_setspecific F
 GLIBC_2.16 pthread_sigmask F
 GLIBC_2.16 ptrace F
 GLIBC_2.16 ptsname F
@@ -2204,8 +2206,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 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 6e3cb18549..b687932187 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -30,7 +30,6 @@ GLIBC_2.16 __pthread_rwlock_tryrdlock F
 GLIBC_2.16 __pthread_rwlock_trywrlock F
 GLIBC_2.16 __pthread_rwlock_unlock F
 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 __pwrite64 F
@@ -132,7 +131,6 @@ GLIBC_2.16 pthread_setaffinity_np F
 GLIBC_2.16 pthread_setconcurrency F
 GLIBC_2.16 pthread_setname_np F
 GLIBC_2.16 pthread_setschedprio F
-GLIBC_2.16 pthread_setspecific F
 GLIBC_2.16 pthread_sigqueue F
 GLIBC_2.16 pthread_spin_destroy F
 GLIBC_2.16 pthread_spin_init F
-- 
2.29.2



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

* [PATCH v3 27/37] nptl: Move pthread_key_delete into libc.
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (25 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific " Florian Weimer
@ 2021-03-16 17:30 ` Florian Weimer
  2021-03-24 14:45   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 28/37] nptl: Move rwlock functions with forwarders " Florian Weimer
                   ` (11 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:30 UTC (permalink / raw)
  To: libc-alpha

The symbol was moved using scripts/move-symbol-to-libc.py.

tss_delete (still in libpthread) uses the __pthread_key_create
alias, so that is now exported under GLIBC_PRIVATE.
---
 nptl/Makefile                                   |  2 +-
 nptl/Versions                                   |  4 +++-
 nptl/pthreadP.h                                 |  1 +
 nptl/pthread_key_delete.c                       | 17 ++++++++++++++---
 sysdeps/unix/sysv/linux/aarch64/libc.abilist    |  2 ++
 .../unix/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 ++
 sysdeps/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 ++
 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 -
 .../unix/sysv/linux/m68k/coldfire/libc.abilist  |  2 ++
 .../sysv/linux/m68k/coldfire/libpthread.abilist |  1 -
 .../unix/sysv/linux/m68k/m680x0/libc.abilist    |  2 ++
 .../sysv/linux/m68k/m680x0/libpthread.abilist   |  1 -
 .../unix/sysv/linux/microblaze/be/libc.abilist  |  2 ++
 .../sysv/linux/microblaze/be/libpthread.abilist |  1 -
 .../unix/sysv/linux/microblaze/le/libc.abilist  |  2 ++
 .../sysv/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 ++
 .../linux/powerpc/powerpc32/libpthread.abilist  |  1 -
 .../linux/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 -
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist |  2 ++
 .../sysv/linux/riscv/rv32/libpthread.abilist    |  1 -
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist |  2 ++
 .../sysv/linux/riscv/rv64/libpthread.abilist    |  1 -
 .../unix/sysv/linux/s390/s390-32/libc.abilist   |  2 ++
 .../sysv/linux/s390/s390-32/libpthread.abilist  |  1 -
 .../unix/sysv/linux/s390/s390-64/libc.abilist   |  2 ++
 .../sysv/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 -
 .../unix/sysv/linux/sparc/sparc32/libc.abilist  |  2 ++
 .../sysv/linux/sparc/sparc32/libpthread.abilist |  1 -
 .../unix/sysv/linux/sparc/sparc64/libc.abilist  |  2 ++
 .../sysv/linux/sparc/sparc64/libpthread.abilist |  1 -
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist  |  2 ++
 .../sysv/linux/x86_64/64/libpthread.abilist     |  1 -
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist |  2 ++
 .../sysv/linux/x86_64/x32/libpthread.abilist    |  1 -
 65 files changed, 83 insertions(+), 34 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index fa8bcf8c62..5d4276d9f9 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -80,6 +80,7 @@ routines = \
   pthread_getschedparam \
   pthread_getspecific \
   pthread_key_create \
+  pthread_key_delete \
   pthread_keys \
   pthread_mutex_consistent \
   pthread_once \
@@ -162,7 +163,6 @@ libpthread-routines = \
   pthread_getname \
   pthread_join \
   pthread_join_common \
-  pthread_key_delete \
   pthread_kill \
   pthread_kill_other_threads \
   pthread_mutex_cond_lock \
diff --git a/nptl/Versions b/nptl/Versions
index 58a37b8816..e93c27b083 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -33,6 +33,7 @@ libc {
     pthread_getschedparam;
     pthread_getspecific;
     pthread_key_create;
+    pthread_key_delete;
     pthread_mutex_destroy;
     pthread_mutex_init;
     pthread_mutex_lock;
@@ -98,6 +99,7 @@ libc {
     __pthread_setspecific;
     pthread_getspecific;
     pthread_key_create;
+    pthread_key_delete;
     pthread_mutex_consistent;
     pthread_once;
     pthread_setspecific;
@@ -134,6 +136,7 @@ libc {
     __pthread_exit;
     __pthread_force_elision;
     __pthread_getattr_default_np;
+    __pthread_key_delete;
     __pthread_keys;
     __pthread_setcancelstate;
     __pthread_unwind;
@@ -188,7 +191,6 @@ libpthread {
     pthread_create;
     pthread_detach;
     pthread_join;
-    pthread_key_delete;
     pthread_kill;
     pthread_kill_other_threads_np;
     pthread_mutex_destroy;
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index c9e845e4a2..515c58039b 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -517,6 +517,7 @@ extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
 extern int __pthread_condattr_init (pthread_condattr_t *attr);
 extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
 extern int __pthread_key_delete (pthread_key_t key);
+libc_hidden_proto (__pthread_key_delete)
 extern void *__pthread_getspecific (pthread_key_t key);
 libc_hidden_proto (__pthread_getspecific)
 extern int __pthread_setspecific (pthread_key_t key, const void *value);
diff --git a/nptl/pthread_key_delete.c b/nptl/pthread_key_delete.c
index b9018306b1..081821cc02 100644
--- a/nptl/pthread_key_delete.c
+++ b/nptl/pthread_key_delete.c
@@ -19,10 +19,10 @@
 #include <errno.h>
 #include "pthreadP.h"
 #include <atomic.h>
-
+#include <shlib-compat.h>
 
 int
-__pthread_key_delete (pthread_key_t key)
+__pthread_key_delete_1 (pthread_key_t key)
 {
   int result = EINVAL;
 
@@ -39,4 +39,15 @@ __pthread_key_delete (pthread_key_t key)
 
   return result;
 }
-weak_alias (__pthread_key_delete, pthread_key_delete)
+versioned_symbol (libc, __pthread_key_delete_1, pthread_key_delete,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_key_delete_1, __pthread_key_delete)
+
+strong_alias (__pthread_key_delete_1, __pthread_key_delete_2)
+versioned_symbol (libc, __pthread_key_delete_2, __pthread_key_delete,
+		  GLIBC_PRIVATE);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+strong_alias (__pthread_key_delete_1, __pthread_key_delete_3)
+compat_symbol (libc, __pthread_key_delete_3, pthread_key_delete, GLIBC_2_0);
+#endif
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 2601be32bf..991efa0044 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -1454,6 +1454,7 @@ GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
 GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_key_create F
+GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
@@ -2196,6 +2197,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 778eb45ffc..50ab959905 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index d334d0759d..a1229e4a1a 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -893,6 +893,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2277,6 +2278,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 8ccbe19154..9d78d94466 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 49034a2bdd..ceee863b25 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -1381,6 +1381,7 @@ GLIBC_2.32 pthread_getattr_np F
 GLIBC_2.32 pthread_getschedparam F
 GLIBC_2.32 pthread_getspecific F
 GLIBC_2.32 pthread_key_create F
+GLIBC_2.32 pthread_key_delete F
 GLIBC_2.32 pthread_mutex_consistent F
 GLIBC_2.32 pthread_mutex_consistent_np F
 GLIBC_2.32 pthread_mutex_destroy F
@@ -1956,6 +1957,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index fba129cfad..6fed825b25 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -99,7 +99,6 @@ GLIBC_2.32 pthread_getconcurrency F
 GLIBC_2.32 pthread_getcpuclockid F
 GLIBC_2.32 pthread_getname_np F
 GLIBC_2.32 pthread_join F
-GLIBC_2.32 pthread_key_delete F
 GLIBC_2.32 pthread_kill F
 GLIBC_2.32 pthread_kill_other_threads_np F
 GLIBC_2.32 pthread_mutex_clocklock F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 3727e33898..31e2de3cc2 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -165,6 +165,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
@@ -1559,6 +1560,7 @@ GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_key_create F
+GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 2cb1f0e2f5..5d3859b245 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_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index a7bc3a9a8e..c6f9e3dbc3 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -162,6 +162,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
@@ -1556,6 +1557,7 @@ GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_key_create F
+GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 2cb1f0e2f5..5d3859b245 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_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 61de7117bd..ec7f3bde74 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -1442,6 +1442,7 @@ GLIBC_2.29 pthread_getattr_np F
 GLIBC_2.29 pthread_getschedparam F
 GLIBC_2.29 pthread_getspecific F
 GLIBC_2.29 pthread_key_create F
+GLIBC_2.29 pthread_key_delete F
 GLIBC_2.29 pthread_mutex_consistent F
 GLIBC_2.29 pthread_mutex_consistent_np F
 GLIBC_2.29 pthread_mutex_destroy F
@@ -2140,6 +2141,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 760740a4ed..cf7869867c 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -97,7 +97,6 @@ GLIBC_2.29 pthread_getconcurrency F
 GLIBC_2.29 pthread_getcpuclockid F
 GLIBC_2.29 pthread_getname_np F
 GLIBC_2.29 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index c380a422ca..ebced5d8c3 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -1277,6 +1277,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2098,6 +2099,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index c24d832b13..d0e8564302 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index dd10b08625..d15479dabd 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -870,6 +870,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2265,6 +2266,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 6b644a2513..99e53d0c49 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index fe64b5c1f0..62c8c7d461 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -1298,6 +1298,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2130,6 +2131,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 1669fb860d..ff37f3905e 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 1af30ff1b3..83e8a6824f 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -166,6 +166,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
@@ -1539,6 +1540,7 @@ GLIBC_2.4 pthread_getattr_np F
 GLIBC_2.4 pthread_getschedparam F
 GLIBC_2.4 pthread_getspecific F
 GLIBC_2.4 pthread_key_create F
+GLIBC_2.4 pthread_key_delete F
 GLIBC_2.4 pthread_mutex_consistent_np F
 GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_init F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 2cb1f0e2f5..5d3859b245 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_detach F
 GLIBC_2.4 pthread_getconcurrency F
 GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 372bb9db63..5a81c61de7 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -869,6 +869,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2210,6 +2211,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 6b644a2513..99e53d0c49 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 7b1b02ff24..39c806db53 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -1457,6 +1457,7 @@ GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
 GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_key_create F
+GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
@@ -2191,6 +2192,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 64e0587af6..8b3785414d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -86,7 +86,6 @@ GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 07ec814a0d..ce2823207c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -1457,6 +1457,7 @@ GLIBC_2.18 pthread_getattr_np F
 GLIBC_2.18 pthread_getschedparam F
 GLIBC_2.18 pthread_getspecific F
 GLIBC_2.18 pthread_key_create F
+GLIBC_2.18 pthread_key_delete F
 GLIBC_2.18 pthread_mutex_consistent F
 GLIBC_2.18 pthread_mutex_consistent_np F
 GLIBC_2.18 pthread_mutex_destroy F
@@ -2188,6 +2189,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 64e0587af6..8b3785414d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -86,7 +86,6 @@ GLIBC_2.18 pthread_getconcurrency F
 GLIBC_2.18 pthread_getcpuclockid F
 GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_join 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_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 51253a4216..5e8abfa6ae 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2181,6 +2182,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 1118a25c82..cd0d6d7419 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 2574b7627e..93002ae842 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2179,6 +2180,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 1118a25c82..cd0d6d7419 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 0580b260e2..245a840e12 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2187,6 +2188,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 40fe64ea6b..24b2dddb51 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -864,6 +864,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2181,6 +2182,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index b9400803eb..7d4b4dd278 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -1499,6 +1499,7 @@ GLIBC_2.21 pthread_getattr_np F
 GLIBC_2.21 pthread_getschedparam F
 GLIBC_2.21 pthread_getspecific F
 GLIBC_2.21 pthread_key_create F
+GLIBC_2.21 pthread_key_delete F
 GLIBC_2.21 pthread_mutex_consistent F
 GLIBC_2.21 pthread_mutex_consistent_np F
 GLIBC_2.21 pthread_mutex_destroy F
@@ -2229,6 +2230,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 96d1cd0f49..0250c9756d 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -86,7 +86,6 @@ GLIBC_2.21 pthread_getconcurrency F
 GLIBC_2.21 pthread_getcpuclockid F
 GLIBC_2.21 pthread_getname_np F
 GLIBC_2.21 pthread_join 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_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 9f27e4aa50..65ea41b2db 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -877,6 +877,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2237,6 +2238,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index a8111f4b92..e0eb362a7a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 9c91e65fc1..9d413de126 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -877,6 +877,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2270,6 +2271,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 0ef070e285..16c24bfc69 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -1384,6 +1384,7 @@ GLIBC_2.3 pthread_getattr_np F
 GLIBC_2.3 pthread_getschedparam F
 GLIBC_2.3 pthread_getspecific F
 GLIBC_2.3 pthread_key_create F
+GLIBC_2.3 pthread_key_delete F
 GLIBC_2.3 pthread_mutex_destroy F
 GLIBC_2.3 pthread_mutex_init F
 GLIBC_2.3 pthread_mutex_lock F
@@ -2100,6 +2101,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index a0f5dffd25..1099d88afe 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_detach F
 GLIBC_2.3 pthread_getconcurrency F
 GLIBC_2.3 pthread_getcpuclockid F
 GLIBC_2.3 pthread_join F
-GLIBC_2.3 pthread_key_delete F
 GLIBC_2.3 pthread_kill F
 GLIBC_2.3 pthread_kill_other_threads_np F
 GLIBC_2.3 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 4a6de68ece..d97c594edd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -1543,6 +1543,7 @@ GLIBC_2.17 pthread_getattr_np F
 GLIBC_2.17 pthread_getschedparam F
 GLIBC_2.17 pthread_getspecific F
 GLIBC_2.17 pthread_key_create F
+GLIBC_2.17 pthread_key_delete F
 GLIBC_2.17 pthread_mutex_consistent F
 GLIBC_2.17 pthread_mutex_consistent_np F
 GLIBC_2.17 pthread_mutex_destroy F
@@ -2391,6 +2392,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 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 778eb45ffc..50ab959905 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.17 pthread_getconcurrency F
 GLIBC_2.17 pthread_getcpuclockid F
 GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_join 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_destroy F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 62f9d06cc6..44b0121343 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -1383,6 +1383,7 @@ GLIBC_2.33 pthread_getattr_np F
 GLIBC_2.33 pthread_getschedparam F
 GLIBC_2.33 pthread_getspecific F
 GLIBC_2.33 pthread_key_create F
+GLIBC_2.33 pthread_key_delete F
 GLIBC_2.33 pthread_mutex_consistent F
 GLIBC_2.33 pthread_mutex_consistent_np F
 GLIBC_2.33 pthread_mutex_destroy F
@@ -1958,6 +1959,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index dc38dee1ae..6c6fdd0cbf 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -99,7 +99,6 @@ GLIBC_2.33 pthread_getconcurrency F
 GLIBC_2.33 pthread_getcpuclockid F
 GLIBC_2.33 pthread_getname_np F
 GLIBC_2.33 pthread_join F
-GLIBC_2.33 pthread_key_delete F
 GLIBC_2.33 pthread_kill F
 GLIBC_2.33 pthread_kill_other_threads_np F
 GLIBC_2.33 pthread_mutex_clocklock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 63976e8487..22a34442f0 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -1445,6 +1445,7 @@ GLIBC_2.27 pthread_getattr_np F
 GLIBC_2.27 pthread_getschedparam F
 GLIBC_2.27 pthread_getspecific F
 GLIBC_2.27 pthread_key_create F
+GLIBC_2.27 pthread_key_delete F
 GLIBC_2.27 pthread_mutex_consistent F
 GLIBC_2.27 pthread_mutex_consistent_np F
 GLIBC_2.27 pthread_mutex_destroy F
@@ -2158,6 +2159,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index a78a847c1a..359545faee 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -86,7 +86,6 @@ GLIBC_2.27 pthread_getconcurrency F
 GLIBC_2.27 pthread_getcpuclockid F
 GLIBC_2.27 pthread_getname_np F
 GLIBC_2.27 pthread_join 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_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 8b159936e4..21f49b1fa0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -868,6 +868,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2235,6 +2236,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 5f9f4da233..5eb6187d98 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 5bbf8fdbb4..114591d6f5 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -1295,6 +1295,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2136,6 +2137,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index ec27acf8c2..8f60a6b633 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 10ea3c59b9..ad487f0c9f 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -1281,6 +1281,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2105,6 +2106,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index c24d832b13..d0e8564302 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 12d492b088..7f6886ff02 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -1281,6 +1281,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2102,6 +2103,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index c24d832b13..d0e8564302 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 3bb06d6ce0..4ae6d45923 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -871,6 +871,7 @@ GLIBC_2.0 pthread_exit F
 GLIBC_2.0 pthread_getschedparam F
 GLIBC_2.0 pthread_getspecific F
 GLIBC_2.0 pthread_key_create F
+GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_mutex_destroy F
 GLIBC_2.0 pthread_mutex_init F
 GLIBC_2.0 pthread_mutex_lock F
@@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 8ccbe19154..9d78d94466 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
 GLIBC_2.0 pthread_create F
 GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
-GLIBC_2.0 pthread_key_delete F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
 GLIBC_2.0 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 8a32fa3e95..44d0f68cb2 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -1324,6 +1324,7 @@ GLIBC_2.2 pthread_exit F
 GLIBC_2.2 pthread_getschedparam F
 GLIBC_2.2 pthread_getspecific F
 GLIBC_2.2 pthread_key_create F
+GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_mutex_destroy F
 GLIBC_2.2 pthread_mutex_init F
 GLIBC_2.2 pthread_mutex_lock F
@@ -2153,6 +2154,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 1669fb860d..ff37f3905e 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_detach F
 GLIBC_2.2 pthread_getconcurrency F
 GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
-GLIBC_2.2 pthread_key_delete F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
 GLIBC_2.2 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index e05acdd11a..d96699a20d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -1292,6 +1292,7 @@ GLIBC_2.2.5 pthread_getattr_np F
 GLIBC_2.2.5 pthread_getschedparam F
 GLIBC_2.2.5 pthread_getspecific F
 GLIBC_2.2.5 pthread_key_create F
+GLIBC_2.2.5 pthread_key_delete F
 GLIBC_2.2.5 pthread_mutex_destroy F
 GLIBC_2.2.5 pthread_mutex_init F
 GLIBC_2.2.5 pthread_mutex_lock F
@@ -2112,6 +2113,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index f4d633ca96..511240921e 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_detach F
 GLIBC_2.2.5 pthread_getconcurrency F
 GLIBC_2.2.5 pthread_getcpuclockid F
 GLIBC_2.2.5 pthread_join F
-GLIBC_2.2.5 pthread_key_delete F
 GLIBC_2.2.5 pthread_kill F
 GLIBC_2.2.5 pthread_kill_other_threads_np F
 GLIBC_2.2.5 pthread_mutex_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 8800e570a4..33bbaff90c 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -1462,6 +1462,7 @@ GLIBC_2.16 pthread_getattr_np F
 GLIBC_2.16 pthread_getschedparam F
 GLIBC_2.16 pthread_getspecific F
 GLIBC_2.16 pthread_key_create F
+GLIBC_2.16 pthread_key_delete F
 GLIBC_2.16 pthread_mutex_consistent F
 GLIBC_2.16 pthread_mutex_consistent_np F
 GLIBC_2.16 pthread_mutex_destroy F
@@ -2210,6 +2211,7 @@ GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
+GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
 GLIBC_2.34 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 b687932187..a481ef56ab 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -85,7 +85,6 @@ GLIBC_2.16 pthread_getconcurrency F
 GLIBC_2.16 pthread_getcpuclockid F
 GLIBC_2.16 pthread_getname_np F
 GLIBC_2.16 pthread_join 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_destroy F
-- 
2.29.2



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

* [PATCH v3 28/37] nptl: Move rwlock functions with forwarders into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (26 preceding siblings ...)
  2021-03-16 17:30 ` [PATCH v3 27/37] nptl: Move pthread_key_delete " Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 19:52   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols " Florian Weimer
                   ` (10 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

The forwarders were only used internally, so new symbol versions
are needed.  All symbols are moved at once because the forwarders
are no-ops if libpthread is not loaded, leading to inconsistencies
in case of a partial migration.

The symbols __pthread_rwlock_rdlock, __pthread_rwlock_unlock,
__pthread_rwlock_wrlock, pthread_rwlock_rdlock,
pthread_rwlock_unlock, pthread_rwlock_wrlock have been moved using
scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  6 ++---
 nptl/Versions                                 | 20 ++++++++++++-----
 nptl/nptl-init.c                              |  3 ---
 nptl/pthreadP.h                               |  4 ++--
 nptl/pthread_rwlock_rdlock.c                  | 22 ++++++++++++++++---
 nptl/pthread_rwlock_unlock.c                  | 22 ++++++++++++++++---
 nptl/pthread_rwlock_wrlock.c                  | 22 ++++++++++++++++---
 sysdeps/nptl/libc-lockP.h                     | 21 +++++-------------
 sysdeps/nptl/pthread-functions.h              |  3 ---
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  | 12 ++++++++++
 .../sysv/linux/aarch64/libpthread.abilist     |  6 -----
 sysdeps/unix/sysv/linux/alpha/libc.abilist    | 12 ++++++++++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  6 -----
 sysdeps/unix/sysv/linux/arc/libc.abilist      | 12 ++++++++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  6 -----
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   | 12 ++++++++++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  6 -----
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   | 12 ++++++++++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  6 -----
 sysdeps/unix/sysv/linux/csky/libc.abilist     | 12 ++++++++++
 .../unix/sysv/linux/csky/libpthread.abilist   |  6 -----
 sysdeps/unix/sysv/linux/hppa/libc.abilist     | 12 ++++++++++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  6 -----
 sysdeps/unix/sysv/linux/i386/libc.abilist     | 12 ++++++++++
 .../unix/sysv/linux/i386/libpthread.abilist   |  6 -----
 sysdeps/unix/sysv/linux/ia64/libc.abilist     | 12 ++++++++++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  6 -----
 .../sysv/linux/m68k/coldfire/libc.abilist     | 12 ++++++++++
 .../linux/m68k/coldfire/libpthread.abilist    |  6 -----
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  | 12 ++++++++++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  6 -----
 .../sysv/linux/microblaze/be/libc.abilist     | 12 ++++++++++
 .../linux/microblaze/be/libpthread.abilist    |  6 -----
 .../sysv/linux/microblaze/le/libc.abilist     | 12 ++++++++++
 .../linux/microblaze/le/libpthread.abilist    |  6 -----
 .../sysv/linux/mips/mips32/fpu/libc.abilist   | 12 ++++++++++
 .../sysv/linux/mips/mips32/libpthread.abilist |  6 -----
 .../sysv/linux/mips/mips32/nofpu/libc.abilist | 12 ++++++++++
 .../sysv/linux/mips/mips64/libpthread.abilist |  6 -----
 .../sysv/linux/mips/mips64/n32/libc.abilist   | 12 ++++++++++
 .../sysv/linux/mips/mips64/n64/libc.abilist   | 12 ++++++++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    | 12 ++++++++++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  6 -----
 .../linux/powerpc/powerpc32/fpu/libc.abilist  | 12 ++++++++++
 .../powerpc/powerpc32/libpthread.abilist      |  6 -----
 .../powerpc/powerpc32/nofpu/libc.abilist      | 12 ++++++++++
 .../linux/powerpc/powerpc64/be/libc.abilist   | 12 ++++++++++
 .../powerpc/powerpc64/be/libpthread.abilist   |  6 -----
 .../linux/powerpc/powerpc64/le/libc.abilist   | 12 ++++++++++
 .../powerpc/powerpc64/le/libpthread.abilist   |  6 -----
 .../unix/sysv/linux/riscv/rv32/libc.abilist   | 12 ++++++++++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  6 -----
 .../unix/sysv/linux/riscv/rv64/libc.abilist   | 12 ++++++++++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  6 -----
 .../unix/sysv/linux/s390/s390-32/libc.abilist | 12 ++++++++++
 .../linux/s390/s390-32/libpthread.abilist     |  6 -----
 .../unix/sysv/linux/s390/s390-64/libc.abilist | 12 ++++++++++
 .../linux/s390/s390-64/libpthread.abilist     |  6 -----
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    | 12 ++++++++++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  6 -----
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    | 12 ++++++++++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  6 -----
 .../sysv/linux/sparc/sparc32/libc.abilist     | 12 ++++++++++
 .../linux/sparc/sparc32/libpthread.abilist    |  6 -----
 .../sysv/linux/sparc/sparc64/libc.abilist     | 12 ++++++++++
 .../linux/sparc/sparc64/libpthread.abilist    |  6 -----
 .../unix/sysv/linux/x86_64/64/libc.abilist    | 12 ++++++++++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  6 -----
 .../unix/sysv/linux/x86_64/x32/libc.abilist   | 12 ++++++++++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  6 -----
 70 files changed, 466 insertions(+), 215 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 5d4276d9f9..1eca75ef35 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -84,6 +84,9 @@ routines = \
   pthread_keys \
   pthread_mutex_consistent \
   pthread_once \
+  pthread_rwlock_rdlock \
+  pthread_rwlock_unlock \
+  pthread_rwlock_wrlock \
   pthread_self \
   pthread_setcancelstate \
   pthread_setcanceltype \
@@ -191,13 +194,10 @@ libpthread-routines = \
   pthread_rwlock_clockwrlock \
   pthread_rwlock_destroy \
   pthread_rwlock_init \
-  pthread_rwlock_rdlock \
   pthread_rwlock_timedrdlock \
   pthread_rwlock_timedwrlock \
   pthread_rwlock_tryrdlock \
   pthread_rwlock_trywrlock \
-  pthread_rwlock_unlock \
-  pthread_rwlock_wrlock \
   pthread_rwlockattr_destroy \
   pthread_rwlockattr_getkind_np \
   pthread_rwlockattr_getpshared \
diff --git a/nptl/Versions b/nptl/Versions
index e93c27b083..b3feadd045 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -48,6 +48,14 @@ libc {
   }
   GLIBC_2.1 {
     pthread_attr_init;
+    pthread_rwlock_rdlock;
+    pthread_rwlock_unlock;
+    pthread_rwlock_wrlock;
+  }
+  GLIBC_2.2 {
+    __pthread_rwlock_rdlock;
+    __pthread_rwlock_unlock;
+    __pthread_rwlock_wrlock;
   }
   GLIBC_2.2.3 {
     pthread_getattr_np;
@@ -96,12 +104,18 @@ libc {
     __pthread_getspecific;
     __pthread_key_create;
     __pthread_once;
+    __pthread_rwlock_rdlock;
+    __pthread_rwlock_unlock;
+    __pthread_rwlock_wrlock;
     __pthread_setspecific;
     pthread_getspecific;
     pthread_key_create;
     pthread_key_delete;
     pthread_mutex_consistent;
     pthread_once;
+    pthread_rwlock_rdlock;
+    pthread_rwlock_unlock;
+    pthread_rwlock_wrlock;
     pthread_setspecific;
   }
   GLIBC_PRIVATE {
@@ -241,11 +255,8 @@ libpthread {
     pthread_mutexattr_settype;
     pthread_rwlock_destroy;
     pthread_rwlock_init;
-    pthread_rwlock_rdlock;
     pthread_rwlock_tryrdlock;
     pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
     pthread_rwlockattr_destroy;
     pthread_rwlockattr_getkind_np;
     pthread_rwlockattr_getpshared;
@@ -276,11 +287,8 @@ libpthread {
     __pread64;
     __pthread_rwlock_destroy;
     __pthread_rwlock_init;
-    __pthread_rwlock_rdlock;
     __pthread_rwlock_tryrdlock;
     __pthread_rwlock_trywrlock;
-    __pthread_rwlock_unlock;
-    __pthread_rwlock_wrlock;
     __pwrite64;
     __res_state;
     lseek64;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index cacbf045a7..0c07b46a77 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -67,9 +67,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_rwlock_rdlock = __pthread_rwlock_rdlock,
-    .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
-    .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
     .ptr__nptl_setxid = __nptl_setxid,
   };
 # define ptr_pthread_functions &pthread_functions
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 515c58039b..527e4acd4f 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -441,8 +441,10 @@ extern int __pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
 				  __attr);
 extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
 extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
+libc_hidden_proto (__pthread_rwlock_rdlock)
 extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
 extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
+libc_hidden_proto (__pthread_rwlock_wrlock)
 extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
 extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
 extern int __pthread_cond_broadcast (pthread_cond_t *cond);
@@ -553,8 +555,6 @@ hidden_proto (__pthread_mutex_destroy)
 hidden_proto (__pthread_mutex_lock)
 hidden_proto (__pthread_mutex_trylock)
 hidden_proto (__pthread_mutex_unlock)
-hidden_proto (__pthread_rwlock_rdlock)
-hidden_proto (__pthread_rwlock_wrlock)
 hidden_proto (__pthread_rwlock_unlock)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
diff --git a/nptl/pthread_rwlock_rdlock.c b/nptl/pthread_rwlock_rdlock.c
index 0eeee50834..6793e01e7b 100644
--- a/nptl/pthread_rwlock_rdlock.c
+++ b/nptl/pthread_rwlock_rdlock.c
@@ -20,7 +20,7 @@
 
 /* See pthread_rwlock_common.c.  */
 int
-__pthread_rwlock_rdlock (pthread_rwlock_t *rwlock)
+__pthread_rwlock_rdlock_1 (pthread_rwlock_t *rwlock)
 {
   LIBC_PROBE (rdlock_entry, 1, rwlock);
 
@@ -28,6 +28,22 @@ __pthread_rwlock_rdlock (pthread_rwlock_t *rwlock)
   LIBC_PROBE (rdlock_acquire_read, 1, rwlock);
   return result;
 }
+versioned_symbol (libc, __pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock)
 
-weak_alias (__pthread_rwlock_rdlock, pthread_rwlock_rdlock)
-hidden_def (__pthread_rwlock_rdlock)
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_2)
+strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_3)
+strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_4)
+
+versioned_symbol (libc, __pthread_rwlock_rdlock_2, pthread_rwlock_rdlock,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_rdlock_3, pthread_rwlock_rdlock,
+	       GLIBC_2_1);
+#endif
+#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_rdlock_4, __pthread_rwlock_rdlock,
+	       GLIBC_2_2);
+#endif
diff --git a/nptl/pthread_rwlock_unlock.c b/nptl/pthread_rwlock_unlock.c
index 356d63a045..6d0fb76afd 100644
--- a/nptl/pthread_rwlock_unlock.c
+++ b/nptl/pthread_rwlock_unlock.c
@@ -27,7 +27,7 @@
 
 /* See pthread_rwlock_common.c for an overview.  */
 int
-__pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
+__pthread_rwlock_unlock_1 (pthread_rwlock_t *rwlock)
 {
   LIBC_PROBE (rwlock_unlock, 1, rwlock);
 
@@ -43,6 +43,22 @@ __pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
     __pthread_rwlock_rdunlock (rwlock);
   return 0;
 }
+versioned_symbol (libc, __pthread_rwlock_unlock_1, __pthread_rwlock_unlock,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock)
 
-weak_alias (__pthread_rwlock_unlock, pthread_rwlock_unlock)
-hidden_def (__pthread_rwlock_unlock)
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_2)
+strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_3)
+strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_4)
+
+versioned_symbol (libc, __pthread_rwlock_unlock_2, pthread_rwlock_unlock,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_unlock_3, pthread_rwlock_unlock,
+	       GLIBC_2_1);
+#endif
+#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_unlock_4, __pthread_rwlock_unlock,
+	       GLIBC_2_2);
+#endif
diff --git a/nptl/pthread_rwlock_wrlock.c b/nptl/pthread_rwlock_wrlock.c
index 98882a87e4..7b625201c5 100644
--- a/nptl/pthread_rwlock_wrlock.c
+++ b/nptl/pthread_rwlock_wrlock.c
@@ -20,7 +20,7 @@
 
 /* See pthread_rwlock_common.c.  */
 int
-__pthread_rwlock_wrlock (pthread_rwlock_t *rwlock)
+__pthread_rwlock_wrlock_1 (pthread_rwlock_t *rwlock)
 {
   LIBC_PROBE (wrlock_entry, 1, rwlock);
 
@@ -28,6 +28,22 @@ __pthread_rwlock_wrlock (pthread_rwlock_t *rwlock)
   LIBC_PROBE (wrlock_acquire_write, 1, rwlock);
   return result;
 }
+versioned_symbol (libc, __pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock)
 
-weak_alias (__pthread_rwlock_wrlock, pthread_rwlock_wrlock)
-hidden_def (__pthread_rwlock_wrlock)
+/* Several aliases for setting different symbol versions.  */
+strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_2)
+strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_3)
+strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_4)
+
+versioned_symbol (libc, __pthread_rwlock_wrlock_2, pthread_rwlock_wrlock,
+		  GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_wrlock_3, pthread_rwlock_wrlock,
+	       GLIBC_2_1);
+#endif
+#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
+compat_symbol (libc, __pthread_rwlock_wrlock_4, __pthread_rwlock_wrlock,
+	       GLIBC_2_2);
+#endif
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 10a24568a9..89910560fa 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -167,10 +167,8 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 # define __libc_lock_lock(NAME) \
   __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
 #endif
-#define __libc_rwlock_rdlock(NAME) \
-  __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0)
-#define __libc_rwlock_wrlock(NAME) \
-  __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0)
+#define __libc_rwlock_rdlock(NAME) __pthread_rwlock_rdlock (&(NAME))
+#define __libc_rwlock_wrlock(NAME) __pthread_rwlock_wrlock (&(NAME))
 
 /* Try to lock the named lock variable.  */
 #if IS_IN (libc) || IS_IN (libpthread)
@@ -199,8 +197,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 # define __libc_lock_unlock(NAME) \
   __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
 #endif
-#define __libc_rwlock_unlock(NAME) \
-  __libc_ptf_call (__pthread_rwlock_unlock, (&(NAME)), 0)
+#define __libc_rwlock_unlock(NAME) __pthread_rwlock_unlock (&(NAME))
 
 #ifdef SHARED
 # define __rtld_lock_default_lock_recursive(lock) \
@@ -299,15 +296,15 @@ extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
 extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
 
 extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
-
+libc_hidden_proto (__pthread_rwlock_rdlock)
 extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
 
 extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
-
+libc_hidden_proto (__pthread_rwlock_wrlock)
 extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
 
 extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
-
+libc_hidden_proto (__pthread_rwlock_unlock)
 extern int __pthread_once (pthread_once_t *__once_control,
 			   void (*__init_routine) (void));
 libc_hidden_proto (__pthread_once)
@@ -333,11 +330,8 @@ weak_extern (__pthread_mutexattr_destroy)
 weak_extern (__pthread_mutexattr_settype)
 weak_extern (__pthread_rwlock_init)
 weak_extern (__pthread_rwlock_destroy)
-weak_extern (__pthread_rwlock_rdlock)
 weak_extern (__pthread_rwlock_tryrdlock)
-weak_extern (__pthread_rwlock_wrlock)
 weak_extern (__pthread_rwlock_trywrlock)
-weak_extern (__pthread_rwlock_unlock)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 # else
@@ -350,11 +344,8 @@ weak_extern (__pthread_atfork)
 #  pragma weak __pthread_mutexattr_destroy
 #  pragma weak __pthread_mutexattr_settype
 #  pragma weak __pthread_rwlock_destroy
-#  pragma weak __pthread_rwlock_rdlock
 #  pragma weak __pthread_rwlock_tryrdlock
-#  pragma weak __pthread_rwlock_wrlock
 #  pragma weak __pthread_rwlock_trywrlock
-#  pragma weak __pthread_rwlock_unlock
 #  pragma weak __pthread_initialize
 #  pragma weak __pthread_atfork
 # endif
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 2d89013ff5..8535e142d5 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -46,9 +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_rwlock_rdlock) (pthread_rwlock_t *);
-  int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
-  int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
   int (*ptr__nptl_setxid) (struct xid_command *);
 };
 
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 991efa0044..9191b2e760 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -342,6 +342,9 @@ GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_rwlock_rdlock F
+GLIBC_2.17 __pthread_rwlock_unlock F
+GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
@@ -1462,6 +1465,9 @@ 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_rwlock_rdlock F
+GLIBC_2.17 pthread_rwlock_unlock F
+GLIBC_2.17 pthread_rwlock_wrlock F
 GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
@@ -2193,6 +2199,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2200,4 +2209,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 50ab959905..9a24f796de 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_rwlock_destroy F
 GLIBC_2.17 __pthread_rwlock_init F
-GLIBC_2.17 __pthread_rwlock_rdlock F
 GLIBC_2.17 __pthread_rwlock_tryrdlock F
 GLIBC_2.17 __pthread_rwlock_trywrlock F
-GLIBC_2.17 __pthread_rwlock_unlock F
-GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
 GLIBC_2.17 __pwrite64 F
@@ -113,13 +110,10 @@ GLIBC_2.17 pthread_mutexattr_setrobust_np F
 GLIBC_2.17 pthread_mutexattr_settype F
 GLIBC_2.17 pthread_rwlock_destroy F
 GLIBC_2.17 pthread_rwlock_init F
-GLIBC_2.17 pthread_rwlock_rdlock F
 GLIBC_2.17 pthread_rwlock_timedrdlock F
 GLIBC_2.17 pthread_rwlock_timedwrlock F
 GLIBC_2.17 pthread_rwlock_tryrdlock F
 GLIBC_2.17 pthread_rwlock_trywrlock F
-GLIBC_2.17 pthread_rwlock_unlock F
-GLIBC_2.17 pthread_rwlock_wrlock F
 GLIBC_2.17 pthread_rwlockattr_destroy F
 GLIBC_2.17 pthread_rwlockattr_getkind_np F
 GLIBC_2.17 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index a1229e4a1a..71dd49d25c 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -1588,6 +1588,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1861,6 +1864,9 @@ GLIBC_2.2 __fwriting F
 GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2274,6 +2280,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2281,6 +2290,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 9d78d94466..a7b3fd73ab 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index ceee863b25..38764a6746 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -331,6 +331,9 @@ GLIBC_2.32 __pthread_cleanup_routine F
 GLIBC_2.32 __pthread_getspecific F
 GLIBC_2.32 __pthread_key_create F
 GLIBC_2.32 __pthread_once F
+GLIBC_2.32 __pthread_rwlock_rdlock F
+GLIBC_2.32 __pthread_rwlock_unlock F
+GLIBC_2.32 __pthread_rwlock_wrlock F
 GLIBC_2.32 __pthread_setspecific F
 GLIBC_2.32 __pthread_unwind_next F
 GLIBC_2.32 __ptsname_r_chk F
@@ -1389,6 +1392,9 @@ 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_rwlock_rdlock F
+GLIBC_2.32 pthread_rwlock_unlock F
+GLIBC_2.32 pthread_rwlock_wrlock F
 GLIBC_2.32 pthread_self F
 GLIBC_2.32 pthread_setcancelstate F
 GLIBC_2.32 pthread_setcanceltype F
@@ -1953,6 +1959,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -1960,4 +1969,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 6fed825b25..0d8b928e6d 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -24,11 +24,8 @@ GLIBC_2.32 __pthread_register_cancel F
 GLIBC_2.32 __pthread_register_cancel_defer F
 GLIBC_2.32 __pthread_rwlock_destroy F
 GLIBC_2.32 __pthread_rwlock_init F
-GLIBC_2.32 __pthread_rwlock_rdlock F
 GLIBC_2.32 __pthread_rwlock_tryrdlock F
 GLIBC_2.32 __pthread_rwlock_trywrlock F
-GLIBC_2.32 __pthread_rwlock_unlock F
-GLIBC_2.32 __pthread_rwlock_wrlock F
 GLIBC_2.32 __pthread_unregister_cancel F
 GLIBC_2.32 __pthread_unregister_cancel_restore F
 GLIBC_2.32 __pwrite64 F
@@ -130,13 +127,10 @@ GLIBC_2.32 pthread_rwlock_clockrdlock F
 GLIBC_2.32 pthread_rwlock_clockwrlock F
 GLIBC_2.32 pthread_rwlock_destroy F
 GLIBC_2.32 pthread_rwlock_init F
-GLIBC_2.32 pthread_rwlock_rdlock F
 GLIBC_2.32 pthread_rwlock_timedrdlock F
 GLIBC_2.32 pthread_rwlock_timedwrlock F
 GLIBC_2.32 pthread_rwlock_tryrdlock F
 GLIBC_2.32 pthread_rwlock_trywrlock F
-GLIBC_2.32 pthread_rwlock_unlock F
-GLIBC_2.32 pthread_rwlock_wrlock F
 GLIBC_2.32 pthread_rwlockattr_destroy F
 GLIBC_2.32 pthread_rwlockattr_getkind_np F
 GLIBC_2.32 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 31e2de3cc2..86d971e7d2 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -161,6 +161,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -168,6 +171,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -500,6 +506,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_rwlock_rdlock F
+GLIBC_2.4 __pthread_rwlock_unlock F
+GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1567,6 +1576,9 @@ 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_rwlock_rdlock F
+GLIBC_2.4 pthread_rwlock_unlock F
+GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
 GLIBC_2.4 __pthread_rwlock_init F
-GLIBC_2.4 __pthread_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
-GLIBC_2.4 __pthread_rwlock_unlock F
-GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
 GLIBC_2.4 __pwrite64 F
@@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
-GLIBC_2.4 pthread_rwlock_rdlock F
 GLIBC_2.4 pthread_rwlock_timedrdlock F
 GLIBC_2.4 pthread_rwlock_timedwrlock F
 GLIBC_2.4 pthread_rwlock_tryrdlock F
 GLIBC_2.4 pthread_rwlock_trywrlock F
-GLIBC_2.4 pthread_rwlock_unlock F
-GLIBC_2.4 pthread_rwlock_wrlock F
 GLIBC_2.4 pthread_rwlockattr_destroy F
 GLIBC_2.4 pthread_rwlockattr_getkind_np F
 GLIBC_2.4 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index c6f9e3dbc3..caf3f6a141 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -158,6 +158,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -165,6 +168,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
@@ -497,6 +503,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_rwlock_rdlock F
+GLIBC_2.4 __pthread_rwlock_unlock F
+GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1564,6 +1573,9 @@ 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_rwlock_rdlock F
+GLIBC_2.4 pthread_rwlock_unlock F
+GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
 GLIBC_2.4 __pthread_rwlock_init F
-GLIBC_2.4 __pthread_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
-GLIBC_2.4 __pthread_rwlock_unlock F
-GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
 GLIBC_2.4 __pwrite64 F
@@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
-GLIBC_2.4 pthread_rwlock_rdlock F
 GLIBC_2.4 pthread_rwlock_timedrdlock F
 GLIBC_2.4 pthread_rwlock_timedwrlock F
 GLIBC_2.4 pthread_rwlock_tryrdlock F
 GLIBC_2.4 pthread_rwlock_trywrlock F
-GLIBC_2.4 pthread_rwlock_unlock F
-GLIBC_2.4 pthread_rwlock_wrlock F
 GLIBC_2.4 pthread_rwlockattr_destroy F
 GLIBC_2.4 pthread_rwlockattr_getkind_np F
 GLIBC_2.4 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index ec7f3bde74..aeb6424389 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -335,6 +335,9 @@ GLIBC_2.29 __pthread_cleanup_routine F
 GLIBC_2.29 __pthread_getspecific F
 GLIBC_2.29 __pthread_key_create F
 GLIBC_2.29 __pthread_once F
+GLIBC_2.29 __pthread_rwlock_rdlock F
+GLIBC_2.29 __pthread_rwlock_unlock F
+GLIBC_2.29 __pthread_rwlock_wrlock F
 GLIBC_2.29 __pthread_setspecific F
 GLIBC_2.29 __pthread_unwind_next F
 GLIBC_2.29 __ptsname_r_chk F
@@ -1450,6 +1453,9 @@ 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_rwlock_rdlock F
+GLIBC_2.29 pthread_rwlock_unlock F
+GLIBC_2.29 pthread_rwlock_wrlock F
 GLIBC_2.29 pthread_self F
 GLIBC_2.29 pthread_setcancelstate F
 GLIBC_2.29 pthread_setcanceltype F
@@ -2137,6 +2143,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2144,4 +2153,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index cf7869867c..440c0507d1 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -24,11 +24,8 @@ GLIBC_2.29 __pthread_register_cancel F
 GLIBC_2.29 __pthread_register_cancel_defer F
 GLIBC_2.29 __pthread_rwlock_destroy F
 GLIBC_2.29 __pthread_rwlock_init F
-GLIBC_2.29 __pthread_rwlock_rdlock F
 GLIBC_2.29 __pthread_rwlock_tryrdlock F
 GLIBC_2.29 __pthread_rwlock_trywrlock F
-GLIBC_2.29 __pthread_rwlock_unlock F
-GLIBC_2.29 __pthread_rwlock_wrlock F
 GLIBC_2.29 __pthread_unregister_cancel F
 GLIBC_2.29 __pthread_unregister_cancel_restore F
 GLIBC_2.29 __pwrite64 F
@@ -125,13 +122,10 @@ GLIBC_2.29 pthread_mutexattr_setrobust_np F
 GLIBC_2.29 pthread_mutexattr_settype F
 GLIBC_2.29 pthread_rwlock_destroy F
 GLIBC_2.29 pthread_rwlock_init F
-GLIBC_2.29 pthread_rwlock_rdlock F
 GLIBC_2.29 pthread_rwlock_timedrdlock F
 GLIBC_2.29 pthread_rwlock_timedwrlock F
 GLIBC_2.29 pthread_rwlock_tryrdlock F
 GLIBC_2.29 pthread_rwlock_trywrlock F
-GLIBC_2.29 pthread_rwlock_unlock F
-GLIBC_2.29 pthread_rwlock_wrlock F
 GLIBC_2.29 pthread_rwlockattr_destroy F
 GLIBC_2.29 pthread_rwlockattr_getkind_np F
 GLIBC_2.29 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index ebced5d8c3..e1d02058c9 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -359,6 +359,9 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1283,6 +1286,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2095,6 +2101,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2102,6 +2111,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index d15479dabd..717344a690 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -1556,6 +1556,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1865,6 +1868,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2262,6 +2268,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2269,6 +2278,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 99e53d0c49..35cc2f61c5 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 62c8c7d461..284b7072a3 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -363,6 +363,9 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1304,6 +1307,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2127,6 +2133,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2134,6 +2143,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 ff37f3905e..2e69109cdc 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 83e8a6824f..404d16b92a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -162,6 +162,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -169,6 +172,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
@@ -486,6 +492,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
 GLIBC_2.4 __pthread_getspecific F
 GLIBC_2.4 __pthread_key_create F
 GLIBC_2.4 __pthread_once F
+GLIBC_2.4 __pthread_rwlock_rdlock F
+GLIBC_2.4 __pthread_rwlock_unlock F
+GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_setspecific F
 GLIBC_2.4 __pthread_unwind_next F
 GLIBC_2.4 __ptsname_r_chk F
@@ -1547,6 +1556,9 @@ 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_rwlock_rdlock F
+GLIBC_2.4 pthread_rwlock_unlock F
+GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_rwlock_destroy F
 GLIBC_2.4 __pthread_rwlock_init F
-GLIBC_2.4 __pthread_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_tryrdlock F
 GLIBC_2.4 __pthread_rwlock_trywrlock F
-GLIBC_2.4 __pthread_rwlock_unlock F
-GLIBC_2.4 __pthread_rwlock_wrlock F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
 GLIBC_2.4 __pwrite64 F
@@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
 GLIBC_2.4 pthread_mutexattr_settype F
 GLIBC_2.4 pthread_rwlock_destroy F
 GLIBC_2.4 pthread_rwlock_init F
-GLIBC_2.4 pthread_rwlock_rdlock F
 GLIBC_2.4 pthread_rwlock_timedrdlock F
 GLIBC_2.4 pthread_rwlock_timedwrlock F
 GLIBC_2.4 pthread_rwlock_tryrdlock F
 GLIBC_2.4 pthread_rwlock_trywrlock F
-GLIBC_2.4 pthread_rwlock_unlock F
-GLIBC_2.4 pthread_rwlock_wrlock F
 GLIBC_2.4 pthread_rwlockattr_destroy F
 GLIBC_2.4 pthread_rwlockattr_getkind_np F
 GLIBC_2.4 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 5a81c61de7..b1ad96e072 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -1552,6 +1552,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1821,6 +1824,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2207,6 +2213,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2214,6 +2223,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 99e53d0c49..35cc2f61c5 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 39c806db53..3e0cceae93 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -343,6 +343,9 @@ GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_rwlock_rdlock F
+GLIBC_2.18 __pthread_rwlock_unlock F
+GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
@@ -1465,6 +1468,9 @@ 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_rwlock_rdlock F
+GLIBC_2.18 pthread_rwlock_unlock F
+GLIBC_2.18 pthread_rwlock_wrlock F
 GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
@@ -2188,6 +2194,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2195,4 +2204,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 8b3785414d..0db83c2f88 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_rwlock_destroy F
 GLIBC_2.18 __pthread_rwlock_init F
-GLIBC_2.18 __pthread_rwlock_rdlock F
 GLIBC_2.18 __pthread_rwlock_tryrdlock F
 GLIBC_2.18 __pthread_rwlock_trywrlock F
-GLIBC_2.18 __pthread_rwlock_unlock F
-GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
 GLIBC_2.18 __pwrite64 F
@@ -114,13 +111,10 @@ GLIBC_2.18 pthread_mutexattr_setrobust_np F
 GLIBC_2.18 pthread_mutexattr_settype F
 GLIBC_2.18 pthread_rwlock_destroy F
 GLIBC_2.18 pthread_rwlock_init F
-GLIBC_2.18 pthread_rwlock_rdlock F
 GLIBC_2.18 pthread_rwlock_timedrdlock F
 GLIBC_2.18 pthread_rwlock_timedwrlock F
 GLIBC_2.18 pthread_rwlock_tryrdlock F
 GLIBC_2.18 pthread_rwlock_trywrlock F
-GLIBC_2.18 pthread_rwlock_unlock F
-GLIBC_2.18 pthread_rwlock_wrlock F
 GLIBC_2.18 pthread_rwlockattr_destroy F
 GLIBC_2.18 pthread_rwlockattr_getkind_np F
 GLIBC_2.18 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index ce2823207c..4ee88a1d01 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -343,6 +343,9 @@ GLIBC_2.18 __pthread_cleanup_routine F
 GLIBC_2.18 __pthread_getspecific F
 GLIBC_2.18 __pthread_key_create F
 GLIBC_2.18 __pthread_once F
+GLIBC_2.18 __pthread_rwlock_rdlock F
+GLIBC_2.18 __pthread_rwlock_unlock F
+GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_setspecific F
 GLIBC_2.18 __pthread_unwind_next F
 GLIBC_2.18 __ptsname_r_chk F
@@ -1465,6 +1468,9 @@ 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_rwlock_rdlock F
+GLIBC_2.18 pthread_rwlock_unlock F
+GLIBC_2.18 pthread_rwlock_wrlock F
 GLIBC_2.18 pthread_self F
 GLIBC_2.18 pthread_setcancelstate F
 GLIBC_2.18 pthread_setcanceltype F
@@ -2185,6 +2191,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2192,4 +2201,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 8b3785414d..0db83c2f88 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_rwlock_destroy F
 GLIBC_2.18 __pthread_rwlock_init F
-GLIBC_2.18 __pthread_rwlock_rdlock F
 GLIBC_2.18 __pthread_rwlock_tryrdlock F
 GLIBC_2.18 __pthread_rwlock_trywrlock F
-GLIBC_2.18 __pthread_rwlock_unlock F
-GLIBC_2.18 __pthread_rwlock_wrlock F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
 GLIBC_2.18 __pwrite64 F
@@ -114,13 +111,10 @@ GLIBC_2.18 pthread_mutexattr_setrobust_np F
 GLIBC_2.18 pthread_mutexattr_settype F
 GLIBC_2.18 pthread_rwlock_destroy F
 GLIBC_2.18 pthread_rwlock_init F
-GLIBC_2.18 pthread_rwlock_rdlock F
 GLIBC_2.18 pthread_rwlock_timedrdlock F
 GLIBC_2.18 pthread_rwlock_timedwrlock F
 GLIBC_2.18 pthread_rwlock_tryrdlock F
 GLIBC_2.18 pthread_rwlock_trywrlock F
-GLIBC_2.18 pthread_rwlock_unlock F
-GLIBC_2.18 pthread_rwlock_wrlock F
 GLIBC_2.18 pthread_rwlockattr_destroy F
 GLIBC_2.18 pthread_rwlockattr_getkind_np F
 GLIBC_2.18 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 5e8abfa6ae..e67af35000 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -1526,6 +1526,9 @@ GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __poll F
 GLIBC_2.2 __pread64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __res_init F
@@ -1813,6 +1816,9 @@ GLIBC_2.2 pread64 F
 GLIBC_2.2 printf_size F
 GLIBC_2.2 printf_size_info F
 GLIBC_2.2 pthread_attr_init F
+GLIBC_2.2 pthread_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 ptsname F
 GLIBC_2.2 ptsname_r F
 GLIBC_2.2 putgrent F
@@ -2178,6 +2184,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2185,6 +2194,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 cd0d6d7419..a1a66138d4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -86,11 +86,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
@@ -123,13 +120,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 93002ae842..1ce0179391 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -1524,6 +1524,9 @@ GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __poll F
 GLIBC_2.2 __pread64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __res_init F
@@ -1811,6 +1814,9 @@ GLIBC_2.2 pread64 F
 GLIBC_2.2 printf_size F
 GLIBC_2.2 printf_size_info F
 GLIBC_2.2 pthread_attr_init F
+GLIBC_2.2 pthread_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 ptsname F
 GLIBC_2.2 ptsname_r F
 GLIBC_2.2 putgrent F
@@ -2176,6 +2182,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2183,6 +2192,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 cd0d6d7419..a1a66138d4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -86,11 +86,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
@@ -123,13 +120,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 245a840e12..54c2300420 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -1524,6 +1524,9 @@ GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __poll F
 GLIBC_2.2 __pread64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __res_init F
@@ -1811,6 +1814,9 @@ GLIBC_2.2 pread64 F
 GLIBC_2.2 printf_size F
 GLIBC_2.2 printf_size_info F
 GLIBC_2.2 pthread_attr_init F
+GLIBC_2.2 pthread_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 ptsname F
 GLIBC_2.2 ptsname_r F
 GLIBC_2.2 putgrent F
@@ -2184,6 +2190,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2191,6 +2200,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 24b2dddb51..90bbb7f253 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -1520,6 +1520,9 @@ GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __poll F
 GLIBC_2.2 __pread64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
 GLIBC_2.2 __res_init F
@@ -1807,6 +1810,9 @@ GLIBC_2.2 pread64 F
 GLIBC_2.2 printf_size F
 GLIBC_2.2 printf_size_info F
 GLIBC_2.2 pthread_attr_init F
+GLIBC_2.2 pthread_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 ptsname F
 GLIBC_2.2 ptsname_r F
 GLIBC_2.2 putgrent F
@@ -2178,6 +2184,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2185,6 +2194,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 7d4b4dd278..1f68c2a3fb 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -380,6 +380,9 @@ GLIBC_2.21 __pthread_cleanup_routine F
 GLIBC_2.21 __pthread_getspecific F
 GLIBC_2.21 __pthread_key_create F
 GLIBC_2.21 __pthread_once F
+GLIBC_2.21 __pthread_rwlock_rdlock F
+GLIBC_2.21 __pthread_rwlock_unlock F
+GLIBC_2.21 __pthread_rwlock_wrlock F
 GLIBC_2.21 __pthread_setspecific F
 GLIBC_2.21 __pthread_unwind_next F
 GLIBC_2.21 __ptsname_r_chk F
@@ -1507,6 +1510,9 @@ 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_rwlock_rdlock F
+GLIBC_2.21 pthread_rwlock_unlock F
+GLIBC_2.21 pthread_rwlock_wrlock F
 GLIBC_2.21 pthread_self F
 GLIBC_2.21 pthread_setcancelstate F
 GLIBC_2.21 pthread_setcanceltype F
@@ -2226,6 +2232,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2233,4 +2242,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 0250c9756d..806432b7b4 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.21 __pthread_register_cancel F
 GLIBC_2.21 __pthread_register_cancel_defer F
 GLIBC_2.21 __pthread_rwlock_destroy F
 GLIBC_2.21 __pthread_rwlock_init F
-GLIBC_2.21 __pthread_rwlock_rdlock F
 GLIBC_2.21 __pthread_rwlock_tryrdlock F
 GLIBC_2.21 __pthread_rwlock_trywrlock F
-GLIBC_2.21 __pthread_rwlock_unlock F
-GLIBC_2.21 __pthread_rwlock_wrlock F
 GLIBC_2.21 __pthread_unregister_cancel F
 GLIBC_2.21 __pthread_unregister_cancel_restore F
 GLIBC_2.21 __pwrite64 F
@@ -114,13 +111,10 @@ GLIBC_2.21 pthread_mutexattr_setrobust_np F
 GLIBC_2.21 pthread_mutexattr_settype F
 GLIBC_2.21 pthread_rwlock_destroy F
 GLIBC_2.21 pthread_rwlock_init F
-GLIBC_2.21 pthread_rwlock_rdlock F
 GLIBC_2.21 pthread_rwlock_timedrdlock F
 GLIBC_2.21 pthread_rwlock_timedwrlock F
 GLIBC_2.21 pthread_rwlock_tryrdlock F
 GLIBC_2.21 pthread_rwlock_trywrlock F
-GLIBC_2.21 pthread_rwlock_unlock F
-GLIBC_2.21 pthread_rwlock_wrlock F
 GLIBC_2.21 pthread_rwlockattr_destroy F
 GLIBC_2.21 pthread_rwlockattr_getkind_np F
 GLIBC_2.21 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 65ea41b2db..a41536e4cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -1560,6 +1560,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1827,6 +1830,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2234,6 +2240,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2241,6 +2250,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 e0eb362a7a..d0646d0eaf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 9d413de126..cdd6e98496 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -1560,6 +1560,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1831,6 +1834,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2267,6 +2273,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2274,6 +2283,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 16c24bfc69..63a7449937 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -412,6 +412,9 @@ GLIBC_2.3 __progname_full D 0x8
 GLIBC_2.3 __pthread_getspecific F
 GLIBC_2.3 __pthread_key_create F
 GLIBC_2.3 __pthread_once F
+GLIBC_2.3 __pthread_rwlock_rdlock F
+GLIBC_2.3 __pthread_rwlock_unlock F
+GLIBC_2.3 __pthread_rwlock_wrlock F
 GLIBC_2.3 __pthread_setspecific F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __rawmemchr F
@@ -1390,6 +1393,9 @@ 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_rwlock_rdlock F
+GLIBC_2.3 pthread_rwlock_unlock F
+GLIBC_2.3 pthread_rwlock_wrlock F
 GLIBC_2.3 pthread_self F
 GLIBC_2.3 pthread_setcancelstate F
 GLIBC_2.3 pthread_setcanceltype F
@@ -2097,6 +2103,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2104,6 +2113,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 1099d88afe..72d49ce4f3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -51,11 +51,8 @@ GLIBC_2.3 __pthread_mutexattr_init F
 GLIBC_2.3 __pthread_mutexattr_settype F
 GLIBC_2.3 __pthread_rwlock_destroy F
 GLIBC_2.3 __pthread_rwlock_init F
-GLIBC_2.3 __pthread_rwlock_rdlock F
 GLIBC_2.3 __pthread_rwlock_tryrdlock F
 GLIBC_2.3 __pthread_rwlock_trywrlock F
-GLIBC_2.3 __pthread_rwlock_unlock F
-GLIBC_2.3 __pthread_rwlock_wrlock F
 GLIBC_2.3 __pwrite64 F
 GLIBC_2.3 __read F
 GLIBC_2.3 __res_state F
@@ -122,13 +119,10 @@ GLIBC_2.3 pthread_mutexattr_setpshared F
 GLIBC_2.3 pthread_mutexattr_settype F
 GLIBC_2.3 pthread_rwlock_destroy F
 GLIBC_2.3 pthread_rwlock_init F
-GLIBC_2.3 pthread_rwlock_rdlock F
 GLIBC_2.3 pthread_rwlock_timedrdlock F
 GLIBC_2.3 pthread_rwlock_timedwrlock F
 GLIBC_2.3 pthread_rwlock_tryrdlock F
 GLIBC_2.3 pthread_rwlock_trywrlock F
-GLIBC_2.3 pthread_rwlock_unlock F
-GLIBC_2.3 pthread_rwlock_wrlock F
 GLIBC_2.3 pthread_rwlockattr_destroy F
 GLIBC_2.3 pthread_rwlockattr_getkind_np F
 GLIBC_2.3 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index d97c594edd..b6de88ea41 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -428,6 +428,9 @@ GLIBC_2.17 __pthread_cleanup_routine F
 GLIBC_2.17 __pthread_getspecific F
 GLIBC_2.17 __pthread_key_create F
 GLIBC_2.17 __pthread_once F
+GLIBC_2.17 __pthread_rwlock_rdlock F
+GLIBC_2.17 __pthread_rwlock_unlock F
+GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_setspecific F
 GLIBC_2.17 __pthread_unwind_next F
 GLIBC_2.17 __ptsname_r_chk F
@@ -1551,6 +1554,9 @@ 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_rwlock_rdlock F
+GLIBC_2.17 pthread_rwlock_unlock F
+GLIBC_2.17 pthread_rwlock_wrlock F
 GLIBC_2.17 pthread_self F
 GLIBC_2.17 pthread_setcancelstate F
 GLIBC_2.17 pthread_setcanceltype F
@@ -2388,6 +2394,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2395,4 +2404,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 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 50ab959905..9a24f796de 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_rwlock_destroy F
 GLIBC_2.17 __pthread_rwlock_init F
-GLIBC_2.17 __pthread_rwlock_rdlock F
 GLIBC_2.17 __pthread_rwlock_tryrdlock F
 GLIBC_2.17 __pthread_rwlock_trywrlock F
-GLIBC_2.17 __pthread_rwlock_unlock F
-GLIBC_2.17 __pthread_rwlock_wrlock F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
 GLIBC_2.17 __pwrite64 F
@@ -113,13 +110,10 @@ GLIBC_2.17 pthread_mutexattr_setrobust_np F
 GLIBC_2.17 pthread_mutexattr_settype F
 GLIBC_2.17 pthread_rwlock_destroy F
 GLIBC_2.17 pthread_rwlock_init F
-GLIBC_2.17 pthread_rwlock_rdlock F
 GLIBC_2.17 pthread_rwlock_timedrdlock F
 GLIBC_2.17 pthread_rwlock_timedwrlock F
 GLIBC_2.17 pthread_rwlock_tryrdlock F
 GLIBC_2.17 pthread_rwlock_trywrlock F
-GLIBC_2.17 pthread_rwlock_unlock F
-GLIBC_2.17 pthread_rwlock_wrlock F
 GLIBC_2.17 pthread_rwlockattr_destroy F
 GLIBC_2.17 pthread_rwlockattr_getkind_np F
 GLIBC_2.17 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 44b0121343..d81b46d597 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -328,6 +328,9 @@ GLIBC_2.33 __pthread_cleanup_routine F
 GLIBC_2.33 __pthread_getspecific F
 GLIBC_2.33 __pthread_key_create F
 GLIBC_2.33 __pthread_once F
+GLIBC_2.33 __pthread_rwlock_rdlock F
+GLIBC_2.33 __pthread_rwlock_unlock F
+GLIBC_2.33 __pthread_rwlock_wrlock F
 GLIBC_2.33 __pthread_setspecific F
 GLIBC_2.33 __pthread_unwind_next F
 GLIBC_2.33 __ptsname_r_chk F
@@ -1391,6 +1394,9 @@ 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_rwlock_rdlock F
+GLIBC_2.33 pthread_rwlock_unlock F
+GLIBC_2.33 pthread_rwlock_wrlock F
 GLIBC_2.33 pthread_self F
 GLIBC_2.33 pthread_setcancelstate F
 GLIBC_2.33 pthread_setcanceltype F
@@ -1955,6 +1961,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -1962,4 +1971,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 6c6fdd0cbf..10e50b67c0 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -24,11 +24,8 @@ GLIBC_2.33 __pthread_register_cancel F
 GLIBC_2.33 __pthread_register_cancel_defer F
 GLIBC_2.33 __pthread_rwlock_destroy F
 GLIBC_2.33 __pthread_rwlock_init F
-GLIBC_2.33 __pthread_rwlock_rdlock F
 GLIBC_2.33 __pthread_rwlock_tryrdlock F
 GLIBC_2.33 __pthread_rwlock_trywrlock F
-GLIBC_2.33 __pthread_rwlock_unlock F
-GLIBC_2.33 __pthread_rwlock_wrlock F
 GLIBC_2.33 __pthread_unregister_cancel F
 GLIBC_2.33 __pthread_unregister_cancel_restore F
 GLIBC_2.33 __pwrite64 F
@@ -130,13 +127,10 @@ GLIBC_2.33 pthread_rwlock_clockrdlock F
 GLIBC_2.33 pthread_rwlock_clockwrlock F
 GLIBC_2.33 pthread_rwlock_destroy F
 GLIBC_2.33 pthread_rwlock_init F
-GLIBC_2.33 pthread_rwlock_rdlock F
 GLIBC_2.33 pthread_rwlock_timedrdlock F
 GLIBC_2.33 pthread_rwlock_timedwrlock F
 GLIBC_2.33 pthread_rwlock_tryrdlock F
 GLIBC_2.33 pthread_rwlock_trywrlock F
-GLIBC_2.33 pthread_rwlock_unlock F
-GLIBC_2.33 pthread_rwlock_wrlock F
 GLIBC_2.33 pthread_rwlockattr_destroy F
 GLIBC_2.33 pthread_rwlockattr_getkind_np F
 GLIBC_2.33 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 22a34442f0..fbd1c5e5cf 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -339,6 +339,9 @@ GLIBC_2.27 __pthread_cleanup_routine F
 GLIBC_2.27 __pthread_getspecific F
 GLIBC_2.27 __pthread_key_create F
 GLIBC_2.27 __pthread_once F
+GLIBC_2.27 __pthread_rwlock_rdlock F
+GLIBC_2.27 __pthread_rwlock_unlock F
+GLIBC_2.27 __pthread_rwlock_wrlock F
 GLIBC_2.27 __pthread_setspecific F
 GLIBC_2.27 __pthread_unwind_next F
 GLIBC_2.27 __ptsname_r_chk F
@@ -1453,6 +1456,9 @@ 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_rwlock_rdlock F
+GLIBC_2.27 pthread_rwlock_unlock F
+GLIBC_2.27 pthread_rwlock_wrlock F
 GLIBC_2.27 pthread_self F
 GLIBC_2.27 pthread_setcancelstate F
 GLIBC_2.27 pthread_setcanceltype F
@@ -2155,6 +2161,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2162,4 +2171,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 359545faee..ed24898e0d 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.27 __pthread_register_cancel F
 GLIBC_2.27 __pthread_register_cancel_defer F
 GLIBC_2.27 __pthread_rwlock_destroy F
 GLIBC_2.27 __pthread_rwlock_init F
-GLIBC_2.27 __pthread_rwlock_rdlock F
 GLIBC_2.27 __pthread_rwlock_tryrdlock F
 GLIBC_2.27 __pthread_rwlock_trywrlock F
-GLIBC_2.27 __pthread_rwlock_unlock F
-GLIBC_2.27 __pthread_rwlock_wrlock F
 GLIBC_2.27 __pthread_unregister_cancel F
 GLIBC_2.27 __pthread_unregister_cancel_restore F
 GLIBC_2.27 __pwrite64 F
@@ -114,13 +111,10 @@ GLIBC_2.27 pthread_mutexattr_setrobust_np F
 GLIBC_2.27 pthread_mutexattr_settype F
 GLIBC_2.27 pthread_rwlock_destroy F
 GLIBC_2.27 pthread_rwlock_init F
-GLIBC_2.27 pthread_rwlock_rdlock F
 GLIBC_2.27 pthread_rwlock_timedrdlock F
 GLIBC_2.27 pthread_rwlock_timedwrlock F
 GLIBC_2.27 pthread_rwlock_tryrdlock F
 GLIBC_2.27 pthread_rwlock_trywrlock F
-GLIBC_2.27 pthread_rwlock_unlock F
-GLIBC_2.27 pthread_rwlock_wrlock F
 GLIBC_2.27 pthread_rwlockattr_destroy F
 GLIBC_2.27 pthread_rwlockattr_getkind_np F
 GLIBC_2.27 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 21f49b1fa0..27a9b011a8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -1552,6 +1552,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1825,6 +1828,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2232,6 +2238,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2239,6 +2248,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 5eb6187d98..d6e91c977a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -121,11 +118,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 114591d6f5..9e79331100 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -373,6 +373,9 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1301,6 +1304,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2133,6 +2139,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2140,6 +2149,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 8f60a6b633..14489b39d0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -31,11 +31,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -103,13 +100,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index ad487f0c9f..b7dd795864 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -362,6 +362,9 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1287,6 +1290,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2102,6 +2108,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2109,6 +2118,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 7f6886ff02..eea30cd098 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -362,6 +362,9 @@ GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1287,6 +1290,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2099,6 +2105,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2106,6 +2115,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 4ae6d45923..4944c4159b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -1553,6 +1553,9 @@ GLIBC_2.1 pread64 F
 GLIBC_2.1 printf_size F
 GLIBC_2.1 printf_size_info F
 GLIBC_2.1 pthread_attr_init F
+GLIBC_2.1 pthread_rwlock_rdlock F
+GLIBC_2.1 pthread_rwlock_unlock F
+GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 ptsname F
 GLIBC_2.1 ptsname_r F
 GLIBC_2.1 putgrent F
@@ -1823,6 +1826,9 @@ GLIBC_2.2 __getmntent_r F
 GLIBC_2.2 __lxstat64 F
 GLIBC_2.2 __nl_langinfo_l F
 GLIBC_2.2 __open64 F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __res_init F
 GLIBC_2.2 __res_nclose F
 GLIBC_2.2 __res_ninit F
@@ -2223,6 +2229,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2230,6 +2239,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 9d78d94466..a7b3fd73ab 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
 GLIBC_2.1 pthread_mutexattr_settype F
 GLIBC_2.1 pthread_rwlock_destroy F
 GLIBC_2.1 pthread_rwlock_init F
-GLIBC_2.1 pthread_rwlock_rdlock F
 GLIBC_2.1 pthread_rwlock_tryrdlock F
 GLIBC_2.1 pthread_rwlock_trywrlock F
-GLIBC_2.1 pthread_rwlock_unlock F
-GLIBC_2.1 pthread_rwlock_wrlock F
 GLIBC_2.1 pthread_rwlockattr_destroy F
 GLIBC_2.1 pthread_rwlockattr_getkind_np F
 GLIBC_2.1 pthread_rwlockattr_getpshared F
@@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __res_state F
 GLIBC_2.2 lseek64 F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 44d0f68cb2..e69420994f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -400,6 +400,9 @@ GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
 GLIBC_2.2 __pthread_once F
+GLIBC_2.2 __pthread_rwlock_rdlock F
+GLIBC_2.2 __pthread_rwlock_unlock F
+GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pthread_setspecific F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __rawmemchr F
@@ -1330,6 +1333,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2 pthread_rwlock_unlock F
+GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_self F
 GLIBC_2.2 pthread_setcancelstate F
 GLIBC_2.2 pthread_setcanceltype F
@@ -2150,6 +2156,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2157,6 +2166,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 ff37f3905e..2e69109cdc 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
 GLIBC_2.2 __pthread_mutexattr_settype F
 GLIBC_2.2 __pthread_rwlock_destroy F
 GLIBC_2.2 __pthread_rwlock_init F
-GLIBC_2.2 __pthread_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_tryrdlock F
 GLIBC_2.2 __pthread_rwlock_trywrlock F
-GLIBC_2.2 __pthread_rwlock_unlock F
-GLIBC_2.2 __pthread_rwlock_wrlock F
 GLIBC_2.2 __pwrite64 F
 GLIBC_2.2 __read F
 GLIBC_2.2 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
 GLIBC_2.2 pthread_mutexattr_settype F
 GLIBC_2.2 pthread_rwlock_destroy F
 GLIBC_2.2 pthread_rwlock_init F
-GLIBC_2.2 pthread_rwlock_rdlock F
 GLIBC_2.2 pthread_rwlock_timedrdlock F
 GLIBC_2.2 pthread_rwlock_timedwrlock F
 GLIBC_2.2 pthread_rwlock_tryrdlock F
 GLIBC_2.2 pthread_rwlock_trywrlock F
-GLIBC_2.2 pthread_rwlock_unlock F
-GLIBC_2.2 pthread_rwlock_wrlock F
 GLIBC_2.2 pthread_rwlockattr_destroy F
 GLIBC_2.2 pthread_rwlockattr_getkind_np F
 GLIBC_2.2 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index d96699a20d..dfe78d93cb 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -361,6 +361,9 @@ GLIBC_2.2.5 __progname_full D 0x8
 GLIBC_2.2.5 __pthread_getspecific F
 GLIBC_2.2.5 __pthread_key_create F
 GLIBC_2.2.5 __pthread_once F
+GLIBC_2.2.5 __pthread_rwlock_rdlock F
+GLIBC_2.2.5 __pthread_rwlock_unlock F
+GLIBC_2.2.5 __pthread_rwlock_wrlock F
 GLIBC_2.2.5 __pthread_setspecific F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __rawmemchr F
@@ -1298,6 +1301,9 @@ 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_rwlock_rdlock F
+GLIBC_2.2.5 pthread_rwlock_unlock F
+GLIBC_2.2.5 pthread_rwlock_wrlock F
 GLIBC_2.2.5 pthread_self F
 GLIBC_2.2.5 pthread_setcancelstate F
 GLIBC_2.2.5 pthread_setcanceltype F
@@ -2109,6 +2115,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2116,6 +2125,9 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 pthread_setspecific 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 511240921e..4f8dfa000a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -30,11 +30,8 @@ GLIBC_2.2.5 __pthread_mutexattr_init F
 GLIBC_2.2.5 __pthread_mutexattr_settype 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
 GLIBC_2.2.5 __pthread_rwlock_tryrdlock F
 GLIBC_2.2.5 __pthread_rwlock_trywrlock F
-GLIBC_2.2.5 __pthread_rwlock_unlock F
-GLIBC_2.2.5 __pthread_rwlock_wrlock F
 GLIBC_2.2.5 __pwrite64 F
 GLIBC_2.2.5 __read F
 GLIBC_2.2.5 __res_state F
@@ -102,13 +99,10 @@ GLIBC_2.2.5 pthread_mutexattr_setpshared F
 GLIBC_2.2.5 pthread_mutexattr_settype 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
 GLIBC_2.2.5 pthread_rwlock_timedrdlock F
 GLIBC_2.2.5 pthread_rwlock_timedwrlock F
 GLIBC_2.2.5 pthread_rwlock_tryrdlock F
 GLIBC_2.2.5 pthread_rwlock_trywrlock F
-GLIBC_2.2.5 pthread_rwlock_unlock F
-GLIBC_2.2.5 pthread_rwlock_wrlock F
 GLIBC_2.2.5 pthread_rwlockattr_destroy F
 GLIBC_2.2.5 pthread_rwlockattr_getkind_np F
 GLIBC_2.2.5 pthread_rwlockattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 33bbaff90c..3accd92583 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -343,6 +343,9 @@ GLIBC_2.16 __pthread_cleanup_routine F
 GLIBC_2.16 __pthread_getspecific F
 GLIBC_2.16 __pthread_key_create F
 GLIBC_2.16 __pthread_once F
+GLIBC_2.16 __pthread_rwlock_rdlock F
+GLIBC_2.16 __pthread_rwlock_unlock F
+GLIBC_2.16 __pthread_rwlock_wrlock F
 GLIBC_2.16 __pthread_setspecific F
 GLIBC_2.16 __pthread_unwind_next F
 GLIBC_2.16 __ptsname_r_chk F
@@ -1470,6 +1473,9 @@ 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_rwlock_rdlock F
+GLIBC_2.16 pthread_rwlock_unlock F
+GLIBC_2.16 pthread_rwlock_wrlock F
 GLIBC_2.16 pthread_self F
 GLIBC_2.16 pthread_setcancelstate F
 GLIBC_2.16 pthread_setcanceltype F
@@ -2207,6 +2213,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
 GLIBC_2.34 __pthread_once F
+GLIBC_2.34 __pthread_rwlock_rdlock F
+GLIBC_2.34 __pthread_rwlock_unlock F
+GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
 GLIBC_2.34 pthread_getspecific F
@@ -2214,4 +2223,7 @@ GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
 GLIBC_2.34 pthread_mutex_consistent F
 GLIBC_2.34 pthread_once F
+GLIBC_2.34 pthread_rwlock_rdlock F
+GLIBC_2.34 pthread_rwlock_unlock F
+GLIBC_2.34 pthread_rwlock_wrlock F
 GLIBC_2.34 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 a481ef56ab..0b017c0218 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -25,11 +25,8 @@ GLIBC_2.16 __pthread_register_cancel F
 GLIBC_2.16 __pthread_register_cancel_defer F
 GLIBC_2.16 __pthread_rwlock_destroy F
 GLIBC_2.16 __pthread_rwlock_init F
-GLIBC_2.16 __pthread_rwlock_rdlock F
 GLIBC_2.16 __pthread_rwlock_tryrdlock F
 GLIBC_2.16 __pthread_rwlock_trywrlock F
-GLIBC_2.16 __pthread_rwlock_unlock F
-GLIBC_2.16 __pthread_rwlock_wrlock F
 GLIBC_2.16 __pthread_unregister_cancel F
 GLIBC_2.16 __pthread_unregister_cancel_restore F
 GLIBC_2.16 __pwrite64 F
@@ -113,13 +110,10 @@ GLIBC_2.16 pthread_mutexattr_setrobust_np F
 GLIBC_2.16 pthread_mutexattr_settype F
 GLIBC_2.16 pthread_rwlock_destroy F
 GLIBC_2.16 pthread_rwlock_init F
-GLIBC_2.16 pthread_rwlock_rdlock F
 GLIBC_2.16 pthread_rwlock_timedrdlock F
 GLIBC_2.16 pthread_rwlock_timedwrlock F
 GLIBC_2.16 pthread_rwlock_tryrdlock F
 GLIBC_2.16 pthread_rwlock_trywrlock F
-GLIBC_2.16 pthread_rwlock_unlock F
-GLIBC_2.16 pthread_rwlock_wrlock F
 GLIBC_2.16 pthread_rwlockattr_destroy F
 GLIBC_2.16 pthread_rwlockattr_getkind_np F
 GLIBC_2.16 pthread_rwlockattr_getpshared F
-- 
2.29.2



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

* [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (27 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 28/37] nptl: Move rwlock functions with forwarders " Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 20:21   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 30/37] pthread: Introduce __pthread_early_init Florian Weimer
                   ` (9 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

This is a prerequisite for moving the mutex implementation.
---
 nptl/Makefile   |  2 +-
 nptl/Versions   |  5 +++++
 nptl/pthreadP.h | 16 ++++++++++------
 nptl/tpp.c      |  6 +++++-
 4 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 1eca75ef35..353cbf8911 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -93,6 +93,7 @@ routines = \
   pthread_setschedparam \
   pthread_setspecific \
   pthread_sigmask \
+  tpp \
   unwind \
 
 shared-only-routines = forward
@@ -232,7 +233,6 @@ libpthread-routines = \
   sem_unlink \
   sem_wait \
   sigaction \
-  tpp \
   vars \
   version \
 
diff --git a/nptl/Versions b/nptl/Versions
index b3feadd045..4dee682ed9 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -121,6 +121,7 @@ libc {
   GLIBC_PRIVATE {
     __futex_abstimed_wait64;
     __futex_abstimed_wait_cancelable64;
+    __init_sched_fifo_prio;
     __libc_alloca_cutoff;
     __libc_allocate_rtsig_private;
     __libc_cleanup_pop_restore;
@@ -147,13 +148,17 @@ libc {
     __pthread_cleanup_upto;
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
+    __pthread_current_priority;
     __pthread_exit;
     __pthread_force_elision;
     __pthread_getattr_default_np;
     __pthread_key_delete;
     __pthread_keys;
     __pthread_setcancelstate;
+    __pthread_tpp_change_priority;
     __pthread_unwind;
+    __sched_fifo_max_prio;
+    __sched_fifo_min_prio;
   }
 }
 
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 527e4acd4f..7fd290e004 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -231,12 +231,16 @@ rtld_hidden_proto (__nptl_set_robust_list_avail)
 #endif
 
 /* Thread Priority Protection.  */
-extern int __sched_fifo_min_prio attribute_hidden;
-extern int __sched_fifo_max_prio attribute_hidden;
-extern void __init_sched_fifo_prio (void) attribute_hidden;
-extern int __pthread_tpp_change_priority (int prev_prio, int new_prio)
-     attribute_hidden;
-extern int __pthread_current_priority (void) attribute_hidden;
+extern int __sched_fifo_min_prio;
+libc_hidden_proto (__sched_fifo_min_prio)
+extern int __sched_fifo_max_prio;
+libc_hidden_proto (__sched_fifo_max_prio)
+extern void __init_sched_fifo_prio (void);
+libc_hidden_proto (__init_sched_fifo_prio)
+extern int __pthread_tpp_change_priority (int prev_prio, int new_prio);
+libc_hidden_proto (__pthread_tpp_change_priority)
+extern int __pthread_current_priority (void);
+libc_hidden_proto (__pthread_current_priority)
 
 /* The library can run in debugging mode where it performs a lot more
    tests.  */
diff --git a/nptl/tpp.c b/nptl/tpp.c
index 8b7d9a2d23..7f58a75731 100644
--- a/nptl/tpp.c
+++ b/nptl/tpp.c
@@ -25,9 +25,10 @@
 #include <stdlib.h>
 #include <atomic.h>
 
-
 int __sched_fifo_min_prio = -1;
+libc_hidden_data_def (__sched_fifo_min_prio)
 int __sched_fifo_max_prio = -1;
+libc_hidden_data_def (__sched_fifo_max_prio)
 
 /* We only want to initialize __sched_fifo_min_prio and __sched_fifo_max_prio
    once.  The standard solution would be similar to pthread_once, but then
@@ -47,6 +48,7 @@ __init_sched_fifo_prio (void)
   atomic_store_relaxed (&__sched_fifo_min_prio,
 			__sched_get_priority_min (SCHED_FIFO));
 }
+libc_hidden_def (__init_sched_fifo_prio)
 
 int
 __pthread_tpp_change_priority (int previous_prio, int new_prio)
@@ -155,6 +157,7 @@ __pthread_tpp_change_priority (int previous_prio, int new_prio)
 
   return result;
 }
+libc_hidden_def (__pthread_tpp_change_priority)
 
 int
 __pthread_current_priority (void)
@@ -193,3 +196,4 @@ __pthread_current_priority (void)
 
   return result;
 }
+libc_hidden_def (__pthread_current_priority)
-- 
2.29.2



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

* [PATCH v3 30/37] pthread: Introduce __pthread_early_init
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (28 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols " Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 20:22   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc Florian Weimer
                   ` (8 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

This function is called from __libc_early_init to initialize the
pthread subsystem.
---
 elf/libc_early_init.c                |  3 +++
 sysdeps/pthread/pthread_early_init.h | 29 ++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 sysdeps/pthread/pthread_early_init.h

diff --git a/elf/libc_early_init.c b/elf/libc_early_init.c
index 9b1901a706..525edf1e7d 100644
--- a/elf/libc_early_init.c
+++ b/elf/libc_early_init.c
@@ -21,6 +21,7 @@
 #include <libc-early-init.h>
 #include <libc-internal.h>
 #include <lowlevellock.h>
+#include <pthread_early_init.h>
 #include <sys/single_threaded.h>
 
 #ifdef SHARED
@@ -40,6 +41,8 @@ __libc_early_init (_Bool initial)
   __libc_initial = initial;
 #endif
 
+  __pthread_early_init ();
+
 #if ENABLE_ELISION_SUPPORT
   __lll_elision_init ();
 #endif
diff --git a/sysdeps/pthread/pthread_early_init.h b/sysdeps/pthread/pthread_early_init.h
new file mode 100644
index 0000000000..b8bb9b762d
--- /dev/null
+++ b/sysdeps/pthread/pthread_early_init.h
@@ -0,0 +1,29 @@
+/* pthread initialization called from __libc_early_init.  Generic 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/>.  */
+
+#ifndef _PTHREAD_EARLY_INIT_H
+#define _PTHREAD_EARLY_INIT_H 1
+
+static inline void
+__pthread_early_init (void)
+{
+  /* The generic version does not require any additional
+     initialization.  */
+}
+
+#endif /* _PTHREAD_EARLY_INIT_H */
-- 
2.29.2



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

* [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (29 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 30/37] pthread: Introduce __pthread_early_init Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 20:24   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization Florian Weimer
                   ` (7 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

This is in preparation of moving the mutex code into libc.

__pthread_tunables_init is now called via __libc_early_init.
For non-NPTL targets, a stub version is provided.
---
 nptl/Makefile                               |  2 +-
 nptl/Versions                               |  1 +
 nptl/nptl-init.c                            |  4 ---
 nptl/pthread_mutex_conf.c                   |  1 +
 sysdeps/nptl/pthread_early_init.h           | 33 +++++++++++++++++++++
 {nptl => sysdeps/nptl}/pthread_mutex_conf.h |  9 +++++-
 sysdeps/pthread/pthread_mutex_conf.h        | 28 +++++++++++++++++
 7 files changed, 72 insertions(+), 6 deletions(-)
 create mode 100644 sysdeps/nptl/pthread_early_init.h
 rename {nptl => sysdeps/nptl}/pthread_mutex_conf.h (86%)
 create mode 100644 sysdeps/pthread/pthread_mutex_conf.h

diff --git a/nptl/Makefile b/nptl/Makefile
index 353cbf8911..3ae0e1e8c8 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -82,6 +82,7 @@ routines = \
   pthread_key_create \
   pthread_key_delete \
   pthread_keys \
+  pthread_mutex_conf \
   pthread_mutex_consistent \
   pthread_once \
   pthread_rwlock_rdlock \
@@ -170,7 +171,6 @@ libpthread-routines = \
   pthread_kill \
   pthread_kill_other_threads \
   pthread_mutex_cond_lock \
-  pthread_mutex_conf \
   pthread_mutex_destroy \
   pthread_mutex_getprioceiling \
   pthread_mutex_init \
diff --git a/nptl/Versions b/nptl/Versions
index 4dee682ed9..2b9508bd6f 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -136,6 +136,7 @@ libc {
     __lll_lock_wait_private;
     __lll_trylock_elision;
     __lll_unlock_elision;
+    __mutex_aconf;
     __nptl_deallocate_tsd;
     __nptl_nthreads;
     __pthread_attr_copy;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 0c07b46a77..5c85f75cc1 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -269,10 +269,6 @@ __pthread_initialize_minimal_internal (void)
   __libc_multiple_threads_ptr =
 #endif
     __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions);
-
-#if HAVE_TUNABLES
-  __pthread_tunables_init ();
-#endif
 }
 strong_alias (__pthread_initialize_minimal_internal,
 	      __pthread_initialize_minimal)
diff --git a/nptl/pthread_mutex_conf.c b/nptl/pthread_mutex_conf.c
index e6532ba1d7..e6235dea47 100644
--- a/nptl/pthread_mutex_conf.c
+++ b/nptl/pthread_mutex_conf.c
@@ -30,6 +30,7 @@ struct mutex_config __mutex_aconf =
   calling into kernel to block.  */
   .spin_count = DEFAULT_ADAPTIVE_COUNT,
 };
+libc_hidden_data_def (__mutex_aconf)
 
 static void
 TUNABLE_CALLBACK (set_mutex_spin_count) (tunable_val_t *valp)
diff --git a/sysdeps/nptl/pthread_early_init.h b/sysdeps/nptl/pthread_early_init.h
new file mode 100644
index 0000000000..69e700dae1
--- /dev/null
+++ b/sysdeps/nptl/pthread_early_init.h
@@ -0,0 +1,33 @@
+/* pthread initialization called from __libc_early_init.  NPTL 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/>.  */
+
+#ifndef _PTHREAD_EARLY_INIT_H
+#define _PTHREAD_EARLY_INIT_H 1
+
+#include <nptl/pthreadP.h>
+#include <pthread_mutex_conf.h>
+
+static inline void
+__pthread_early_init (void)
+{
+#if HAVE_TUNABLES
+  __pthread_tunables_init ();
+#endif
+}
+
+#endif /* _PTHREAD_EARLY_INIT_H */
diff --git a/nptl/pthread_mutex_conf.h b/sysdeps/nptl/pthread_mutex_conf.h
similarity index 86%
rename from nptl/pthread_mutex_conf.h
rename to sysdeps/nptl/pthread_mutex_conf.h
index 14e135a539..9dba4bfa6d 100644
--- a/nptl/pthread_mutex_conf.h
+++ b/sysdeps/nptl/pthread_mutex_conf.h
@@ -26,9 +26,16 @@ struct mutex_config
   int spin_count;
 };
 
-extern struct mutex_config __mutex_aconf attribute_hidden;
+extern struct mutex_config __mutex_aconf;
+libc_hidden_proto (__mutex_aconf)
 
 extern void __pthread_tunables_init (void) attribute_hidden;
+#else
+static inline void
+__pthread_tunables_init (void)
+{
+  /* No tunables to initialize.  */
+}
 #endif
 
 #endif
diff --git a/sysdeps/pthread/pthread_mutex_conf.h b/sysdeps/pthread/pthread_mutex_conf.h
new file mode 100644
index 0000000000..c999c980f7
--- /dev/null
+++ b/sysdeps/pthread/pthread_mutex_conf.h
@@ -0,0 +1,28 @@
+/* Pthread mutex tunable parameters.  Generic version.
+   Copyright (C) 2018-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/>.  */
+
+#ifndef _PTHREAD_MUTEX_CONF_H
+#define _PTHREAD_MUTEX_CONF_H 1
+
+static inline void
+__pthread_tunables_init (void)
+{
+  /* The generic version does not have any tunables to init.  */
+}
+
+#endif
-- 
2.29.2



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

* [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (30 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-26 18:00   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 33/37] x86: Remove low-level lock optimization Florian Weimer
                   ` (6 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

This is optimization is similar in spirit to the SINGLE_THREAD_P check
in the malloc implementation.  Doing this in generic code allows us
to prioritize those cases which are likely to occur in single-threaded
programs (normal and recursive mutexes).
---
 nptl/pthread_mutex_cond_lock.c |  1 +
 nptl/pthread_mutex_lock.c      | 25 ++++++++++++++++++++++---
 nptl/pthread_mutex_unlock.c    | 17 ++++++++++++++++-
 3 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/nptl/pthread_mutex_cond_lock.c b/nptl/pthread_mutex_cond_lock.c
index 2f0771302f..3386bd689b 100644
--- a/nptl/pthread_mutex_cond_lock.c
+++ b/nptl/pthread_mutex_cond_lock.c
@@ -2,6 +2,7 @@
 
 #define LLL_MUTEX_LOCK(mutex) \
   lll_cond_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))
+#define LLL_MUTEX_LOCK_OPTIMIZED(mutex) LLL_MUTEX_LOCK (mutex)
 
 /* Not actually elided so far. Needed? */
 #define LLL_MUTEX_LOCK_ELISION(mutex)  \
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index f0de7b7fd6..8649a92ffb 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -30,8 +30,27 @@
 /* Some of the following definitions differ when pthread_mutex_cond_lock.c
    includes this file.  */
 #ifndef LLL_MUTEX_LOCK
-# define LLL_MUTEX_LOCK(mutex) \
+/* lll_lock with single-thread optimization.  */
+static inline void
+lll_mutex_lock_optimized (pthread_mutex_t *mutex)
+{
+  /* The single-threaded optimization is only valid for private
+     mutexes.  For process-shared mutexes, the mutex could be in a
+     shared mapping, so synchronization with another process is needed
+     even without any threads.  If the lock is already marked as
+     acquired, POSIX requires that pthread_mutex_lock deadlocks for
+     normal mutexes, so skip the optimization in that case as
+     well.  */
+  int private = PTHREAD_MUTEX_PSHARED (mutex);
+  if (private == LLL_PRIVATE && SINGLE_THREAD_P && mutex->__data.__lock == 0)
+    mutex->__data.__lock = 1;
+  else
+    lll_lock (mutex->__data.__lock, private);
+}
+
+# define LLL_MUTEX_LOCK(mutex)						\
   lll_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))
+# define LLL_MUTEX_LOCK_OPTIMIZED(mutex) lll_mutex_lock_optimized (mutex)
 # define LLL_MUTEX_TRYLOCK(mutex) \
   lll_trylock ((mutex)->__data.__lock)
 # define LLL_ROBUST_MUTEX_LOCK_MODIFIER 0
@@ -64,7 +83,7 @@ __pthread_mutex_lock (pthread_mutex_t *mutex)
       FORCE_ELISION (mutex, goto elision);
     simple:
       /* Normal mutex.  */
-      LLL_MUTEX_LOCK (mutex);
+      LLL_MUTEX_LOCK_OPTIMIZED (mutex);
       assert (mutex->__data.__owner == 0);
     }
 #if ENABLE_ELISION_SUPPORT
@@ -99,7 +118,7 @@ __pthread_mutex_lock (pthread_mutex_t *mutex)
 	}
 
       /* We have to get the mutex.  */
-      LLL_MUTEX_LOCK (mutex);
+      LLL_MUTEX_LOCK_OPTIMIZED (mutex);
 
       assert (mutex->__data.__owner == 0);
       mutex->__data.__count = 1;
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index 3b5ccdacf9..655093ee9a 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -28,6 +28,21 @@ static int
 __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
      __attribute_noinline__;
 
+/* lll_lock with single-thread optimization.  */
+static inline void
+lll_mutex_unlock_optimized (pthread_mutex_t *mutex)
+{
+  /* The single-threaded optimization is only valid for private
+     mutexes.  For process-shared mutexes, the mutex could be in a
+     shared mapping, so synchronization with another process is needed
+     even without any threads.  */
+  int private = PTHREAD_MUTEX_PSHARED (mutex);
+  if (private == LLL_PRIVATE && SINGLE_THREAD_P)
+    mutex->__data.__lock = 0;
+  else
+    lll_unlock (mutex->__data.__lock, private);
+}
+
 int
 attribute_hidden
 __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
@@ -51,7 +66,7 @@ __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
 	--mutex->__data.__nusers;
 
       /* Unlock.  */
-      lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
+      lll_mutex_unlock_optimized (mutex);
 
       LIBC_PROBE (mutex_release, 1, mutex);
 
-- 
2.29.2



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

* [PATCH v3 33/37] x86: Remove low-level lock optimization
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (31 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 20:30   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 34/37] nptl: Move core mutex functions into libc Florian Weimer
                   ` (5 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

The current approach is to do this optimizations at a higher level,
in generic code, so that single-threaded cases can be specifically
targeted.

Furthermore, using IS_IN (libc) as a compile-time indicator that
all locks are private is no longer correct once process-shared lock
implementations are moved into libc.

The generic <lowlevellock.h> is not compatible with assembler code
(obviously), so it's necessary to remove two long-unused #includes.
---
 sysdeps/i386/nptl/pthread_spin_lock.S      |  1 -
 sysdeps/unix/sysv/linux/x86/lowlevellock.h | 87 ----------------------
 sysdeps/x86_64/nptl/pthread_spin_lock.S    |  1 -
 3 files changed, 89 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/x86/lowlevellock.h

diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S
index eec157fde7..985b236aae 100644
--- a/sysdeps/i386/nptl/pthread_spin_lock.S
+++ b/sysdeps/i386/nptl/pthread_spin_lock.S
@@ -16,7 +16,6 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
-#include <lowlevellock.h>
 
 ENTRY (pthread_spin_lock)
 	mov	4(%esp), %eax
diff --git a/sysdeps/unix/sysv/linux/x86/lowlevellock.h b/sysdeps/unix/sysv/linux/x86/lowlevellock.h
deleted file mode 100644
index 7205bcadfd..0000000000
--- a/sysdeps/unix/sysv/linux/x86/lowlevellock.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Low-level lock implementation, x86 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/>.  */
-
-#ifndef _X86_64_LOWLEVELLOCK_H
-#define _X86_64_LOWLEVELLOCK_H	1
-
-#ifndef __ASSEMBLER__
-#include <sysdeps/nptl/lowlevellock.h>
-#include <single-thread.h>
-
-/* The lll_trylock, lll_lock, and lll_unlock implements a single-thread
-   optimization using the cmpxchgl instruction.  It checks if the process
-   is single thread and avoid a more expensive atomic instruction.  */
-
-/* The single-thread optimization only works for libc itself, we need
-   atomicity for libpthread in case of shared futexes.  */
-#if !IS_IN(libc)
-# define is_single_thread 0
-#else
-# define is_single_thread SINGLE_THREAD_P
-#endif
-
-/* In the __lllc_as we simply return the value in %eax after the cmpxchg
-   instruction.  In case the operation succeeded this value is zero.  In case
-   the operation failed, the cmpxchg instruction has loaded the current value
-   of the memory work which is guaranteed to be nonzero.  */
-static inline int
-__attribute__ ((always_inline))
-__lll_cas_lock (int *futex)
-{
-  int ret;
-  asm volatile ("cmpxchgl %2, %1"
-		: "=a" (ret), "=m" (*futex)
-		: "r" (1), "m" (*futex), "0" (0)
-		: "memory");
-  return ret;
-}
-
-#undef lll_trylock
-#define lll_trylock(lock)						     \
-  ({									     \
-    int __ret;								     \
-    if (is_single_thread)						     \
-      __ret = __lll_cas_lock (&(lock));					     \
-    else								     \
-      __ret = __lll_trylock (&(lock));					     \
-    __ret;								     \
-  })
-
-#undef lll_lock
-#define lll_lock(lock, private)						     \
-  ((void)								     \
-   ({									     \
-     if (is_single_thread)						     \
-       __lll_cas_lock (&(lock));					     \
-     else								     \
-       __lll_lock (&(lock), private);					     \
-   }))
-
-#undef lll_unlock
-#define lll_unlock(lock, private)					     \
-  ((void)								     \
-   ({									     \
-     if (is_single_thread)						     \
-       (lock)--;							     \
-     else								     \
-       __lll_unlock (&(lock), private);					     \
-   }))
-
-#endif  /* !__ASSEMBLER__ */
-
-#endif	/* lowlevellock.h */
diff --git a/sysdeps/x86_64/nptl/pthread_spin_lock.S b/sysdeps/x86_64/nptl/pthread_spin_lock.S
index 66cbbc5252..ff5e7525ca 100644
--- a/sysdeps/x86_64/nptl/pthread_spin_lock.S
+++ b/sysdeps/x86_64/nptl/pthread_spin_lock.S
@@ -15,7 +15,6 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <lowlevellock.h>
 #include <sysdep.h>
 
 ENTRY(pthread_spin_lock)
-- 
2.29.2



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

* [PATCH v3 34/37] nptl: Move core mutex functions into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (32 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 33/37] x86: Remove low-level lock optimization Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-25 20:46   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 35/37] nptl: Move core condition variable " Florian Weimer
                   ` (4 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

This is complicated because of a second compilation of
nptl/pthread_mutex_lock.c via nptl/pthread_mutex_cond_lock.c.
PTHREAD_MUTEX_VERSIONS is introduced to suppress symbol versions
in that case.

The symbols __pthread_mutex_lock, __pthread_mutex_unlock,
__pthread_mutex_init, __pthread_mutex_destroy, pthread_mutex_lock,
pthread_mutex_unlock, pthread_mutex_init, pthread_mutex_destroy
have beeb moved using scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 |  8 ++---
 nptl/Versions                                 | 17 +++++-----
 nptl/forward.c                                | 11 -------
 nptl/nptl-init.c                              |  4 ---
 nptl/pthreadP.h                               | 11 ++++---
 nptl/pthread_mutex_cond_lock.c                |  3 +-
 nptl/pthread_mutex_destroy.c                  | 18 ++++++++---
 nptl/pthread_mutex_init.c                     | 16 ++++++++--
 nptl/pthread_mutex_lock.c                     | 22 ++++++++++---
 nptl/pthread_mutex_unlock.c                   | 19 ++++++++---
 sysdeps/nptl/libc-lockP.h                     | 32 ++++++-------------
 sysdeps/nptl/pthread-functions.h              |  5 ---
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  8 +++++
 .../sysv/linux/aarch64/libpthread.abilist     |  8 -----
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  8 +++++
 .../unix/sysv/linux/alpha/libpthread.abilist  |  8 -----
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  8 +++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  8 -----
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  8 +++++
 .../unix/sysv/linux/arm/be/libpthread.abilist |  8 -----
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  8 +++++
 .../unix/sysv/linux/arm/le/libpthread.abilist |  8 -----
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  8 +++++
 .../unix/sysv/linux/csky/libpthread.abilist   |  8 -----
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  8 +++++
 .../unix/sysv/linux/hppa/libpthread.abilist   |  8 -----
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  8 +++++
 .../unix/sysv/linux/i386/libpthread.abilist   |  8 -----
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  8 +++++
 .../unix/sysv/linux/ia64/libpthread.abilist   |  8 -----
 .../sysv/linux/m68k/coldfire/libc.abilist     |  8 +++++
 .../linux/m68k/coldfire/libpthread.abilist    |  8 -----
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  8 +++++
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  8 -----
 .../sysv/linux/microblaze/be/libc.abilist     |  8 +++++
 .../linux/microblaze/be/libpthread.abilist    |  8 -----
 .../sysv/linux/microblaze/le/libc.abilist     |  8 +++++
 .../linux/microblaze/le/libpthread.abilist    |  8 -----
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  8 +++++
 .../sysv/linux/mips/mips32/libpthread.abilist |  8 -----
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  8 +++++
 .../sysv/linux/mips/mips64/libpthread.abilist |  8 -----
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  8 +++++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  8 +++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  8 +++++
 .../unix/sysv/linux/nios2/libpthread.abilist  |  8 -----
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  8 +++++
 .../powerpc/powerpc32/libpthread.abilist      |  8 -----
 .../powerpc/powerpc32/nofpu/libc.abilist      |  8 +++++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  8 +++++
 .../powerpc/powerpc64/be/libpthread.abilist   |  8 -----
 .../linux/powerpc/powerpc64/le/libc.abilist   |  8 +++++
 .../powerpc/powerpc64/le/libpthread.abilist   |  8 -----
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  8 +++++
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  8 -----
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  8 +++++
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  8 -----
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  8 +++++
 .../linux/s390/s390-32/libpthread.abilist     |  8 -----
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  8 +++++
 .../linux/s390/s390-64/libpthread.abilist     |  8 -----
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  8 +++++
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  8 -----
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  8 +++++
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  8 -----
 .../sysv/linux/sparc/sparc32/libc.abilist     |  8 +++++
 .../linux/sparc/sparc32/libpthread.abilist    |  8 -----
 .../sysv/linux/sparc/sparc64/libc.abilist     |  8 +++++
 .../linux/sparc/sparc64/libpthread.abilist    |  8 -----
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  8 +++++
 .../sysv/linux/x86_64/64/libpthread.abilist   |  8 -----
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  8 +++++
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  8 -----
 73 files changed, 346 insertions(+), 308 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index 3ae0e1e8c8..e0ba8bea13 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -84,6 +84,10 @@ routines = \
   pthread_keys \
   pthread_mutex_conf \
   pthread_mutex_consistent \
+  pthread_mutex_destroy \
+  pthread_mutex_init \
+  pthread_mutex_lock \
+  pthread_mutex_unlock \
   pthread_once \
   pthread_rwlock_rdlock \
   pthread_rwlock_unlock \
@@ -171,14 +175,10 @@ libpthread-routines = \
   pthread_kill \
   pthread_kill_other_threads \
   pthread_mutex_cond_lock \
-  pthread_mutex_destroy \
   pthread_mutex_getprioceiling \
-  pthread_mutex_init \
-  pthread_mutex_lock \
   pthread_mutex_setprioceiling \
   pthread_mutex_timedlock \
   pthread_mutex_trylock \
-  pthread_mutex_unlock \
   pthread_mutexattr_destroy \
   pthread_mutexattr_getprioceiling \
   pthread_mutexattr_getprotocol \
diff --git a/nptl/Versions b/nptl/Versions
index 2b9508bd6f..2352b74c7e 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -2,6 +2,10 @@ libc {
   GLIBC_2.0 {
     __pthread_getspecific;
     __pthread_key_create;
+    __pthread_mutex_destroy;
+    __pthread_mutex_init;
+    __pthread_mutex_lock;
+    __pthread_mutex_unlock;
     __pthread_once;
     __pthread_setspecific;
     _pthread_cleanup_pop;
@@ -103,6 +107,10 @@ libc {
     __pthread_cleanup_routine;
     __pthread_getspecific;
     __pthread_key_create;
+    __pthread_mutex_destroy;
+    __pthread_mutex_init;
+    __pthread_mutex_lock;
+    __pthread_mutex_unlock;
     __pthread_once;
     __pthread_rwlock_rdlock;
     __pthread_rwlock_unlock;
@@ -155,6 +163,7 @@ libc {
     __pthread_getattr_default_np;
     __pthread_key_delete;
     __pthread_keys;
+    __pthread_mutex_unlock_usercnt;
     __pthread_setcancelstate;
     __pthread_tpp_change_priority;
     __pthread_unwind;
@@ -177,11 +186,7 @@ libpthread {
     __lseek;
     __open;
     __pthread_atfork;
-    __pthread_mutex_destroy;
-    __pthread_mutex_init;
-    __pthread_mutex_lock;
     __pthread_mutex_trylock;
-    __pthread_mutex_unlock;
     __pthread_mutexattr_destroy;
     __pthread_mutexattr_init;
     __pthread_mutexattr_settype;
@@ -213,11 +218,7 @@ libpthread {
     pthread_join;
     pthread_kill;
     pthread_kill_other_threads_np;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
     pthread_mutex_trylock;
-    pthread_mutex_unlock;
     pthread_mutexattr_destroy;
     pthread_mutexattr_getkind_np;
     pthread_mutexattr_init;
diff --git a/nptl/forward.c b/nptl/forward.c
index de4e9cd6ab..c914baec4f 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -90,14 +90,3 @@ FORWARD (__pthread_cond_timedwait,
 	  const struct timespec *abstime), (cond, mutex, abstime), 0)
 versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
 		  GLIBC_2_3_2);
-
-
-FORWARD (pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), 0)
-
-FORWARD (pthread_mutex_init,
-	 (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr),
-	 (mutex, mutexattr), 0)
-
-FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0)
-
-FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 5c85f75cc1..cbc9430ecb 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -63,10 +63,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_mutex_destroy = __pthread_mutex_destroy,
-    .ptr_pthread_mutex_init = __pthread_mutex_init,
-    .ptr_pthread_mutex_lock = __pthread_mutex_lock,
-    .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
     .ptr__nptl_setxid = __nptl_setxid,
   };
 # define ptr_pthread_functions &pthread_functions
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 7fd290e004..4feebdf09e 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -389,9 +389,12 @@ extern int __pthread_setschedparam (pthread_t thread_id, int policy,
 				    const struct sched_param *param);
 extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
 				 const pthread_mutexattr_t *__mutexattr);
+libc_hidden_proto (__pthread_mutex_init)
 extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+libc_hidden_proto (__pthread_mutex_destroy)
 extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex);
 extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
+libc_hidden_proto (__pthread_mutex_lock)
 extern int __pthread_mutex_timedlock (pthread_mutex_t *__mutex,
      const struct timespec *__abstime);
 extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
@@ -399,8 +402,10 @@ extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
 extern void __pthread_mutex_cond_lock_adjust (pthread_mutex_t *__mutex)
      attribute_hidden;
 extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
+libc_hidden_proto (__pthread_mutex_unlock)
 extern int __pthread_mutex_unlock_usercnt (pthread_mutex_t *__mutex,
-					   int __decr) attribute_hidden;
+					   int __decr);
+libc_hidden_proto (__pthread_mutex_unlock_usercnt)
 extern int __pthread_mutexattr_init (pthread_mutexattr_t *attr);
 extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *attr);
 extern int __pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind);
@@ -554,11 +559,7 @@ libc_hidden_proto (__pthread_sigmask);
 
 
 #if IS_IN (libpthread)
-hidden_proto (__pthread_mutex_init)
-hidden_proto (__pthread_mutex_destroy)
-hidden_proto (__pthread_mutex_lock)
 hidden_proto (__pthread_mutex_trylock)
-hidden_proto (__pthread_mutex_unlock)
 hidden_proto (__pthread_rwlock_unlock)
 hidden_proto (__pthread_testcancel)
 hidden_proto (__pthread_mutexattr_init)
diff --git a/nptl/pthread_mutex_cond_lock.c b/nptl/pthread_mutex_cond_lock.c
index 3386bd689b..f3af514305 100644
--- a/nptl/pthread_mutex_cond_lock.c
+++ b/nptl/pthread_mutex_cond_lock.c
@@ -15,8 +15,9 @@
 /* We need to assume that there are other threads blocked on the futex.
    See __pthread_mutex_lock_full for further details.  */
 #define LLL_ROBUST_MUTEX_LOCK_MODIFIER FUTEX_WAITERS
-#define __pthread_mutex_lock  __pthread_mutex_cond_lock
+#define PTHREAD_MUTEX_LOCK  __pthread_mutex_cond_lock
 #define __pthread_mutex_lock_full __pthread_mutex_cond_lock_full
 #define NO_INCR
+#define PTHREAD_MUTEX_VERSIONS 0
 
 #include <nptl/pthread_mutex_lock.c>
diff --git a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c
index d2fb816e11..98da991a9d 100644
--- a/nptl/pthread_mutex_destroy.c
+++ b/nptl/pthread_mutex_destroy.c
@@ -18,12 +18,12 @@
 
 #include <errno.h>
 #include "pthreadP.h"
-
+#include <shlib-compat.h>
 #include <stap-probe.h>
 
 
 int
-__pthread_mutex_destroy (pthread_mutex_t *mutex)
+__pthread_mutex_destroy_1 (pthread_mutex_t *mutex)
 {
   LIBC_PROBE (mutex_destroy, 1, mutex);
 
@@ -41,5 +41,15 @@ __pthread_mutex_destroy (pthread_mutex_t *mutex)
 
   return 0;
 }
-weak_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
-hidden_def (__pthread_mutex_destroy)
+versioned_symbol (libc, __pthread_mutex_destroy_1, __pthread_mutex_destroy,
+                  GLIBC_2_34);
+libc_hidden_ver (__pthread_mutex_destroy_1, __pthread_mutex_destroy)
+strong_alias (__pthread_mutex_destroy_1, __pthread_mutex_destroy_2)
+versioned_symbol (libc, __pthread_mutex_destroy_2, pthread_mutex_destroy,
+                  GLIBC_2_0);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+strong_alias (__pthread_mutex_destroy_1, __pthread_mutex_destroy_3)
+compat_symbol (libc, __pthread_mutex_destroy_3, __pthread_mutex_destroy,
+               GLIBC_2_0);
+#endif
diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
index f5c3a4b464..b3af7fcd48 100644
--- a/nptl/pthread_mutex_init.c
+++ b/nptl/pthread_mutex_init.c
@@ -25,6 +25,7 @@
 #include <atomic.h>
 #include <pthread-offsets.h>
 #include <futex-internal.h>
+#include <shlib-compat.h>
 
 #include <stap-probe.h>
 
@@ -48,7 +49,7 @@ prio_inherit_missing (void)
 }
 
 int
-__pthread_mutex_init (pthread_mutex_t *mutex,
+__pthread_mutex_init_1 (pthread_mutex_t *mutex,
 		      const pthread_mutexattr_t *mutexattr)
 {
   const struct pthread_mutexattr *imutexattr;
@@ -150,5 +151,14 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
 
   return 0;
 }
-weak_alias (__pthread_mutex_init, pthread_mutex_init)
-hidden_def (__pthread_mutex_init)
+versioned_symbol (libc, __pthread_mutex_init_1, __pthread_mutex_init,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_mutex_init_1, __pthread_mutex_init)
+strong_alias (__pthread_mutex_init_1, __pthread_mutex_init_2)
+versioned_symbol (libc, __pthread_mutex_init_2, pthread_mutex_init,
+		  GLIBC_2_0);
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+strong_alias (__pthread_mutex_init_1, __pthread_mutex_init_3)
+compat_symbol (libc, __pthread_mutex_init_3, __pthread_mutex_init,
+	       GLIBC_2_0);
+#endif
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index 8649a92ffb..261cd5a72d 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -26,6 +26,7 @@
 #include <atomic.h>
 #include <futex-internal.h>
 #include <stap-probe.h>
+#include <shlib-compat.h>
 
 /* Some of the following definitions differ when pthread_mutex_cond_lock.c
    includes this file.  */
@@ -60,13 +61,15 @@ lll_mutex_lock_optimized (pthread_mutex_t *mutex)
 # define LLL_MUTEX_TRYLOCK_ELISION(mutex) \
   lll_trylock_elision((mutex)->__data.__lock, (mutex)->__data.__elision, \
 		   PTHREAD_MUTEX_PSHARED (mutex))
+# define PTHREAD_MUTEX_LOCK __pthread_mutex_lock_1
+# define PTHREAD_MUTEX_VERSIONS 1
 #endif
 
 static int __pthread_mutex_lock_full (pthread_mutex_t *mutex)
      __attribute_noinline__;
 
 int
-__pthread_mutex_lock (pthread_mutex_t *mutex)
+PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex)
 {
   /* See concurrency notes regarding mutex type which is loaded from __kind
      in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
@@ -604,10 +607,19 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 
   return 0;
 }
-#ifndef __pthread_mutex_lock
-weak_alias (__pthread_mutex_lock, pthread_mutex_lock)
-hidden_def (__pthread_mutex_lock)
-#endif
+
+#if PTHREAD_MUTEX_VERSIONS
+versioned_symbol (libc, __pthread_mutex_lock_1, __pthread_mutex_lock,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_mutex_lock_1, __pthread_mutex_lock)
+strong_alias (__pthread_mutex_lock_1, __pthread_mutex_lock_2)
+versioned_symbol (libc, __pthread_mutex_lock_2, pthread_mutex_lock, GLIBC_2_0);
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+strong_alias (__pthread_mutex_lock_1, __pthread_mutex_lock_3)
+compat_symbol (libc, __pthread_mutex_lock_3, __pthread_mutex_lock, GLIBC_2_0);
+# endif
+#endif /* PTHREAD_MUTEX_VERSIONS */
 
 
 #ifdef NO_INCR
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index 655093ee9a..159720198c 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -23,6 +23,7 @@
 #include <lowlevellock.h>
 #include <stap-probe.h>
 #include <futex-internal.h>
+#include <shlib-compat.h>
 
 static int
 __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
@@ -44,7 +45,6 @@ lll_mutex_unlock_optimized (pthread_mutex_t *mutex)
 }
 
 int
-attribute_hidden
 __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
 {
   /* See concurrency notes regarding mutex type which is loaded from __kind
@@ -103,6 +103,7 @@ __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
       goto normal;
     }
 }
+libc_hidden_def (__pthread_mutex_unlock_usercnt)
 
 
 static int
@@ -363,9 +364,19 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
 
 
 int
-__pthread_mutex_unlock (pthread_mutex_t *mutex)
+__pthread_mutex_unlock_1 (pthread_mutex_t *mutex)
 {
   return __pthread_mutex_unlock_usercnt (mutex, 1);
 }
-weak_alias (__pthread_mutex_unlock, pthread_mutex_unlock)
-hidden_def (__pthread_mutex_unlock)
+versioned_symbol (libc, __pthread_mutex_unlock_1, __pthread_mutex_unlock,
+		  GLIBC_2_34);
+libc_hidden_ver (__pthread_mutex_unlock_1, __pthread_mutex_unlock)
+strong_alias (__pthread_mutex_unlock_1, __pthread_mutex_unlock_2)
+versioned_symbol (libc, __pthread_mutex_unlock_2, pthread_mutex_unlock,
+		  GLIBC_2_0);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+strong_alias (__pthread_mutex_unlock_1, __pthread_mutex_unlock_3)
+compat_symbol (libc, __pthread_mutex_unlock_3, __pthread_mutex_unlock,
+	       GLIBC_2_0);
+#endif
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 89910560fa..0dd2ea1147 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -128,8 +128,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 # define __libc_lock_init(NAME) \
   ((void) ((NAME) = LLL_LOCK_INITIALIZER))
 #else
-# define __libc_lock_init(NAME) \
-  __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
+# define __libc_lock_init(NAME) __pthread_mutex_init (&(NAME))
 #endif
 #if defined SHARED && IS_IN (libc)
 /* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER) is inefficient.  */
@@ -146,8 +145,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 #if IS_IN (libc) || IS_IN (libpthread)
 # define __libc_lock_fini(NAME) ((void) 0)
 #else
-# define __libc_lock_fini(NAME) \
-  __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
+# define __libc_lock_fini(NAME) __pthread_mutex_destroy (&(NAME))
 #endif
 #if defined SHARED && IS_IN (libc)
 # define __libc_rwlock_fini(NAME) ((void) 0)
@@ -164,8 +162,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 # endif
 #else
 # undef __libc_lock_lock
-# define __libc_lock_lock(NAME) \
-  __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
+# define __libc_lock_lock(NAME) __pthread_mutex_lock (&(NAME))
 #endif
 #define __libc_rwlock_rdlock(NAME) __pthread_rwlock_rdlock (&(NAME))
 #define __libc_rwlock_wrlock(NAME) __pthread_rwlock_wrlock (&(NAME))
@@ -194,8 +191,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
 # define __libc_lock_unlock(NAME) \
   lll_unlock (NAME, LLL_PRIVATE)
 #else
-# define __libc_lock_unlock(NAME) \
-  __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
+# define __libc_lock_unlock(NAME) __pthread_mutex_unlock (&(NAME))
 #endif
 #define __libc_rwlock_unlock(NAME) __pthread_rwlock_unlock (&(NAME))
 
@@ -213,10 +209,10 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
   GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
 #else
 # define __rtld_lock_lock_recursive(NAME) \
-  __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
+  __pthread_mutex_lock (&(NAME).mutex)
 
 # define __rtld_lock_unlock_recursive(NAME) \
-  __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
+  __pthread_mutex_unlock (&(NAME).mutex)
 #endif
 
 /* Define once control variable.  */
@@ -274,15 +270,15 @@ extern int __register_atfork (void (*__prepare) (void),
 
 extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
 				 const pthread_mutexattr_t *__mutex_attr);
-
+libc_hidden_proto (__pthread_mutex_init)
 extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
-
+libc_hidden_proto (__pthread_mutex_destroy)
 extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
 
 extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
-
+libc_hidden_proto (__pthread_mutex_lock)
 extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
-
+libc_hidden_proto (__pthread_mutex_unlock)
 extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
 
 extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
@@ -320,11 +316,7 @@ libc_hidden_proto (__pthread_setcancelstate)
    single-threaded processes.  */
 #ifndef __NO_WEAK_PTHREAD_ALIASES
 # ifdef weak_extern
-weak_extern (__pthread_mutex_init)
-weak_extern (__pthread_mutex_destroy)
-weak_extern (__pthread_mutex_lock)
 weak_extern (__pthread_mutex_trylock)
-weak_extern (__pthread_mutex_unlock)
 weak_extern (__pthread_mutexattr_init)
 weak_extern (__pthread_mutexattr_destroy)
 weak_extern (__pthread_mutexattr_settype)
@@ -335,11 +327,7 @@ weak_extern (__pthread_rwlock_trywrlock)
 weak_extern (__pthread_initialize)
 weak_extern (__pthread_atfork)
 # else
-#  pragma weak __pthread_mutex_init
-#  pragma weak __pthread_mutex_destroy
-#  pragma weak __pthread_mutex_lock
 #  pragma weak __pthread_mutex_trylock
-#  pragma weak __pthread_mutex_unlock
 #  pragma weak __pthread_mutexattr_init
 #  pragma weak __pthread_mutexattr_destroy
 #  pragma weak __pthread_mutexattr_settype
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 8535e142d5..dab5a2831e 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -41,11 +41,6 @@ struct pthread_functions
   int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
 					   pthread_mutex_t *,
 					   const struct timespec *);
-  int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
-  int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
-				 const pthread_mutexattr_t *);
-  int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
-  int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
   int (*ptr__nptl_setxid) (struct xid_command *);
 };
 
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 9191b2e760..381947232e 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -341,6 +341,10 @@ GLIBC_2.17 __progname_full D 0x8
 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
+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_rwlock_rdlock F
 GLIBC_2.17 __pthread_rwlock_unlock F
@@ -2198,6 +2202,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 9a24f796de..29a98fc2f4 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.17 __lseek F
 GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
-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_trylock F
-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
@@ -84,14 +80,10 @@ GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
-GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_getprioceiling F
-GLIBC_2.17 pthread_mutex_init F
-GLIBC_2.17 pthread_mutex_lock F
 GLIBC_2.17 pthread_mutex_setprioceiling F
 GLIBC_2.17 pthread_mutex_timedlock F
 GLIBC_2.17 pthread_mutex_trylock F
-GLIBC_2.17 pthread_mutex_unlock F
 GLIBC_2.17 pthread_mutexattr_destroy F
 GLIBC_2.17 pthread_mutexattr_getkind_np F
 GLIBC_2.17 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 71dd49d25c..7e314dd68b 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -190,6 +190,10 @@ GLIBC_2.0 __progname D 0x8
 GLIBC_2.0 __progname_full D 0x8
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x8
@@ -2279,6 +2283,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index a7b3fd73ab..29cb6259a5 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 38764a6746..014b30c7bd 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -330,6 +330,10 @@ GLIBC_2.32 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.32 __pthread_rwlock_unlock F
@@ -1958,6 +1962,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 0d8b928e6d..b926ef9dba 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -12,11 +12,7 @@ GLIBC_2.32 __lseek F
 GLIBC_2.32 __open F
 GLIBC_2.32 __open64 F
 GLIBC_2.32 __pread64 F
-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_trylock F
-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
@@ -99,14 +95,10 @@ GLIBC_2.32 pthread_join 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_destroy F
 GLIBC_2.32 pthread_mutex_getprioceiling F
-GLIBC_2.32 pthread_mutex_init F
-GLIBC_2.32 pthread_mutex_lock F
 GLIBC_2.32 pthread_mutex_setprioceiling F
 GLIBC_2.32 pthread_mutex_timedlock F
 GLIBC_2.32 pthread_mutex_trylock F
-GLIBC_2.32 pthread_mutex_unlock F
 GLIBC_2.32 pthread_mutexattr_destroy F
 GLIBC_2.32 pthread_mutexattr_getkind_np F
 GLIBC_2.32 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 86d971e7d2..412eb541fc 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -160,6 +160,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
@@ -505,6 +509,10 @@ GLIBC_2.4 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 833b53362d..8dd2c3f7a6 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-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_trylock F
-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
@@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
-GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_getprioceiling F
-GLIBC_2.4 pthread_mutex_init F
-GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutex_timedlock F
 GLIBC_2.4 pthread_mutex_trylock F
-GLIBC_2.4 pthread_mutex_unlock F
 GLIBC_2.4 pthread_mutexattr_destroy F
 GLIBC_2.4 pthread_mutexattr_getkind_np F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index caf3f6a141..588f1d6b42 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -157,6 +157,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
@@ -502,6 +506,10 @@ GLIBC_2.4 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 833b53362d..8dd2c3f7a6 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-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_trylock F
-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
@@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
-GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_getprioceiling F
-GLIBC_2.4 pthread_mutex_init F
-GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutex_timedlock F
 GLIBC_2.4 pthread_mutex_trylock F
-GLIBC_2.4 pthread_mutex_unlock F
 GLIBC_2.4 pthread_mutexattr_destroy F
 GLIBC_2.4 pthread_mutexattr_getkind_np F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index aeb6424389..76fb31f895 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -334,6 +334,10 @@ GLIBC_2.29 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.29 __pthread_rwlock_unlock F
@@ -2142,6 +2146,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 440c0507d1..2c4d219569 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -12,11 +12,7 @@ GLIBC_2.29 __lseek F
 GLIBC_2.29 __open F
 GLIBC_2.29 __open64 F
 GLIBC_2.29 __pread64 F
-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_trylock F
-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
@@ -96,14 +92,10 @@ GLIBC_2.29 pthread_getname_np F
 GLIBC_2.29 pthread_join F
 GLIBC_2.29 pthread_kill F
 GLIBC_2.29 pthread_kill_other_threads_np F
-GLIBC_2.29 pthread_mutex_destroy F
 GLIBC_2.29 pthread_mutex_getprioceiling F
-GLIBC_2.29 pthread_mutex_init F
-GLIBC_2.29 pthread_mutex_lock F
 GLIBC_2.29 pthread_mutex_setprioceiling F
 GLIBC_2.29 pthread_mutex_timedlock F
 GLIBC_2.29 pthread_mutex_trylock F
-GLIBC_2.29 pthread_mutex_unlock F
 GLIBC_2.29 pthread_mutexattr_destroy F
 GLIBC_2.29 pthread_mutexattr_getkind_np F
 GLIBC_2.29 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index e1d02058c9..e99899dee5 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -358,6 +358,10 @@ GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2100,6 +2104,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 70af59d791..9e15deaad8 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 717344a690..29b8e0c1eb 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2267,6 +2271,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 35cc2f61c5..4065a88a3b 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 284b7072a3..fb8a36ce20 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -362,6 +362,10 @@ GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2132,6 +2136,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 2e69109cdc..684bf559e5 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 404d16b92a..03e80e6a12 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -161,6 +161,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
@@ -491,6 +495,10 @@ GLIBC_2.4 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.4 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 833b53362d..8dd2c3f7a6 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
 GLIBC_2.4 __open F
 GLIBC_2.4 __open64 F
 GLIBC_2.4 __pread64 F
-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_trylock F
-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
@@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
 GLIBC_2.4 pthread_join F
 GLIBC_2.4 pthread_kill F
 GLIBC_2.4 pthread_kill_other_threads_np F
-GLIBC_2.4 pthread_mutex_destroy F
 GLIBC_2.4 pthread_mutex_getprioceiling F
-GLIBC_2.4 pthread_mutex_init F
-GLIBC_2.4 pthread_mutex_lock F
 GLIBC_2.4 pthread_mutex_setprioceiling F
 GLIBC_2.4 pthread_mutex_timedlock F
 GLIBC_2.4 pthread_mutex_trylock F
-GLIBC_2.4 pthread_mutex_unlock F
 GLIBC_2.4 pthread_mutexattr_destroy F
 GLIBC_2.4 pthread_mutexattr_getkind_np F
 GLIBC_2.4 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index b1ad96e072..2a5bee30d1 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2212,6 +2216,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 35cc2f61c5..4065a88a3b 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 3e0cceae93..b46567880e 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -342,6 +342,10 @@ GLIBC_2.18 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.18 __pthread_rwlock_unlock F
@@ -2193,6 +2197,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 0db83c2f88..d8a9642f66 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.18 __lseek F
 GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
-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_trylock F
-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
@@ -85,14 +81,10 @@ GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
-GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_getprioceiling F
-GLIBC_2.18 pthread_mutex_init F
-GLIBC_2.18 pthread_mutex_lock F
 GLIBC_2.18 pthread_mutex_setprioceiling F
 GLIBC_2.18 pthread_mutex_timedlock F
 GLIBC_2.18 pthread_mutex_trylock F
-GLIBC_2.18 pthread_mutex_unlock F
 GLIBC_2.18 pthread_mutexattr_destroy F
 GLIBC_2.18 pthread_mutexattr_getkind_np F
 GLIBC_2.18 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 4ee88a1d01..7796c5313a 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -342,6 +342,10 @@ GLIBC_2.18 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.18 __pthread_rwlock_unlock F
@@ -2190,6 +2194,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 0db83c2f88..d8a9642f66 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.18 __lseek F
 GLIBC_2.18 __open F
 GLIBC_2.18 __open64 F
 GLIBC_2.18 __pread64 F
-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_trylock F
-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
@@ -85,14 +81,10 @@ GLIBC_2.18 pthread_getname_np F
 GLIBC_2.18 pthread_join F
 GLIBC_2.18 pthread_kill F
 GLIBC_2.18 pthread_kill_other_threads_np F
-GLIBC_2.18 pthread_mutex_destroy F
 GLIBC_2.18 pthread_mutex_getprioceiling F
-GLIBC_2.18 pthread_mutex_init F
-GLIBC_2.18 pthread_mutex_lock F
 GLIBC_2.18 pthread_mutex_setprioceiling F
 GLIBC_2.18 pthread_mutex_timedlock F
 GLIBC_2.18 pthread_mutex_trylock F
-GLIBC_2.18 pthread_mutex_unlock F
 GLIBC_2.18 pthread_mutexattr_destroy F
 GLIBC_2.18 pthread_mutexattr_getkind_np F
 GLIBC_2.18 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index e67af35000..c3e658dbc1 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2183,6 +2187,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index a1a66138d4..4bd5de2dd7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 1ce0179391..bae73ebb39 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2181,6 +2185,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index a1a66138d4..4bd5de2dd7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 54c2300420..74fb3b997e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2189,6 +2193,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 90bbb7f253..3083e3d821 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x8
 GLIBC_2.0 __progname_full D 0x8
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x8
@@ -2183,6 +2187,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 1f68c2a3fb..f79ca91eb7 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -379,6 +379,10 @@ GLIBC_2.21 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.21 __pthread_rwlock_unlock F
@@ -2231,6 +2235,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 806432b7b4..c469853b65 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.21 __lseek F
 GLIBC_2.21 __open F
 GLIBC_2.21 __open64 F
 GLIBC_2.21 __pread64 F
-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_trylock F
-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
@@ -85,14 +81,10 @@ GLIBC_2.21 pthread_getname_np F
 GLIBC_2.21 pthread_join F
 GLIBC_2.21 pthread_kill F
 GLIBC_2.21 pthread_kill_other_threads_np F
-GLIBC_2.21 pthread_mutex_destroy F
 GLIBC_2.21 pthread_mutex_getprioceiling F
-GLIBC_2.21 pthread_mutex_init F
-GLIBC_2.21 pthread_mutex_lock F
 GLIBC_2.21 pthread_mutex_setprioceiling F
 GLIBC_2.21 pthread_mutex_timedlock F
 GLIBC_2.21 pthread_mutex_trylock F
-GLIBC_2.21 pthread_mutex_unlock F
 GLIBC_2.21 pthread_mutexattr_destroy F
 GLIBC_2.21 pthread_mutexattr_getkind_np F
 GLIBC_2.21 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index a41536e4cd..f5408e6078 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -196,6 +196,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2239,6 +2243,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index d0646d0eaf..44fb3a6743 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index cdd6e98496..a7587dcc45 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -196,6 +196,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2272,6 +2276,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 63a7449937..7ea6dc6574 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -411,6 +411,10 @@ GLIBC_2.3 __progname D 0x8
 GLIBC_2.3 __progname_full D 0x8
 GLIBC_2.3 __pthread_getspecific F
 GLIBC_2.3 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.3 __pthread_rwlock_unlock F
@@ -2102,6 +2106,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 72d49ce4f3..2e77dc2fb3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -41,11 +41,7 @@ GLIBC_2.3 __lseek F
 GLIBC_2.3 __open F
 GLIBC_2.3 __open64 F
 GLIBC_2.3 __pread64 F
-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_trylock F
-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
@@ -103,12 +99,8 @@ GLIBC_2.3 pthread_getcpuclockid F
 GLIBC_2.3 pthread_join F
 GLIBC_2.3 pthread_kill F
 GLIBC_2.3 pthread_kill_other_threads_np F
-GLIBC_2.3 pthread_mutex_destroy F
-GLIBC_2.3 pthread_mutex_init F
-GLIBC_2.3 pthread_mutex_lock F
 GLIBC_2.3 pthread_mutex_timedlock F
 GLIBC_2.3 pthread_mutex_trylock F
-GLIBC_2.3 pthread_mutex_unlock F
 GLIBC_2.3 pthread_mutexattr_destroy F
 GLIBC_2.3 pthread_mutexattr_getkind_np F
 GLIBC_2.3 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index b6de88ea41..f994892fd9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -427,6 +427,10 @@ GLIBC_2.17 __progname_full D 0x8
 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
+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_rwlock_rdlock F
 GLIBC_2.17 __pthread_rwlock_unlock F
@@ -2393,6 +2397,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 9a24f796de..29a98fc2f4 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.17 __lseek F
 GLIBC_2.17 __open F
 GLIBC_2.17 __open64 F
 GLIBC_2.17 __pread64 F
-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_trylock F
-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
@@ -84,14 +80,10 @@ GLIBC_2.17 pthread_getname_np F
 GLIBC_2.17 pthread_join F
 GLIBC_2.17 pthread_kill F
 GLIBC_2.17 pthread_kill_other_threads_np F
-GLIBC_2.17 pthread_mutex_destroy F
 GLIBC_2.17 pthread_mutex_getprioceiling F
-GLIBC_2.17 pthread_mutex_init F
-GLIBC_2.17 pthread_mutex_lock F
 GLIBC_2.17 pthread_mutex_setprioceiling F
 GLIBC_2.17 pthread_mutex_timedlock F
 GLIBC_2.17 pthread_mutex_trylock F
-GLIBC_2.17 pthread_mutex_unlock F
 GLIBC_2.17 pthread_mutexattr_destroy F
 GLIBC_2.17 pthread_mutexattr_getkind_np F
 GLIBC_2.17 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index d81b46d597..70b873f9fb 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -327,6 +327,10 @@ GLIBC_2.33 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.33 __pthread_rwlock_unlock F
@@ -1960,6 +1964,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 10e50b67c0..911969f7eb 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -12,11 +12,7 @@ GLIBC_2.33 __lseek F
 GLIBC_2.33 __open F
 GLIBC_2.33 __open64 F
 GLIBC_2.33 __pread64 F
-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_trylock F
-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
@@ -99,14 +95,10 @@ GLIBC_2.33 pthread_join 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_destroy F
 GLIBC_2.33 pthread_mutex_getprioceiling F
-GLIBC_2.33 pthread_mutex_init F
-GLIBC_2.33 pthread_mutex_lock F
 GLIBC_2.33 pthread_mutex_setprioceiling F
 GLIBC_2.33 pthread_mutex_timedlock F
 GLIBC_2.33 pthread_mutex_trylock F
-GLIBC_2.33 pthread_mutex_unlock F
 GLIBC_2.33 pthread_mutexattr_destroy F
 GLIBC_2.33 pthread_mutexattr_getkind_np F
 GLIBC_2.33 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index fbd1c5e5cf..ddfac62fd0 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -338,6 +338,10 @@ GLIBC_2.27 __progname_full D 0x8
 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
+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_rwlock_rdlock F
 GLIBC_2.27 __pthread_rwlock_unlock F
@@ -2160,6 +2164,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index ed24898e0d..21f462137a 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.27 __lseek F
 GLIBC_2.27 __open F
 GLIBC_2.27 __open64 F
 GLIBC_2.27 __pread64 F
-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_trylock F
-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
@@ -85,14 +81,10 @@ GLIBC_2.27 pthread_getname_np F
 GLIBC_2.27 pthread_join F
 GLIBC_2.27 pthread_kill F
 GLIBC_2.27 pthread_kill_other_threads_np F
-GLIBC_2.27 pthread_mutex_destroy F
 GLIBC_2.27 pthread_mutex_getprioceiling F
-GLIBC_2.27 pthread_mutex_init F
-GLIBC_2.27 pthread_mutex_lock F
 GLIBC_2.27 pthread_mutex_setprioceiling F
 GLIBC_2.27 pthread_mutex_timedlock F
 GLIBC_2.27 pthread_mutex_trylock F
-GLIBC_2.27 pthread_mutex_unlock F
 GLIBC_2.27 pthread_mutexattr_destroy F
 GLIBC_2.27 pthread_mutexattr_getkind_np F
 GLIBC_2.27 pthread_mutexattr_getprioceiling F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 27a9b011a8..078237adb2 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2237,6 +2241,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index d6e91c977a..7b2edb7f57 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 9e79331100..a2700aba32 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -372,6 +372,10 @@ GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2138,6 +2142,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 14489b39d0..8b4729fb7a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -21,11 +21,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -84,12 +80,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index b7dd795864..4fce4b408e 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -361,6 +361,10 @@ GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2107,6 +2111,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 70af59d791..9e15deaad8 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index eea30cd098..5dba0f5d0c 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -361,6 +361,10 @@ GLIBC_2.2 __progname D 0x4
 GLIBC_2.2 __progname_full D 0x4
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2104,6 +2108,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 70af59d791..9e15deaad8 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 4944c4159b..e064e5a4dc 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -191,6 +191,10 @@ GLIBC_2.0 __progname D 0x4
 GLIBC_2.0 __progname_full D 0x4
 GLIBC_2.0 __pthread_getspecific F
 GLIBC_2.0 __pthread_key_create F
+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_setspecific F
 GLIBC_2.0 __rcmd_errstr D 0x4
@@ -2228,6 +2232,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index a7b3fd73ab..29cb6259a5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
 GLIBC_2.0 __h_errno_location F
 GLIBC_2.0 __lseek F
 GLIBC_2.0 __open F
-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_trylock F
-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
@@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
 GLIBC_2.0 pthread_join F
 GLIBC_2.0 pthread_kill F
 GLIBC_2.0 pthread_kill_other_threads_np F
-GLIBC_2.0 pthread_mutex_destroy F
-GLIBC_2.0 pthread_mutex_init F
-GLIBC_2.0 pthread_mutex_lock F
 GLIBC_2.0 pthread_mutex_trylock F
-GLIBC_2.0 pthread_mutex_unlock F
 GLIBC_2.0 pthread_mutexattr_destroy F
 GLIBC_2.0 pthread_mutexattr_getkind_np F
 GLIBC_2.0 pthread_mutexattr_init F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index e69420994f..36fed3cf99 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -399,6 +399,10 @@ GLIBC_2.2 __progname D 0x8
 GLIBC_2.2 __progname_full D 0x8
 GLIBC_2.2 __pthread_getspecific F
 GLIBC_2.2 __pthread_key_create F
+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_rwlock_rdlock F
 GLIBC_2.2 __pthread_rwlock_unlock F
@@ -2155,6 +2159,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 2e69109cdc..684bf559e5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
 GLIBC_2.2 __open F
 GLIBC_2.2 __open64 F
 GLIBC_2.2 __pread64 F
-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_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
 GLIBC_2.2 pthread_join F
 GLIBC_2.2 pthread_kill F
 GLIBC_2.2 pthread_kill_other_threads_np F
-GLIBC_2.2 pthread_mutex_destroy F
-GLIBC_2.2 pthread_mutex_init F
-GLIBC_2.2 pthread_mutex_lock F
 GLIBC_2.2 pthread_mutex_timedlock F
 GLIBC_2.2 pthread_mutex_trylock F
-GLIBC_2.2 pthread_mutex_unlock F
 GLIBC_2.2 pthread_mutexattr_destroy F
 GLIBC_2.2 pthread_mutexattr_getkind_np F
 GLIBC_2.2 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index dfe78d93cb..6858c1328f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -360,6 +360,10 @@ GLIBC_2.2.5 __progname D 0x8
 GLIBC_2.2.5 __progname_full D 0x8
 GLIBC_2.2.5 __pthread_getspecific F
 GLIBC_2.2.5 __pthread_key_create F
+GLIBC_2.2.5 __pthread_mutex_destroy F
+GLIBC_2.2.5 __pthread_mutex_init F
+GLIBC_2.2.5 __pthread_mutex_lock F
+GLIBC_2.2.5 __pthread_mutex_unlock F
 GLIBC_2.2.5 __pthread_once F
 GLIBC_2.2.5 __pthread_rwlock_rdlock F
 GLIBC_2.2.5 __pthread_rwlock_unlock F
@@ -2114,6 +2118,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 4f8dfa000a..54ad81fdd6 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -20,11 +20,7 @@ GLIBC_2.2.5 __lseek F
 GLIBC_2.2.5 __open F
 GLIBC_2.2.5 __open64 F
 GLIBC_2.2.5 __pread64 F
-GLIBC_2.2.5 __pthread_mutex_destroy F
-GLIBC_2.2.5 __pthread_mutex_init F
-GLIBC_2.2.5 __pthread_mutex_lock F
 GLIBC_2.2.5 __pthread_mutex_trylock F
-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
@@ -83,12 +79,8 @@ GLIBC_2.2.5 pthread_getcpuclockid F
 GLIBC_2.2.5 pthread_join F
 GLIBC_2.2.5 pthread_kill F
 GLIBC_2.2.5 pthread_kill_other_threads_np F
-GLIBC_2.2.5 pthread_mutex_destroy F
-GLIBC_2.2.5 pthread_mutex_init F
-GLIBC_2.2.5 pthread_mutex_lock F
 GLIBC_2.2.5 pthread_mutex_timedlock F
 GLIBC_2.2.5 pthread_mutex_trylock F
-GLIBC_2.2.5 pthread_mutex_unlock F
 GLIBC_2.2.5 pthread_mutexattr_destroy F
 GLIBC_2.2.5 pthread_mutexattr_getkind_np F
 GLIBC_2.2.5 pthread_mutexattr_getpshared F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 3accd92583..72da8cceaa 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -342,6 +342,10 @@ GLIBC_2.16 __progname_full D 0x4
 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
+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_rwlock_rdlock F
 GLIBC_2.16 __pthread_rwlock_unlock F
@@ -2212,6 +2216,10 @@ GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __pthread_cleanup_routine F
 GLIBC_2.34 __pthread_getspecific F
 GLIBC_2.34 __pthread_key_create F
+GLIBC_2.34 __pthread_mutex_destroy F
+GLIBC_2.34 __pthread_mutex_init F
+GLIBC_2.34 __pthread_mutex_lock F
+GLIBC_2.34 __pthread_mutex_unlock F
 GLIBC_2.34 __pthread_once F
 GLIBC_2.34 __pthread_rwlock_rdlock F
 GLIBC_2.34 __pthread_rwlock_unlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 0b017c0218..6b095bf36a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -13,11 +13,7 @@ GLIBC_2.16 __lseek F
 GLIBC_2.16 __open F
 GLIBC_2.16 __open64 F
 GLIBC_2.16 __pread64 F
-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_trylock F
-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
@@ -84,14 +80,10 @@ GLIBC_2.16 pthread_getname_np F
 GLIBC_2.16 pthread_join F
 GLIBC_2.16 pthread_kill F
 GLIBC_2.16 pthread_kill_other_threads_np F
-GLIBC_2.16 pthread_mutex_destroy F
 GLIBC_2.16 pthread_mutex_getprioceiling F
-GLIBC_2.16 pthread_mutex_init F
-GLIBC_2.16 pthread_mutex_lock F
 GLIBC_2.16 pthread_mutex_setprioceiling F
 GLIBC_2.16 pthread_mutex_timedlock F
 GLIBC_2.16 pthread_mutex_trylock F
-GLIBC_2.16 pthread_mutex_unlock F
 GLIBC_2.16 pthread_mutexattr_destroy F
 GLIBC_2.16 pthread_mutexattr_getkind_np F
 GLIBC_2.16 pthread_mutexattr_getprioceiling F
-- 
2.29.2



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

* [PATCH v3 35/37] nptl: Move core condition variable functions into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (33 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 34/37] nptl: Move core mutex functions into libc Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-26 17:14   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 36/37] nptl: Move setxid broadcast implementation " Florian Weimer
                   ` (3 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

Onl pthread_cond_clockwait did not have a forwarder, so it needs
a new symbol version.

Some complications arise due to the need to supply hidden aliases,
GLIBC_PRIVATE exports (for the C11 condition variable implementation
that still remains in libpthread) and 64-bit time_t stubs.

pthread_cond_broadcast, pthread_cond_signal,  pthread_cond_timedwait,
pthread_cond_wait, pthread_cond_clockwait have been moved using
scripts/move-symbol-to-libc.py.
---
 nptl/Makefile                                 | 16 ++---
 nptl/Versions                                 | 19 +++---
 nptl/forward.c                                | 61 -----------------
 nptl/libpthread-compat.c                      |  5 ++
 nptl/nptl-init.c                              | 10 ---
 nptl/old_pthread_cond_broadcast.c             |  4 +-
 nptl/old_pthread_cond_signal.c                |  4 +-
 nptl/old_pthread_cond_timedwait.c             |  4 +-
 nptl/old_pthread_cond_wait.c                  |  4 +-
 nptl/pthreadP.h                               |  9 ++-
 nptl/pthread_cond_broadcast.c                 | 11 ++--
 nptl/pthread_cond_signal.c                    |  9 ++-
 nptl/pthread_cond_wait.c                      | 66 +++++++++++++------
 sysdeps/nptl/pthread-functions.h              | 11 ----
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 +
 .../sysv/linux/aarch64/libpthread.abilist     |  5 --
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 +
 .../unix/sysv/linux/alpha/libpthread.abilist  | 10 +--
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 +
 .../unix/sysv/linux/arc/libpthread.abilist    |  5 --
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +
 .../unix/sysv/linux/arm/be/libpthread.abilist |  5 --
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +
 .../unix/sysv/linux/arm/le/libpthread.abilist |  5 --
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +
 .../unix/sysv/linux/csky/libpthread.abilist   |  5 --
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +
 .../unix/sysv/linux/hppa/libpthread.abilist   | 10 +--
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +
 .../unix/sysv/linux/i386/libpthread.abilist   | 10 +--
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  2 +
 .../unix/sysv/linux/ia64/libpthread.abilist   | 10 +--
 .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +
 .../linux/m68k/coldfire/libpthread.abilist    |  5 --
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +
 .../sysv/linux/m68k/m680x0/libpthread.abilist | 10 +--
 .../sysv/linux/microblaze/be/libc.abilist     |  2 +
 .../linux/microblaze/be/libpthread.abilist    |  5 --
 .../sysv/linux/microblaze/le/libc.abilist     |  2 +
 .../linux/microblaze/le/libpthread.abilist    |  5 --
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +
 .../sysv/linux/mips/mips32/libpthread.abilist | 10 +--
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +
 .../sysv/linux/mips/mips64/libpthread.abilist | 10 +--
 .../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  |  5 --
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +
 .../powerpc/powerpc32/libpthread.abilist      | 10 +--
 .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  2 +
 .../powerpc/powerpc64/be/libpthread.abilist   | 10 +--
 .../linux/powerpc/powerpc64/le/libc.abilist   |  2 +
 .../powerpc/powerpc64/le/libpthread.abilist   |  5 --
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  2 +
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  5 --
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 +
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  5 --
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 +
 .../linux/s390/s390-32/libpthread.abilist     | 10 +--
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  2 +
 .../linux/s390/s390-64/libpthread.abilist     | 10 +--
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +
 .../unix/sysv/linux/sh/be/libpthread.abilist  | 10 +--
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +
 .../unix/sysv/linux/sh/le/libpthread.abilist  | 10 +--
 .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +
 .../linux/sparc/sparc32/libpthread.abilist    | 10 +--
 .../sysv/linux/sparc/sparc64/libc.abilist     |  2 +
 .../linux/sparc/sparc64/libpthread.abilist    | 10 +--
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 +
 .../sysv/linux/x86_64/64/libpthread.abilist   | 10 +--
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 +
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  5 --
 75 files changed, 176 insertions(+), 346 deletions(-)

diff --git a/nptl/Makefile b/nptl/Makefile
index e0ba8bea13..1cf72fd5df 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -47,8 +47,12 @@ routines = \
   lowlevellock \
   nptl_deallocate_tsd \
   nptl_nthreads \
+  old_pthread_cond_broadcast \
   old_pthread_cond_destroy \
   old_pthread_cond_init \
+  old_pthread_cond_signal \
+  old_pthread_cond_timedwait \
+  old_pthread_cond_wait \
   pthread_atfork \
   pthread_attr_copy \
   pthread_attr_destroy \
@@ -69,8 +73,11 @@ routines = \
   pthread_attr_setsigmask \
   pthread_attr_setsigmask_internal \
   pthread_cleanup_upto \
+  pthread_cond_broadcast \
   pthread_cond_destroy \
   pthread_cond_init \
+  pthread_cond_signal \
+  pthread_cond_wait \
   pthread_condattr_destroy \
   pthread_condattr_init \
   pthread_equal \
@@ -82,6 +89,7 @@ routines = \
   pthread_key_create \
   pthread_key_delete \
   pthread_keys \
+  pthread_mutex_cond_lock \
   pthread_mutex_conf \
   pthread_mutex_consistent \
   pthread_mutex_destroy \
@@ -130,10 +138,6 @@ libpthread-routines = \
   nptl-init \
   nptlfreeres \
   old_pthread_atfork \
-  old_pthread_cond_broadcast \
-  old_pthread_cond_signal \
-  old_pthread_cond_timedwait \
-  old_pthread_cond_wait \
   pt-allocrtsig \
   pt-fcntl \
   pt-interp \
@@ -157,9 +161,6 @@ libpthread-routines = \
   pthread_barrierattr_setpshared \
   pthread_cancel \
   pthread_clockjoin \
-  pthread_cond_broadcast \
-  pthread_cond_signal \
-  pthread_cond_wait \
   pthread_condattr_getclock \
   pthread_condattr_getpshared \
   pthread_condattr_setclock \
@@ -174,7 +175,6 @@ libpthread-routines = \
   pthread_join_common \
   pthread_kill \
   pthread_kill_other_threads \
-  pthread_mutex_cond_lock \
   pthread_mutex_getprioceiling \
   pthread_mutex_setprioceiling \
   pthread_mutex_timedlock \
diff --git a/nptl/Versions b/nptl/Versions
index 2352b74c7e..a6c8746449 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -95,6 +95,9 @@ libc {
     thrd_sleep;
     thrd_yield;
   }
+  GLIBC_2.30 {
+    pthread_cond_clockwait;
+  }
   GLIBC_2.32 {
     pthread_attr_getsigmask_np;
     pthread_attr_setaffinity_np;
@@ -116,6 +119,7 @@ libc {
     __pthread_rwlock_unlock;
     __pthread_rwlock_wrlock;
     __pthread_setspecific;
+    pthread_cond_clockwait;
     pthread_getspecific;
     pthread_key_create;
     pthread_key_delete;
@@ -155,8 +159,12 @@ libc {
     __pthread_cleanup_pop;
     __pthread_cleanup_push;
     __pthread_cleanup_upto;
+    __pthread_cond_broadcast; # Used by the C11 threads.
     __pthread_cond_destroy; # Used by the C11 threads.
     __pthread_cond_init; # Used by the C11 threads.
+    __pthread_cond_signal; # Used by the C11 threads.
+    __pthread_cond_timedwait; # Used by the C11 threads.
+    __pthread_cond_wait; # Used by the C11 threads.
     __pthread_current_priority;
     __pthread_exit;
     __pthread_force_elision;
@@ -209,10 +217,6 @@ libpthread {
     pause;
     pthread_atfork;
     pthread_cancel;
-    pthread_cond_broadcast;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_wait;
     pthread_create;
     pthread_detach;
     pthread_join;
@@ -338,11 +342,7 @@ libpthread {
   }
 
   GLIBC_2.3.2 {
-    pthread_cond_broadcast;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_wait;
+    __libpthread_version_placeholder;
   }
 
   GLIBC_2.3.3 {
@@ -419,7 +419,6 @@ libpthread {
   }
 
   GLIBC_2.30 {
-    pthread_cond_clockwait;
     pthread_mutex_clocklock;
     pthread_rwlock_clockrdlock;
     pthread_rwlock_clockwrlock;
diff --git a/nptl/forward.c b/nptl/forward.c
index c914baec4f..c819ab6f2a 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -29,64 +29,3 @@
 /* Pointers to the libc functions.  */
 struct pthread_functions __libc_pthread_functions attribute_hidden;
 int __libc_pthread_functions_init attribute_hidden;
-
-
-#define FORWARD2(name, rettype, decl, params, defaction) \
-rettype									      \
-name decl								      \
-{									      \
-  if (!__libc_pthread_functions_init)					      \
-    defaction;								      \
-									      \
-  return PTHFCT_CALL (ptr_##name, params);				      \
-}
-
-#define FORWARD(name, decl, params, defretval) \
-  FORWARD2 (name, int, decl, params, return defretval)
-
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-FORWARD2 (__pthread_cond_broadcast_2_0, int attribute_compat_text_section,
-	  (pthread_cond_2_0_t *cond), (cond), return 0)
-compat_symbol (libc, __pthread_cond_broadcast_2_0, pthread_cond_broadcast,
-	       GLIBC_2_0);
-#endif
-FORWARD (__pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
-versioned_symbol (libc, __pthread_cond_broadcast, pthread_cond_broadcast,
-		  GLIBC_2_3_2);
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-FORWARD2 (__pthread_cond_signal_2_0, int attribute_compat_text_section,
-	  (pthread_cond_2_0_t *cond), (cond), return 0)
-compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
-	       GLIBC_2_0);
-#endif
-FORWARD (__pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
-versioned_symbol (libc, __pthread_cond_signal, pthread_cond_signal,
-		  GLIBC_2_3_2);
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-FORWARD2 (__pthread_cond_wait_2_0, int attribute_compat_text_section,
-	  (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex), (cond, mutex),
-	  return 0)
-compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
-	       GLIBC_2_0);
-#endif
-FORWARD (__pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
-	 (cond, mutex), 0)
-versioned_symbol (libc, __pthread_cond_wait, pthread_cond_wait,
-		  GLIBC_2_3_2);
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-FORWARD2 (__pthread_cond_timedwait_2_0, int attribute_compat_text_section,
-	  (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
-	   const struct timespec *abstime), (cond, mutex, abstime),
-	  return 0)
-compat_symbol (libc, __pthread_cond_timedwait_2_0, pthread_cond_timedwait,
-	       GLIBC_2_0);
-#endif
-FORWARD (__pthread_cond_timedwait,
-	 (pthread_cond_t *cond, pthread_mutex_t *mutex,
-	  const struct timespec *abstime), (cond, mutex, abstime), 0)
-versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
-		  GLIBC_2_3_2);
diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
index 820dcd6a8f..ee6ba66644 100644
--- a/nptl/libpthread-compat.c
+++ b/nptl/libpthread-compat.c
@@ -50,3 +50,8 @@ compat_symbol_unique (libpthread,
 compat_symbol_unique (libpthread,
 		      __libpthread_version_placeholder, GLIBC_2_2_6);
 #endif
+
+#if (SHLIB_COMPAT (libpthread, GLIBC_2_3_2, GLIBC_2_3_4))
+compat_symbol_unique (libpthread,
+		      __libpthread_version_placeholder, GLIBC_2_3_2);
+#endif
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index cbc9430ecb..50bc19c4e3 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -53,16 +53,6 @@ static const char nptl_version[] __attribute_used__ = VERSION;
 #ifdef SHARED
 static const struct pthread_functions pthread_functions =
   {
-    .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
-    .ptr___pthread_cond_signal = __pthread_cond_signal,
-    .ptr___pthread_cond_wait = __pthread_cond_wait,
-    .ptr___pthread_cond_timedwait = __pthread_cond_timedwait,
-# if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
-    .ptr___pthread_cond_broadcast_2_0 = __pthread_cond_broadcast_2_0,
-    .ptr___pthread_cond_signal_2_0 = __pthread_cond_signal_2_0,
-    .ptr___pthread_cond_wait_2_0 = __pthread_cond_wait_2_0,
-    .ptr___pthread_cond_timedwait_2_0 = __pthread_cond_timedwait_2_0,
-# endif
     .ptr__nptl_setxid = __nptl_setxid,
   };
 # define ptr_pthread_functions &pthread_functions
diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c
index 4224ad9cf3..52dbc58ae4 100644
--- a/nptl/old_pthread_cond_broadcast.c
+++ b/nptl/old_pthread_cond_broadcast.c
@@ -23,7 +23,7 @@
 #include <shlib-compat.h>
 
 
-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
 int
 __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
 {
@@ -42,6 +42,6 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
 
   return __pthread_cond_broadcast (cond->cond);
 }
-compat_symbol (libpthread, __pthread_cond_broadcast_2_0,
+compat_symbol (libc, __pthread_cond_broadcast_2_0,
 	       pthread_cond_broadcast, GLIBC_2_0);
 #endif
diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c
index bab12fd57f..38dd48ccaa 100644
--- a/nptl/old_pthread_cond_signal.c
+++ b/nptl/old_pthread_cond_signal.c
@@ -23,7 +23,7 @@
 #include <shlib-compat.h>
 
 
-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
 int
 __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
 {
@@ -42,6 +42,6 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
 
   return __pthread_cond_signal (cond->cond);
 }
-compat_symbol (libpthread, __pthread_cond_signal_2_0, pthread_cond_signal,
+compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
 	       GLIBC_2_0);
 #endif
diff --git a/nptl/old_pthread_cond_timedwait.c b/nptl/old_pthread_cond_timedwait.c
index fdddf3072f..14ef5e7efa 100644
--- a/nptl/old_pthread_cond_timedwait.c
+++ b/nptl/old_pthread_cond_timedwait.c
@@ -23,7 +23,7 @@
 #include <shlib-compat.h>
 
 
-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
 int
 __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
 			      const struct timespec *abstime)
@@ -43,6 +43,6 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
 
   return __pthread_cond_timedwait (cond->cond, mutex, abstime);
 }
-compat_symbol (libpthread, __pthread_cond_timedwait_2_0,
+compat_symbol (libc, __pthread_cond_timedwait_2_0,
 	       pthread_cond_timedwait, GLIBC_2_0);
 #endif
diff --git a/nptl/old_pthread_cond_wait.c b/nptl/old_pthread_cond_wait.c
index 156493d6be..a45bbd89e7 100644
--- a/nptl/old_pthread_cond_wait.c
+++ b/nptl/old_pthread_cond_wait.c
@@ -23,7 +23,7 @@
 #include <shlib-compat.h>
 
 
-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
 int
 __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
 {
@@ -42,6 +42,6 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
 
   return __pthread_cond_wait (cond->cond, mutex);
 }
-compat_symbol (libpthread, __pthread_cond_wait_2_0, pthread_cond_wait,
+compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
 	       GLIBC_2_0);
 #endif
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 4feebdf09e..786c566e81 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -457,13 +457,16 @@ libc_hidden_proto (__pthread_rwlock_wrlock)
 extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
 extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
 extern int __pthread_cond_broadcast (pthread_cond_t *cond);
+libc_hidden_proto (__pthread_cond_broadcast)
 extern int __pthread_cond_destroy (pthread_cond_t *cond);
 libc_hidden_proto (__pthread_cond_destroy)
 extern int __pthread_cond_init (pthread_cond_t *cond,
 				const pthread_condattr_t *cond_attr);
 libc_hidden_proto (__pthread_cond_init)
 extern int __pthread_cond_signal (pthread_cond_t *cond);
+libc_hidden_proto (__pthread_cond_signal)
 extern int __pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);
+libc_hidden_proto (__pthread_cond_wait)
 
 #if __TIMESIZE == 64
 # define __pthread_clockjoin_np64 __pthread_clockjoin_np
@@ -487,12 +490,12 @@ libpthread_hidden_proto (__pthread_timedjoin_np64)
 extern int __pthread_cond_timedwait64 (pthread_cond_t *cond,
                                        pthread_mutex_t *mutex,
                                        const struct __timespec64 *abstime);
-libpthread_hidden_proto (__pthread_cond_timedwait64)
+libc_hidden_proto (__pthread_cond_timedwait64)
 extern int __pthread_cond_clockwait64 (pthread_cond_t *cond,
                                        pthread_mutex_t *mutex,
                                        clockid_t clockid,
                                        const struct __timespec64 *abstime);
-libpthread_hidden_proto (__pthread_cond_clockwait64)
+libc_hidden_proto (__pthread_cond_clockwait64)
 extern int __pthread_rwlock_clockrdlock64 (pthread_rwlock_t *rwlock,
                                            clockid_t clockid,
                                            const struct __timespec64 *abstime);
@@ -519,11 +522,13 @@ libpthread_hidden_proto (__pthread_mutex_timedlock64)
 extern int __pthread_cond_timedwait (pthread_cond_t *cond,
 				     pthread_mutex_t *mutex,
 				     const struct timespec *abstime);
+libc_hidden_proto (__pthread_cond_timedwait)
 extern int __pthread_cond_clockwait (pthread_cond_t *cond,
 				     pthread_mutex_t *mutex,
 				     clockid_t clockid,
 				     const struct timespec *abstime)
   __nonnull ((1, 2, 4));
+libc_hidden_proto (__pthread_cond_clockwait)
 extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
 extern int __pthread_condattr_init (pthread_condattr_t *attr);
 extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
diff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
index e64e124b5b..00326ad435 100644
--- a/nptl/pthread_cond_broadcast.c
+++ b/nptl/pthread_cond_broadcast.c
@@ -36,7 +36,7 @@
    G1.  We don't need to do all these steps if there are no waiters in G1
    and/or G2.  See __pthread_cond_signal for further details.  */
 int
-__pthread_cond_broadcast (pthread_cond_t *cond)
+__pthread_cond_broadcast_1 (pthread_cond_t *cond)
 {
   LIBC_PROBE (cond_broadcast, 1, cond);
 
@@ -87,6 +87,9 @@ __pthread_cond_broadcast (pthread_cond_t *cond)
 
   return 0;
 }
-
-versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast,
-		  GLIBC_2_3_2);
+versioned_symbol (libpthread, __pthread_cond_broadcast_1,
+		  pthread_cond_broadcast, GLIBC_2_3_2);
+libc_hidden_ver (__pthread_cond_broadcast_1, __pthread_cond_broadcast)
+strong_alias (__pthread_cond_broadcast_1, __pthread_cond_broadcast_2)
+versioned_symbol (libpthread, __pthread_cond_broadcast_2,
+		  __pthread_cond_broadcast, GLIBC_PRIVATE);
diff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c
index 77073342b2..88ce3811d2 100644
--- a/nptl/pthread_cond_signal.c
+++ b/nptl/pthread_cond_signal.c
@@ -32,7 +32,7 @@
 
 /* See __pthread_cond_wait for a high-level description of the algorithm.  */
 int
-__pthread_cond_signal (pthread_cond_t *cond)
+__pthread_cond_signal_1 (pthread_cond_t *cond)
 {
   LIBC_PROBE (cond_signal, 1, cond);
 
@@ -95,6 +95,9 @@ __pthread_cond_signal (pthread_cond_t *cond)
 
   return 0;
 }
-
-versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal,
+versioned_symbol (libpthread, __pthread_cond_signal_1, pthread_cond_signal,
 		  GLIBC_2_3_2);
+libc_hidden_ver (__pthread_cond_signal_1, __pthread_cond_signal)
+strong_alias (__pthread_cond_signal_1, __pthread_cond_signal_2)
+versioned_symbol (libpthread, __pthread_cond_signal_2,
+		  __pthread_cond_signal, GLIBC_PRIVATE);
diff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c
index a481bb55fc..2eb6c85f4e 100644
--- a/nptl/pthread_cond_wait.c
+++ b/nptl/pthread_cond_wait.c
@@ -613,16 +613,23 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,
 
 /* See __pthread_cond_wait_common.  */
 int
-__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
+__pthread_cond_wait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex)
 {
   /* clockid is unused when abstime is NULL. */
   return __pthread_cond_wait_common (cond, mutex, 0, NULL);
 }
 
+versioned_symbol (libpthread, __pthread_cond_wait_1, pthread_cond_wait,
+		  GLIBC_2_3_2);
+libc_hidden_ver (__pthread_cond_wait_1, __pthread_cond_wait)
+strong_alias (__pthread_cond_wait_1, __pthread_cond_wait_2)
+versioned_symbol (libpthread, __pthread_cond_wait_2, __pthread_cond_wait,
+		  GLIBC_PRIVATE);
+
 /* See __pthread_cond_wait_common.  */
 int
-__pthread_cond_timedwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
-                            const struct __timespec64 *abstime)
+__pthread_cond_timedwait64_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
+			      const struct __timespec64 *abstime)
 {
   /* Check parameter validity.  This should also tell the compiler that
      it can assume that abstime is not NULL.  */
@@ -637,29 +644,34 @@ __pthread_cond_timedwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
   return __pthread_cond_wait_common (cond, mutex, clockid, abstime);
 }
 
-#if __TIMESIZE != 64
-libpthread_hidden_def (__pthread_cond_timedwait64)
+#if __TIMESIZE == 64
+strong_alias (__pthread_cond_timedwait64_1, __pthread_cond_timedwait_1)
+#else
+versioned_symbol (libc, __pthread_cond_timedwait64_1,
+		  __pthread_cond_timedwait64, GLIBC_PRIVATE);
+libc_hidden_ver (__pthread_cond_timedwait64_1, __pthread_cond_timedwait64)
 
 int
-__pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
-                          const struct timespec *abstime)
+__pthread_cond_timedwait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
+			    const struct timespec *abstime)
 {
   struct __timespec64 ts64 = valid_timespec_to_timespec64 (*abstime);
 
   return __pthread_cond_timedwait64 (cond, mutex, &ts64);
 }
-#endif
-
-versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
-		  GLIBC_2_3_2);
-versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
-		  GLIBC_2_3_2);
+#endif /* __TIMESIZE == 64 */
+versioned_symbol (libpthread, __pthread_cond_timedwait_1,
+		  pthread_cond_timedwait, GLIBC_2_3_2);
+libc_hidden_ver (__pthread_cond_timedwait_1, __pthread_cond_timedwait)
+strong_alias (__pthread_cond_timedwait_1, __pthread_cond_timedwait_2)
+versioned_symbol (libpthread, __pthread_cond_timedwait_2,
+		  __pthread_cond_timedwait, GLIBC_PRIVATE);
 
 /* See __pthread_cond_wait_common.  */
 int
-__pthread_cond_clockwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
-                            clockid_t clockid,
-                            const struct __timespec64 *abstime)
+__pthread_cond_clockwait64_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
+			      clockid_t clockid,
+			      const struct __timespec64 *abstime)
 {
   /* Check parameter validity.  This should also tell the compiler that
      it can assume that abstime is not NULL.  */
@@ -672,11 +684,15 @@ __pthread_cond_clockwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
   return __pthread_cond_wait_common (cond, mutex, clockid, abstime);
 }
 
-#if __TIMESIZE != 64
-libpthread_hidden_def (__pthread_cond_clockwait64)
+#if __TIMESIZE == 64
+strong_alias (__pthread_cond_clockwait64_1, __pthread_cond_clockwait_1)
+#else
+versioned_symbol (libc, __pthread_cond_clockwait64_1,
+		  __pthread_cond_clockwait64, GLIBC_PRIVATE);
+libc_hidden_ver (__pthread_cond_clockwait64_1, __pthread_cond_clockwait64)
 
 int
-__pthread_cond_clockwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
+__pthread_cond_clockwait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
                           clockid_t clockid,
                           const struct timespec *abstime)
 {
@@ -684,5 +700,15 @@ __pthread_cond_clockwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
 
   return __pthread_cond_clockwait64 (cond, mutex, clockid, &ts64);
 }
+#endif /* __TIMESIZE == 64 */
+versioned_symbol (libc, __pthread_cond_clockwait_1,
+		  __pthread_cond_clockwait, GLIBC_PRIVATE);
+libc_hidden_ver (__pthread_cond_clockwait_1, __pthread_cond_clockwait)
+strong_alias (__pthread_cond_clockwait_1, __pthread_cond_clockwait_2)
+versioned_symbol (libc, __pthread_cond_clockwait_2,
+		  pthread_cond_clockwait, GLIBC_2_34);
+#if SHLIB_COMPAT (libc, GLIBC_2_30, GLIBC_2_34)
+strong_alias (__pthread_cond_clockwait_1, __pthread_cond_clockwait_3)
+compat_symbol (libc, __pthread_cond_clockwait_3,
+	       pthread_cond_clockwait, GLIBC_2_30);
 #endif
-weak_alias (__pthread_cond_clockwait, pthread_cond_clockwait);
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index dab5a2831e..56c746a01c 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -30,17 +30,6 @@ struct xid_command;
    the thread functions.  */
 struct pthread_functions
 {
-  int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
-  int (*ptr___pthread_cond_signal) (pthread_cond_t *);
-  int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
-  int (*ptr___pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
-				       const struct timespec *);
-  int (*ptr___pthread_cond_broadcast_2_0) (pthread_cond_2_0_t *);
-  int (*ptr___pthread_cond_signal_2_0) (pthread_cond_2_0_t *);
-  int (*ptr___pthread_cond_wait_2_0) (pthread_cond_2_0_t *, pthread_mutex_t *);
-  int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
-					   pthread_mutex_t *,
-					   const struct timespec *);
   int (*ptr__nptl_setxid) (struct xid_command *);
 };
 
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 381947232e..918e8ad5ce 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2174,6 +2174,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2212,6 +2213,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index 29a98fc2f4..421b093c4c 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.17 pthread_barrierattr_getpshared F
 GLIBC_2.17 pthread_barrierattr_init F
 GLIBC_2.17 pthread_barrierattr_setpshared F
 GLIBC_2.17 pthread_cancel F
-GLIBC_2.17 pthread_cond_broadcast F
-GLIBC_2.17 pthread_cond_signal F
-GLIBC_2.17 pthread_cond_timedwait F
-GLIBC_2.17 pthread_cond_wait F
 GLIBC_2.17 pthread_condattr_getclock F
 GLIBC_2.17 pthread_condattr_getpshared F
 GLIBC_2.17 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 7e314dd68b..b197b40425 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2255,6 +2255,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2293,6 +2294,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 29cb6259a5..69809f7794 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -185,7 +178,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 014b30c7bd..fccb579d59 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -1374,6 +1374,7 @@ GLIBC_2.32 pthread_attr_setschedpolicy F
 GLIBC_2.32 pthread_attr_setscope F
 GLIBC_2.32 pthread_attr_setsigmask_np F
 GLIBC_2.32 pthread_cond_broadcast F
+GLIBC_2.32 pthread_cond_clockwait F
 GLIBC_2.32 pthread_cond_destroy F
 GLIBC_2.32 pthread_cond_init F
 GLIBC_2.32 pthread_cond_signal F
@@ -1972,6 +1973,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index b926ef9dba..9e16734b8c 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -76,11 +76,6 @@ GLIBC_2.32 pthread_barrierattr_init F
 GLIBC_2.32 pthread_barrierattr_setpshared F
 GLIBC_2.32 pthread_cancel F
 GLIBC_2.32 pthread_clockjoin_np F
-GLIBC_2.32 pthread_cond_broadcast F
-GLIBC_2.32 pthread_cond_clockwait F
-GLIBC_2.32 pthread_cond_signal F
-GLIBC_2.32 pthread_cond_timedwait F
-GLIBC_2.32 pthread_cond_wait F
 GLIBC_2.32 pthread_condattr_getclock F
 GLIBC_2.32 pthread_condattr_getpshared F
 GLIBC_2.32 pthread_condattr_setclock F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 412eb541fc..0e3cb8f22b 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -129,6 +129,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -170,6 +171,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 8dd2c3f7a6..bd870717f2 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
@@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
 GLIBC_2.4 pthread_barrierattr_init F
 GLIBC_2.4 pthread_barrierattr_setpshared F
 GLIBC_2.4 pthread_cancel F
-GLIBC_2.4 pthread_cond_broadcast F
-GLIBC_2.4 pthread_cond_signal F
-GLIBC_2.4 pthread_cond_timedwait F
-GLIBC_2.4 pthread_cond_wait F
 GLIBC_2.4 pthread_condattr_getclock F
 GLIBC_2.4 pthread_condattr_getpshared F
 GLIBC_2.4 pthread_condattr_setclock F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 588f1d6b42..10b35e83ab 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -129,6 +129,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -167,6 +168,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 8dd2c3f7a6..bd870717f2 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
@@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
 GLIBC_2.4 pthread_barrierattr_init F
 GLIBC_2.4 pthread_barrierattr_setpshared F
 GLIBC_2.4 pthread_cancel F
-GLIBC_2.4 pthread_cond_broadcast F
-GLIBC_2.4 pthread_cond_signal F
-GLIBC_2.4 pthread_cond_timedwait F
-GLIBC_2.4 pthread_cond_wait F
 GLIBC_2.4 pthread_condattr_getclock F
 GLIBC_2.4 pthread_condattr_getpshared F
 GLIBC_2.4 pthread_condattr_setclock F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 76fb31f895..dbbf62eba3 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2118,6 +2118,7 @@ GLIBC_2.29 xprt_register F
 GLIBC_2.29 xprt_unregister F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2156,6 +2157,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index 2c4d219569..e4d8c8fcb0 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -75,10 +75,6 @@ GLIBC_2.29 pthread_barrierattr_getpshared F
 GLIBC_2.29 pthread_barrierattr_init F
 GLIBC_2.29 pthread_barrierattr_setpshared F
 GLIBC_2.29 pthread_cancel F
-GLIBC_2.29 pthread_cond_broadcast F
-GLIBC_2.29 pthread_cond_signal F
-GLIBC_2.29 pthread_cond_timedwait F
-GLIBC_2.29 pthread_cond_wait F
 GLIBC_2.29 pthread_condattr_getclock F
 GLIBC_2.29 pthread_condattr_getpshared F
 GLIBC_2.29 pthread_condattr_setclock F
@@ -171,7 +167,6 @@ GLIBC_2.29 tss_delete F
 GLIBC_2.29 tss_get F
 GLIBC_2.29 tss_set F
 GLIBC_2.29 write F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index e99899dee5..8b3960aff8 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2076,6 +2076,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2114,6 +2115,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 9e15deaad8..3eb40a91f7 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 29b8e0c1eb..bbc1d42e71 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2242,6 +2242,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2281,6 +2282,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 4065a88a3b..3d9efa60e0 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index fb8a36ce20..4cf13e29a8 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2108,6 +2108,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2146,6 +2147,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 684bf559e5..974fa09b43 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -177,7 +170,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 03e80e6a12..75e546da5d 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -130,6 +130,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -171,6 +172,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 8dd2c3f7a6..bd870717f2 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
@@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
 GLIBC_2.4 pthread_barrierattr_init F
 GLIBC_2.4 pthread_barrierattr_setpshared F
 GLIBC_2.4 pthread_cancel F
-GLIBC_2.4 pthread_cond_broadcast F
-GLIBC_2.4 pthread_cond_signal F
-GLIBC_2.4 pthread_cond_timedwait F
-GLIBC_2.4 pthread_cond_wait F
 GLIBC_2.4 pthread_condattr_getclock F
 GLIBC_2.4 pthread_condattr_getpshared F
 GLIBC_2.4 pthread_condattr_setclock F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 2a5bee30d1..7a24d3ce17 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2185,6 +2185,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 4065a88a3b..3d9efa60e0 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index b46567880e..4d0fef0d93 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2166,6 +2166,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -2207,6 +2208,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index d8a9642f66..3ad8bce93a 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.18 pthread_barrierattr_getpshared F
 GLIBC_2.18 pthread_barrierattr_init F
 GLIBC_2.18 pthread_barrierattr_setpshared F
 GLIBC_2.18 pthread_cancel F
-GLIBC_2.18 pthread_cond_broadcast F
-GLIBC_2.18 pthread_cond_signal F
-GLIBC_2.18 pthread_cond_timedwait F
-GLIBC_2.18 pthread_cond_wait F
 GLIBC_2.18 pthread_condattr_getclock F
 GLIBC_2.18 pthread_condattr_getpshared F
 GLIBC_2.18 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 7796c5313a..2a06c0ed64 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2166,6 +2166,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2204,6 +2205,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index d8a9642f66..3ad8bce93a 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.18 pthread_barrierattr_getpshared F
 GLIBC_2.18 pthread_barrierattr_init F
 GLIBC_2.18 pthread_barrierattr_setpshared F
 GLIBC_2.18 pthread_cancel F
-GLIBC_2.18 pthread_cond_broadcast F
-GLIBC_2.18 pthread_cond_signal F
-GLIBC_2.18 pthread_cond_timedwait F
-GLIBC_2.18 pthread_cond_wait F
 GLIBC_2.18 pthread_condattr_getclock F
 GLIBC_2.18 pthread_condattr_getpshared F
 GLIBC_2.18 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index c3e658dbc1..99bb618f1f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2159,6 +2159,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2197,6 +2198,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 4bd5de2dd7..2ab8395a4a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -164,10 +160,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index bae73ebb39..7d66f78876 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2157,6 +2157,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2195,6 +2196,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 4bd5de2dd7..2ab8395a4a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -164,10 +160,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 74fb3b997e..55cc5e99bf 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2165,6 +2165,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2203,6 +2204,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 3083e3d821..208a801c9d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2159,6 +2159,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2197,6 +2198,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index f79ca91eb7..7525da4a92 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2207,6 +2207,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2245,6 +2246,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index c469853b65..263808a2b8 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.21 pthread_barrierattr_getpshared F
 GLIBC_2.21 pthread_barrierattr_init F
 GLIBC_2.21 pthread_barrierattr_setpshared F
 GLIBC_2.21 pthread_cancel F
-GLIBC_2.21 pthread_cond_broadcast F
-GLIBC_2.21 pthread_cond_signal F
-GLIBC_2.21 pthread_cond_timedwait F
-GLIBC_2.21 pthread_cond_wait F
 GLIBC_2.21 pthread_condattr_getclock F
 GLIBC_2.21 pthread_condattr_getpshared F
 GLIBC_2.21 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index f5408e6078..7c85534f61 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2215,6 +2215,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2253,6 +2254,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 44fb3a6743..7d696c9be7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index a7587dcc45..1e4059c7f6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2248,6 +2248,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2286,6 +2287,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 7ea6dc6574..e72f329cf9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2078,6 +2078,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2116,6 +2117,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 2e77dc2fb3..342642ee59 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -86,10 +86,6 @@ GLIBC_2.3 pthread_barrierattr_destroy F
 GLIBC_2.3 pthread_barrierattr_init F
 GLIBC_2.3 pthread_barrierattr_setpshared F
 GLIBC_2.3 pthread_cancel F
-GLIBC_2.3 pthread_cond_broadcast F
-GLIBC_2.3 pthread_cond_signal F
-GLIBC_2.3 pthread_cond_timedwait F
-GLIBC_2.3 pthread_cond_wait F
 GLIBC_2.3 pthread_condattr_getpshared F
 GLIBC_2.3 pthread_condattr_setpshared F
 GLIBC_2.3 pthread_create F
@@ -154,10 +150,7 @@ GLIBC_2.3 sigwait F
 GLIBC_2.3 system F
 GLIBC_2.3 tcdrain F
 GLIBC_2.3 write F
-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.2 __libpthread_version_placeholder 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
@@ -172,7 +165,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index f994892fd9..36dd35b01a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2276,6 +2276,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __argp_errorieee128 F
@@ -2407,6 +2408,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index 29a98fc2f4..421b093c4c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.17 pthread_barrierattr_getpshared F
 GLIBC_2.17 pthread_barrierattr_init F
 GLIBC_2.17 pthread_barrierattr_setpshared F
 GLIBC_2.17 pthread_cancel F
-GLIBC_2.17 pthread_cond_broadcast F
-GLIBC_2.17 pthread_cond_signal F
-GLIBC_2.17 pthread_cond_timedwait F
-GLIBC_2.17 pthread_cond_wait F
 GLIBC_2.17 pthread_condattr_getclock F
 GLIBC_2.17 pthread_condattr_getpshared F
 GLIBC_2.17 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 70b873f9fb..955b5df1f3 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -1376,6 +1376,7 @@ GLIBC_2.33 pthread_attr_setschedpolicy F
 GLIBC_2.33 pthread_attr_setscope F
 GLIBC_2.33 pthread_attr_setsigmask_np F
 GLIBC_2.33 pthread_cond_broadcast F
+GLIBC_2.33 pthread_cond_clockwait F
 GLIBC_2.33 pthread_cond_destroy F
 GLIBC_2.33 pthread_cond_init F
 GLIBC_2.33 pthread_cond_signal F
@@ -1974,6 +1975,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 911969f7eb..23b5630a69 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -76,11 +76,6 @@ GLIBC_2.33 pthread_barrierattr_init F
 GLIBC_2.33 pthread_barrierattr_setpshared F
 GLIBC_2.33 pthread_cancel F
 GLIBC_2.33 pthread_clockjoin_np F
-GLIBC_2.33 pthread_cond_broadcast F
-GLIBC_2.33 pthread_cond_clockwait F
-GLIBC_2.33 pthread_cond_signal F
-GLIBC_2.33 pthread_cond_timedwait F
-GLIBC_2.33 pthread_cond_wait F
 GLIBC_2.33 pthread_condattr_getclock F
 GLIBC_2.33 pthread_condattr_getpshared F
 GLIBC_2.33 pthread_condattr_setclock F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index ddfac62fd0..74bf464fa9 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2136,6 +2136,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2174,6 +2175,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 21f462137a..58402c8360 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.27 pthread_barrierattr_getpshared F
 GLIBC_2.27 pthread_barrierattr_init F
 GLIBC_2.27 pthread_barrierattr_setpshared F
 GLIBC_2.27 pthread_cancel F
-GLIBC_2.27 pthread_cond_broadcast F
-GLIBC_2.27 pthread_cond_signal F
-GLIBC_2.27 pthread_cond_timedwait F
-GLIBC_2.27 pthread_cond_wait F
 GLIBC_2.27 pthread_condattr_getclock F
 GLIBC_2.27 pthread_condattr_getpshared F
 GLIBC_2.27 pthread_condattr_setclock F
@@ -173,7 +169,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 078237adb2..ad26a36c0b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2210,6 +2210,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -2251,6 +2252,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 7b2edb7f57..0f527c3335 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -166,10 +162,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index a2700aba32..b75431f830 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2114,6 +2114,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2152,6 +2153,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 8b4729fb7a..5af8b32f0b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -67,10 +67,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -158,10 +154,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -176,7 +169,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 4fce4b408e..fc6dfece0a 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2080,6 +2080,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.31 msgctl F
@@ -2121,6 +2122,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 9e15deaad8..3eb40a91f7 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 5dba0f5d0c..15e858df71 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2080,6 +2080,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2118,6 +2119,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 9e15deaad8..3eb40a91f7 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index e064e5a4dc..157da004d6 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2204,6 +2204,7 @@ GLIBC_2.30 __nldbl_warn F
 GLIBC_2.30 __nldbl_warnx F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2242,6 +2243,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 29cb6259a5..69809f7794 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -30,10 +30,6 @@ GLIBC_2.0 open F
 GLIBC_2.0 pause F
 GLIBC_2.0 pthread_atfork F
 GLIBC_2.0 pthread_cancel F
-GLIBC_2.0 pthread_cond_broadcast F
-GLIBC_2.0 pthread_cond_signal F
-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_join F
@@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -185,7 +178,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 36fed3cf99..b13a3b4036 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2131,6 +2131,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2169,6 +2170,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 684bf559e5..974fa09b43 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
 GLIBC_2.2 pthread_barrierattr_init F
 GLIBC_2.2 pthread_barrierattr_setpshared F
 GLIBC_2.2 pthread_cancel F
-GLIBC_2.2 pthread_cond_broadcast F
-GLIBC_2.2 pthread_cond_signal F
-GLIBC_2.2 pthread_cond_timedwait F
-GLIBC_2.2 pthread_cond_wait F
 GLIBC_2.2 pthread_condattr_getpshared F
 GLIBC_2.2 pthread_condattr_setpshared F
 GLIBC_2.2 pthread_create F
@@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -177,7 +170,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 6858c1328f..ae1b8c21f4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2089,6 +2089,7 @@ GLIBC_2.3.4 xdr_quad_t F
 GLIBC_2.3.4 xdr_u_quad_t F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2128,6 +2129,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 54ad81fdd6..ddd052cc92 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -66,10 +66,6 @@ GLIBC_2.2.5 pthread_barrierattr_destroy F
 GLIBC_2.2.5 pthread_barrierattr_init F
 GLIBC_2.2.5 pthread_barrierattr_setpshared F
 GLIBC_2.2.5 pthread_cancel F
-GLIBC_2.2.5 pthread_cond_broadcast F
-GLIBC_2.2.5 pthread_cond_signal F
-GLIBC_2.2.5 pthread_cond_timedwait F
-GLIBC_2.2.5 pthread_cond_wait F
 GLIBC_2.2.5 pthread_condattr_getpshared F
 GLIBC_2.2.5 pthread_condattr_setpshared F
 GLIBC_2.2.5 pthread_create F
@@ -156,10 +152,7 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-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.2 __libpthread_version_placeholder 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
@@ -174,7 +167,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 72da8cceaa..2d1abe3605 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2187,6 +2187,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.30 getdents64 F
 GLIBC_2.30 gettid F
+GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 tgkill F
 GLIBC_2.30 twalk_r F
 GLIBC_2.32 __libc_single_threaded D 0x1
@@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
 GLIBC_2.34 __pthread_rwlock_wrlock F
 GLIBC_2.34 __pthread_setspecific F
 GLIBC_2.34 __pthread_unwind_next F
+GLIBC_2.34 pthread_cond_clockwait F
 GLIBC_2.34 pthread_getspecific F
 GLIBC_2.34 pthread_key_create F
 GLIBC_2.34 pthread_key_delete F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 6b095bf36a..b0c512fec3 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -64,10 +64,6 @@ GLIBC_2.16 pthread_barrierattr_getpshared F
 GLIBC_2.16 pthread_barrierattr_init F
 GLIBC_2.16 pthread_barrierattr_setpshared F
 GLIBC_2.16 pthread_cancel F
-GLIBC_2.16 pthread_cond_broadcast F
-GLIBC_2.16 pthread_cond_signal F
-GLIBC_2.16 pthread_cond_timedwait F
-GLIBC_2.16 pthread_cond_wait F
 GLIBC_2.16 pthread_condattr_getclock F
 GLIBC_2.16 pthread_condattr_getpshared F
 GLIBC_2.16 pthread_condattr_setclock F
@@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
 GLIBC_2.28 tss_delete F
 GLIBC_2.28 tss_get F
 GLIBC_2.28 tss_set F
-GLIBC_2.30 pthread_cond_clockwait F
 GLIBC_2.30 pthread_mutex_clocklock F
 GLIBC_2.30 pthread_rwlock_clockrdlock F
 GLIBC_2.30 pthread_rwlock_clockwrlock F
-- 
2.29.2



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

* [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (34 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 35/37] nptl: Move core condition variable " Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-26 18:15   ` Adhemerval Zanella
  2021-03-16 17:31 ` [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface Florian Weimer
                   ` (2 subsequent siblings)
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

The signal handler is exported as __nptl_setxid_sighandler, so
that the libpthread initialization code can install it.  This
is sufficient for now because it is guarantueed to happen before
the first pthread_create call.
---
 nptl/Makefile                              |   1 +
 nptl/Versions                              |   1 +
 nptl/allocatestack.c                       | 209 ---------------
 nptl/nptl-init.c                           |  49 +---
 nptl/nptl_setxid.c                         | 279 +++++++++++++++++++++
 nptl/pthreadP.h                            |   2 +
 sysdeps/nptl/pthread-functions.h           |   1 -
 sysdeps/nptl/setxid.h                      |  26 +-
 sysdeps/unix/sysv/linux/internal-signals.h |   4 -
 9 files changed, 287 insertions(+), 285 deletions(-)
 create mode 100644 nptl/nptl_setxid.c

diff --git a/nptl/Makefile b/nptl/Makefile
index 1cf72fd5df..1b5038485d 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -47,6 +47,7 @@ routines = \
   lowlevellock \
   nptl_deallocate_tsd \
   nptl_nthreads \
+  nptl_setxid \
   old_pthread_cond_broadcast \
   old_pthread_cond_destroy \
   old_pthread_cond_init \
diff --git a/nptl/Versions b/nptl/Versions
index a6c8746449..0039594cdd 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -151,6 +151,7 @@ libc {
     __mutex_aconf;
     __nptl_deallocate_tsd;
     __nptl_nthreads;
+    __nptl_setxid_sighandler;
     __pthread_attr_copy;
     __pthread_attr_destroy;
     __pthread_attr_init;
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 149b999603..6e0808f1a0 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -963,215 +963,6 @@ __reclaim_stacks (void)
 }
 
 
-static void
-setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
-{
-  int ch;
-
-  /* Wait until this thread is cloned.  */
-  if (t->setxid_futex == -1
-      && ! atomic_compare_and_exchange_bool_acq (&t->setxid_futex, -2, -1))
-    do
-      futex_wait_simple (&t->setxid_futex, -2, FUTEX_PRIVATE);
-    while (t->setxid_futex == -2);
-
-  /* Don't let the thread exit before the setxid handler runs.  */
-  t->setxid_futex = 0;
-
-  do
-    {
-      ch = t->cancelhandling;
-
-      /* If the thread is exiting right now, ignore it.  */
-      if ((ch & EXITING_BITMASK) != 0)
-	{
-	  /* Release the futex if there is no other setxid in
-	     progress.  */
-	  if ((ch & SETXID_BITMASK) == 0)
-	    {
-	      t->setxid_futex = 1;
-	      futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
-	    }
-	  return;
-	}
-    }
-  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
-					       ch | SETXID_BITMASK, ch));
-}
-
-
-static void
-setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
-{
-  int ch;
-
-  do
-    {
-      ch = t->cancelhandling;
-      if ((ch & SETXID_BITMASK) == 0)
-	return;
-    }
-  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
-					       ch & ~SETXID_BITMASK, ch));
-
-  /* Release the futex just in case.  */
-  t->setxid_futex = 1;
-  futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
-}
-
-
-static int
-setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
-{
-  if ((t->cancelhandling & SETXID_BITMASK) == 0)
-    return 0;
-
-  int val;
-  pid_t pid = __getpid ();
-  val = INTERNAL_SYSCALL_CALL (tgkill, pid, t->tid, SIGSETXID);
-
-  /* If this failed, it must have had not started yet or else exited.  */
-  if (!INTERNAL_SYSCALL_ERROR_P (val))
-    {
-      atomic_increment (&cmdp->cntr);
-      return 1;
-    }
-  else
-    return 0;
-}
-
-/* Check for consistency across set*id system call results.  The abort
-   should not happen as long as all privileges changes happen through
-   the glibc wrappers.  ERROR must be 0 (no error) or an errno
-   code.  */
-void
-attribute_hidden
-__nptl_setxid_error (struct xid_command *cmdp, int error)
-{
-  do
-    {
-      int olderror = cmdp->error;
-      if (olderror == error)
-	break;
-      if (olderror != -1)
-	{
-	  /* Mismatch between current and previous results.  Save the
-	     error value to memory so that is not clobbered by the
-	     abort function and preserved in coredumps.  */
-	  volatile int xid_err __attribute__((unused)) = error;
-	  abort ();
-	}
-    }
-  while (atomic_compare_and_exchange_bool_acq (&cmdp->error, error, -1));
-}
-
-int
-attribute_hidden
-__nptl_setxid (struct xid_command *cmdp)
-{
-  int signalled;
-  int result;
-  lll_lock (GL (dl_stack_cache_lock), LLL_PRIVATE);
-
-  __xidcmd = cmdp;
-  cmdp->cntr = 0;
-  cmdp->error = -1;
-
-  struct pthread *self = THREAD_SELF;
-
-  /* Iterate over the list with system-allocated threads first.  */
-  list_t *runp;
-  list_for_each (runp, &GL (dl_stack_used))
-    {
-      struct pthread *t = list_entry (runp, struct pthread, list);
-      if (t == self)
-	continue;
-
-      setxid_mark_thread (cmdp, t);
-    }
-
-  /* Now the list with threads using user-allocated stacks.  */
-  list_for_each (runp, &GL (dl_stack_user))
-    {
-      struct pthread *t = list_entry (runp, struct pthread, list);
-      if (t == self)
-	continue;
-
-      setxid_mark_thread (cmdp, t);
-    }
-
-  /* Iterate until we don't succeed in signalling anyone.  That means
-     we have gotten all running threads, and their children will be
-     automatically correct once started.  */
-  do
-    {
-      signalled = 0;
-
-      list_for_each (runp, &GL (dl_stack_used))
-	{
-	  struct pthread *t = list_entry (runp, struct pthread, list);
-	  if (t == self)
-	    continue;
-
-	  signalled += setxid_signal_thread (cmdp, t);
-	}
-
-      list_for_each (runp, &GL (dl_stack_user))
-	{
-	  struct pthread *t = list_entry (runp, struct pthread, list);
-	  if (t == self)
-	    continue;
-
-	  signalled += setxid_signal_thread (cmdp, t);
-	}
-
-      int cur = cmdp->cntr;
-      while (cur != 0)
-	{
-	  futex_wait_simple ((unsigned int *) &cmdp->cntr, cur,
-			     FUTEX_PRIVATE);
-	  cur = cmdp->cntr;
-	}
-    }
-  while (signalled != 0);
-
-  /* Clean up flags, so that no thread blocks during exit waiting
-     for a signal which will never come.  */
-  list_for_each (runp, &GL (dl_stack_used))
-    {
-      struct pthread *t = list_entry (runp, struct pthread, list);
-      if (t == self)
-	continue;
-
-      setxid_unmark_thread (cmdp, t);
-    }
-
-  list_for_each (runp, &GL (dl_stack_user))
-    {
-      struct pthread *t = list_entry (runp, struct pthread, list);
-      if (t == self)
-	continue;
-
-      setxid_unmark_thread (cmdp, t);
-    }
-
-  /* This must be last, otherwise the current thread might not have
-     permissions to send SIGSETXID syscall to the other threads.  */
-  result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3,
-				 cmdp->id[0], cmdp->id[1], cmdp->id[2]);
-  int error = 0;
-  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
-    {
-      error = INTERNAL_SYSCALL_ERRNO (result);
-      __set_errno (error);
-      result = -1;
-    }
-  __nptl_setxid_error (cmdp, error);
-
-  lll_unlock (GL (dl_stack_cache_lock), LLL_PRIVATE);
-  return result;
-}
-
 static inline void __attribute__((always_inline))
 init_one_static_tls (struct pthread *curp, struct link_map *map)
 {
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 50bc19c4e3..f4a603b32d 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -53,7 +53,6 @@ static const char nptl_version[] __attribute_used__ = VERSION;
 #ifdef SHARED
 static const struct pthread_functions pthread_functions =
   {
-    .ptr__nptl_setxid = __nptl_setxid,
   };
 # define ptr_pthread_functions &pthread_functions
 #else
@@ -107,52 +106,6 @@ sigcancel_handler (int sig, siginfo_t *si, void *ctx)
 }
 
 
-struct xid_command *__xidcmd attribute_hidden;
-
-/* We use the SIGSETXID signal in the setuid, setgid, etc. implementations to
-   tell each thread to call the respective setxid syscall on itself.  This is
-   the handler.  */
-static void
-sighandler_setxid (int sig, siginfo_t *si, void *ctx)
-{
-  int result;
-
-  /* Safety check.  It would be possible to call this function for
-     other signals and send a signal from another process.  This is not
-     correct and might even be a security problem.  Try to catch as
-     many incorrect invocations as possible.  */
-  if (sig != SIGSETXID
-      || si->si_pid != __getpid ()
-      || si->si_code != SI_TKILL)
-    return;
-
-  result = INTERNAL_SYSCALL_NCS (__xidcmd->syscall_no, 3, __xidcmd->id[0],
-				 __xidcmd->id[1], __xidcmd->id[2]);
-  int error = 0;
-  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
-    error = INTERNAL_SYSCALL_ERRNO (result);
-  __nptl_setxid_error (__xidcmd, error);
-
-  /* Reset the SETXID flag.  */
-  struct pthread *self = THREAD_SELF;
-  int flags, newval;
-  do
-    {
-      flags = THREAD_GETMEM (self, cancelhandling);
-      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
-					  flags & ~SETXID_BITMASK, flags);
-    }
-  while (flags != newval);
-
-  /* And release the futex.  */
-  self->setxid_futex = 1;
-  futex_wake (&self->setxid_futex, 1, FUTEX_PRIVATE);
-
-  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
-    futex_wake ((unsigned int *) &__xidcmd->cntr, 1, FUTEX_PRIVATE);
-}
-
-
 /* When using __thread for this, we do it in libc so as not
    to give libpthread its own TLS segment just for this.  */
 extern void **__libc_dl_error_tsd (void) __attribute__ ((const));
@@ -184,7 +137,7 @@ __pthread_initialize_minimal_internal (void)
   (void) __libc_sigaction (SIGCANCEL, &sa, NULL);
 
   /* Install the handle to change the threads' uid/gid.  */
-  sa.sa_sigaction = sighandler_setxid;
+  sa.sa_sigaction = __nptl_setxid_sighandler;
   sa.sa_flags = SA_SIGINFO | SA_RESTART;
   (void) __libc_sigaction (SIGSETXID, &sa, NULL);
 
diff --git a/nptl/nptl_setxid.c b/nptl/nptl_setxid.c
new file mode 100644
index 0000000000..607c8f426e
--- /dev/null
+++ b/nptl/nptl_setxid.c
@@ -0,0 +1,279 @@
+/* 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 <futex-internal.h>
+#include <ldsodefs.h>
+#include <list.h>
+#include <lowlevellock.h>
+#include <pthreadP.h>
+#include <unistd.h>
+
+static struct xid_command *__xidcmd;
+
+/* We use the SIGSETXID signal in the setuid, setgid, etc. implementations to
+   tell each thread to call the respective setxid syscall on itself.  This is
+   the handler.  */
+void
+__nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx)
+{
+  int result;
+
+  /* Safety check.  It would be possible to call this function for
+     other signals and send a signal from another process.  This is not
+     correct and might even be a security problem.  Try to catch as
+     many incorrect invocations as possible.  */
+  if (sig != SIGSETXID
+      || si->si_pid != __getpid ()
+      || si->si_code != SI_TKILL)
+    return;
+
+  result = INTERNAL_SYSCALL_NCS (__xidcmd->syscall_no, 3, __xidcmd->id[0],
+				 __xidcmd->id[1], __xidcmd->id[2]);
+  int error = 0;
+  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
+    error = INTERNAL_SYSCALL_ERRNO (result);
+  __nptl_setxid_error (__xidcmd, error);
+
+  /* Reset the SETXID flag.  */
+  struct pthread *self = THREAD_SELF;
+  int flags, newval;
+  do
+    {
+      flags = THREAD_GETMEM (self, cancelhandling);
+      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
+					  flags & ~SETXID_BITMASK, flags);
+    }
+  while (flags != newval);
+
+  /* And release the futex.  */
+  self->setxid_futex = 1;
+  futex_wake (&self->setxid_futex, 1, FUTEX_PRIVATE);
+
+  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
+    futex_wake ((unsigned int *) &__xidcmd->cntr, 1, FUTEX_PRIVATE);
+}
+libc_hidden_def (__nptl_setxid_sighandler)
+
+static void
+setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
+{
+  int ch;
+
+  /* Wait until this thread is cloned.  */
+  if (t->setxid_futex == -1
+      && ! atomic_compare_and_exchange_bool_acq (&t->setxid_futex, -2, -1))
+    do
+      futex_wait_simple (&t->setxid_futex, -2, FUTEX_PRIVATE);
+    while (t->setxid_futex == -2);
+
+  /* Don't let the thread exit before the setxid handler runs.  */
+  t->setxid_futex = 0;
+
+  do
+    {
+      ch = t->cancelhandling;
+
+      /* If the thread is exiting right now, ignore it.  */
+      if ((ch & EXITING_BITMASK) != 0)
+        {
+          /* Release the futex if there is no other setxid in
+             progress.  */
+          if ((ch & SETXID_BITMASK) == 0)
+            {
+              t->setxid_futex = 1;
+              futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
+            }
+          return;
+        }
+    }
+  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
+                                               ch | SETXID_BITMASK, ch));
+}
+
+
+static void
+setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
+{
+  int ch;
+
+  do
+    {
+      ch = t->cancelhandling;
+      if ((ch & SETXID_BITMASK) == 0)
+        return;
+    }
+  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
+                                               ch & ~SETXID_BITMASK, ch));
+
+  /* Release the futex just in case.  */
+  t->setxid_futex = 1;
+  futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
+}
+
+
+static int
+setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
+{
+  if ((t->cancelhandling & SETXID_BITMASK) == 0)
+    return 0;
+
+  int val;
+  pid_t pid = __getpid ();
+  val = INTERNAL_SYSCALL_CALL (tgkill, pid, t->tid, SIGSETXID);
+
+  /* If this failed, it must have had not started yet or else exited.  */
+  if (!INTERNAL_SYSCALL_ERROR_P (val))
+    {
+      atomic_increment (&cmdp->cntr);
+      return 1;
+    }
+  else
+    return 0;
+}
+
+/* Check for consistency across set*id system call results.  The abort
+   should not happen as long as all privileges changes happen through
+   the glibc wrappers.  ERROR must be 0 (no error) or an errno
+   code.  */
+void
+attribute_hidden
+__nptl_setxid_error (struct xid_command *cmdp, int error)
+{
+  do
+    {
+      int olderror = cmdp->error;
+      if (olderror == error)
+        break;
+      if (olderror != -1)
+        {
+          /* Mismatch between current and previous results.  Save the
+             error value to memory so that is not clobbered by the
+             abort function and preserved in coredumps.  */
+          volatile int xid_err __attribute__((unused)) = error;
+          abort ();
+        }
+    }
+  while (atomic_compare_and_exchange_bool_acq (&cmdp->error, error, -1));
+}
+
+int
+attribute_hidden
+__nptl_setxid (struct xid_command *cmdp)
+{
+  int signalled;
+  int result;
+  lll_lock (GL (dl_stack_cache_lock), LLL_PRIVATE);
+
+  __xidcmd = cmdp;
+  cmdp->cntr = 0;
+  cmdp->error = -1;
+
+  struct pthread *self = THREAD_SELF;
+
+  /* Iterate over the list with system-allocated threads first.  */
+  list_t *runp;
+  list_for_each (runp, &GL (dl_stack_used))
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self)
+        continue;
+
+      setxid_mark_thread (cmdp, t);
+    }
+
+  /* Now the list with threads using user-allocated stacks.  */
+  list_for_each (runp, &GL (dl_stack_user))
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self)
+        continue;
+
+      setxid_mark_thread (cmdp, t);
+    }
+
+  /* Iterate until we don't succeed in signalling anyone.  That means
+     we have gotten all running threads, and their children will be
+     automatically correct once started.  */
+  do
+    {
+      signalled = 0;
+
+      list_for_each (runp, &GL (dl_stack_used))
+        {
+          struct pthread *t = list_entry (runp, struct pthread, list);
+          if (t == self)
+            continue;
+
+          signalled += setxid_signal_thread (cmdp, t);
+        }
+
+      list_for_each (runp, &GL (dl_stack_user))
+        {
+          struct pthread *t = list_entry (runp, struct pthread, list);
+          if (t == self)
+            continue;
+
+          signalled += setxid_signal_thread (cmdp, t);
+        }
+
+      int cur = cmdp->cntr;
+      while (cur != 0)
+        {
+          futex_wait_simple ((unsigned int *) &cmdp->cntr, cur,
+                             FUTEX_PRIVATE);
+          cur = cmdp->cntr;
+        }
+    }
+  while (signalled != 0);
+
+  /* Clean up flags, so that no thread blocks during exit waiting
+     for a signal which will never come.  */
+  list_for_each (runp, &GL (dl_stack_used))
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self)
+        continue;
+
+      setxid_unmark_thread (cmdp, t);
+    }
+
+  list_for_each (runp, &GL (dl_stack_user))
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self)
+        continue;
+
+      setxid_unmark_thread (cmdp, t);
+    }
+
+  /* This must be last, otherwise the current thread might not have
+     permissions to send SIGSETXID syscall to the other threads.  */
+  result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3,
+                                 cmdp->id[0], cmdp->id[1], cmdp->id[2]);
+  int error = 0;
+  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
+    {
+      error = INTERNAL_SYSCALL_ERRNO (result);
+      __set_errno (error);
+      result = -1;
+    }
+  __nptl_setxid_error (cmdp, error);
+
+  lll_unlock (GL (dl_stack_cache_lock), LLL_PRIVATE);
+  return result;
+}
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 786c566e81..9852906b3a 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -695,6 +695,8 @@ extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer
 extern void __nptl_deallocate_tsd (void);
 libc_hidden_proto (__nptl_deallocate_tsd)
 
+void __nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx);
+libc_hidden_proto (__nptl_setxid_sighandler)
 extern void __nptl_setxid_error (struct xid_command *cmdp, int error)
   attribute_hidden;
 extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
index 56c746a01c..d76b2cdecf 100644
--- a/sysdeps/nptl/pthread-functions.h
+++ b/sysdeps/nptl/pthread-functions.h
@@ -30,7 +30,6 @@ struct xid_command;
    the thread functions.  */
 struct pthread_functions
 {
-  int (*ptr__nptl_setxid) (struct xid_command *);
 };
 
 /* Variable in libc.so.  */
diff --git a/sysdeps/nptl/setxid.h b/sysdeps/nptl/setxid.h
index 57b665cb5b..8b49d11550 100644
--- a/sysdeps/nptl/setxid.h
+++ b/sysdeps/nptl/setxid.h
@@ -16,6 +16,7 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <nptl/pthreadP.h>
+#include <sys/single_threaded.h>
 #include <sysdep.h>
 
 #define __SETXID_1(cmd, arg1) \
@@ -25,30 +26,10 @@
 #define __SETXID_3(cmd, arg1, arg2, arg3) \
   __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3
 
-#ifdef SINGLE_THREAD
-# define INLINE_SETXID_SYSCALL(name, nr, args...) \
-  INLINE_SYSCALL (name, nr, args)
-#elif defined SHARED
-# define INLINE_SETXID_SYSCALL(name, nr, args...) \
+#define INLINE_SETXID_SYSCALL(name, nr, args...) \
   ({									\
     int __result;							\
-    if (__builtin_expect (__libc_pthread_functions_init, 0))		\
-      {									\
-	struct xid_command __cmd;					\
-	__cmd.syscall_no = __NR_##name;					\
-	__SETXID_##nr (__cmd, args);					\
-	__result = PTHFCT_CALL (ptr__nptl_setxid, (&__cmd));		\
-	}								\
-    else								\
-      __result = INLINE_SYSCALL (name, nr, args);			\
-    __result;								\
-   })
-#else
-# define INLINE_SETXID_SYSCALL(name, nr, args...) \
-  ({									\
-    extern __typeof (__nptl_setxid) __nptl_setxid __attribute__((weak));\
-    int __result;							\
-    if (__glibc_unlikely (__nptl_setxid	!= NULL))			      \
+    if (!__libc_single_threaded)					\
       {									\
 	struct xid_command __cmd;					\
 	__cmd.syscall_no = __NR_##name;					\
@@ -59,4 +40,3 @@
       __result = INLINE_SYSCALL (name, nr, args);			\
     __result;								\
    })
-#endif
diff --git a/sysdeps/unix/sysv/linux/internal-signals.h b/sysdeps/unix/sysv/linux/internal-signals.h
index 1535f5e530..1357b8f5f8 100644
--- a/sysdeps/unix/sysv/linux/internal-signals.h
+++ b/sysdeps/unix/sysv/linux/internal-signals.h
@@ -105,8 +105,4 @@ __libc_signal_restore_set (const sigset_t *set)
   INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, set, NULL,
 			 __NSIG_BYTES);
 }
-
-/* Used to communicate with signal handler.  */
-extern struct xid_command *__xidcmd attribute_hidden;
-
 #endif
-- 
2.29.2



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

* [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (35 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 36/37] nptl: Move setxid broadcast implementation " Florian Weimer
@ 2021-03-16 17:31 ` Florian Weimer
  2021-03-26 18:19   ` Adhemerval Zanella
  2021-03-18 22:06 ` [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
  2021-03-26 18:25 ` Adhemerval Zanella
  38 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-16 17:31 UTC (permalink / raw)
  To: libc-alpha

All previously forwarded functions are now implemented in libc.
---
 nptl/Makefile                    |  1 -
 nptl/forward.c                   | 31 --------------------
 nptl/libc_pthread_init.c         | 29 +-----------------
 nptl/nptl-init.c                 | 11 +------
 nptl/pthreadP.h                  |  7 ++---
 sysdeps/nptl/libc-lockP.h        | 28 ++++--------------
 sysdeps/nptl/pthread-functions.h | 50 --------------------------------
 7 files changed, 10 insertions(+), 147 deletions(-)
 delete mode 100644 nptl/forward.c
 delete mode 100644 sysdeps/nptl/pthread-functions.h

diff --git a/nptl/Makefile b/nptl/Makefile
index 1b5038485d..7423967cd2 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -38,7 +38,6 @@ routines = \
   elision-timed \
   elision-trylock \
   elision-unlock \
-  forward \
   futex-internal \
   libc-cancellation \
   libc-cleanup \
diff --git a/nptl/forward.c b/nptl/forward.c
deleted file mode 100644
index c819ab6f2a..0000000000
--- a/nptl/forward.c
+++ /dev/null
@@ -1,31 +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 <dlfcn.h>
-#include <pthreadP.h>
-#include <signal.h>
-#include <stdlib.h>
-
-#include <shlib-compat.h>
-#include <atomic.h>
-#include <safe-fatal.h>
-
-
-/* Pointers to the libc functions.  */
-struct pthread_functions __libc_pthread_functions attribute_hidden;
-int __libc_pthread_functions_init attribute_hidden;
diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c
index 85fceff930..c951332666 100644
--- a/nptl/libc_pthread_init.c
+++ b/nptl/libc_pthread_init.c
@@ -34,38 +34,11 @@ extern int __libc_multiple_threads attribute_hidden;
 
 int *
 #endif
-__libc_pthread_init (void (*reclaim) (void),
-		     const struct pthread_functions *functions)
+__libc_pthread_init (void (*reclaim) (void))
 {
   /* Called by a child after fork.  */
   __register_atfork (NULL, NULL, reclaim, NULL);
 
-#ifdef SHARED
-  /* Copy the function pointers into an array in libc.  This enables
-     access with just one memory reference but moreso, it prevents
-     hijacking the function pointers with just one pointer change.  We
-     "encrypt" the function pointers since we cannot write-protect the
-     array easily enough.  */
-  union ptrhack
-  {
-    struct pthread_functions pf;
-# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *))
-    void *parr[NPTRS];
-  } __attribute__ ((may_alias)) const *src;
-  union ptrhack *dest;
-
-  src = (const void *) functions;
-  dest = (void *) &__libc_pthread_functions;
-
-  for (size_t cnt = 0; cnt < NPTRS; ++cnt)
-    {
-      void *p = src->parr[cnt];
-      PTR_MANGLE (p);
-      dest->parr[cnt] = p;
-    }
-  __libc_pthread_functions_init = 1;
-#endif
-
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
   return &__libc_multiple_threads;
 #endif
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index f4a603b32d..061e3ff8d7 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -50,15 +50,6 @@ size_t __static_tls_align_m1;
 /* Version of the library, used in libthread_db to detect mismatches.  */
 static const char nptl_version[] __attribute_used__ = VERSION;
 
-#ifdef SHARED
-static const struct pthread_functions pthread_functions =
-  {
-  };
-# define ptr_pthread_functions &pthread_functions
-#else
-# define ptr_pthread_functions NULL
-#endif
-
 /* For asynchronous cancellation we use a signal.  This is the handler.  */
 static void
 sigcancel_handler (int sig, siginfo_t *si, void *ctx)
@@ -207,7 +198,7 @@ __pthread_initialize_minimal_internal (void)
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
   __libc_multiple_threads_ptr =
 #endif
-    __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions);
+    __libc_pthread_init (__reclaim_stacks);
 }
 strong_alias (__pthread_initialize_minimal_internal,
 	      __pthread_initialize_minimal)
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 9852906b3a..a1d34d5ff1 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -30,7 +30,6 @@
 #include <lowlevellock.h>
 #include <stackinfo.h>
 #include <internaltypes.h>
-#include <pthread-functions.h>
 #include <atomic.h>
 #include <kernel-features.h>
 #include <errno.h>
@@ -364,11 +363,9 @@ 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 (void (*reclaim) (void),
-				 const struct pthread_functions *functions);
+extern void __libc_pthread_init (void (*reclaim) (void));
 #else
-extern int *__libc_pthread_init (void (*reclaim) (void),
-				 const struct pthread_functions *functions);
+extern int *__libc_pthread_init (void (*reclaim) (void));
 
 /* Variable set to a nonzero value either if more than one thread runs or ran,
    or if a single-threaded process is trying to cancel itself.  See
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index 0dd2ea1147..e573689799 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -32,7 +32,6 @@
    ld.so might be used on old kernels with a different libc.so.  */
 #include <lowlevellock.h>
 #include <tls.h>
-#include <pthread-functions.h>
 
 #if IS_IN (libpthread)
 /* This gets us the declarations of the __pthread_* internal names,
@@ -100,27 +99,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
   (FUNC != NULL ? FUNC ARGS : ELSE)
 #endif
 
-/* Call thread functions through the function pointer table.  */
-#if defined SHARED && IS_IN (libc)
-# define PTFAVAIL(NAME) __libc_pthread_functions_init
-# define __libc_ptf_call(FUNC, ARGS, ELSE) \
-  (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
-# define __libc_ptf_call_always(FUNC, ARGS) \
-  PTHFCT_CALL (ptr_##FUNC, ARGS)
-#elif IS_IN (libpthread)
-# define PTFAVAIL(NAME) 1
-# define __libc_ptf_call(FUNC, ARGS, ELSE) \
-  FUNC ARGS
-# define __libc_ptf_call_always(FUNC, ARGS) \
-  FUNC ARGS
-#else
-# define PTFAVAIL(NAME) (NAME != NULL)
-# define __libc_ptf_call(FUNC, ARGS, ELSE) \
-  __libc_maybe_call (FUNC, ARGS, ELSE)
-# define __libc_ptf_call_always(FUNC, ARGS) \
-  FUNC ARGS
-#endif
-
+/* All previously forwarded functions are now called directly (either
+   via local call in libc, or through a __export), but __libc_ptf_call
+   is still used in generic code shared with Hurd.  */
+#define PTFAVAIL(NAME) 1
+#define __libc_ptf_call(FUNC, ARGS, ELSE) FUNC ARGS
+#define __libc_ptf_call_always(FUNC, ARGS) FUNC ARGS
 
 /* Initialize the named lock variable, leaving it in a consistent, unlocked
    state.  */
diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
deleted file mode 100644
index d76b2cdecf..0000000000
--- a/sysdeps/nptl/pthread-functions.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2003-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
-   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/>.  */
-
-#ifndef _PTHREAD_FUNCTIONS_H
-#define _PTHREAD_FUNCTIONS_H	1
-
-#include <pthread.h>
-#include <setjmp.h>
-#include <internaltypes.h>
-#include <sysdep.h>
-
-struct xid_command;
-
-/* Data type shared with libc.  The libc uses it to pass on calls to
-   the thread functions.  */
-struct pthread_functions
-{
-};
-
-/* Variable in libc.so.  */
-extern struct pthread_functions __libc_pthread_functions attribute_hidden;
-extern int __libc_pthread_functions_init attribute_hidden;
-
-#ifdef PTR_DEMANGLE
-# define PTHFCT_CALL(fct, params) \
-  ({ __typeof (__libc_pthread_functions.fct) __p;			      \
-     __p = __libc_pthread_functions.fct;				      \
-     PTR_DEMANGLE (__p);						      \
-     __p params; })
-#else
-# define PTHFCT_CALL(fct, params) \
-  __libc_pthread_functions.fct params
-#endif
-
-#endif	/* pthread-functions.h */
-- 
2.29.2


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

* Re: [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc
  2021-03-16 17:27 ` [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc Florian Weimer
@ 2021-03-17 11:36   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 11:36 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



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

LGTM, thanks.

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

> ---
>  NEWS                                          |  4 +++-
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 | 11 ++++++++--
>  nptl/pthread_mutex_consistent.c               | 22 ++++++++++++++++---
>  sysdeps/nptl/pthread.h                        | 10 +++++++--
>  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, 141 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..23bcd51d91 100644
> --- a/sysdeps/nptl/pthread.h
> +++ b/sysdeps/nptl/pthread.h
> @@ -809,8 +809,14 @@ 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));
> +#  ifdef __REDIRECT_NTH
> +extern int __REDIRECT_NTH (pthread_mutex_consistent_np, (pthread_mutex_t *),
> +			   pthread_mutex_consistent) __nonnull ((1))
> +  __attribute_deprecated_msg__ ("\
> +pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent");
> +#  else
> +#   define pthread_mutex_consistent_np pthread_mutex_consistent
> +#  endif
>  # endif
>  #endif
>  

Ok.

> 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
> 

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

* Re: [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread
  2021-03-16 17:27 ` [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
@ 2021-03-17 11:38   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 11:38 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:27, 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.

LGTM, thanks.

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

> ---
>  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] 99+ messages in thread

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-16 17:28 ` [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once " Florian Weimer
@ 2021-03-17 13:30   ` Adhemerval Zanella
  2021-03-17 13:37     ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 13:30 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
> And also the fork generation counter, __fork_generation.  This
> eliminates the need for __fork_generation_pointer.
> 
> 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.

LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.

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

> ---
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 |  6 ++++--
>  nptl/libc_pthread_init.c                      |  8 +------
>  nptl/nptl-init.c                              |  4 +---
>  nptl/pthreadP.h                               |  8 +++----
>  nptl/pthread_once.c                           | 21 +++++++++++++++----
>  sysdeps/nptl/fork.c                           |  3 +--
>  sysdeps/nptl/fork.h                           |  3 ---
>  sysdeps/nptl/libc-lockP.h                     | 13 ++----------
>  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, 158 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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 8fa0d178db..49133585e4 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,7 +85,9 @@ libc {
>    }
>    GLIBC_2.34 {
>      __pthread_cleanup_routine;
> +    __pthread_once;

Why do we need the __pthread_once for 2.34 as well?

>      pthread_mutex_consistent;
> +    pthread_once;
>    }
>    GLIBC_PRIVATE {
>      __futex_abstimed_wait64;
> @@ -141,7 +145,6 @@ libpthread {
>      __pthread_mutexattr_destroy;
>      __pthread_mutexattr_init;
>      __pthread_mutexattr_settype;
> -    __pthread_once;
>      __pthread_setspecific;
>      __read;
>      __send;
> @@ -184,7 +187,6 @@ libpthread {
>      pthread_mutexattr_getkind_np;
>      pthread_mutexattr_init;
>      pthread_mutexattr_setkind_np;
> -    pthread_once;
>      pthread_setcancelstate;
>      pthread_setcanceltype;
>      pthread_setspecific;

Ok.

> 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);
>  

Ok.

> 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 ();

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 8f3d2cc8c9..9f2990217c 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,

Ok.

> @@ -519,6 +517,7 @@ extern void *__pthread_getspecific (pthread_key_t key);
>  extern int __pthread_setspecific (pthread_key_t key, const void *value);
>  extern int __pthread_once (pthread_once_t *once_control,
>  			   void (*init_routine) (void));
> +libc_hidden_proto (__pthread_once)
>  extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
>  			     void (*child) (void));
>  extern pthread_t __pthread_self (void);
> @@ -551,7 +550,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)

Ok.

> diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
> index 7645da222a..7335150485 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))
> +__pthread_once_1 (pthread_once_t *once_control, void (*init_routine) (void))
>  {
>    /* Fast path.  See __pthread_once_slow.  */
>    int val;
> @@ -142,5 +144,16 @@ __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)
> +versioned_symbol (libc, __pthread_once_1, __pthread_once, GLIBC_2_34);
> +libc_hidden_ver (__pthread_once_1, __pthread_once)
> +
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_once_1, __pthread_once_2)
> +strong_alias (__pthread_once_1, __pthread_once_3)
> +strong_alias (__pthread_once_1, __pthread_once_4)
> +
> +versioned_symbol (libc, __pthread_once_2, pthread_once, GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libc, __pthread_once_3, __pthread_once, GLIBC_2_0);
> +compat_symbol (libc, __pthread_once_4, pthread_once, GLIBC_2_0);
> +#endif

Ok.

> 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

Ok.

> 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;

Ok.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 1a861b0d3f..9550bc37e4 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -238,15 +238,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  
>  /* 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)
> +  __pthread_once (&(ONCE_CONTROL), INIT_FUNCTION)
>  
>  /* Get once control variable.  */
>  #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)

Ok.

> @@ -342,6 +334,7 @@ extern void *__pthread_getspecific (pthread_key_t __key);
>  
>  extern int __pthread_once (pthread_once_t *__once_control,
>  			   void (*__init_routine) (void));
> +libc_hidden_proto (__pthread_once)
>  
>  extern int __pthread_atfork (void (*__prepare) (void),
>  			     void (*__parent) (void),
> @@ -372,7 +365,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 +386,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

Ok.

> 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 *);

Ok.

> 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
> 

Ok.

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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 13:30   ` Adhemerval Zanella
@ 2021-03-17 13:37     ` Adhemerval Zanella
  2021-03-17 14:45       ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 13:37 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 17/03/2021 10:30, Adhemerval Zanella wrote:
> 
> 
> On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
>> And also the fork generation counter, __fork_generation.  This
>> eliminates the need for __fork_generation_pointer.
>>
>> 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.
> 
> LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.

Ok, it is called by call_once.  I wonder if we could make a GLIBC_PRIVATE
instead so we can remove it once we moce call_once to libc.

> 
> Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
> 
>> ---
>>  nptl/Makefile                                 |  2 +-
>>  nptl/Versions                                 |  6 ++++--
>>  nptl/libc_pthread_init.c                      |  8 +------
>>  nptl/nptl-init.c                              |  4 +---
>>  nptl/pthreadP.h                               |  8 +++----
>>  nptl/pthread_once.c                           | 21 +++++++++++++++----
>>  sysdeps/nptl/fork.c                           |  3 +--
>>  sysdeps/nptl/fork.h                           |  3 ---
>>  sysdeps/nptl/libc-lockP.h                     | 13 ++----------
>>  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, 158 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 \
> 
> Ok.
> 
>> diff --git a/nptl/Versions b/nptl/Versions
>> index 8fa0d178db..49133585e4 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,7 +85,9 @@ libc {
>>    }
>>    GLIBC_2.34 {
>>      __pthread_cleanup_routine;
>> +    __pthread_once;
> 
> Why do we need the __pthread_once for 2.34 as well?
> 
>>      pthread_mutex_consistent;
>> +    pthread_once;
>>    }
>>    GLIBC_PRIVATE {
>>      __futex_abstimed_wait64;
>> @@ -141,7 +145,6 @@ libpthread {
>>      __pthread_mutexattr_destroy;
>>      __pthread_mutexattr_init;
>>      __pthread_mutexattr_settype;
>> -    __pthread_once;
>>      __pthread_setspecific;
>>      __read;
>>      __send;
>> @@ -184,7 +187,6 @@ libpthread {
>>      pthread_mutexattr_getkind_np;
>>      pthread_mutexattr_init;
>>      pthread_mutexattr_setkind_np;
>> -    pthread_once;
>>      pthread_setcancelstate;
>>      pthread_setcanceltype;
>>      pthread_setspecific;
> 
> Ok.
> 
>> 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);
>>  
> 
> Ok.
> 
>> 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 ();
> 
> Ok.
> 
>> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
>> index 8f3d2cc8c9..9f2990217c 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,
> 
> Ok.
> 
>> @@ -519,6 +517,7 @@ extern void *__pthread_getspecific (pthread_key_t key);
>>  extern int __pthread_setspecific (pthread_key_t key, const void *value);
>>  extern int __pthread_once (pthread_once_t *once_control,
>>  			   void (*init_routine) (void));
>> +libc_hidden_proto (__pthread_once)
>>  extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
>>  			     void (*child) (void));
>>  extern pthread_t __pthread_self (void);
>> @@ -551,7 +550,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)
> 
> Ok.
> 
>> diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
>> index 7645da222a..7335150485 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))
>> +__pthread_once_1 (pthread_once_t *once_control, void (*init_routine) (void))
>>  {
>>    /* Fast path.  See __pthread_once_slow.  */
>>    int val;
>> @@ -142,5 +144,16 @@ __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)
>> +versioned_symbol (libc, __pthread_once_1, __pthread_once, GLIBC_2_34);
>> +libc_hidden_ver (__pthread_once_1, __pthread_once)
>> +
>> +/* Several aliases for setting different symbol versions.  */
>> +strong_alias (__pthread_once_1, __pthread_once_2)
>> +strong_alias (__pthread_once_1, __pthread_once_3)
>> +strong_alias (__pthread_once_1, __pthread_once_4)
>> +
>> +versioned_symbol (libc, __pthread_once_2, pthread_once, GLIBC_2_34);
>> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
>> +compat_symbol (libc, __pthread_once_3, __pthread_once, GLIBC_2_0);
>> +compat_symbol (libc, __pthread_once_4, pthread_once, GLIBC_2_0);
>> +#endif
> 
> Ok.
> 
>> 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
> 
> Ok.
> 
>> 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;
> 
> Ok.
> 
>> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
>> index 1a861b0d3f..9550bc37e4 100644
>> --- a/sysdeps/nptl/libc-lockP.h
>> +++ b/sysdeps/nptl/libc-lockP.h
>> @@ -238,15 +238,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>>  
>>  /* 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)
>> +  __pthread_once (&(ONCE_CONTROL), INIT_FUNCTION)
>>  
>>  /* Get once control variable.  */
>>  #define __libc_once_get(ONCE_CONTROL)	((ONCE_CONTROL) != PTHREAD_ONCE_INIT)
> 
> Ok.
> 
>> @@ -342,6 +334,7 @@ extern void *__pthread_getspecific (pthread_key_t __key);
>>  
>>  extern int __pthread_once (pthread_once_t *__once_control,
>>  			   void (*__init_routine) (void));
>> +libc_hidden_proto (__pthread_once)
>>  
>>  extern int __pthread_atfork (void (*__prepare) (void),
>>  			     void (*__parent) (void),
>> @@ -372,7 +365,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 +386,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
> 
> Ok.
> 
>> 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 *);
> 
> Ok.
> 
>> 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
>>
> 
> Ok.
> 

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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 13:37     ` Adhemerval Zanella
@ 2021-03-17 14:45       ` Florian Weimer
  2021-03-17 16:39         ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-17 14:45 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 17/03/2021 10:30, Adhemerval Zanella wrote:
>> 
>> 
>> On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
>>> And also the fork generation counter, __fork_generation.  This
>>> eliminates the need for __fork_generation_pointer.
>>>
>>> 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.
>> 
>> LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.
>
> Ok, it is called by call_once.  I wonder if we could make a GLIBC_PRIVATE
> instead so we can remove it once we moce call_once to libc.

nss_ldap-253-16.el4 and nss_ldap-253-52.el5_11.2 use it, but those are
doubly obslete (old releases, nss_ldapd is a secure replacement of
nss_ldap).

We could turn __pthread_once into a compat symbol, but maybe we should
handle this in consistent fashion for all libpthread __ symbols that do
not have apparent external users?

From a tactical perspective, maybe we should postpone this conversion to
some pointer later in this release cycle.  We would have to change the
symbol name in glibc because it wouldn't make sense to have a non-compat
GLIBC_PRIVATE symbol and a compat symbol at the same version (users
would just link to the GLIBC_PRIVATE symbol).  If everything is in libc,
we can simply use libc_hidden_proto, without renaming internal use.

Thanks,
Florian


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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 14:45       ` Florian Weimer
@ 2021-03-17 16:39         ` Adhemerval Zanella
  2021-03-17 16:56           ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 16:39 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 17/03/2021 11:45, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 17/03/2021 10:30, Adhemerval Zanella wrote:
>>>
>>>
>>> On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
>>>> And also the fork generation counter, __fork_generation.  This
>>>> eliminates the need for __fork_generation_pointer.
>>>>
>>>> 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.
>>>
>>> LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.
>>
>> Ok, it is called by call_once.  I wonder if we could make a GLIBC_PRIVATE
>> instead so we can remove it once we moce call_once to libc.
> 
> nss_ldap-253-16.el4 and nss_ldap-253-52.el5_11.2 use it, but those are
> doubly obslete (old releases, nss_ldapd is a secure replacement of
> nss_ldap).

But those will bind to compat symbols, won't they? 

> 
> We could turn __pthread_once into a compat symbol, but maybe we should
> handle this in consistent fashion for all libpthread __ symbols that do
> not have apparent external users?

But right now the requirement is only for internal glibc usage over 
libraries, by putting on GLIBC_PRIVATE it prevents the previous issues
where we export such internal symbols by accident (and it then force
us to keep providing them indefinitely).

> 
> From a tactical perspective, maybe we should postpone this conversion to
> some pointer later in this release cycle.  We would have to change the
> symbol name in glibc because it wouldn't make sense to have a non-compat
> GLIBC_PRIVATE symbol and a compat symbol at the same version (users
> would just link to the GLIBC_PRIVATE symbol).  If everything is in libc,
> we can simply use libc_hidden_proto, without renaming internal use.

It might be a better approach indeed, or maybe move call_once first and
then pthread_once.

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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 16:39         ` Adhemerval Zanella
@ 2021-03-17 16:56           ` Florian Weimer
  2021-03-17 17:22             ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-17 16:56 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 17/03/2021 11:45, Florian Weimer wrote:
>> * Adhemerval Zanella:
>> 
>>> On 17/03/2021 10:30, Adhemerval Zanella wrote:
>>>>
>>>>
>>>> On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
>>>>> And also the fork generation counter, __fork_generation.  This
>>>>> eliminates the need for __fork_generation_pointer.
>>>>>
>>>>> 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.
>>>>
>>>> LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.
>>>
>>> Ok, it is called by call_once.  I wonder if we could make a GLIBC_PRIVATE
>>> instead so we can remove it once we moce call_once to libc.
>> 
>> nss_ldap-253-16.el4 and nss_ldap-253-52.el5_11.2 use it, but those are
>> doubly obslete (old releases, nss_ldapd is a secure replacement of
>> nss_ldap).
>
> But those will bind to compat symbols, won't they?

Yes, they would use compat symbols, but might not be re-linkable in a
new build.

>> We could turn __pthread_once into a compat symbol, but maybe we should
>> handle this in consistent fashion for all libpthread __ symbols that do
>> not have apparent external users?
>
> But right now the requirement is only for internal glibc usage over 
> libraries, by putting on GLIBC_PRIVATE it prevents the previous issues
> where we export such internal symbols by accident (and it then force
> us to keep providing them indefinitely).

nss_ldap would silently link to __pthread_once@@GLIBC_PRIVATE instead
after a rebuild.  That's not a step forward, I think.

>> From a tactical perspective, maybe we should postpone this conversion to
>> some pointer later in this release cycle.  We would have to change the
>> symbol name in glibc because it wouldn't make sense to have a non-compat
>> GLIBC_PRIVATE symbol and a compat symbol at the same version (users
>> would just link to the GLIBC_PRIVATE symbol).  If everything is in libc,
>> we can simply use libc_hidden_proto, without renaming internal use.
>
> It might be a better approach indeed, or maybe move call_once first and
> then pthread_once.

The same issue arises for many of the other __pthread_* symbols that
historically used public symbol versions.

Technically, to achieve linknamespace cleanliness, a C++ implementation
might have to use __ names, too.  libstdc++ does not do this for pthread
symbols right now, though, except for __pthread_key_create for some
strange reason.  I spoke to Jonathan about this, and it's presently not
a major concern.  So I expect most of these symbols to be truly unused
today, and we could indeed turn them into compat symbols.  But as I
said, having GLIBC_PRIVATE symbols at the same names would be
counterproductive.

Thanks,
Florian


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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 16:56           ` Florian Weimer
@ 2021-03-17 17:22             ` Adhemerval Zanella
  2021-03-17 17:43               ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 17:22 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 17/03/2021 13:56, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 17/03/2021 11:45, Florian Weimer wrote:
>>> * Adhemerval Zanella:
>>>
>>>> On 17/03/2021 10:30, Adhemerval Zanella wrote:
>>>>>
>>>>>
>>>>> On 16/03/2021 14:28, Florian Weimer via Libc-alpha wrote:
>>>>>> And also the fork generation counter, __fork_generation.  This
>>>>>> eliminates the need for __fork_generation_pointer.
>>>>>>
>>>>>> 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.
>>>>>
>>>>> LGTM, I just don't see why we need a GLIBC_2.34 __pthread_once.
>>>>
>>>> Ok, it is called by call_once.  I wonder if we could make a GLIBC_PRIVATE
>>>> instead so we can remove it once we moce call_once to libc.
>>>
>>> nss_ldap-253-16.el4 and nss_ldap-253-52.el5_11.2 use it, but those are
>>> doubly obslete (old releases, nss_ldapd is a secure replacement of
>>> nss_ldap).
>>
>> But those will bind to compat symbols, won't they?
> 
> Yes, they would use compat symbols, but might not be re-linkable in a
> new build.
> 
>>> We could turn __pthread_once into a compat symbol, but maybe we should
>>> handle this in consistent fashion for all libpthread __ symbols that do
>>> not have apparent external users?
>>
>> But right now the requirement is only for internal glibc usage over 
>> libraries, by putting on GLIBC_PRIVATE it prevents the previous issues
>> where we export such internal symbols by accident (and it then force
>> us to keep providing them indefinitely).
> 
> nss_ldap would silently link to __pthread_once@@GLIBC_PRIVATE instead
> after a rebuild.  That's not a step forward, I think.

From nss_ldap from where exactly the __pthread_once will be originated?
I would expect that building it against 2.34 headers to reference 
pthread_once instead. 

> 
>>> From a tactical perspective, maybe we should postpone this conversion to
>>> some pointer later in this release cycle.  We would have to change the
>>> symbol name in glibc because it wouldn't make sense to have a non-compat
>>> GLIBC_PRIVATE symbol and a compat symbol at the same version (users
>>> would just link to the GLIBC_PRIVATE symbol).  If everything is in libc,
>>> we can simply use libc_hidden_proto, without renaming internal use.
>>
>> It might be a better approach indeed, or maybe move call_once first and
>> then pthread_once.
> 
> The same issue arises for many of the other __pthread_* symbols that
> historically used public symbol versions.
> 
> Technically, to achieve linknamespace cleanliness, a C++ implementation
> might have to use __ names, too.  libstdc++ does not do this for pthread
> symbols right now, though, except for __pthread_key_create for some
> strange reason.  I spoke to Jonathan about this, and it's presently not
> a major concern.  So I expect most of these symbols to be truly unused
> today, and we could indeed turn them into compat symbols.  But as I
> said, having GLIBC_PRIVATE symbols at the same names would be
> counterproductive.

Right, does call pthread_once from call_once incur in a linknamespace
issue?


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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 17:22             ` Adhemerval Zanella
@ 2021-03-17 17:43               ` Florian Weimer
  2021-03-17 19:09                 ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-17 17:43 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> nss_ldap would silently link to __pthread_once@@GLIBC_PRIVATE instead
>> after a rebuild.  That's not a step forward, I think.
>
> From nss_ldap from where exactly the __pthread_once will be originated?
> I would expect that building it against 2.34 headers to reference 
> pthread_once instead.

It's related to the in-process nature of nss_ldap (without the d),
LinuxThreads, and pthread_atfork not available in libc at the time:

  /*
   * This bogosity is necessary because Linux uses different
   * PIDs for different threads (like IRIX, which we don't
   * support). We can tell whether we are linked against
   * libpthreads by whether __pthread_once is NULL or
   * not. If it is NULL, then we're not linked with the
   * threading library, and we need to compare the current
   * process ID against the saved one to figure out
   * whether we've forked. 
   *
   * --
   *  __pthread_once does not imply __pthread_atfork being non-NULL!
   *  <…@redhat.com>
   * --
   * 
   * Once we know whether we have forked or not, 
   * courtesy of pthread_atfork() or us checking
   * ourselves, we can close the socket to the LDAP
   * server to avoid leaking a socket, and reopen
   * another connection. Under no circumstances do we
   * wish to use the same connection, or to send an
   * unbind PDU over the parents connection, as that
   * will wreak all sorts of havoc or inefficiencies,
   * respectively.
   */

Of course this is all somewhat questionable, but at least there is one
historic user of that symbol.

I think we should turn this into a compat symbol once we do not need the
internal reference (or call it by a different name instead).

> Right, does call pthread_once from call_once incur in a linknamespace
> issue?

Yes, call_once is ISO C, but pthread_once is not a reserved name in
ISO C.

Thanks,
Florian


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

* Re: [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once into libc
  2021-03-17 17:43               ` Florian Weimer
@ 2021-03-17 19:09                 ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 19:09 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 17/03/2021 14:43, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> nss_ldap would silently link to __pthread_once@@GLIBC_PRIVATE instead
>>> after a rebuild.  That's not a step forward, I think.
>>
>> From nss_ldap from where exactly the __pthread_once will be originated?
>> I would expect that building it against 2.34 headers to reference 
>> pthread_once instead.
> 
> It's related to the in-process nature of nss_ldap (without the d),
> LinuxThreads, and pthread_atfork not available in libc at the time:
> 
>   /*
>    * This bogosity is necessary because Linux uses different
>    * PIDs for different threads (like IRIX, which we don't
>    * support). We can tell whether we are linked against
>    * libpthreads by whether __pthread_once is NULL or
>    * not. If it is NULL, then we're not linked with the
>    * threading library, and we need to compare the current
>    * process ID against the saved one to figure out
>    * whether we've forked. 
>    *
>    * --
>    *  __pthread_once does not imply __pthread_atfork being non-NULL!
>    *  <…@redhat.com>
>    * --
>    * 
>    * Once we know whether we have forked or not, 
>    * courtesy of pthread_atfork() or us checking
>    * ourselves, we can close the socket to the LDAP
>    * server to avoid leaking a socket, and reopen
>    * another connection. Under no circumstances do we
>    * wish to use the same connection, or to send an
>    * unbind PDU over the parents connection, as that
>    * will wreak all sorts of havoc or inefficiencies,
>    * respectively.
>    */
> 
> Of course this is all somewhat questionable, but at least there is one
> historic user of that symbol.

Sigh... ok.

> 
> I think we should turn this into a compat symbol once we do not need the
> internal reference (or call it by a different name instead).

Agreed.

> 
>> Right, does call pthread_once from call_once incur in a linknamespace
>> issue?
> 
> Yes, call_once is ISO C, but pthread_once is not a reserved name in
> ISO C.

Fair enough, the patch looks ok then.

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

* Re: [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-16 17:29 ` [PATCH v3 09/37] nptl: Move __pthread_unwind_next " Florian Weimer
@ 2021-03-17 19:42   ` Adhemerval Zanella
  2021-03-17 19:54     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 19:42 UTC (permalink / raw)
  To: libc-alpha



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> 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.

From where exactly these come from? The *assynccancel should not be
generated for rtld-* objects.

> 
> 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.

LGTM, thanks.

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

> ---
>  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 3b8e13e066..936d4cf276 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -519,6 +519,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)

Ok.

> 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

Ok.

> @@ -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

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 49133585e4..8f1cd3f7c4 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;
>    }
> @@ -118,6 +119,7 @@ libc {
>      __pthread_cond_init; # Used by the C11 threads.
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
> +    __pthread_unwind;
>    }
>  }
>  
> @@ -323,7 +325,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;
> @@ -412,6 +413,5 @@ libpthread {
>      __pthread_clock_settime;
>      __pthread_get_minstack;
>      __pthread_initialize_minimal;
> -    __pthread_unwind;
>    }
>  }

Ok.

> 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 ())

Ok.

> 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

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 9f2990217c..f78bf03a52 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

Ok.

> 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");
> +  }

Maybe add a inline function for this since it is used on multiple places?

>  #endif
>    int result = 0;
>    int oldval;

Ok.

> 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 ();

Ok.

> 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

Ok.

> 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;
> -  }
>  }

Ok.

> 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

Ok.

> 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);
> -}

Ok.

> 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>

Ok.

> 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);
> +}

Ok.

> 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);
>  }

Ok.

> 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 *);

Ok.

> 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);
> -}

Ok.

> 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)

Ok.

> 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
> 

Ok.

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

* Re: [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-17 19:42   ` Adhemerval Zanella
@ 2021-03-17 19:54     ` Florian Weimer
  2021-03-17 20:16       ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-17 19:54 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
>> 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.
>
> From where exactly these come from? The *assynccancel should not be
> generated for rtld-* objects.

I think what happens is this: The libc.so objects that are used as a
starting point have them, so the reducer tries to link in those symbols,
and that fails with symbol conflicts.

>> 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");
>> +  }
>
> Maybe add a inline function for this since it is used on multiple places?

The error message is slightly different because the function name is
different.  __libc_fatal doesn't do format processing, so it has to be
one literal.  So there isn't that much commonality.

Thanks for the review.

Florian


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

* Re: [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-17 19:54     ` Florian Weimer
@ 2021-03-17 20:16       ` Adhemerval Zanella
  2021-03-17 20:33         ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 20:16 UTC (permalink / raw)
  To: Florian Weimer, Adhemerval Zanella via Libc-alpha



On 17/03/2021 16:54, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
> 
>> On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
>>> 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.
>>
>> From where exactly these come from? The *assynccancel should not be
>> generated for rtld-* objects.
> 
> I think what happens is this: The libc.so objects that are used as a
> starting point have them, so the reducer tries to link in those symbols,
> and that fails with symbol conflicts.

Right, but why doesn't it happen with other symbols that might be
pulled as well? It not a blocker, but I am trying to understand why
we are seeing this behavior with this change.

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

* Re: [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-17 20:16       ` Adhemerval Zanella
@ 2021-03-17 20:33         ` Florian Weimer
  2021-03-17 20:44           ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-17 20:33 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella:

> On 17/03/2021 16:54, Florian Weimer wrote:
>> * Adhemerval Zanella via Libc-alpha:
>> 
>>> On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
>>>> 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.
>>>
>>> From where exactly these come from? The *assynccancel should not be
>>> generated for rtld-* objects.
>> 
>> I think what happens is this: The libc.so objects that are used as a
>> starting point have them, so the reducer tries to link in those symbols,
>> and that fails with symbol conflicts.
>
> Right, but why doesn't it happen with other symbols that might be
> pulled as well? It not a blocker, but I am trying to understand why
> we are seeing this behavior with this change.

Ah, the explanation is quite trivial: We used to have a forwarder for
__pthread_unwind, and that acted as a firewall for the rtld symbol set
discovery.  Now the forwarder is gone, so the implementation of
__pthread_unwind starts to matter.

Maybe I should stub out __pthread_unwind instead?  But doing it for the
cancellation feels more natural.

Thanks,
Florian


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

* Re: [PATCH v3 09/37] nptl: Move __pthread_unwind_next into libc
  2021-03-17 20:33         ` Florian Weimer
@ 2021-03-17 20:44           ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 20:44 UTC (permalink / raw)
  To: Florian Weimer; +Cc: Adhemerval Zanella via Libc-alpha



On 17/03/2021 17:33, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 17/03/2021 16:54, Florian Weimer wrote:
>>> * Adhemerval Zanella via Libc-alpha:
>>>
>>>> On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
>>>>> 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.
>>>>
>>>> From where exactly these come from? The *assynccancel should not be
>>>> generated for rtld-* objects.
>>>
>>> I think what happens is this: The libc.so objects that are used as a
>>> starting point have them, so the reducer tries to link in those symbols,
>>> and that fails with symbol conflicts.
>>
>> Right, but why doesn't it happen with other symbols that might be
>> pulled as well? It not a blocker, but I am trying to understand why
>> we are seeing this behavior with this change.
> 
> Ah, the explanation is quite trivial: We used to have a forwarder for
> __pthread_unwind, and that acted as a firewall for the rtld symbol set
> discovery.  Now the forwarder is gone, so the implementation of
> __pthread_unwind starts to matter.
> 
> Maybe I should stub out __pthread_unwind instead?  But doing it for the
> cancellation feels more natural.

The cancellation stub are fine, the long term goal is to remove them
anyway.

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

* Re: [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl
  2021-03-16 17:29 ` [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl Florian Weimer
@ 2021-03-17 20:45   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-17 20:45 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> This code depends on whether glibc has unwinding support for
> a particular port.

LGTM.

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

> ---
>  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

Ok.

> 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));
> +}

Ok.

> 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);
> +}
> 

Ok.

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

* Re: [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc
  2021-03-16 17:29 ` [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
@ 2021-03-18 12:42   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:42 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer

LGTM with just a nit with a spurious change.

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

On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> ---
>  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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 8f1cd3f7c4..968c4fba35 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -107,6 +107,7 @@ libc {
>      __lll_lock_wait_private;
>      __lll_trylock_elision;
>      __lll_unlock_elision;
> +    __nptl_nthreads;
>      __pthread_attr_copy;
>      __pthread_attr_destroy;
>      __pthread_attr_init;

Ok.

> 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

Spurious line removal.

> 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

Ok.

> 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)

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index f78bf03a52..b136aeae4d 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.  */

Ok.

> 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"
>  

Ok.

> 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)
>  

Ok.

> 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 ();
>      }

Ok.

> 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 *);
> 

Ok.

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

* Re: [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE
  2021-03-16 17:29 ` [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
@ 2021-03-18 12:43   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:43 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer

LGTM, thanks.

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

On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> 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)
> 

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

* Re: [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc
  2021-03-16 17:29 ` [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc Florian Weimer
@ 2021-03-18 12:44   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:44 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> This prepares moving pthread_exit, and later the pthread_key_create
> infrastructure.

LGTM, thanks.

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

> ---
>  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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 968c4fba35..13198d1e89 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -120,6 +120,7 @@ libc {
>      __pthread_cond_init; # Used by the C11 threads.
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
> +    __pthread_keys;
>      __pthread_unwind;
>    }
>  }

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index b136aeae4d..d28610150c 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;

Ok.

> 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)

Ok.

> 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)

Ok.

> 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)
> 

Ok.

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

* Re: [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd into libc
  2021-03-16 17:29 ` [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd " Florian Weimer
@ 2021-03-18 12:46   ` Adhemerval Zanella
  2021-03-18 17:16     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:46 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> This prepares moving pthread_exit, and later the pthread_key_create
> infrastructure.

LGTM.

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

> ---
>  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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 13198d1e89..72909b961c 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -107,6 +107,7 @@ libc {
>      __lll_lock_wait_private;
>      __lll_trylock_elision;
>      __lll_unlock_elision;
> +    __nptl_deallocate_tsd;
>      __nptl_nthreads;
>      __pthread_attr_copy;
>      __pthread_attr_destroy;

Ok.

> 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
>    };

Ok.

> 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.

I think this line is too long.

> +   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)

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index d28610150c..4f814287ae 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -680,7 +680,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;

Ok.

> 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

Ok.

> 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.  */

Ok.

> 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 *);
>  };
> 

Ok.

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

* Re: [PATCH v3 15/37] nptl: Move pthread_exit into libc
  2021-03-16 17:29 ` [PATCH v3 15/37] nptl: Move pthread_exit " Florian Weimer
@ 2021-03-18 12:49   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:49 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> 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.

LGTM.

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

> ---
>  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
>  

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 72909b961c..f8178409dd 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -119,6 +119,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;
> @@ -176,7 +177,6 @@ libpthread {
>      pthread_cond_wait;
>      pthread_create;
>      pthread_detach;
> -    pthread_exit;
>      pthread_getspecific;
>      pthread_join;
>      pthread_key_create;

Ok.

> 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,

Ok.

> 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,

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 4f814287ae..7d88754e67 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -529,6 +529,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;

Ok.

> 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)

Ok.

> 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"

Ok.

> 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

Add _Noreturn maybe?

> +do_test (void)
> +{
> +  pthread_exit (NULL);
> +  return 1;                     /* Not reached.  */
> +}
> +
> +#include <support/test-driver.c>

OK.

> 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 *);

Ok.

> 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


Ok.

> 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
> 

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

* Re: [PATCH v3 16/37] nptl: Move pthread_setcancelstate into libc
  2021-03-16 17:29 ` [PATCH v3 16/37] nptl: Move pthread_setcancelstate " Florian Weimer
@ 2021-03-18 12:52   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:52 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> No new symbol version is required because there was a forwarder.
> 
> The symbol has been moved using scripts/move-symbol-to-libc.py.

LGTM.

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

> ---
>  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)

Ok.

> 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 ();

Ok.

> @@ -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 ();

Ok.

> @@ -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
>  }
>  

Ok.

> 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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index f8178409dd..32e7acfcae 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -123,6 +123,7 @@ libc {
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
>      __pthread_keys;
> +    __pthread_setcancelstate;
>      __pthread_unwind;
>    }
>  }
> @@ -192,7 +193,6 @@ libpthread {
>      pthread_mutexattr_getkind_np;
>      pthread_mutexattr_init;
>      pthread_mutexattr_setkind_np;
> -    pthread_setcancelstate;
>      pthread_setcanceltype;
>      pthread_setspecific;
>      pthread_sigmask;

Ok.

> 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)

Ok.

> 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,

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 7d88754e67..9f07aa718b 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);
> @@ -554,7 +553,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)

Ok.

> 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)

Ok.

> 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);
>  

Ok.

> @@ -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;
>  }

Ok.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 9550bc37e4..df62ce0e61 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -341,7 +341,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.  */
> @@ -367,7 +367,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
> @@ -388,7 +387,6 @@ weak_extern (__pthread_setcancelstate)
>  #  pragma weak __pthread_getspecific
>  #  pragma weak __pthread_initialize
>  #  pragma weak __pthread_atfork
> -#  pragma weak __pthread_setcancelstate
>  # endif
>  #endif
>  

Ok.

> 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 *);

Ok.

> 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)

Ok.

> 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)

Ok.

> 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;
>  }

Ok.

> 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
> 

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

* Re: [PATCH v3 17/37] nptl: Move pthread_setcanceltype into libc
  2021-03-16 17:29 ` [PATCH v3 17/37] nptl: Move pthread_setcanceltype " Florian Weimer
@ 2021-03-18 12:53   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:53 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> No new symbol version is required because there was a forwarder.
> 
> The symbol has been moved using scripts/move-symbol-to-libc.py.

LGTM.

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

> ---
>  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 \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 32e7acfcae..b619df41fb 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -193,7 +193,6 @@ libpthread {
>      pthread_mutexattr_getkind_np;
>      pthread_mutexattr_init;
>      pthread_mutexattr_setkind_np;
> -    pthread_setcanceltype;
>      pthread_setspecific;
>      pthread_sigmask;
>      pthread_testcancel;

Ok.

> 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)

Ok.

> 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,

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 9f07aa718b..4b486b3577 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -531,6 +531,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);

Ok.

> 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)

Ok.

> 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 *);

Ok.

> 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
> 

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

* Re: [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork
  2021-03-16 17:29 ` [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
@ 2021-03-18 12:54   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 12:54 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:29, Florian Weimer via Libc-alpha wrote:
> This removes one of the pthread forwarder functions.

LGTM.

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

> ---
>  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)

Ok.

> 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)

Ok.

> 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.  */
> 

Ok.

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

* Re: [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd into libc
  2021-03-18 12:46   ` Adhemerval Zanella
@ 2021-03-18 17:16     ` Florian Weimer
  2021-03-18 17:54       ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-18 17:16 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> 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.
>
> I think this line is too long.

I count 78 characters, so it should be fine?

Thanks,
Florian


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

* Re: [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd into libc
  2021-03-18 17:16     ` Florian Weimer
@ 2021-03-18 17:54       ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-18 17:54 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 18/03/2021 14:16, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> 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.
>>
>> I think this line is too long.
> 
> I count 78 characters, so it should be fine?

Ack.



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

* Re: [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (36 preceding siblings ...)
  2021-03-16 17:31 ` [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface Florian Weimer
@ 2021-03-18 22:06 ` Florian Weimer
  2021-03-26 18:25 ` Adhemerval Zanella
  38 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-18 22:06 UTC (permalink / raw)
  To: Florian Weimer via Libc-alpha

I've pushed a rebase to fw/libpthread-20180318b.  Apart from abilist
merges (automatically resolved) and various nptl/Versions and
nptl/Makefile conflicts (manually resolved), the main difference is
this:

diff --git a/nptl/pthread_exit.c b/nptl/pthread_exit.c
index 1a93f371a9..6abf66463e 100644
--- a/nptl/pthread_exit.c
+++ b/nptl/pthread_exit.c
@@ -25,16 +25,22 @@
 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 ();
 }
 libc_hidden_def (__pthread_exit)
 weak_alias (__pthread_exit, pthread_exit)
+
+/* Ensure that the unwinder is always linked in (the __pthread_unwind
+   reference from __do_cancel is weak).  Use ___pthread_unwind_next
+   (three underscores) to produce a strong reference to the same
+   file.  */
+PTHREAD_STATIC_FN_REQUIRE (___pthread_unwind_next)

Without this, nptl/tst-pthread_exit-nothreads-static fails.  After
Adhemerval's cleanups, we no longer link in the unwinder in that minimal
test program, so the call to __pthread_unwind turns into a call to a
null pointer.

Thanks,
Florian


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

* Re: [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772]
  2021-03-16 17:30 ` [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772] Florian Weimer
@ 2021-03-19 19:56   ` Adhemerval Zanella
  2021-03-27 16:57     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-19 19:56 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> Commit 9e78f6f6e7134a5f299cc8de77370218f8019237 ("Implement
> _dl_catch_error, _dl_signal_error in libc.so [BZ #16628]") has the
> side effect that distinct namespaces, as created by dlmopen, now have
> separate implementations of the rtld exception mechanism.  This means
> that the call to _dl_catch_error from libdl in a secondary namespace
> does not actually install an exception handler because the
> thread-local variable catch_hook in the libc.so copy in the secondary
> namespace is distinct from that of the base namepace.  As a result, a
> dlsym/dlopen/… failure in a secondary namespace terminates the process
> with a dynamic linker error because it looks to the exception handler
> mechanism as if no handler has been installed.
> 
> This commit restores GLRO (dl_catch_error) and uses it to set the
> handler in the base namespace.

LGTM, thanks.

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

> ---
>  dlfcn/dlerror.c               |  6 +++--
>  elf/Makefile                  |  8 ++++++-
>  elf/dl-error-skeleton.c       | 12 ++++++++++
>  elf/rtld.c                    |  1 +
>  elf/tst-dlmopen-dlerror-mod.c | 41 +++++++++++++++++++++++++++++++++++
>  elf/tst-dlmopen-dlerror.c     | 37 +++++++++++++++++++++++++++++++
>  sysdeps/generic/ldsodefs.h    |  9 ++++++++
>  7 files changed, 111 insertions(+), 3 deletions(-)
>  create mode 100644 elf/tst-dlmopen-dlerror-mod.c
>  create mode 100644 elf/tst-dlmopen-dlerror.c
> 
> diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
> index 48b4c25bea..947b7c10c6 100644
> --- a/dlfcn/dlerror.c
> +++ b/dlfcn/dlerror.c
> @@ -167,8 +167,10 @@ _dlerror_run (void (*operate) (void *), void *args)
>        result->errstring = NULL;
>      }
>  
> -  result->errcode = _dl_catch_error (&result->objname, &result->errstring,
> -				     &result->malloced, operate, args);
> +  result->errcode = GLRO (dl_catch_error) (&result->objname,
> +					   &result->errstring,
> +					   &result->malloced,
> +					   operate, args);
>  
>    /* If no error we mark that no error string is available.  */
>    result->returned = result->errstring == NULL;

Ok.

> diff --git a/elf/Makefile b/elf/Makefile
> index 936d4cf276..deb76aed99 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -222,7 +222,8 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
>  	 tst-audit14 tst-audit15 tst-audit16 \
>  	 tst-single_threaded tst-single_threaded-pthread \
>  	 tst-tls-ie tst-tls-ie-dlmopen argv0test \
> -	 tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask
> +	 tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask \
> +	 tst-dlmopen-dlerror
>  #	 reldep9
>  tests-internal += loadtest unload unload2 circleload1 \
>  	 neededtest neededtest2 neededtest3 neededtest4 \
> @@ -344,6 +345,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
>  		libmarkermod2-1 libmarkermod2-2 \
>  		libmarkermod3-1 libmarkermod3-2 libmarkermod3-3 \
>  		libmarkermod4-1 libmarkermod4-2 libmarkermod4-3 libmarkermod4-4 \
> +		tst-ldconfig-ld-mod tst-dlmopen-dlerror-mod \
>  
>  # Most modules build with _ISOMAC defined, but those filtered out
>  # depend on internal headers.
> @@ -1580,6 +1582,10 @@ $(objpfx)tst-sonamemove-dlopen.out: \
>    $(objpfx)tst-sonamemove-runmod1.so \
>    $(objpfx)tst-sonamemove-runmod2.so
>  
> +$(objpfx)tst-dlmopen-dlerror: $(libdl)
> +$(objpfx)tst-dlmopen-dlerror-mod.so: $(libdl) $(libsupport)
> +$(objpfx)tst-dlmopen-dlerror.out: $(objpfx)tst-dlmopen-dlerror-mod.so
> +
>  # Override -z defs, so that we can reference an undefined symbol.
>  # Force lazy binding for the same reason.
>  LDFLAGS-tst-latepthreadmod.so = \

Ok.

> diff --git a/elf/dl-error-skeleton.c b/elf/dl-error-skeleton.c
> index 2fd62777cf..b699936c6e 100644
> --- a/elf/dl-error-skeleton.c
> +++ b/elf/dl-error-skeleton.c
> @@ -248,4 +248,16 @@ _dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
>    catch_hook = old_catch;
>    receiver = old_receiver;
>  }
> +
> +/* Forwarder used for initializing GLRO (_dl_catch_error).  */
> +int
> +_rtld_catch_error (const char **objname, const char **errstring,
> +		   bool *mallocedp, void (*operate) (void *),
> +		   void *args)
> +{
> +  /* The reference to _dl_catch_error will eventually be relocated to
> +     point to the implementation in libc.so.  */
> +  return _dl_catch_error (objname, errstring, mallocedp, operate, args);
> +}
> +
>  #endif /* DL_ERROR_BOOTSTRAP */

Ok, but why change the usual prepend string to 'rtld'?

> diff --git a/elf/rtld.c b/elf/rtld.c
> index 94a00e2049..fd02438936 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -368,6 +368,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
>      ._dl_lookup_symbol_x = _dl_lookup_symbol_x,
>      ._dl_open = _dl_open,
>      ._dl_close = _dl_close,
> +    ._dl_catch_error = _rtld_catch_error,
>      ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
>  #ifdef HAVE_DL_DISCOVER_OSVERSION
>      ._dl_discover_osversion = _dl_discover_osversion

Ok.

> diff --git a/elf/tst-dlmopen-dlerror-mod.c b/elf/tst-dlmopen-dlerror-mod.c
> new file mode 100644
> index 0000000000..dcb94320b4
> --- /dev/null
> +++ b/elf/tst-dlmopen-dlerror-mod.c
> @@ -0,0 +1,41 @@
> +/* Check that dlfcn errors are reported properly after dlmopen.  Test module.
> +   Copyright (C) 2019 Free Software Foundation, Inc.

s/2019/2021.

> +   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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#include <dlfcn.h>
> +#include <stddef.h>
> +#include <support/check.h>
> +
> +/* Note: This object is not linked into the main program, so we cannot
> +   use delayed test failure reporting via TEST_VERIFY etc., and have
> +   to use FAIL_EXIT1 (or something else that calls exit).  */
> +
> +void
> +call_dlsym (void)
> +{
> +  void *ptr = dlsym (NULL, "does not exist");
> +  if (ptr != NULL)
> +    FAIL_EXIT1 ("dlsym did not fail as expected");
> +}
> +
> +void
> +call_dlopen (void)
> +{
> +  void *handle = dlopen ("tst-dlmopen-dlerror does not exist", RTLD_NOW);
> +  if (handle != NULL)
> +    FAIL_EXIT1 ("dlopen did not fail as expected");
> +}

Ok.

> diff --git a/elf/tst-dlmopen-dlerror.c b/elf/tst-dlmopen-dlerror.c
> new file mode 100644
> index 0000000000..65638f7f38
> --- /dev/null
> +++ b/elf/tst-dlmopen-dlerror.c
> @@ -0,0 +1,37 @@
> +/* Check that dlfcn errors are reported properly after dlmopen.
> +   Copyright (C) 2019 Free Software Foundation, Inc.

s/2019/2021.

> +   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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#include <stddef.h>
> +#include <support/check.h>
> +#include <support/xdlfcn.h>
> +
> +static int
> +do_test (void)
> +{
> +  void *handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-dlerror-mod.so",
> +                           RTLD_NOW);
> +  void (*call_dlsym) (void) = xdlsym (handle, "call_dlsym");
> +  void (*call_dlopen) (void) = xdlsym (handle, "call_dlopen");
> +
> +  call_dlsym ();
> +  call_dlopen ();
> +
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>

Ok.

> diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
> index ea3f7a69d0..b207f229c3 100644
> --- a/sysdeps/generic/ldsodefs.h
> +++ b/sysdeps/generic/ldsodefs.h
> @@ -662,6 +662,12 @@ struct rtld_global_ro
>    void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
>  		     Lmid_t nsid, int argc, char *argv[], char *env[]);
>    void (*_dl_close) (void *map);
> +  /* libdl in a secondary namespace (after dlopen) must use
> +     _dl_catch_error from the main namespace, so it has to be
> +     exported in some way.  */
> +  int (*_dl_catch_error) (const char **objname, const char **errstring,
> +			  bool *mallocedp, void (*operate) (void *),
> +			  void *args);
>    void *(*_dl_tls_get_addr_soft) (struct link_map *);
>  #ifdef HAVE_DL_DISCOVER_OSVERSION
>    int (*_dl_discover_osversion) (void);
> @@ -900,6 +906,9 @@ extern int _dl_catch_error (const char **objname, const char **errstring,
>  			    void *args);
>  libc_hidden_proto (_dl_catch_error)
>  
> +/* Used for initializing GLRO (_dl_catch_error).  */
> +extern __typeof__ (_dl_catch_error) _rtld_catch_error attribute_hidden;
> +
>  /* Call OPERATE (ARGS).  If no error occurs, set *EXCEPTION to zero.
>     Otherwise, store a copy of the raised exception in *EXCEPTION,
>     which has to be freed by _dl_exception_free.  As a special case, if
> 

Ok.

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

* Re: [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773]
  2021-03-16 17:30 ` [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773] Florian Weimer
@ 2021-03-23 14:47   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-23 14:47 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> Calling free directly may end up freeing a pointer allocated by the
> dynamic loader using malloc from libc.so in the base namespace using
> the allocator from libc.so in a secondary namespace, which results in
> crashes.
> 
> This commit redirects the free call through GLRO and the dynamic
> linker, to reach the correct namespace.  It also cleans up the dlerror
> handling along the way, so that pthread_setspecific is no longer
> needed (which avoids triggering bug 24774).
> ---
>   dlfcn/Makefile                |   3 +-
>   dlfcn/Versions                |   6 +-
>   dlfcn/dlerror.c               | 299 ++++++++++++++--------------------
>   dlfcn/dlerror.h               |  74 +++++++++
>   dlfcn/dlfreeres.c             |  29 ----
>   dlfcn/libc_dlerror_result.c   |  39 +++++
>   elf/dl-exception.c            |  11 ++
>   elf/rtld.c                    |   1 +
>   elf/tst-dlmopen-dlerror-mod.c |  29 +++-
>   elf/tst-dlmopen-dlerror.c     |  22 ++-
>   include/dlfcn.h               |   2 -
>   malloc/set-freeres.c          |  10 +-
>   malloc/thread-freeres.c       |   2 +
>   sysdeps/generic/ldsodefs.h    |   7 +
>   14 files changed, 307 insertions(+), 227 deletions(-)
>   create mode 100644 dlfcn/dlerror.h
>   delete mode 100644 dlfcn/dlfreeres.c
>   create mode 100644 dlfcn/libc_dlerror_result.c
> 
> diff --git a/dlfcn/Makefile b/dlfcn/Makefile
> index d51fd08c33..994a3afee6 100644
> --- a/dlfcn/Makefile
> +++ b/dlfcn/Makefile
> @@ -22,9 +22,10 @@ include ../Makeconfig
>   headers		:= bits/dlfcn.h dlfcn.h
>   extra-libs	:= libdl
>   libdl-routines	:= dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \
> -		   dlmopen dlfcn dlfreeres
> +		   dlmopen dlfcn
>   routines	:= $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines)))
>   elide-routines.os := $(routines)
> +routines += libc_dlerror_result
>   
>   extra-libs-others := libdl
>   

Ok.

> diff --git a/dlfcn/Versions b/dlfcn/Versions
> index 1df6925a92..f07cb929aa 100644
> --- a/dlfcn/Versions
> +++ b/dlfcn/Versions
> @@ -1,3 +1,8 @@
> +libc {
> +  GLIBC_PRIVATE {
> +    __libc_dlerror_result;
> +  }
> +}
>   libdl {
>     GLIBC_2.0 {
>       dladdr; dlclose; dlerror; dlopen; dlsym;
> @@ -13,6 +18,5 @@ libdl {
>     }
>     GLIBC_PRIVATE {
>       _dlfcn_hook;
> -    __libdl_freeres;
>     }
>   }

Ok.

> diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
> index 947b7c10c6..e0dedbe3a6 100644
> --- a/dlfcn/dlerror.c
> +++ b/dlfcn/dlerror.c
> @@ -25,6 +25,8 @@
>   #include <libc-lock.h>
>   #include <ldsodefs.h>
>   #include <libc-symbols.h>
> +#include <assert.h>
> +#include <dlerror.h>
>   
>   #if !defined SHARED && IS_IN (libdl)
>   
> @@ -36,89 +38,70 @@ dlerror (void)
>   
>   #else
>   
> -/* Type for storing results of dynamic loading actions.  */
> -struct dl_action_result
> -  {
> -    int errcode;
> -    int returned;
> -    bool malloced;
> -    const char *objname;
> -    const char *errstring;
> -  };
> -static struct dl_action_result last_result;
> -static struct dl_action_result *static_buf;
> -
> -/* This is the key for the thread specific memory.  */
> -static __libc_key_t key;
> -__libc_once_define (static, once);
> -
> -/* Destructor for the thread-specific data.  */
> -static void init (void);
> -static void free_key_mem (void *mem);
> -
> -

Ok.

>   char *
>   __dlerror (void)
>   {
> -  char *buf = NULL;
> -  struct dl_action_result *result;
> -
>   # ifdef SHARED
>     if (!rtld_active ())
>       return _dlfcn_hook->dlerror ();
>   # endif
>   
> -  /* If we have not yet initialized the buffer do it now.  */
> -  __libc_once (once, init);
> +  struct dl_action_result *result = __libc_dlerror_result;
>   
> -  /* Get error string.  */
> -  if (static_buf != NULL)
> -    result = static_buf;
> -  else
> +  /* No libdl function has been called.  No error is possible.  */
> +  if (result == NULL)
> +    return NULL;
> +
> +  /* For an early malloc failure, clear the error flag and return the
> +     error message.  This marks the error as delivered.  */
> +  if (result == dl_action_result_malloc_failed ())
>       {
> -      /* init () has been run and we don't use the static buffer.
> -	 So we have a valid key.  */
> -      result = (struct dl_action_result *) __libc_getspecific (key);
> -      if (result == NULL)
> -	result = &last_result;
> +      __libc_dlerror_result = NULL;
> +      return (char *) "out of memory";
>       }

Ok.

>   
> -  /* Test whether we already returned the string.  */
> -  if (result->returned != 0)
> +  /* Placeholder object.  This can be observed in a recursive call,
> +     e.g. from an ELF constructor.  */
> +  if (result->errstring == NULL)
> +    return NULL;
> +
> +  /* If we have already reported the error, we can free the result
> +     and return NULL.  */
> +  if (result->returned)
>       {
> -      /* We can now free the string.  */
> -      if (result->errstring != NULL)
> -	{
> -	  if (strcmp (result->errstring, "out of memory") != 0)
> -	    free ((char *) result->errstring);
> -	  result->errstring = NULL;
> -	}
> +      __libc_dlerror_result = NULL;
> +      dl_action_result_errstring_free (result);
> +      free (result);
> +      return NULL;
>       }

Isn't this essentially '__libc_dlerror_result_free()' ?

> -  else if (result->errstring != NULL)
> -    {
> -      buf = (char *) result->errstring;
> -      int n;
> -      if (result->errcode == 0)
> -	n = __asprintf (&buf, "%s%s%s",
> -			result->objname,
> -			result->objname[0] == '\0' ? "" : ": ",
> -			_(result->errstring));
> -      else
> -	n = __asprintf (&buf, "%s%s%s: %s",
> -			result->objname,
> -			result->objname[0] == '\0' ? "" : ": ",
> -			_(result->errstring),
> -			strerror (result->errcode));
> -      if (n != -1)
> -	{
> -	  /* We don't need the error string anymore.  */
> -	  if (strcmp (result->errstring, "out of memory") != 0)
> -	    free ((char *) result->errstring);
> -	  result->errstring = buf;
> -	}
>   
> -      /* Mark the error as returned.  */
> -      result->returned = 1;
> +  assert (result->errstring != NULL);
> +
> +  /* Create the combined error message.  */
> +  char *buf;
> +  int n;
> +  if (result->errcode == 0)
> +    n = __asprintf (&buf, "%s%s%s",
> +		    result->objname,
> +		    result->objname[0] == '\0' ? "" : ": ",
> +		    _(result->errstring));
> +  else
> +    n = __asprintf (&buf, "%s%s%s: %s",
> +		    result->objname,
> +		    result->objname[0] == '\0' ? "" : ": ",
> +		    _(result->errstring),
> +		    strerror (result->errcode));
> +
> +  /* Mark the error as delivered.  */
> +  result->returned = true;

Shouldn't we handle asprintf error here?

> +
> +  if (n >= 0)
> +    {
> +      /* Replace the error string with the newly allocated one.  */
> +      dl_action_result_errstring_free (result);
> +      result->errstring = buf;
> +      result->errstring_source = dl_action_result_errstring_local;
> +      return buf;
>       }
>   
>     return buf;

Ok.

> @@ -130,130 +113,94 @@ strong_alias (__dlerror, dlerror)
>   int
>   _dlerror_run (void (*operate) (void *), void *args)
>   {
> -  struct dl_action_result *result;
> -
> -  /* If we have not yet initialized the buffer do it now.  */
> -  __libc_once (once, init);
> -
> -  /* Get error string and number.  */
> -  if (static_buf != NULL)
> -    result = static_buf;
> -  else
> +  struct dl_action_result *result = __libc_dlerror_result;
> +  if (result != NULL)
>       {
> -      /* We don't use the static buffer and so we have a key.  Use it
> -	 to get the thread-specific buffer.  */
> -      result = __libc_getspecific (key);
> -      if (result == NULL)
> +      if (result == dl_action_result_malloc_failed ())
>   	{
> -	  result = (struct dl_action_result *) calloc (1, sizeof (*result));
> -	  if (result == NULL)
> -	    /* We are out of memory.  Since this is no really critical
> -	       situation we carry on by using the global variable.
> -	       This might lead to conflicts between the threads but
> -	       they soon all will have memory problems.  */
> -	    result = &last_result;
> -	  else
> -	    /* Set the tsd.  */
> -	    __libc_setspecific (key, result);
> +	  /* Clear the previous error.  */
> +	  __libc_dlerror_result = NULL;
> +	  result = NULL;
> +	}
> +      else
> +	{
> +	  /* There is an existing object.  Free its error string, but
> +	     keep the object.  */
> +	  dl_action_result_errstring_free (result);
> +	  /* Mark the object as not containing an error.  This ensures
> +	     that call to dlerror from, for example, an ELF
> +	     constructor will not notice this result object.  */
> +	  result->errstring = NULL;
>   	}
>       }
>   

Ok.

> -  if (result->errstring != NULL)
> -    {
> -      /* Free the error string from the last failed command.  This can
> -	 happen if `dlerror' was not run after an error was found.  */
> -      if (result->malloced)
> -	free ((char *) result->errstring);
> -      result->errstring = NULL;
> -    }
> -
> -  result->errcode = GLRO (dl_catch_error) (&result->objname,
> -					   &result->errstring,
> -					   &result->malloced,
> -					   operate, args);
> +  const char *objname;
> +  const char *errstring;
> +  bool malloced;
> +  int errcode = GLRO (dl_catch_error) (&objname, &errstring, &malloced,
> +				       operate, args);
>   
> -  /* If no error we mark that no error string is available.  */
> -  result->returned = result->errstring == NULL;
> +  /* ELF constructors or destructors may have indirectly altered the
> +     value of __libc_dlerror_result, therefore reload it.  */
> +  result = __libc_dlerror_result;
>   
> -  return result->errstring != NULL;
> -}
> -

Ok.

> -
> -/* Initialize buffers for results.  */
> -static void
> -init (void)
> -{
> -  if (__libc_key_create (&key, free_key_mem))
> -    /* Creating the key failed.  This means something really went
> -       wrong.  In any case use a static buffer which is better than
> -       nothing.  */
> -    static_buf = &last_result;
> -}
> -
> -
> -static void
> -check_free (struct dl_action_result *rec)
> -{
> -  if (rec->errstring != NULL
> -      && strcmp (rec->errstring, "out of memory") != 0)
> +  if (errstring == NULL)
>       {
> -      /* We can free the string only if the allocation happened in the
> -	 C library used by the dynamic linker.  This means, it is
> -	 always the C library in the base namespace.  When we're statically
> -         linked, the dynamic linker is part of the program and so always
> -	 uses the same C library we use here.  */
> -#ifdef SHARED
> -      struct link_map *map = NULL;
> -      Dl_info info;
> -      if (_dl_addr (check_free, &info, &map, NULL) != 0 && map->l_ns == 0)
> -#endif
> +      /* There is no error.  We no longer need the result object if it
> +	 does not contain an error.  However, a recursive call may
> +	 have added an error even if this call did not cause it.  Keep
> +	 the other error.  */
> +      if (result != NULL && result->errstring == NULL)
>   	{
> -	  free ((char *) rec->errstring);
> -	  rec->errstring = NULL;
> +	  __libc_dlerror_result = NULL;
> +	  free (result);
>   	}
> +      return 0;
>       }

Ok.

> -}
> -
> -
> -static void
> -__attribute__ ((destructor))
> -fini (void)
> -{
> -  check_free (&last_result);
> -}
> -
> -
> -/* Free the thread specific data, this is done if a thread terminates.  */
> -static void
> -free_key_mem (void *mem)
> -{
> -  check_free ((struct dl_action_result *) mem);
> +  else
> +    {
> +      /* A new error occurred.  Check if a result object has to be
> +	 allocated.  */
> +      if (result == NULL || result == dl_action_result_malloc_failed ())
> +	{
> +	  /* Allocating storage for the error message after the fact
> +	     is not ideal.  But this avoids an infinite recursion in
> +	     case malloc itself calls libdl functions (without
> +	     triggering errors).  */
> +	  result = malloc (sizeof (*result));
> +	  if (result == NULL)
> +	    {
> +	      /* Assume that the dlfcn failure was due to a malloc
> +		 failure, too.  */
> +	      if (malloced)
> +		dl_error_free ((char *) errstring);
> +	      __libc_dlerror_result = dl_action_result_malloc_failed ();
> +	      return 1;
> +	    }
> +	  __libc_dlerror_result = result;
> +	}
> +      else
> +	/* Deallocate the existing error message from a recursive
> +	   call, but reuse the result object.  */
> +	dl_action_result_errstring_free (result);
> +
> +      result->errcode = errcode;
> +      result->objname = objname;
> +      result->errstring = (char *) errstring;
> +      result->returned = false;
> +      /* In case of an error, the malloced flag indicates whether the
> +	 error string is constant or not.  */
> +      if (malloced)
> +	result->errstring_source = dl_action_result_errstring_rtld;
> +      else
> +	result->errstring_source = dl_action_result_errstring_constant;
>   
> -  free (mem);
> -  __libc_setspecific (key, NULL);
> +      return 1;
> +    }
>   }
>   
>   # ifdef SHARED
>   

Ok.

> -/* Free the dlerror-related resources.  */
> -void
> -__dlerror_main_freeres (void)
> -{
> -  /* Free the global memory if used.  */
> -  check_free (&last_result);
> -
> -  if (__libc_once_get (once) && static_buf == NULL)
> -    {
> -      /* init () has been run and we don't use the static buffer.
> -	 So we have a valid key.  */
> -      void *mem;
> -      /* Free the TSD memory if used.  */
> -      mem = __libc_getspecific (key);
> -      if (mem != NULL)
> -	free_key_mem (mem);
> -    }
> -}
> -
>   struct dlfcn_hook *_dlfcn_hook __attribute__((nocommon));
>   libdl_hidden_data_def (_dlfcn_hook)
>   

Ok.

> diff --git a/dlfcn/dlerror.h b/dlfcn/dlerror.h
> new file mode 100644
> index 0000000000..ae07495139
> --- /dev/null
> +++ b/dlfcn/dlerror.h
> @@ -0,0 +1,74 @@

Missing header? I am never sure if it is required for internal
headers.

> +#ifndef _DLERROR_H
> +#define _DLERROR_H
> +
> +#include <dlfcn.h>
> +#include <ldsodefs.h>
> +#include <stdbool.h>
> +#include <stdint.h>
> +#include <stdlib.h>
> +
> +/* Source of the errstring member in struct dl_action_result, for
> +   finding the right deallocation routine.  */
> +enum dl_action_result_errstring_source
> +  {
> +   dl_action_result_errstring_constant, /* String literal, no deallocation.  */
> +   dl_action_result_errstring_rtld, /* libc in the primary namespace.  */
> +   dl_action_result_errstring_local, /* libc in the current namespace.  */
> +  };
> +
> +struct dl_action_result
> +{
> +  int errcode;
> +  char errstring_source;
> +  bool returned;
> +  const char *objname;
> +  char *errstring;
> +};
> +
> +/* Used to free the errstring member of struct dl_action_result in the
> +   dl_action_result_errstring_rtld case.  */
> +static inline void
> +dl_error_free (void *ptr)
> +{
> +#ifdef SHARED
> +  /* In the shared case, ld.so may use a different malloc than this
> +     namespace.  */
> +  GLRO (dl_error_free (ptr));
> +#else
> +  /* Call the implementation directly.  It still has to check for
> +     pointers which cannot be freed, so do not call free directly
> +     here.  */
> +  _dl_error_free (ptr);
> +#endif
> +}
> +
> +/* Deallocate RESULT->errstring, leaving *RESULT itself allocated.  */
> +static inline void
> +dl_action_result_errstring_free (struct dl_action_result *result)
> +{
> +  switch (result->errstring_source)
> +    {
> +    case dl_action_result_errstring_constant:
> +      break;
> +    case dl_action_result_errstring_rtld:
> +      dl_error_free (result->errstring);
> +      break;
> +    case dl_action_result_errstring_local:
> +      free (result->errstring);
> +      break;
> +    }
> +}
> +

Ok.

> +static inline struct dl_action_result *
> +dl_action_result_malloc_failed (void)
> +{
> +  return (struct dl_action_result *) (intptr_t) -1;
> +}
> +

Why not use a static const variable as suggested by Joseph?

> +/* Thread-local variable for storing dlfcn failures for subsequent
> +   reporting via dlerror.  */
> +extern __thread struct dl_action_result *__libc_dlerror_result
> +  attribute_tls_model_ie;
> +void __libc_dlerror_result_free (void) attribute_hidden;
> +
> +#endif /* _DLERROR_H */

k.

> diff --git a/dlfcn/dlfreeres.c b/dlfcn/dlfreeres.c
> deleted file mode 100644
> index 856b76416d..0000000000
> --- a/dlfcn/dlfreeres.c
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/* Clean up allocated libdl memory on demand.
> -   Copyright (C) 2018-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 <set-hooks.h>
> -#include <libc-symbols.h>
> -#include <dlfcn.h>
> -
> -/* Free libdl.so resources.
> -   Note: Caller ensures we are called only once.  */
> -void
> -__libdl_freeres (void)
> -{
> -  call_function_static_weak (__dlerror_main_freeres);
> -}

Ok.

> diff --git a/dlfcn/libc_dlerror_result.c b/dlfcn/libc_dlerror_result.c
> new file mode 100644
> index 0000000000..11468937a2
> --- /dev/null
> +++ b/dlfcn/libc_dlerror_result.c
> @@ -0,0 +1,39 @@
> +/* Thread-local variable holding the dlerror result.
> +   Copyright (C) 2019 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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#include <dlerror.h>
> +
> +/* This pointer is either NULL, dl_action_result_malloc_failed (), or
> +   has been allocated using malloc by the namespace that also contains
> +   this instance of the thread-local variable.  */
> +__thread struct dl_action_result *__libc_dlerror_result attribute_tls_model_ie;
> +
> +/* Called during thread shutdown to free resources.  */
> +void
> +__libc_dlerror_result_free (void)
> +{
> +  if (__libc_dlerror_result != NULL)
> +    {
> +      if (__libc_dlerror_result != dl_action_result_malloc_failed ())
> +        {
> +          dl_action_result_errstring_free (__libc_dlerror_result);
> +          free (__libc_dlerror_result);
> +        }
> +      __libc_dlerror_result = NULL;
> +    }
> +}

Ok.

> diff --git a/elf/dl-exception.c b/elf/dl-exception.c
> index 30adb7d1dc..8eaad418cb 100644
> --- a/elf/dl-exception.c
> +++ b/elf/dl-exception.c
> @@ -30,6 +30,17 @@
>      a pointer comparison.  See below and in dlfcn/dlerror.c.  */
>   static const char _dl_out_of_memory[] = "out of memory";
>   
> +/* Call free in the main libc.so.  This allows other namespaces to
> +   free pointers on the main libc heap, via GLRO (dl_error_free).  It
> +   also avoids calling free on the special, pre-allocated
> +   out-of-memory error message.  */
> +void
> +_dl_error_free (void *ptr)
> +{
> +  if (ptr != _dl_out_of_memory)
> +    free (ptr);
> +}
> +
>   /* Dummy allocation object used if allocating the message buffer
>      fails.  */
>   static void

Ok.

> diff --git a/elf/rtld.c b/elf/rtld.c
> index fd02438936..c2ca4b7ce3 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -369,6 +369,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
>       ._dl_open = _dl_open,
>       ._dl_close = _dl_close,
>       ._dl_catch_error = _rtld_catch_error,
> +    ._dl_error_free = _dl_error_free,
>       ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
>   #ifdef HAVE_DL_DISCOVER_OSVERSION
>       ._dl_discover_osversion = _dl_discover_osversion

Pl.

> diff --git a/elf/tst-dlmopen-dlerror-mod.c b/elf/tst-dlmopen-dlerror-mod.c
> index dcb94320b4..25188750fb 100644
> --- a/elf/tst-dlmopen-dlerror-mod.c
> +++ b/elf/tst-dlmopen-dlerror-mod.c
> @@ -18,6 +18,8 @@
>   
>   #include <dlfcn.h>
>   #include <stddef.h>
> +#include <stdio.h>
> +#include <string.h>
>   #include <support/check.h>
>   
>   /* Note: This object is not linked into the main program, so we cannot
> @@ -25,17 +27,32 @@
>      to use FAIL_EXIT1 (or something else that calls exit).  */
>   
>   void
> -call_dlsym (void)
> +call_dlsym (const char *name)
>   {
> -  void *ptr = dlsym (NULL, "does not exist");
> +  void *ptr = dlsym (NULL, name);
>     if (ptr != NULL)
> -    FAIL_EXIT1 ("dlsym did not fail as expected");
> +    FAIL_EXIT1 ("dlsym did not fail as expected for: %s", name);
> +  const char *message = dlerror ();
> +  if (strstr (message, ": undefined symbol: does not exist X") == NULL)
> +    FAIL_EXIT1 ("invalid dlsym error message for [[%s]]: %s", name, message);
> +  message = dlerror ();
> +  if (message != NULL)
> +    FAIL_EXIT1 ("second dlsym for [[%s]]: %s", name, message);
>   }
>   

Ok.

>   void
> -call_dlopen (void)
> +call_dlopen (const char *name)
>   {
> -  void *handle = dlopen ("tst-dlmopen-dlerror does not exist", RTLD_NOW);
> +  void *handle = dlopen (name, RTLD_NOW);
>     if (handle != NULL)
> -    FAIL_EXIT1 ("dlopen did not fail as expected");
> +    FAIL_EXIT1 ("dlopen did not fail as expected for: %s", name);
> +  const char *message = dlerror ();
> +  if (strstr (message, "X: cannot open shared object file:"
> +              " No such file or directory") == NULL
> +      && strstr (message, "X: cannot open shared object file:"
> +                 " File name too long") == NULL)
> +    FAIL_EXIT1 ("invalid dlopen error message for [[%s]]: %s", name, message);
> +  message = dlerror ();
> +  if (message != NULL)
> +    FAIL_EXIT1 ("second dlopen for [[%s]]: %s", name, message);
>   }

Ok.

> diff --git a/elf/tst-dlmopen-dlerror.c b/elf/tst-dlmopen-dlerror.c
> index 65638f7f38..d02993847d 100644
> --- a/elf/tst-dlmopen-dlerror.c
> +++ b/elf/tst-dlmopen-dlerror.c
> @@ -17,6 +17,7 @@
>      <http://www.gnu.org/licenses/>.  */
>   
>   #include <stddef.h>
> +#include <string.h>
>   #include <support/check.h>
>   #include <support/xdlfcn.h>
>   
> @@ -25,11 +26,22 @@ do_test (void)
>   {
>     void *handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-dlerror-mod.so",
>                              RTLD_NOW);
> -  void (*call_dlsym) (void) = xdlsym (handle, "call_dlsym");
> -  void (*call_dlopen) (void) = xdlsym (handle, "call_dlopen");
> -
> -  call_dlsym ();
> -  call_dlopen ();
> +  void (*call_dlsym) (const char *name) = xdlsym (handle, "call_dlsym");
> +  void (*call_dlopen) (const char *name) = xdlsym (handle, "call_dlopen");
> +
> +  /* Iterate over various name lengths.  This changes the size of
> +     error messages allocated by ld.so and has been shown to trigger
> +     detectable heap corruption if malloc/free calls in different
> +     namespaces are mixed.  */
> +  char buffer[2048];
> +  char *buffer_end = &buffer[sizeof (buffer) - 2];
> +  for (char *p = stpcpy (buffer, "does not exist "); p < buffer_end; ++p)
> +    {
> +      p[0] = 'X';
> +      p[1] = '\0';
> +      call_dlsym (buffer);
> +      call_dlopen (buffer);
> +    }
>   
>     return 0;
>   }

Ok.

> diff --git a/include/dlfcn.h b/include/dlfcn.h
> index a1816e4991..a8d48bdada 100644
> --- a/include/dlfcn.h
> +++ b/include/dlfcn.h
> @@ -156,7 +156,5 @@ extern void __libc_register_dlfcn_hook (struct link_map *map)
>        attribute_hidden;
>   #endif
>   
> -extern void __dlerror_main_freeres (void) attribute_hidden;
> -
>   #endif
>   #endif

Ok.

> diff --git a/malloc/set-freeres.c b/malloc/set-freeres.c
> index 817fbea8b8..d404250151 100644
> --- a/malloc/set-freeres.c
> +++ b/malloc/set-freeres.c
> @@ -20,6 +20,7 @@
>   #include <set-hooks.h>
>   #include <libc-internal.h>
>   #include <unwind-link.h>
> +#include <dlfcn/dlerror.h>
>   
>   #include "../nss/nsswitch.h"
>   #include "../libio/libioP.h"
> @@ -28,8 +29,6 @@ DEFINE_HOOK (__libc_subfreeres, (void));
>   
>   symbol_set_define (__libc_freeres_ptrs);
>   
> -extern __attribute__ ((weak)) void __libdl_freeres (void);
> -
>   extern __attribute__ ((weak)) void __libpthread_freeres (void);
>   
>   void __libc_freeres_fn_section

Ok.

> @@ -52,11 +51,6 @@ __libc_freeres (void)
>         /* We run the resource freeing after IO cleanup.  */
>         RUN_HOOK (__libc_subfreeres, ());
>   
> -      /* Call the libdl list of cleanup functions
> -	 (weak-ref-and-check).  */
> -      if (&__libdl_freeres != NULL)
> -	__libdl_freeres ();
> -
>         /* Call the libpthread list of cleanup functions
>   	 (weak-ref-and-check).  */
>         if (&__libpthread_freeres != NULL)

Ok.

> @@ -66,6 +60,8 @@ __libc_freeres (void)
>         __libc_unwind_link_freeres ();
>   #endif
>   
> +      call_function_static_weak (__libc_dlerror_result_free);
> +
>         for (p = symbol_set_first_element (__libc_freeres_ptrs);
>              !symbol_set_end_p (__libc_freeres_ptrs, p); ++p)
>           free (*p);

Ok.

> diff --git a/malloc/thread-freeres.c b/malloc/thread-freeres.c
> index da76a3dca7..77a204f9fa 100644
> --- a/malloc/thread-freeres.c
> +++ b/malloc/thread-freeres.c
> @@ -16,6 +16,7 @@
>      License along with the GNU C Library; if not, see
>      <https://www.gnu.org/licenses/>.  */
>   
> +#include <dlfcn/dlerror.h>
>   #include <libc-internal.h>
>   #include <malloc-internal.h>
>   #include <resolv/resolv-internal.h>
> @@ -36,6 +37,7 @@ __libc_thread_freeres (void)
>   #endif
>     call_function_static_weak (__res_thread_freeres);
>     __glibc_tls_internal_free ();
> +  call_function_static_weak (__libc_dlerror_result_free);
>   
>     /* This should come last because it shuts down malloc for this
>        thread and the other shutdown functions might well call free.  */

Ok.

> diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
> index b207f229c3..dfc117a445 100644
> --- a/sysdeps/generic/ldsodefs.h
> +++ b/sysdeps/generic/ldsodefs.h
> @@ -668,6 +668,9 @@ struct rtld_global_ro
>     int (*_dl_catch_error) (const char **objname, const char **errstring,
>   			  bool *mallocedp, void (*operate) (void *),
>   			  void *args);
> +  /* libdl in a secondary namespace must use free from the base
> +     namespace.  */
> +  void (*_dl_error_free) (void *);
>     void *(*_dl_tls_get_addr_soft) (struct link_map *);
>   #ifdef HAVE_DL_DISCOVER_OSVERSION
>     int (*_dl_discover_osversion) (void);
> @@ -823,6 +826,10 @@ void _dl_exception_create (struct dl_exception *, const char *object,
>     __attribute__ ((nonnull (1, 3)));
>   rtld_hidden_proto (_dl_exception_create)
>   
> +/* Used internally to implement dlerror message freeing.  See
> +   include/dlfcn.h and dlfcn/dlerror.c.  */
> +void _dl_error_free (void *ptr) attribute_hidden;
> +
>   /* Like _dl_exception_create, but create errstring from a format
>      string FMT.  Currently, only "%s" and "%%" are supported as format
>      directives.  */
> 

Ok.

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

* Re: [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h
  2021-03-16 17:30 ` [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h Florian Weimer
@ 2021-03-23 16:39   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-23 16:39 UTC (permalink / raw)
  To: libc-alpha



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> And libc-lockP.h.  This is no longer used because all internal
> TLS use goes directly to the thread descriptor/TCB or uses ELF TLS.

LGTM, thanks.

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

> ---
>   sysdeps/generic/libc-lock.h | 12 ------------
>   sysdeps/htl/libc-lockP.h    | 13 -------------
>   sysdeps/nptl/libc-lockP.h   | 24 ------------------------
>   3 files changed, 49 deletions(-)
> 
> diff --git a/sysdeps/generic/libc-lock.h b/sysdeps/generic/libc-lock.h
> index 6b1e98e34d..c538e858ea 100644
> --- a/sysdeps/generic/libc-lock.h
> +++ b/sysdeps/generic/libc-lock.h
> @@ -125,16 +125,4 @@
>   /* We need portable names for some of the functions.  */
>   #define __libc_mutex_unlock
>   
> -/* Type for key of thread specific data.  */
> -typedef int __libc_key_t;
> -
> -/* Create key for thread specific data.  */
> -#define __libc_key_create(KEY,DEST)	((void) (KEY), (void) (DEST), -1)
> -
> -/* Set thread-specific data associated with KEY to VAL.  */
> -#define __libc_setspecific(KEY,VAL)	((void) (KEY), (void) (VAL))
> -
> -/* Get thread-specific data associated with KEY.  */
> -#define __libc_getspecific(KEY)		((void) (KEY), (void *) 0)
> -
>   #endif	/* libc-lock.h */

Ok.

> diff --git a/sysdeps/htl/libc-lockP.h b/sysdeps/htl/libc-lockP.h
> index f183bde680..eb09171c85 100644
> --- a/sysdeps/htl/libc-lockP.h
> +++ b/sysdeps/htl/libc-lockP.h
> @@ -22,9 +22,6 @@
>   #include <pthread.h>
>   #include <pthread-functions.h>
>   
> -/* Type for key to thread-specific data.  */
> -typedef pthread_key_t __libc_key_t;
> -
>   /* If we check for a weakly referenced symbol and then perform a
>      normal jump to it te code generated for some platforms in case of
>      PIC is unnecessarily slow.  What would happen is that the function
> @@ -109,16 +106,6 @@ extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
>   
>   extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
>   
> -extern int __pthread_key_create (pthread_key_t *__key,
> -				 void (*__destr_function) (void *));
> -
> -extern int __pthread_key_delete (pthread_key_t __key);
> -
> -extern int __pthread_setspecific (pthread_key_t __key,
> -				  const void *__pointer);
> -
> -extern void *__pthread_getspecific (pthread_key_t __key);
> -
>   extern int __pthread_once (pthread_once_t *__once_control,
>   			   void (*__init_routine) (void));
>   

Ok.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index df62ce0e61..d032463dd0 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -49,9 +49,6 @@ typedef int __libc_lock_t;
>   typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
>   typedef pthread_rwlock_t __libc_rwlock_t;
>   
> -/* Type for key to thread-specific data.  */
> -typedef pthread_key_t __libc_key_t;
> -
>   /* Define a lock variable NAME with storage class CLASS.  The lock must be
>      initialized with __libc_lock_init before it can be used (or define it
>      with __libc_lock_define_initialized, below).  Use `extern' for CLASS to
> @@ -267,19 +264,6 @@ __libc_cleanup_routine (struct __pthread_cleanup_frame *f)
>     } while (0)
>   #endif /* __EXCEPTIONS */
>   
> -/* Create thread-specific key.  */
> -#define __libc_key_create(KEY, DESTRUCTOR) \
> -  __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1)
> -
> -/* Get thread-specific data.  */
> -#define __libc_getspecific(KEY) \
> -  __libc_ptf_call (__pthread_getspecific, (KEY), NULL)
> -
> -/* Set thread-specific data.  */
> -#define __libc_setspecific(KEY, VALUE) \
> -  __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0)
> -
> -
>   /* Register handlers to execute before and after `fork'.  Note that the
>      last parameter is NULL.  The handlers registered by the libc are
>      never removed so this is OK.  */

Ok.

> @@ -324,14 +308,6 @@ extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
>   
>   extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
>   
> -extern int __pthread_key_create (pthread_key_t *__key,
> -				 void (*__destr_function) (void *));
> -
> -extern int __pthread_setspecific (pthread_key_t __key,
> -				  const void *__pointer);
> -
> -extern void *__pthread_getspecific (pthread_key_t __key);
> -
>   extern int __pthread_once (pthread_once_t *__once_control,
>   			   void (*__init_routine) (void));
>   libc_hidden_proto (__pthread_once)
> 

Ok.

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

* Re: [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization
  2021-03-16 17:30 ` [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization Florian Weimer
@ 2021-03-23 18:25   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-23 18:25 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> TLS_INIT_TP is processor-specific, so it is not a good place to
> put thread library initialization code (it would have to be repeated
> for all CPUs).  Introduce __tls_init_tp as a separate function,
> to be called immediately after TLS_INIT_TP.  Move the existing
> stack list setup code for NPTL to this function.

LGTM, thanks.

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

> ---
>   csu/libc-tls.c                |  8 +-------
>   elf/Makefile                  |  2 +-
>   elf/dl-tls_init_tp.c          | 24 ++++++++++++++++++++++++
>   elf/rtld.c                    | 14 ++------------
>   sysdeps/generic/ldsodefs.h    |  5 +++++
>   sysdeps/nptl/dl-tls_init_tp.c | 30 ++++++++++++++++++++++++++++++
>   6 files changed, 63 insertions(+), 20 deletions(-)
>   create mode 100644 elf/dl-tls_init_tp.c
>   create mode 100644 sysdeps/nptl/dl-tls_init_tp.c
> 
> diff --git a/csu/libc-tls.c b/csu/libc-tls.c
> index f3a6a6a075..22f8e4838d 100644
> --- a/csu/libc-tls.c
> +++ b/csu/libc-tls.c
> @@ -24,7 +24,6 @@
>   #include <stdio.h>
>   #include <sys/param.h>
>   #include <array_length.h>
> -#include <list.h>
>   
>   #ifdef SHARED
>    #error makefile bug, this file is for static only
> @@ -193,12 +192,7 @@ __libc_setup_tls (void)
>   #endif
>     if (__builtin_expect (lossage != NULL, 0))
>       _startup_fatal (lossage);
> -
> -#if THREAD_GSCOPE_IN_TCB
> -  INIT_LIST_HEAD (&_dl_stack_used);
> -  INIT_LIST_HEAD (&_dl_stack_user);
> -  list_add (&THREAD_SELF->list, &_dl_stack_user);
> -#endif
> +  __tls_init_tp ();
>   
>     /* Update the executable's link map with enough information to make
>        the TLS routines happy.  */

Ok.

> diff --git a/elf/Makefile b/elf/Makefile
> index deb76aed99..22b3a06cab 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -35,7 +35,7 @@ dl-routines	= $(addprefix dl-,load lookup object reloc deps \
>   				  execstack open close trampoline \
>   				  exception sort-maps lookup-direct \
>   				  call-libc-early-init write \
> -				  thread_gscope_wait)
> +				  thread_gscope_wait tls_init_tp)
>   ifeq (yes,$(use-ldconfig))
>   dl-routines += dl-cache
>   endif

Ok.

> diff --git a/elf/dl-tls_init_tp.c b/elf/dl-tls_init_tp.c
> new file mode 100644
> index 0000000000..728cd84c00
> --- /dev/null
> +++ b/elf/dl-tls_init_tp.c
> @@ -0,0 +1,24 @@
> +/* Completion of TCB initialization after TLS_INIT_TP.  Generic 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 <ldsodefs.h>
> +
> +void
> +__tls_init_tp (void)
> +{
> +}

Ok.

> diff --git a/elf/rtld.c b/elf/rtld.c
> index c2ca4b7ce3..34879016ad 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -48,7 +48,6 @@
>   #include <array_length.h>
>   #include <libc-early-init.h>
>   #include <dl-main.h>
> -#include <list.h>
>   #include <gnu/lib-names.h>
>   #include <dl-tunables.h>
>   
> @@ -807,9 +806,7 @@ cannot allocate TLS data structures for initial thread\n");
>     const char *lossage = TLS_INIT_TP (tcbp);
>     if (__glibc_unlikely (lossage != NULL))
>       _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
> -#if THREAD_GSCOPE_IN_TCB
> -  list_add (&THREAD_SELF->list, &GL (dl_stack_user));
> -#endif
> +  __tls_init_tp ();
>     tls_init_tp_called = true;
>   
>     return tcbp;

Ok.

> @@ -1150,11 +1147,6 @@ dl_main (const ElfW(Phdr) *phdr,
>     GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive;
>   #endif
>   
> -#if THREAD_GSCOPE_IN_TCB
> -  INIT_LIST_HEAD (&GL (dl_stack_used));
> -  INIT_LIST_HEAD (&GL (dl_stack_user));
> -#endif
> -
>     /* The explicit initialization here is cheaper than processing the reloc
>        in the _rtld_local definition's initializer.  */

Ok.

>     GL(dl_make_stack_executable_hook) = &_dl_make_stack_executable;
> @@ -2454,9 +2446,7 @@ dl_main (const ElfW(Phdr) *phdr,
>         if (__glibc_unlikely (lossage != NULL))
>   	_dl_fatal_printf ("cannot set up thread-local storage: %s\n",
>   			  lossage);
> -#if THREAD_GSCOPE_IN_TCB
> -      list_add (&THREAD_SELF->list, &GL (dl_stack_user));
> -#endif
> +      __tls_init_tp ();
>       }
>   
>     /* Make sure no new search directories have been added.  */

Ok.

> diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
> index dfc117a445..67c6686015 100644
> --- a/sysdeps/generic/ldsodefs.h
> +++ b/sysdeps/generic/ldsodefs.h
> @@ -1163,6 +1163,11 @@ extern void _dl_determine_tlsoffset (void) attribute_hidden;
>      number of audit modules are loaded.  */
>   void _dl_tls_static_surplus_init (size_t naudit) attribute_hidden;
>   
> +/* This function is called after processor-specific initialization of
> +   the TCB and thread pointer via TLS_INIT_TP, to complete very early
> +   initialization of the thread library.  */
> +void __tls_init_tp (void) attribute_hidden;
> +
>   #ifndef SHARED
>   /* Set up the TCB for statically linked applications.  This is called
>      early during startup because we always use TLS (for errno and the

Ok.

> diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
> new file mode 100644
> index 0000000000..8983808233
> --- /dev/null
> +++ b/sysdeps/nptl/dl-tls_init_tp.c
> @@ -0,0 +1,30 @@
> +/* Completion of TCB initialization after TLS_INIT_TP.  NPTL version.
> +   Copyright (C) 2020-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 <ldsodefs.h>
> +#include <list.h>
> +#include <tls.h>
> +
> +void
> +__tls_init_tp (void)
> +{
> +  /* Set up thread stack list management.  */
> +  INIT_LIST_HEAD (&GL (dl_stack_used));
> +  INIT_LIST_HEAD (&GL (dl_stack_user));
> +  list_add (&THREAD_SELF->list, &GL (dl_stack_user));
> +}
> 

Ok.

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

* Re: [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp
  2021-03-16 17:30 ` [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp Florian Weimer
@ 2021-03-24 13:56   ` Adhemerval Zanella
  2021-03-27 17:19     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 13:56 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> This initalization should only happen once for the main thread's TCB.
> At present, auditors can achieve this by not linking against
> libpthread.  If libpthread becomes part of libc, doing this
> initialization in libc would happen for every audit namespace,
> or too late (if it happens from the main libc only).  That's why
> moving this code into ld.so seems the right thing to do, right after
> the TCB initialization.

Make sense.

> 
> For !__ASSUME_SET_ROBUST_LIST ports, this also moves the symbol
> __set_robust_list_avail into ld.so, as __nptl_set_robust_list_avail.
> It also turned into a proper boolean flag.
> 
> Inline the __pthread_initialize_pids function because it seems no
> longer useful as a separate function.

LGTM, with just a suggestion below.

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

> ---
>   nptl/Versions                          |  6 +++++
>   nptl/nptl-init.c                       | 36 ++-----------------------
>   nptl/pthread-pids.h                    | 29 --------------------
>   nptl/pthreadP.h                        |  6 +++--
>   nptl/pthread_create.c                  |  4 +--
>   nptl/pthread_mutex_init.c              |  2 +-
>   sysdeps/nptl/dl-tls_init_tp.c          | 37 ++++++++++++++++++++++++++
>   sysdeps/unix/sysv/linux/pthread-pids.h | 29 --------------------
>   8 files changed, 52 insertions(+), 97 deletions(-)
>   delete mode 100644 nptl/pthread-pids.h
>   delete mode 100644 sysdeps/unix/sysv/linux/pthread-pids.h
> 
> diff --git a/nptl/Versions b/nptl/Versions
> index b619df41fb..c50a5442af 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -417,3 +417,9 @@ libpthread {
>       __pthread_initialize_minimal;
>     }
>   }
> +
> +ld {
> +  GLIBC_PRIVATE {
> +     __nptl_set_robust_list_avail;
> +  }
> +}
> \ No newline at end of file

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index de64e34783..5913bf7272 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -36,7 +36,6 @@
>   #include <futex-internal.h>
>   #include <kernel-features.h>
>   #include <libc-pointer-arith.h>
> -#include <pthread-pids.h>
>   #include <pthread_mutex_conf.h>
>   
>   #ifndef TLS_MULTIPLE_THREADS_IN_TCB
> @@ -48,15 +47,6 @@ int *__libc_multiple_threads_ptr attribute_hidden;
>   size_t __static_tls_size;
>   size_t __static_tls_align_m1;
>   
> -#ifndef __ASSUME_SET_ROBUST_LIST
> -/* Negative if we do not have the system call and we can use it.  */
> -int __set_robust_list_avail;
> -# define set_robust_list_not_avail() \
> -  __set_robust_list_avail = -1
> -#else
> -# define set_robust_list_not_avail() do { } while (0)
> -#endif
> -
>   /* Version of the library, used in libthread_db to detect mismatches.  */
>   static const char nptl_version[] __attribute_used__ = VERSION;
>   
> @@ -194,31 +184,9 @@ static bool __nptl_initial_report_events __attribute_used__;
>   void
>   __pthread_initialize_minimal_internal (void)
>   {
> -  /* Minimal initialization of the thread descriptor.  */
> +  /* Partial initialization of the TCB already happened in TLS_INIT_TP
> +     and __tls_init_tp.  */
>     struct pthread *pd = THREAD_SELF;
> -  __pthread_initialize_pids (pd);
> -  THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
> -  THREAD_SETMEM (pd, user_stack, true);
> -
> -  /* Initialize the robust mutex data.  */
> -  {
> -#if __PTHREAD_MUTEX_HAVE_PREV
> -    pd->robust_prev = &pd->robust_head;
> -#endif
> -    pd->robust_head.list = &pd->robust_head;
> -    pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
> -				    - offsetof (pthread_mutex_t,
> -						__data.__list.__next));
> -    int res = INTERNAL_SYSCALL_CALL (set_robust_list, &pd->robust_head,
> -				     sizeof (struct robust_list_head));
> -    if (INTERNAL_SYSCALL_ERROR_P (res))
> -      set_robust_list_not_avail ();
> -  }
> -
> -  /* Set initial thread's stack block from 0 up to __libc_stack_end.
> -     It will be bigger than it actually is, but for unwind.c/pt-longjmp.c
> -     purposes this is good enough.  */
> -  THREAD_SETMEM (pd, stackblock_size, (size_t) __libc_stack_end);
>   
>     /* Before initializing GL (dl_stack_user), the debugger could not
>        find us and had to set __nptl_initial_report_events.  Propagate

Ok.

> diff --git a/nptl/pthread-pids.h b/nptl/pthread-pids.h
> deleted file mode 100644
> index 1a0e9ade41..0000000000
> --- a/nptl/pthread-pids.h
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/* Initialize pid and tid fields of struct pthread.  Stub version.
> -   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/>.  */
> -
> -#include <pthreadP.h>
> -
> -/* Initialize PD->pid and PD->tid for the initial thread.  If there is
> -   setup required to arrange that __exit_thread causes PD->tid to be
> -   cleared and futex-woken, then this function should do that as well.  */
> -static inline void
> -__pthread_initialize_pids (struct pthread *pd)
> -{
> -#error "sysdeps pthread-pids.h file required"
> -  pd->pid = pd->tid = -1;
> -}

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 4b486b3577..68f8ef5aa1 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -224,8 +224,10 @@ 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.  */
> -extern int __set_robust_list_avail attribute_hidden;
> +/* True if the set_robust_list system call works.  Initialized in
> +   __tls_init_tp.  */
> +extern bool __nptl_set_robust_list_avail;
> +rtld_hidden_proto (__nptl_set_robust_list_avail)
>   #endif
>   
>   /* Thread Priority Protection.  */

Now that you are touching it, maybe it would be better to move the
__ASSUME_SET_ROBUST_LIST handling only to the dl-tls_init_tp.c and
always define __nptl_set_robust_list_avail (at least one initialization
case)?

> diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
> index 58e10e7741..51340acc4d 100644
> --- a/nptl/pthread_create.c
> +++ b/nptl/pthread_create.c
> @@ -289,7 +289,7 @@ START_THREAD_DEFN
>     __ctype_init ();
>   
>   #ifndef __ASSUME_SET_ROBUST_LIST
> -  if (__set_robust_list_avail >= 0)
> +  if (__nptl_set_robust_list_avail)
>   #endif
>       {
>         /* This call should never fail because the initial call in init.c
> @@ -439,7 +439,7 @@ START_THREAD_DEFN
>     /* We let the kernel do the notification if it is able to do so.
>        If we have to do it here there for sure are no PI mutexes involved
>        since the kernel support for them is even more recent.  */
> -  if (__set_robust_list_avail < 0
> +  if (!__nptl_set_robust_list_avail
>         && __builtin_expect (robust != (void *) &pd->robust_head, 0))
>       {
>         do

Ok.

> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
> index 233cebc504..f5c3a4b464 100644
> --- a/nptl/pthread_mutex_init.c
> +++ b/nptl/pthread_mutex_init.c
> @@ -95,7 +95,7 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
>       {
>   #ifndef __ASSUME_SET_ROBUST_LIST
>         if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_PSHARED) != 0
> -	  && __set_robust_list_avail < 0)
> +	  && !__nptl_set_robust_list_avail)
>   	return ENOTSUP;
>   #endif
>   

Ok.

> diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
> index 8983808233..c5172b7613 100644
> --- a/sysdeps/nptl/dl-tls_init_tp.c
> +++ b/sysdeps/nptl/dl-tls_init_tp.c
> @@ -16,10 +16,17 @@
>      License along with the GNU C Library; if not, see
>      <https://www.gnu.org/licenses/>.  */
>   
> +#include <kernel-features.h>
>   #include <ldsodefs.h>
>   #include <list.h>
> +#include <nptl/pthreadP.h>
>   #include <tls.h>
>   
> +#ifndef __ASSUME_SET_ROBUST_LIST
> +bool __nptl_set_robust_list_avail;
> +rtld_hidden_data_def (__nptl_set_robust_list_avail)
> +#endif
> +
>   void
>   __tls_init_tp (void)
>   {
> @@ -27,4 +34,34 @@ __tls_init_tp (void)
>     INIT_LIST_HEAD (&GL (dl_stack_used));
>     INIT_LIST_HEAD (&GL (dl_stack_user));
>     list_add (&THREAD_SELF->list, &GL (dl_stack_user));
> +
> +   /* Early initialization of the TCB.   */
> +   struct pthread *pd = THREAD_SELF;
> +   pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, &pd->tid);
> +   THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
> +   THREAD_SETMEM (pd, user_stack, true);
> +
> +  /* Initialize the robust mutex data.  */
> +  {
> +#if __PTHREAD_MUTEX_HAVE_PREV
> +    pd->robust_prev = &pd->robust_head;
> +#endif
> +    pd->robust_head.list = &pd->robust_head;
> +    pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
> +                                    - offsetof (pthread_mutex_t,
> +                                                __data.__list.__next));
> +    int res = INTERNAL_SYSCALL_CALL (set_robust_list, &pd->robust_head,
> +                                     sizeof (struct robust_list_head));
> +    if (!INTERNAL_SYSCALL_ERROR_P (res))
> +      {
> +#ifndef __ASSUME_SET_ROBUST_LIST
> +        __nptl_set_robust_list_avail = true;
> +#endif
> +      }
> +  }
> +
> +  /* Set initial thread's stack block from 0 up to __libc_stack_end.
> +     It will be bigger than it actually is, but for unwind.c/pt-longjmp.c
> +     purposes this is good enough.  */
> +  THREAD_SETMEM (pd, stackblock_size, (size_t) __libc_stack_end);
>   }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/pthread-pids.h b/sysdeps/unix/sysv/linux/pthread-pids.h
> deleted file mode 100644
> index 10b58899f5..0000000000
> --- a/sysdeps/unix/sysv/linux/pthread-pids.h
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/* Initialize pid and tid fields of struct pthread.  Linux version.
> -   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/>.  */
> -
> -#include <pthreadP.h>
> -#include <sysdep.h>
> -
> -/* Initialize PD->pid and PD->tid for the initial thread.  If there is
> -   setup required to arrange that __exit_thread causes PD->tid to be
> -   cleared and futex-woken, then this function should do that as well.  */
> -static inline void
> -__pthread_initialize_pids (struct pthread *pd)
> -{
> -  pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, &pd->tid);
> -}
> 

Ok.

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

* Re: [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-16 17:30 ` [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc Florian Weimer
@ 2021-03-24 14:09   ` Adhemerval Zanella
  2021-03-24 14:32     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:09 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> The symbols have been moved using scripts/move-symbol-to-libc.py.

LGTM in general, some comments below.

> ---
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 |  6 ++++--
>  nptl/nptl-init.c                              |  1 -
>  nptl/pthreadP.h                               |  1 -
>  nptl/pthread_key_create.c                     | 21 +++++++++++++++----
>  sysdeps/nptl/libc-lockP.h                     |  2 --
>  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 --
>  68 files changed, 150 insertions(+), 70 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 098c31115f..4255953fad 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -78,6 +78,7 @@ routines = \
>    pthread_getaffinity \
>    pthread_getattr_np \
>    pthread_getschedparam \
> +  pthread_key_create \
>    pthread_keys \
>    pthread_mutex_consistent \
>    pthread_once \
> @@ -160,7 +161,6 @@ libpthread-routines = \
>    pthread_getspecific \
>    pthread_join \
>    pthread_join_common \
> -  pthread_key_create \
>    pthread_key_delete \
>    pthread_kill \
>    pthread_kill_other_threads \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index c50a5442af..d44958f5b6 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -1,5 +1,6 @@
>  libc {
>    GLIBC_2.0 {
> +    __pthread_key_create;
>      __pthread_once;
>      _pthread_cleanup_pop;
>      _pthread_cleanup_pop_restore;
> @@ -28,6 +29,7 @@ libc {
>      pthread_equal;
>      pthread_exit;
>      pthread_getschedparam;
> +    pthread_key_create;
>      pthread_mutex_destroy;
>      pthread_mutex_init;
>      pthread_mutex_lock;
> @@ -86,7 +88,9 @@ libc {
>    }
>    GLIBC_2.34 {
>      __pthread_cleanup_routine;
> +    __pthread_key_create;
>      __pthread_once;
> +    pthread_key_create;
>      pthread_mutex_consistent;
>      pthread_once;
>    }

Why do we need a __pthread_key_create for 2.34?  

> @@ -143,7 +147,6 @@ libpthread {
>      __open;
>      __pthread_atfork;
>      __pthread_getspecific;
> -    __pthread_key_create;
>      __pthread_mutex_destroy;
>      __pthread_mutex_init;
>      __pthread_mutex_lock;
> @@ -180,7 +183,6 @@ libpthread {
>      pthread_detach;
>      pthread_getspecific;
>      pthread_join;
> -    pthread_key_create;
>      pthread_key_delete;
>      pthread_kill;
>      pthread_kill_other_threads_np;

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 5913bf7272..b1a8b1a95b 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
>      .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
>      .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
>      .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
> -    .ptr___pthread_key_create = __pthread_key_create,
>      .ptr___pthread_getspecific = __pthread_getspecific,
>      .ptr___pthread_setspecific = __pthread_setspecific,
>      .ptr__nptl_setxid = __nptl_setxid,

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 68f8ef5aa1..38aeed1dfc 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -553,7 +553,6 @@ hidden_proto (__pthread_mutex_unlock)
>  hidden_proto (__pthread_rwlock_rdlock)
>  hidden_proto (__pthread_rwlock_wrlock)
>  hidden_proto (__pthread_rwlock_unlock)
> -hidden_proto (__pthread_key_create)
>  hidden_proto (__pthread_getspecific)
>  hidden_proto (__pthread_setspecific)
>  hidden_proto (__pthread_testcancel)

Ok.

> diff --git a/nptl/pthread_key_create.c b/nptl/pthread_key_create.c
> index 5b725c56e2..5b3726e9f3 100644
> --- a/nptl/pthread_key_create.c
> +++ b/nptl/pthread_key_create.c
> @@ -19,10 +19,10 @@
>  #include <errno.h>
>  #include "pthreadP.h"
>  #include <atomic.h>
> -
> +#include <shlib-compat.h>
>  
>  int
> -__pthread_key_create (pthread_key_t *key, void (*destr) (void *))
> +__pthread_key_create_1 (pthread_key_t *key, void (*destr) (void *))
>  {
>    /* Find a slot in __pthread_keys which is unused.  */
>    for (size_t cnt = 0; cnt < PTHREAD_KEYS_MAX; ++cnt)
> @@ -47,5 +47,18 @@ __pthread_key_create (pthread_key_t *key, void (*destr) (void *))
>  
>    return EAGAIN;
>  }
> -weak_alias (__pthread_key_create, pthread_key_create)
> -hidden_def (__pthread_key_create)
> +versioned_symbol (libc, __pthread_key_create_1, __pthread_key_create,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_key_create_1, __pthread_key_create)
> +
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_key_create_1, __pthread_key_create_2)
> +strong_alias (__pthread_key_create_1, __pthread_key_create_3)
> +strong_alias (__pthread_key_create_1, __pthread_key_create_4)
> +
> +versioned_symbol (libc, __pthread_key_create_2, pthread_key_create,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libc, __pthread_key_create_3, __pthread_key_create, GLIBC_2_0);
> +compat_symbol (libc, __pthread_key_create_4, pthread_key_create, GLIBC_2_0);
> +#endif

I think you might want to revise it once compat_symbol has support
for multiple targets.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index d032463dd0..64c7a99bbf 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -338,7 +338,6 @@ weak_extern (__pthread_rwlock_tryrdlock)
>  weak_extern (__pthread_rwlock_wrlock)
>  weak_extern (__pthread_rwlock_trywrlock)
>  weak_extern (__pthread_rwlock_unlock)
> -weak_extern (__pthread_key_create)
>  weak_extern (__pthread_setspecific)
>  weak_extern (__pthread_getspecific)
>  weak_extern (__pthread_initialize)
> @@ -358,7 +357,6 @@ weak_extern (__pthread_atfork)
>  #  pragma weak __pthread_rwlock_wrlock
>  #  pragma weak __pthread_rwlock_trywrlock
>  #  pragma weak __pthread_rwlock_unlock
> -#  pragma weak __pthread_key_create
>  #  pragma weak __pthread_setspecific
>  #  pragma weak __pthread_getspecific
>  #  pragma weak __pthread_initialize

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 844838cd49..69ba1d8278 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -49,7 +49,6 @@ struct pthread_functions
>    int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
> -  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 *);
>    int (*ptr__nptl_setxid) (struct xid_command *);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index a4eec97fd0..edd8ff4e1a 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_key_create F
>  GLIBC_2.17 __pthread_once F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
> @@ -1449,6 +1450,7 @@ GLIBC_2.17 pthread_exit F
>  GLIBC_2.17 pthread_getaffinity_np F
>  GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
> +GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
> @@ -2183,7 +2185,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 47c5564772..620915eca6 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
>  GLIBC_2.17 __pthread_getspecific F
> -GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_mutex_destroy F
>  GLIBC_2.17 __pthread_mutex_init F
>  GLIBC_2.17 __pthread_mutex_lock F
> @@ -89,7 +88,6 @@ GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_join F
> -GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_kill F
>  GLIBC_2.17 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index cfd43859bc..ad921167a2 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x8
>  GLIBC_2.0 __read F
> @@ -888,6 +889,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2264,8 +2266,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 1d834d6d54..85a6f26e5d 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index f4a38131a0..2bdf0fffdb 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_key_create F
>  GLIBC_2.32 __pthread_once F
>  GLIBC_2.32 __pthread_unwind_next F
>  GLIBC_2.32 __ptsname_r_chk F
> @@ -1376,6 +1377,7 @@ GLIBC_2.32 pthread_exit F
>  GLIBC_2.32 pthread_getaffinity_np F
>  GLIBC_2.32 pthread_getattr_np F
>  GLIBC_2.32 pthread_getschedparam F
> +GLIBC_2.32 pthread_key_create F
>  GLIBC_2.32 pthread_mutex_consistent F
>  GLIBC_2.32 pthread_mutex_consistent_np F
>  GLIBC_2.32 pthread_mutex_destroy F
> @@ -1943,7 +1945,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 3c1054101c..d79ba9adbf 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.32 __open F
>  GLIBC_2.32 __open64 F
>  GLIBC_2.32 __pread64 F
>  GLIBC_2.32 __pthread_getspecific F
> -GLIBC_2.32 __pthread_key_create F
>  GLIBC_2.32 __pthread_mutex_destroy F
>  GLIBC_2.32 __pthread_mutex_init F
>  GLIBC_2.32 __pthread_mutex_lock F
> @@ -103,7 +102,6 @@ GLIBC_2.32 pthread_getcpuclockid F
>  GLIBC_2.32 pthread_getname_np F
>  GLIBC_2.32 pthread_getspecific F
>  GLIBC_2.32 pthread_join F
> -GLIBC_2.32 pthread_key_create F
>  GLIBC_2.32 pthread_key_delete F
>  GLIBC_2.32 pthread_kill F
>  GLIBC_2.32 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 9e6b989de2..451c02d687 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -158,8 +158,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.4 _Exit F
> @@ -490,6 +492,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_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1548,6 +1551,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_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index c2892c4b8d..d00e0e9258 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -48,7 +48,6 @@ GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
>  GLIBC_2.4 __pthread_getspecific F
> -GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
> -GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 319cf8474a..873d6c3f22 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -155,8 +155,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.4 _Exit F
> @@ -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_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1545,6 +1548,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_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index c2892c4b8d..d00e0e9258 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -48,7 +48,6 @@ GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
>  GLIBC_2.4 __pthread_getspecific F
> -GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
> -GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index a9094c6575..d9149b68cc 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_key_create F
>  GLIBC_2.29 __pthread_once F
>  GLIBC_2.29 __pthread_unwind_next F
>  GLIBC_2.29 __ptsname_r_chk F
> @@ -1437,6 +1438,7 @@ GLIBC_2.29 pthread_exit F
>  GLIBC_2.29 pthread_getaffinity_np F
>  GLIBC_2.29 pthread_getattr_np F
>  GLIBC_2.29 pthread_getschedparam F
> +GLIBC_2.29 pthread_key_create F
>  GLIBC_2.29 pthread_mutex_consistent F
>  GLIBC_2.29 pthread_mutex_consistent_np F
>  GLIBC_2.29 pthread_mutex_destroy F
> @@ -2127,7 +2129,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 2d125f11a3..e3721d98e6 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.29 __open F
>  GLIBC_2.29 __open64 F
>  GLIBC_2.29 __pread64 F
>  GLIBC_2.29 __pthread_getspecific F
> -GLIBC_2.29 __pthread_key_create F
>  GLIBC_2.29 __pthread_mutex_destroy F
>  GLIBC_2.29 __pthread_mutex_init F
>  GLIBC_2.29 __pthread_mutex_lock F
> @@ -101,7 +100,6 @@ GLIBC_2.29 pthread_getcpuclockid F
>  GLIBC_2.29 pthread_getname_np F
>  GLIBC_2.29 pthread_getspecific F
>  GLIBC_2.29 pthread_join F
> -GLIBC_2.29 pthread_key_create F
>  GLIBC_2.29 pthread_key_delete F
>  GLIBC_2.29 pthread_kill F
>  GLIBC_2.29 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 63e458dc99..938fa14288 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1272,6 +1273,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2085,8 +2087,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 428ff25c25..425d1df5a3 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -865,6 +866,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2252,8 +2254,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 1d84eb35fb..b186b3039b 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 3556b0eac4..c34b5a157d 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1293,6 +1294,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2117,8 +2119,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 88e178b1c3..b49b6ef57a 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 245ae8da1f..56d55caed9 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -159,8 +159,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.4 _Exit F
> @@ -476,6 +478,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_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1528,6 +1531,7 @@ GLIBC_2.4 pthread_exit F
>  GLIBC_2.4 pthread_getaffinity_np F
>  GLIBC_2.4 pthread_getattr_np F
>  GLIBC_2.4 pthread_getschedparam F
> +GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index c2892c4b8d..d00e0e9258 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -48,7 +48,6 @@ GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
>  GLIBC_2.4 __pthread_getspecific F
> -GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -122,7 +121,6 @@ GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
> -GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index fba3ac0138..a3b3bf4f74 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -864,6 +865,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2197,8 +2199,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 1d84eb35fb..b186b3039b 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 6a6d813b2c..75213c08d4 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_key_create F
>  GLIBC_2.18 __pthread_once F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
> @@ -1452,6 +1453,7 @@ GLIBC_2.18 pthread_exit F
>  GLIBC_2.18 pthread_getaffinity_np F
>  GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
> +GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
> @@ -2178,7 +2180,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 b19c648328..ca115fe783 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
>  GLIBC_2.18 __pthread_getspecific F
> -GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_mutex_destroy F
>  GLIBC_2.18 __pthread_mutex_init F
>  GLIBC_2.18 __pthread_mutex_lock F
> @@ -90,7 +89,6 @@ GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_join F
> -GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_kill F
>  GLIBC_2.18 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 7138bb3fe7..014d53f893 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_key_create F
>  GLIBC_2.18 __pthread_once F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
> @@ -1452,6 +1453,7 @@ GLIBC_2.18 pthread_exit F
>  GLIBC_2.18 pthread_getaffinity_np F
>  GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
> +GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
> @@ -2175,7 +2177,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 b19c648328..ca115fe783 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
>  GLIBC_2.18 __pthread_getspecific F
> -GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_mutex_destroy F
>  GLIBC_2.18 __pthread_mutex_init F
>  GLIBC_2.18 __pthread_mutex_lock F
> @@ -90,7 +89,6 @@ GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_join F
> -GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_kill F
>  GLIBC_2.18 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index d070746259..46c7716ee6 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2168,8 +2170,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 0d7d23b8f3..2b830751c8 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index d40d0079fc..5666362839 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2166,8 +2168,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 0d7d23b8f3..2b830751c8 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index d56b5a25cb..97866f80c7 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -861,6 +862,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2174,8 +2176,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 d334efb37c..3d9321f9e0 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x8
>  GLIBC_2.0 __read F
> @@ -859,6 +860,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2168,8 +2170,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 4422b5ca92..3a0c0c5d8a 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_key_create F
>  GLIBC_2.21 __pthread_once F
>  GLIBC_2.21 __pthread_unwind_next F
>  GLIBC_2.21 __ptsname_r_chk F
> @@ -1494,6 +1495,7 @@ GLIBC_2.21 pthread_exit F
>  GLIBC_2.21 pthread_getaffinity_np F
>  GLIBC_2.21 pthread_getattr_np F
>  GLIBC_2.21 pthread_getschedparam F
> +GLIBC_2.21 pthread_key_create F
>  GLIBC_2.21 pthread_mutex_consistent F
>  GLIBC_2.21 pthread_mutex_consistent_np F
>  GLIBC_2.21 pthread_mutex_destroy F
> @@ -2216,7 +2218,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 34c81eb8db..06500b1865 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.21 __open F
>  GLIBC_2.21 __open64 F
>  GLIBC_2.21 __pread64 F
>  GLIBC_2.21 __pthread_getspecific F
> -GLIBC_2.21 __pthread_key_create F
>  GLIBC_2.21 __pthread_mutex_destroy F
>  GLIBC_2.21 __pthread_mutex_init F
>  GLIBC_2.21 __pthread_mutex_lock F
> @@ -90,7 +89,6 @@ GLIBC_2.21 pthread_getcpuclockid F
>  GLIBC_2.21 pthread_getname_np F
>  GLIBC_2.21 pthread_getspecific F
>  GLIBC_2.21 pthread_join F
> -GLIBC_2.21 pthread_key_create F
>  GLIBC_2.21 pthread_key_delete F
>  GLIBC_2.21 pthread_kill F
>  GLIBC_2.21 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 8bd6dd5b48..c01a200e83 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -872,6 +873,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2224,8 +2226,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 9ef23ed6d6..d36522b751 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 6bf7342f4c..3eced88f9f 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -872,6 +873,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2257,8 +2259,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 2d616e24cd..35b689a767 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_key_create F
>  GLIBC_2.3 __pthread_once F
>  GLIBC_2.3 __pwrite64 F
>  GLIBC_2.3 __rawmemchr F
> @@ -1379,6 +1380,7 @@ GLIBC_2.3 pthread_equal F
>  GLIBC_2.3 pthread_exit F
>  GLIBC_2.3 pthread_getattr_np F
>  GLIBC_2.3 pthread_getschedparam F
> +GLIBC_2.3 pthread_key_create F
>  GLIBC_2.3 pthread_mutex_destroy F
>  GLIBC_2.3 pthread_mutex_init F
>  GLIBC_2.3 pthread_mutex_lock F
> @@ -2087,8 +2089,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 5474d3eb4d..2d24956efe 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -42,7 +42,6 @@ GLIBC_2.3 __open F
>  GLIBC_2.3 __open64 F
>  GLIBC_2.3 __pread64 F
>  GLIBC_2.3 __pthread_getspecific F
> -GLIBC_2.3 __pthread_key_create F
>  GLIBC_2.3 __pthread_mutex_destroy F
>  GLIBC_2.3 __pthread_mutex_init F
>  GLIBC_2.3 __pthread_mutex_lock F
> @@ -108,7 +107,6 @@ GLIBC_2.3 pthread_getconcurrency F
>  GLIBC_2.3 pthread_getcpuclockid F
>  GLIBC_2.3 pthread_getspecific F
>  GLIBC_2.3 pthread_join F
> -GLIBC_2.3 pthread_key_create F
>  GLIBC_2.3 pthread_key_delete F
>  GLIBC_2.3 pthread_kill F
>  GLIBC_2.3 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 247c8f77cf..d54a37f8ad 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_key_create F
>  GLIBC_2.17 __pthread_once F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
> @@ -1538,6 +1539,7 @@ GLIBC_2.17 pthread_exit F
>  GLIBC_2.17 pthread_getaffinity_np F
>  GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
> +GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
> @@ -2378,7 +2380,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 47c5564772..620915eca6 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
>  GLIBC_2.17 __pthread_getspecific F
> -GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_mutex_destroy F
>  GLIBC_2.17 __pthread_mutex_init F
>  GLIBC_2.17 __pthread_mutex_lock F
> @@ -89,7 +88,6 @@ GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_join F
> -GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_kill F
>  GLIBC_2.17 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 1af16292a7..e82a4a7a90 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_key_create F
>  GLIBC_2.33 __pthread_once F
>  GLIBC_2.33 __pthread_unwind_next F
>  GLIBC_2.33 __ptsname_r_chk F
> @@ -1378,6 +1379,7 @@ GLIBC_2.33 pthread_exit F
>  GLIBC_2.33 pthread_getaffinity_np F
>  GLIBC_2.33 pthread_getattr_np F
>  GLIBC_2.33 pthread_getschedparam F
> +GLIBC_2.33 pthread_key_create F
>  GLIBC_2.33 pthread_mutex_consistent F
>  GLIBC_2.33 pthread_mutex_consistent_np F
>  GLIBC_2.33 pthread_mutex_destroy F
> @@ -1945,7 +1947,9 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 e86e8cab1d..c2dd7f8dee 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -13,7 +13,6 @@ GLIBC_2.33 __open F
>  GLIBC_2.33 __open64 F
>  GLIBC_2.33 __pread64 F
>  GLIBC_2.33 __pthread_getspecific F
> -GLIBC_2.33 __pthread_key_create F
>  GLIBC_2.33 __pthread_mutex_destroy F
>  GLIBC_2.33 __pthread_mutex_init F
>  GLIBC_2.33 __pthread_mutex_lock F
> @@ -103,7 +102,6 @@ GLIBC_2.33 pthread_getcpuclockid F
>  GLIBC_2.33 pthread_getname_np F
>  GLIBC_2.33 pthread_getspecific F
>  GLIBC_2.33 pthread_join F
> -GLIBC_2.33 pthread_key_create F
>  GLIBC_2.33 pthread_key_delete F
>  GLIBC_2.33 pthread_kill F
>  GLIBC_2.33 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 54038ac5ba..0c81f1a72c 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_key_create F
>  GLIBC_2.27 __pthread_once F
>  GLIBC_2.27 __pthread_unwind_next F
>  GLIBC_2.27 __ptsname_r_chk F
> @@ -1440,6 +1441,7 @@ GLIBC_2.27 pthread_exit F
>  GLIBC_2.27 pthread_getaffinity_np F
>  GLIBC_2.27 pthread_getattr_np F
>  GLIBC_2.27 pthread_getschedparam F
> +GLIBC_2.27 pthread_key_create F
>  GLIBC_2.27 pthread_mutex_consistent F
>  GLIBC_2.27 pthread_mutex_consistent_np F
>  GLIBC_2.27 pthread_mutex_destroy F
> @@ -2145,7 +2147,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 220affa7f0..d53306f3cb 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.27 __open F
>  GLIBC_2.27 __open64 F
>  GLIBC_2.27 __pread64 F
>  GLIBC_2.27 __pthread_getspecific F
> -GLIBC_2.27 __pthread_key_create F
>  GLIBC_2.27 __pthread_mutex_destroy F
>  GLIBC_2.27 __pthread_mutex_init F
>  GLIBC_2.27 __pthread_mutex_lock F
> @@ -90,7 +89,6 @@ GLIBC_2.27 pthread_getcpuclockid F
>  GLIBC_2.27 pthread_getname_np F
>  GLIBC_2.27 pthread_getspecific F
>  GLIBC_2.27 pthread_join F
> -GLIBC_2.27 pthread_key_create F
>  GLIBC_2.27 pthread_key_delete F
>  GLIBC_2.27 pthread_kill F
>  GLIBC_2.27 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 1e896254ef..ca08d2f3f5 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -863,6 +864,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2222,8 +2224,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 81b8d5ce5c..accbf2be59 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 3cf10b2ab2..061e0c6ffa 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1290,6 +1291,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2123,8 +2125,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 b916709d08..9d6d87494a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -22,7 +22,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -89,7 +88,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index f7bded858a..d102c24997 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1276,6 +1277,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2092,8 +2094,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index c8ec299eac..3ed1b31c84 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1276,6 +1277,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2089,8 +2091,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 11fa4711d8..bf871d121b 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 64529443e9..78f69c96ab 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_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
> @@ -866,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2213,8 +2215,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 1d834d6d54..85a6f26e5d 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -9,7 +9,6 @@ GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
>  GLIBC_2.0 __pthread_getspecific F
> -GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -45,7 +44,6 @@ GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 5c5ad0af63..49d6360768 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_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1319,6 +1320,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2140,8 +2142,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 88e178b1c3..b49b6ef57a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_getspecific F
> -GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 1805cd6b9b..c795ffb505 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_key_create F
>  GLIBC_2.2.5 __pthread_once F
>  GLIBC_2.2.5 __pwrite64 F
>  GLIBC_2.2.5 __rawmemchr F
> @@ -1287,6 +1288,7 @@ GLIBC_2.2.5 pthread_equal F
>  GLIBC_2.2.5 pthread_exit F
>  GLIBC_2.2.5 pthread_getattr_np F
>  GLIBC_2.2.5 pthread_getschedparam F
> +GLIBC_2.2.5 pthread_key_create F
>  GLIBC_2.2.5 pthread_mutex_destroy F
>  GLIBC_2.2.5 pthread_mutex_init F
>  GLIBC_2.2.5 pthread_mutex_lock F
> @@ -2099,8 +2101,10 @@ 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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 f11ffd687f..0408564253 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2.5 __open F
>  GLIBC_2.2.5 __open64 F
>  GLIBC_2.2.5 __pread64 F
>  GLIBC_2.2.5 __pthread_getspecific F
> -GLIBC_2.2.5 __pthread_key_create F
>  GLIBC_2.2.5 __pthread_mutex_destroy F
>  GLIBC_2.2.5 __pthread_mutex_init F
>  GLIBC_2.2.5 __pthread_mutex_lock F
> @@ -88,7 +87,6 @@ GLIBC_2.2.5 pthread_getconcurrency F
>  GLIBC_2.2.5 pthread_getcpuclockid F
>  GLIBC_2.2.5 pthread_getspecific F
>  GLIBC_2.2.5 pthread_join F
> -GLIBC_2.2.5 pthread_key_create F
>  GLIBC_2.2.5 pthread_key_delete F
>  GLIBC_2.2.5 pthread_kill F
>  GLIBC_2.2.5 pthread_kill_other_threads_np F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 780679cb52..74ccdc4905 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_key_create F
>  GLIBC_2.16 __pthread_once F
>  GLIBC_2.16 __pthread_unwind_next F
>  GLIBC_2.16 __ptsname_r_chk F
> @@ -1457,6 +1458,7 @@ GLIBC_2.16 pthread_exit F
>  GLIBC_2.16 pthread_getaffinity_np F
>  GLIBC_2.16 pthread_getattr_np F
>  GLIBC_2.16 pthread_getschedparam F
> +GLIBC_2.16 pthread_key_create F
>  GLIBC_2.16 pthread_mutex_consistent F
>  GLIBC_2.16 pthread_mutex_consistent_np F
>  GLIBC_2.16 pthread_mutex_destroy F
> @@ -2197,7 +2199,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_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_key_create 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 579d0ffea2..79ab1b8cef 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -14,7 +14,6 @@ GLIBC_2.16 __open F
>  GLIBC_2.16 __open64 F
>  GLIBC_2.16 __pread64 F
>  GLIBC_2.16 __pthread_getspecific F
> -GLIBC_2.16 __pthread_key_create F
>  GLIBC_2.16 __pthread_mutex_destroy F
>  GLIBC_2.16 __pthread_mutex_init F
>  GLIBC_2.16 __pthread_mutex_lock F
> @@ -89,7 +88,6 @@ GLIBC_2.16 pthread_getcpuclockid F
>  GLIBC_2.16 pthread_getname_np F
>  GLIBC_2.16 pthread_getspecific F
>  GLIBC_2.16 pthread_join F
> -GLIBC_2.16 pthread_key_create F
>  GLIBC_2.16 pthread_key_delete F
>  GLIBC_2.16 pthread_kill F
>  GLIBC_2.16 pthread_kill_other_threads_np F
> 

Ok.

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

* Re: [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific into libc
  2021-03-16 17:30 ` [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific " Florian Weimer
@ 2021-03-24 14:12   ` Adhemerval Zanella
  2021-03-24 14:38     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:12 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> The symbols have been moved using scripts/move-symbol-to-libc.py.


LGTM in general, some comments below.

> ---
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 |  6 +++--
>  nptl/nptl-init.c                              |  1 -
>  nptl/pthreadP.h                               |  2 +-
>  nptl/pthread_getspecific.c                    | 22 +++++++++++++++----
>  sysdeps/nptl/libc-lockP.h                     |  2 --
>  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 --
>  68 files changed, 152 insertions(+), 70 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 4255953fad..c66e4dccab 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -78,6 +78,7 @@ routines = \
>    pthread_getaffinity \
>    pthread_getattr_np \
>    pthread_getschedparam \
> +  pthread_getspecific \
>    pthread_key_create \
>    pthread_keys \
>    pthread_mutex_consistent \
> @@ -158,7 +159,6 @@ libpthread-routines = \
>    pthread_getconcurrency \
>    pthread_getcpuclockid \
>    pthread_getname \
> -  pthread_getspecific \
>    pthread_join \
>    pthread_join_common \
>    pthread_key_delete \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index d44958f5b6..218d6bbbf8 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -1,5 +1,6 @@
>  libc {
>    GLIBC_2.0 {
> +    __pthread_getspecific;
>      __pthread_key_create;
>      __pthread_once;
>      _pthread_cleanup_pop;
> @@ -29,6 +30,7 @@ libc {
>      pthread_equal;
>      pthread_exit;
>      pthread_getschedparam;
> +    pthread_getspecific;
>      pthread_key_create;
>      pthread_mutex_destroy;
>      pthread_mutex_init;
> @@ -88,8 +90,10 @@ libc {
>    }
>    GLIBC_2.34 {
>      __pthread_cleanup_routine;
> +    __pthread_getspecific;

Why do we need a __pthread_getspecific for 2.34?

>      __pthread_key_create;
>      __pthread_once;
> +    pthread_getspecific;
>      pthread_key_create;
>      pthread_mutex_consistent;
>      pthread_once;
> @@ -146,7 +150,6 @@ libpthread {
>      __lseek;
>      __open;
>      __pthread_atfork;
> -    __pthread_getspecific;
>      __pthread_mutex_destroy;
>      __pthread_mutex_init;
>      __pthread_mutex_lock;
> @@ -181,7 +184,6 @@ libpthread {
>      pthread_cond_wait;
>      pthread_create;
>      pthread_detach;
> -    pthread_getspecific;
>      pthread_join;
>      pthread_key_delete;
>      pthread_kill;
> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index b1a8b1a95b..5be58fc966 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
>      .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
>      .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
>      .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
> -    .ptr___pthread_getspecific = __pthread_getspecific,
>      .ptr___pthread_setspecific = __pthread_setspecific,
>      .ptr__nptl_setxid = __nptl_setxid,
>    };

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 38aeed1dfc..1d69a0f617 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -518,6 +518,7 @@ extern int __pthread_condattr_init (pthread_condattr_t *attr);
>  extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
>  extern int __pthread_key_delete (pthread_key_t key);
>  extern void *__pthread_getspecific (pthread_key_t key);
> +libc_hidden_proto (__pthread_getspecific)
>  extern int __pthread_setspecific (pthread_key_t key, const void *value);
>  extern int __pthread_once (pthread_once_t *once_control,
>  			   void (*init_routine) (void));
> @@ -553,7 +554,6 @@ hidden_proto (__pthread_mutex_unlock)
>  hidden_proto (__pthread_rwlock_rdlock)
>  hidden_proto (__pthread_rwlock_wrlock)
>  hidden_proto (__pthread_rwlock_unlock)
> -hidden_proto (__pthread_getspecific)
>  hidden_proto (__pthread_setspecific)
>  hidden_proto (__pthread_testcancel)
>  hidden_proto (__pthread_mutexattr_init)

Ok.

> diff --git a/nptl/pthread_getspecific.c b/nptl/pthread_getspecific.c
> index d38847e1c2..320ff2aa35 100644
> --- a/nptl/pthread_getspecific.c
> +++ b/nptl/pthread_getspecific.c
> @@ -18,10 +18,10 @@
>  
>  #include <stdlib.h>
>  #include "pthreadP.h"
> -
> +#include <shlib-compat.h>
>  
>  void *
> -__pthread_getspecific (pthread_key_t key)
> +__pthread_getspecific_1 (pthread_key_t key)
>  {
>    struct pthread_key_data *data;
>  
> @@ -63,5 +63,19 @@ __pthread_getspecific (pthread_key_t key)
>  
>    return result;
>  }
> -weak_alias (__pthread_getspecific, pthread_getspecific)
> -hidden_def (__pthread_getspecific)
> +versioned_symbol (libc, __pthread_getspecific_1, __pthread_getspecific,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_getspecific_1, __pthread_getspecific)
> +
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_getspecific_1, __pthread_getspecific_2)
> +strong_alias (__pthread_getspecific_1, __pthread_getspecific_3)
> +strong_alias (__pthread_getspecific_1, __pthread_getspecific_4)
> +
> +versioned_symbol (libc, __pthread_getspecific_2, pthread_getspecific,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libc, __pthread_getspecific_3,
> +	       __pthread_getspecific, GLIBC_2_0);
> +compat_symbol (libc, __pthread_getspecific_4, pthread_getspecific, GLIBC_2_0);
> +#endif

I think you might want to revise it once compat_symbol has support
for multiple targets.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 64c7a99bbf..bf92a035f8 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -339,7 +339,6 @@ weak_extern (__pthread_rwlock_wrlock)
>  weak_extern (__pthread_rwlock_trywrlock)
>  weak_extern (__pthread_rwlock_unlock)
>  weak_extern (__pthread_setspecific)
> -weak_extern (__pthread_getspecific)
>  weak_extern (__pthread_initialize)
>  weak_extern (__pthread_atfork)
>  # else
> @@ -358,7 +357,6 @@ weak_extern (__pthread_atfork)
>  #  pragma weak __pthread_rwlock_trywrlock
>  #  pragma weak __pthread_rwlock_unlock
>  #  pragma weak __pthread_setspecific
> -#  pragma weak __pthread_getspecific
>  #  pragma weak __pthread_initialize
>  #  pragma weak __pthread_atfork
>  # endif

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 69ba1d8278..4b4816b873 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -49,7 +49,6 @@ struct pthread_functions
>    int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
> -  void *(*ptr___pthread_getspecific) (pthread_key_t);
>    int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
>    int (*ptr__nptl_setxid) (struct xid_command *);
>  };

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index edd8ff4e1a..ae0e7a313e 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_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
>  GLIBC_2.17 __pthread_unwind_next F
> @@ -1450,6 +1451,7 @@ GLIBC_2.17 pthread_exit F
>  GLIBC_2.17 pthread_getaffinity_np F
>  GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
> +GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
> @@ -2185,9 +2187,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 620915eca6..667e00551a 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_getspecific F
>  GLIBC_2.17 __pthread_mutex_destroy F
>  GLIBC_2.17 __pthread_mutex_init F
>  GLIBC_2.17 __pthread_mutex_lock F
> @@ -86,7 +85,6 @@ GLIBC_2.17 pthread_detach F
>  GLIBC_2.17 pthread_getconcurrency F
>  GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
> -GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_join F
>  GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index ad921167a2..d27a8d9ad4 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x8
> @@ -889,6 +890,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2266,9 +2268,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 85a6f26e5d..66f17908e0 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 2bdf0fffdb..f740f0d40a 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_getspecific F
>  GLIBC_2.32 __pthread_key_create F
>  GLIBC_2.32 __pthread_once F
>  GLIBC_2.32 __pthread_unwind_next F
> @@ -1377,6 +1378,7 @@ GLIBC_2.32 pthread_exit F
>  GLIBC_2.32 pthread_getaffinity_np F
>  GLIBC_2.32 pthread_getattr_np F
>  GLIBC_2.32 pthread_getschedparam F
> +GLIBC_2.32 pthread_getspecific F
>  GLIBC_2.32 pthread_key_create F
>  GLIBC_2.32 pthread_mutex_consistent F
>  GLIBC_2.32 pthread_mutex_consistent_np F
> @@ -1945,9 +1947,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 d79ba9adbf..977e964a47 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_getspecific F
>  GLIBC_2.32 __pthread_mutex_destroy F
>  GLIBC_2.32 __pthread_mutex_init F
>  GLIBC_2.32 __pthread_mutex_lock F
> @@ -100,7 +99,6 @@ GLIBC_2.32 pthread_getattr_default_np F
>  GLIBC_2.32 pthread_getconcurrency F
>  GLIBC_2.32 pthread_getcpuclockid F
>  GLIBC_2.32 pthread_getname_np F
> -GLIBC_2.32 pthread_getspecific F
>  GLIBC_2.32 pthread_join F
>  GLIBC_2.32 pthread_key_delete F
>  GLIBC_2.32 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 451c02d687..60baeff299 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -158,9 +158,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> @@ -492,6 +494,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_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
> @@ -1551,6 +1554,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_getspecific F
>  GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index d00e0e9258..d6612a1e9e 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_getspecific F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
>  GLIBC_2.4 pthread_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
> -GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 873d6c3f22..3525e76e3c 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -155,9 +155,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> @@ -489,6 +491,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_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
> @@ -1548,6 +1551,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_getspecific F
>  GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index d00e0e9258..d6612a1e9e 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_getspecific F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
>  GLIBC_2.4 pthread_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
> -GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index d9149b68cc..ec6b7f2755 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_getspecific F
>  GLIBC_2.29 __pthread_key_create F
>  GLIBC_2.29 __pthread_once F
>  GLIBC_2.29 __pthread_unwind_next F
> @@ -1438,6 +1439,7 @@ GLIBC_2.29 pthread_exit F
>  GLIBC_2.29 pthread_getaffinity_np F
>  GLIBC_2.29 pthread_getattr_np F
>  GLIBC_2.29 pthread_getschedparam F
> +GLIBC_2.29 pthread_getspecific F
>  GLIBC_2.29 pthread_key_create F
>  GLIBC_2.29 pthread_mutex_consistent F
>  GLIBC_2.29 pthread_mutex_consistent_np F
> @@ -2129,9 +2131,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 e3721d98e6..78eb06a880 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_getspecific F
>  GLIBC_2.29 __pthread_mutex_destroy F
>  GLIBC_2.29 __pthread_mutex_init F
>  GLIBC_2.29 __pthread_mutex_lock F
> @@ -98,7 +97,6 @@ GLIBC_2.29 pthread_getattr_default_np F
>  GLIBC_2.29 pthread_getconcurrency F
>  GLIBC_2.29 pthread_getcpuclockid F
>  GLIBC_2.29 pthread_getname_np F
> -GLIBC_2.29 pthread_getspecific F
>  GLIBC_2.29 pthread_join F
>  GLIBC_2.29 pthread_key_delete F
>  GLIBC_2.29 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 938fa14288..0ef57987cd 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1273,6 +1274,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2087,9 +2089,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index bf871d121b..cc98751c47 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 425d1df5a3..fa7a28a5e3 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -866,6 +867,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2254,9 +2256,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index b186b3039b..6c0211a134 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index c34b5a157d..078315ddda 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1294,6 +1295,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2119,9 +2121,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index b49b6ef57a..f18ff271c2 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 56d55caed9..e297ce158e 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -159,9 +159,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> @@ -478,6 +480,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_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
>  GLIBC_2.4 __pthread_unwind_next F
> @@ -1531,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_getspecific F
>  GLIBC_2.4 pthread_key_create F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index d00e0e9258..d6612a1e9e 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_getspecific F
>  GLIBC_2.4 __pthread_mutex_destroy F
>  GLIBC_2.4 __pthread_mutex_init F
>  GLIBC_2.4 __pthread_mutex_lock F
> @@ -119,7 +118,6 @@ GLIBC_2.4 pthread_create F
>  GLIBC_2.4 pthread_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
> -GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index a3b3bf4f74..10c54ce3ab 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -865,6 +866,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2199,9 +2201,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index b186b3039b..6c0211a134 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 75213c08d4..e6d033a29b 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_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
>  GLIBC_2.18 __pthread_unwind_next F
> @@ -1453,6 +1454,7 @@ GLIBC_2.18 pthread_exit F
>  GLIBC_2.18 pthread_getaffinity_np F
>  GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
> +GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
> @@ -2180,9 +2182,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 ca115fe783..4751a8e6c5 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_getspecific F
>  GLIBC_2.18 __pthread_mutex_destroy F
>  GLIBC_2.18 __pthread_mutex_init F
>  GLIBC_2.18 __pthread_mutex_lock F
> @@ -87,7 +86,6 @@ GLIBC_2.18 pthread_getattr_default_np F
>  GLIBC_2.18 pthread_getconcurrency F
>  GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
> -GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_join F
>  GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 014d53f893..448c257562 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_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
>  GLIBC_2.18 __pthread_unwind_next F
> @@ -1453,6 +1454,7 @@ GLIBC_2.18 pthread_exit F
>  GLIBC_2.18 pthread_getaffinity_np F
>  GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
> +GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_key_create F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
> @@ -2177,9 +2179,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 ca115fe783..4751a8e6c5 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_getspecific F
>  GLIBC_2.18 __pthread_mutex_destroy F
>  GLIBC_2.18 __pthread_mutex_init F
>  GLIBC_2.18 __pthread_mutex_lock F
> @@ -87,7 +86,6 @@ GLIBC_2.18 pthread_getattr_default_np F
>  GLIBC_2.18 pthread_getconcurrency F
>  GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
> -GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_join F
>  GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 46c7716ee6..8f5df09289 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2170,9 +2172,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 2b830751c8..ea9a850ba9 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 5666362839..4d39526a30 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2168,9 +2170,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 2b830751c8..ea9a850ba9 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 97866f80c7..3cfb9e62db 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -862,6 +863,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2176,9 +2178,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 3d9321f9e0..9b5cc5db4c 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x8
> @@ -860,6 +861,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2170,9 +2172,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 3a0c0c5d8a..1335395b2f 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_getspecific F
>  GLIBC_2.21 __pthread_key_create F
>  GLIBC_2.21 __pthread_once F
>  GLIBC_2.21 __pthread_unwind_next F
> @@ -1495,6 +1496,7 @@ GLIBC_2.21 pthread_exit F
>  GLIBC_2.21 pthread_getaffinity_np F
>  GLIBC_2.21 pthread_getattr_np F
>  GLIBC_2.21 pthread_getschedparam F
> +GLIBC_2.21 pthread_getspecific F
>  GLIBC_2.21 pthread_key_create F
>  GLIBC_2.21 pthread_mutex_consistent F
>  GLIBC_2.21 pthread_mutex_consistent_np F
> @@ -2218,9 +2220,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 06500b1865..e6354e8a80 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_getspecific F
>  GLIBC_2.21 __pthread_mutex_destroy F
>  GLIBC_2.21 __pthread_mutex_init F
>  GLIBC_2.21 __pthread_mutex_lock F
> @@ -87,7 +86,6 @@ GLIBC_2.21 pthread_getattr_default_np F
>  GLIBC_2.21 pthread_getconcurrency F
>  GLIBC_2.21 pthread_getcpuclockid F
>  GLIBC_2.21 pthread_getname_np F
> -GLIBC_2.21 pthread_getspecific F
>  GLIBC_2.21 pthread_join F
>  GLIBC_2.21 pthread_key_delete F
>  GLIBC_2.21 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index c01a200e83..eb5f9814e8 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -873,6 +874,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2226,9 +2228,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index d36522b751..a56ee2d7ca 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 3eced88f9f..b0372c3178 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -873,6 +874,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2259,9 +2261,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 35b689a767..aa4aadbbb4 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_getspecific F
>  GLIBC_2.3 __pthread_key_create F
>  GLIBC_2.3 __pthread_once F
>  GLIBC_2.3 __pwrite64 F
> @@ -1380,6 +1381,7 @@ GLIBC_2.3 pthread_equal F
>  GLIBC_2.3 pthread_exit F
>  GLIBC_2.3 pthread_getattr_np F
>  GLIBC_2.3 pthread_getschedparam F
> +GLIBC_2.3 pthread_getspecific F
>  GLIBC_2.3 pthread_key_create F
>  GLIBC_2.3 pthread_mutex_destroy F
>  GLIBC_2.3 pthread_mutex_init F
> @@ -2089,9 +2091,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 2d24956efe..6b2c9bba60 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.3 __lseek F
>  GLIBC_2.3 __open F
>  GLIBC_2.3 __open64 F
>  GLIBC_2.3 __pread64 F
> -GLIBC_2.3 __pthread_getspecific F
>  GLIBC_2.3 __pthread_mutex_destroy F
>  GLIBC_2.3 __pthread_mutex_init F
>  GLIBC_2.3 __pthread_mutex_lock F
> @@ -105,7 +104,6 @@ GLIBC_2.3 pthread_create F
>  GLIBC_2.3 pthread_detach F
>  GLIBC_2.3 pthread_getconcurrency F
>  GLIBC_2.3 pthread_getcpuclockid F
> -GLIBC_2.3 pthread_getspecific F
>  GLIBC_2.3 pthread_join F
>  GLIBC_2.3 pthread_key_delete F
>  GLIBC_2.3 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index d54a37f8ad..045912572c 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_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
>  GLIBC_2.17 __pthread_unwind_next F
> @@ -1539,6 +1540,7 @@ GLIBC_2.17 pthread_exit F
>  GLIBC_2.17 pthread_getaffinity_np F
>  GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
> +GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_key_create F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
> @@ -2380,9 +2382,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 620915eca6..667e00551a 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_getspecific F
>  GLIBC_2.17 __pthread_mutex_destroy F
>  GLIBC_2.17 __pthread_mutex_init F
>  GLIBC_2.17 __pthread_mutex_lock F
> @@ -86,7 +85,6 @@ GLIBC_2.17 pthread_detach F
>  GLIBC_2.17 pthread_getconcurrency F
>  GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
> -GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_join F
>  GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index e82a4a7a90..5ef9b35b6d 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_getspecific F
>  GLIBC_2.33 __pthread_key_create F
>  GLIBC_2.33 __pthread_once F
>  GLIBC_2.33 __pthread_unwind_next F
> @@ -1379,6 +1380,7 @@ GLIBC_2.33 pthread_exit F
>  GLIBC_2.33 pthread_getaffinity_np F
>  GLIBC_2.33 pthread_getattr_np F
>  GLIBC_2.33 pthread_getschedparam F
> +GLIBC_2.33 pthread_getspecific F
>  GLIBC_2.33 pthread_key_create F
>  GLIBC_2.33 pthread_mutex_consistent F
>  GLIBC_2.33 pthread_mutex_consistent_np F
> @@ -1947,9 +1949,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 c2dd7f8dee..5665726bbb 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_getspecific F
>  GLIBC_2.33 __pthread_mutex_destroy F
>  GLIBC_2.33 __pthread_mutex_init F
>  GLIBC_2.33 __pthread_mutex_lock F
> @@ -100,7 +99,6 @@ GLIBC_2.33 pthread_getattr_default_np F
>  GLIBC_2.33 pthread_getconcurrency F
>  GLIBC_2.33 pthread_getcpuclockid F
>  GLIBC_2.33 pthread_getname_np F
> -GLIBC_2.33 pthread_getspecific F
>  GLIBC_2.33 pthread_join F
>  GLIBC_2.33 pthread_key_delete F
>  GLIBC_2.33 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 0c81f1a72c..7f7385d87c 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_getspecific F
>  GLIBC_2.27 __pthread_key_create F
>  GLIBC_2.27 __pthread_once F
>  GLIBC_2.27 __pthread_unwind_next F
> @@ -1441,6 +1442,7 @@ GLIBC_2.27 pthread_exit F
>  GLIBC_2.27 pthread_getaffinity_np F
>  GLIBC_2.27 pthread_getattr_np F
>  GLIBC_2.27 pthread_getschedparam F
> +GLIBC_2.27 pthread_getspecific F
>  GLIBC_2.27 pthread_key_create F
>  GLIBC_2.27 pthread_mutex_consistent F
>  GLIBC_2.27 pthread_mutex_consistent_np F
> @@ -2147,9 +2149,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 d53306f3cb..5abf715b3b 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_getspecific F
>  GLIBC_2.27 __pthread_mutex_destroy F
>  GLIBC_2.27 __pthread_mutex_init F
>  GLIBC_2.27 __pthread_mutex_lock F
> @@ -87,7 +86,6 @@ GLIBC_2.27 pthread_getattr_default_np F
>  GLIBC_2.27 pthread_getconcurrency F
>  GLIBC_2.27 pthread_getcpuclockid F
>  GLIBC_2.27 pthread_getname_np F
> -GLIBC_2.27 pthread_getspecific F
>  GLIBC_2.27 pthread_join F
>  GLIBC_2.27 pthread_key_delete F
>  GLIBC_2.27 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index ca08d2f3f5..c062cbcde7 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -864,6 +865,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2224,9 +2226,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index accbf2be59..bfeb7b715f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 061e0c6ffa..cfc797c7fb 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1291,6 +1292,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2125,9 +2127,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 9d6d87494a..3de726cb37 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -21,7 +21,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -86,7 +85,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index d102c24997..08db66df29 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1277,6 +1278,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2094,9 +2096,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index bf871d121b..cc98751c47 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 3ed1b31c84..10b8352efb 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1277,6 +1278,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2091,9 +2093,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index bf871d121b..cc98751c47 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 78f69c96ab..dce478788e 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_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -867,6 +868,7 @@ GLIBC_2.0 pthread_condattr_init F
>  GLIBC_2.0 pthread_equal F
>  GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
> +GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
> @@ -2215,9 +2217,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 85a6f26e5d..66f17908e0 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -8,7 +8,6 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_mutex_destroy F
>  GLIBC_2.0 __pthread_mutex_init F
>  GLIBC_2.0 __pthread_mutex_lock F
> @@ -42,7 +41,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_getspecific F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 49d6360768..1dc6c45074 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_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
>  GLIBC_2.2 __pwrite64 F
> @@ -1320,6 +1321,7 @@ GLIBC_2.2 pthread_condattr_init F
>  GLIBC_2.2 pthread_equal F
>  GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
> +GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
> @@ -2142,9 +2144,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index b49b6ef57a..f18ff271c2 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_mutex_destroy F
>  GLIBC_2.2 __pthread_mutex_init F
>  GLIBC_2.2 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2 pthread_create F
>  GLIBC_2.2 pthread_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
> -GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index c795ffb505..e74d5c43c6 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_getspecific F
>  GLIBC_2.2.5 __pthread_key_create F
>  GLIBC_2.2.5 __pthread_once F
>  GLIBC_2.2.5 __pwrite64 F
> @@ -1288,6 +1289,7 @@ GLIBC_2.2.5 pthread_equal F
>  GLIBC_2.2.5 pthread_exit F
>  GLIBC_2.2.5 pthread_getattr_np F
>  GLIBC_2.2.5 pthread_getschedparam F
> +GLIBC_2.2.5 pthread_getspecific F
>  GLIBC_2.2.5 pthread_key_create F
>  GLIBC_2.2.5 pthread_mutex_destroy F
>  GLIBC_2.2.5 pthread_mutex_init F
> @@ -2101,9 +2103,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index 0408564253..5ea8f8020b 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -20,7 +20,6 @@ GLIBC_2.2.5 __lseek F
>  GLIBC_2.2.5 __open F
>  GLIBC_2.2.5 __open64 F
>  GLIBC_2.2.5 __pread64 F
> -GLIBC_2.2.5 __pthread_getspecific F
>  GLIBC_2.2.5 __pthread_mutex_destroy F
>  GLIBC_2.2.5 __pthread_mutex_init F
>  GLIBC_2.2.5 __pthread_mutex_lock F
> @@ -85,7 +84,6 @@ GLIBC_2.2.5 pthread_create F
>  GLIBC_2.2.5 pthread_detach F
>  GLIBC_2.2.5 pthread_getconcurrency F
>  GLIBC_2.2.5 pthread_getcpuclockid F
> -GLIBC_2.2.5 pthread_getspecific F
>  GLIBC_2.2.5 pthread_join F
>  GLIBC_2.2.5 pthread_key_delete F
>  GLIBC_2.2.5 pthread_kill F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 74ccdc4905..007dd401d3 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_getspecific F
>  GLIBC_2.16 __pthread_key_create F
>  GLIBC_2.16 __pthread_once F
>  GLIBC_2.16 __pthread_unwind_next F
> @@ -1458,6 +1459,7 @@ GLIBC_2.16 pthread_exit F
>  GLIBC_2.16 pthread_getaffinity_np F
>  GLIBC_2.16 pthread_getattr_np F
>  GLIBC_2.16 pthread_getschedparam F
> +GLIBC_2.16 pthread_getspecific F
>  GLIBC_2.16 pthread_key_create F
>  GLIBC_2.16 pthread_mutex_consistent F
>  GLIBC_2.16 pthread_mutex_consistent_np F
> @@ -2199,9 +2201,11 @@ 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_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create 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 79ab1b8cef..6e3cb18549 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_getspecific F
>  GLIBC_2.16 __pthread_mutex_destroy F
>  GLIBC_2.16 __pthread_mutex_init F
>  GLIBC_2.16 __pthread_mutex_lock F
> @@ -86,7 +85,6 @@ GLIBC_2.16 pthread_detach F
>  GLIBC_2.16 pthread_getconcurrency F
>  GLIBC_2.16 pthread_getcpuclockid F
>  GLIBC_2.16 pthread_getname_np F
> -GLIBC_2.16 pthread_getspecific F
>  GLIBC_2.16 pthread_join F
>  GLIBC_2.16 pthread_key_delete F
>  GLIBC_2.16 pthread_kill F
> 

Ok.

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

* Re: [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific into libc
  2021-03-16 17:30 ` [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific " Florian Weimer
@ 2021-03-24 14:26   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:26 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> The symbols have been moved using scripts/move-symbol-to-libc.py.

LGTM in general, some comments below.

> ---
>  nptl/Makefile                                 |  2 +-
>  nptl/Versions                                 |  6 +++--
>  nptl/nptl-init.c                              |  1 -
>  nptl/pthreadP.h                               |  2 +-
>  nptl/pthread_setspecific.c                    | 22 +++++++++++++++----
>  sysdeps/nptl/libc-lockP.h                     |  2 --
>  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 --
>  68 files changed, 152 insertions(+), 70 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index c66e4dccab..fa8bcf8c62 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -87,6 +87,7 @@ routines = \
>    pthread_setcancelstate \
>    pthread_setcanceltype \
>    pthread_setschedparam \
> +  pthread_setspecific \
>    pthread_sigmask \
>    unwind \
>  
> @@ -208,7 +209,6 @@ libpthread-routines = \
>    pthread_setconcurrency \
>    pthread_setname \
>    pthread_setschedprio \
> -  pthread_setspecific \
>    pthread_sigqueue \
>    pthread_spin_destroy \
>    pthread_spin_init \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 218d6bbbf8..58a37b8816 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -3,6 +3,7 @@ libc {
>      __pthread_getspecific;
>      __pthread_key_create;
>      __pthread_once;
> +    __pthread_setspecific;
>      _pthread_cleanup_pop;
>      _pthread_cleanup_pop_restore;
>      _pthread_cleanup_push;
> @@ -41,6 +42,7 @@ libc {
>      pthread_setcancelstate;
>      pthread_setcanceltype;
>      pthread_setschedparam;
> +    pthread_setspecific;
>      pthread_sigmask;
>    }
>    GLIBC_2.1 {
> @@ -93,10 +95,12 @@ libc {
>      __pthread_getspecific;
>      __pthread_key_create;
>      __pthread_once;
> +    __pthread_setspecific;

Why do we need a __pthread_setspecific for 2.34? 

>      pthread_getspecific;
>      pthread_key_create;
>      pthread_mutex_consistent;
>      pthread_once;
> +    pthread_setspecific;
>    }
>    GLIBC_PRIVATE {
>      __futex_abstimed_wait64;
> @@ -158,7 +162,6 @@ libpthread {
>      __pthread_mutexattr_destroy;
>      __pthread_mutexattr_init;
>      __pthread_mutexattr_settype;
> -    __pthread_setspecific;
>      __read;
>      __send;
>      __sigaction;
> @@ -197,7 +200,6 @@ libpthread {
>      pthread_mutexattr_getkind_np;
>      pthread_mutexattr_init;
>      pthread_mutexattr_setkind_np;
> -    pthread_setspecific;
>      pthread_sigmask;
>      pthread_testcancel;
>      raise;

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 5be58fc966..cacbf045a7 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -70,7 +70,6 @@ static const struct pthread_functions pthread_functions =
>      .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
>      .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
>      .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
> -    .ptr___pthread_setspecific = __pthread_setspecific,
>      .ptr__nptl_setxid = __nptl_setxid,
>    };
>  # define ptr_pthread_functions &pthread_functions

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 1d69a0f617..c9e845e4a2 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -520,6 +520,7 @@ extern int __pthread_key_delete (pthread_key_t key);
>  extern void *__pthread_getspecific (pthread_key_t key);
>  libc_hidden_proto (__pthread_getspecific)
>  extern int __pthread_setspecific (pthread_key_t key, const void *value);
> +libc_hidden_proto (__pthread_setspecific)
>  extern int __pthread_once (pthread_once_t *once_control,
>  			   void (*init_routine) (void));
>  libc_hidden_proto (__pthread_once)

Ok.

> @@ -554,7 +555,6 @@ hidden_proto (__pthread_mutex_unlock)
>  hidden_proto (__pthread_rwlock_rdlock)
>  hidden_proto (__pthread_rwlock_wrlock)
>  hidden_proto (__pthread_rwlock_unlock)
> -hidden_proto (__pthread_setspecific)
>  hidden_proto (__pthread_testcancel)
>  hidden_proto (__pthread_mutexattr_init)
>  hidden_proto (__pthread_mutexattr_settype)

Ok.

> diff --git a/nptl/pthread_setspecific.c b/nptl/pthread_setspecific.c
> index a6e84cd001..892a4307e7 100644
> --- a/nptl/pthread_setspecific.c
> +++ b/nptl/pthread_setspecific.c
> @@ -19,10 +19,10 @@
>  #include <errno.h>
>  #include <stdlib.h>
>  #include "pthreadP.h"
> -
> +#include <shlib-compat.h>
>  
>  int
> -__pthread_setspecific (pthread_key_t key, const void *value)
> +__pthread_setspecific_1 (pthread_key_t key, const void *value)
>  {
>    struct pthread *self;
>    unsigned int idx1st;
> @@ -89,5 +89,19 @@ __pthread_setspecific (pthread_key_t key, const void *value)
>  
>    return 0;
>  }
> -weak_alias (__pthread_setspecific, pthread_setspecific)
> -hidden_def (__pthread_setspecific)
> +versioned_symbol (libc, __pthread_setspecific_1, __pthread_setspecific,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_setspecific_1, __pthread_setspecific)
> +
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_setspecific_1, __pthread_setspecific_2)
> +strong_alias (__pthread_setspecific_1, __pthread_setspecific_3)
> +strong_alias (__pthread_setspecific_1, __pthread_setspecific_4)
> +
> +versioned_symbol (libc, __pthread_setspecific_2, pthread_setspecific,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libc, __pthread_setspecific_3,
> +	       __pthread_setspecific, GLIBC_2_0);
> +compat_symbol (libc, __pthread_setspecific_4, pthread_setspecific, GLIBC_2_0);
> +#endif

I think you might want to revise it once compat_symbol has support
for multiple targets.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index bf92a035f8..10a24568a9 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -338,7 +338,6 @@ weak_extern (__pthread_rwlock_tryrdlock)
>  weak_extern (__pthread_rwlock_wrlock)
>  weak_extern (__pthread_rwlock_trywrlock)
>  weak_extern (__pthread_rwlock_unlock)
> -weak_extern (__pthread_setspecific)
>  weak_extern (__pthread_initialize)
>  weak_extern (__pthread_atfork)
>  # else
> @@ -356,7 +355,6 @@ weak_extern (__pthread_atfork)
>  #  pragma weak __pthread_rwlock_wrlock
>  #  pragma weak __pthread_rwlock_trywrlock
>  #  pragma weak __pthread_rwlock_unlock
> -#  pragma weak __pthread_setspecific
>  #  pragma weak __pthread_initialize
>  #  pragma weak __pthread_atfork
>  # endif
> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 4b4816b873..2d89013ff5 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -49,7 +49,6 @@ struct pthread_functions
>    int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
>    int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
> -  int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
>    int (*ptr__nptl_setxid) (struct xid_command *);
>  };
>  

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index ae0e7a313e..2601be32bf 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -342,6 +342,7 @@ GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
> +GLIBC_2.17 __pthread_setspecific F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
>  GLIBC_2.17 __pwrite64 F
> @@ -1464,6 +1465,7 @@ GLIBC_2.17 pthread_self F
>  GLIBC_2.17 pthread_setcancelstate F
>  GLIBC_2.17 pthread_setcanceltype F
>  GLIBC_2.17 pthread_setschedparam F
> +GLIBC_2.17 pthread_setspecific F
>  GLIBC_2.17 pthread_sigmask F
>  GLIBC_2.17 ptrace F
>  GLIBC_2.17 ptsname F
> @@ -2190,8 +2192,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 667e00551a..778eb45ffc 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.17 __pthread_rwlock_tryrdlock F
>  GLIBC_2.17 __pthread_rwlock_trywrlock F
>  GLIBC_2.17 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -132,7 +131,6 @@ GLIBC_2.17 pthread_setaffinity_np F
>  GLIBC_2.17 pthread_setconcurrency F
>  GLIBC_2.17 pthread_setname_np F
>  GLIBC_2.17 pthread_setschedprio F
> -GLIBC_2.17 pthread_setspecific F
>  GLIBC_2.17 pthread_sigqueue F
>  GLIBC_2.17 pthread_spin_destroy F
>  GLIBC_2.17 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index d27a8d9ad4..d334d0759d 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -191,6 +191,7 @@ GLIBC_2.0 __progname_full D 0x8
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x8
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x8
> @@ -901,6 +902,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2271,11 +2273,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 66f17908e0..8ccbe19154 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index f740f0d40a..49034a2bdd 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -331,6 +331,7 @@ GLIBC_2.32 __pthread_cleanup_routine F
>  GLIBC_2.32 __pthread_getspecific F
>  GLIBC_2.32 __pthread_key_create F
>  GLIBC_2.32 __pthread_once F
> +GLIBC_2.32 __pthread_setspecific F
>  GLIBC_2.32 __pthread_unwind_next F
>  GLIBC_2.32 __ptsname_r_chk F
>  GLIBC_2.32 __pwrite64 F
> @@ -1391,6 +1392,7 @@ GLIBC_2.32 pthread_self F
>  GLIBC_2.32 pthread_setcancelstate F
>  GLIBC_2.32 pthread_setcanceltype F
>  GLIBC_2.32 pthread_setschedparam F
> +GLIBC_2.32 pthread_setspecific F
>  GLIBC_2.32 pthread_sigmask F
>  GLIBC_2.32 ptrace F
>  GLIBC_2.32 ptsname F
> @@ -1950,8 +1952,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index 977e964a47..fba129cfad 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -29,7 +29,6 @@ GLIBC_2.32 __pthread_rwlock_tryrdlock F
>  GLIBC_2.32 __pthread_rwlock_trywrlock F
>  GLIBC_2.32 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -150,7 +149,6 @@ GLIBC_2.32 pthread_setattr_default_np F
>  GLIBC_2.32 pthread_setconcurrency F
>  GLIBC_2.32 pthread_setname_np F
>  GLIBC_2.32 pthread_setschedprio F
> -GLIBC_2.32 pthread_setspecific F
>  GLIBC_2.32 pthread_sigqueue F
>  GLIBC_2.32 pthread_spin_destroy F
>  GLIBC_2.32 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 60baeff299..3727e33898 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -161,11 +161,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> @@ -497,6 +499,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
> @@ -1566,6 +1569,7 @@ GLIBC_2.4 pthread_self F
>  GLIBC_2.4 pthread_setcancelstate F
>  GLIBC_2.4 pthread_setcanceltype F
>  GLIBC_2.4 pthread_setschedparam F
> +GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_sigmask F
>  GLIBC_2.4 ptrace F
>  GLIBC_2.4 ptsname F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index d6612a1e9e..2cb1f0e2f5 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
>  GLIBC_2.4 pthread_setaffinity_np F
>  GLIBC_2.4 pthread_setconcurrency F
>  GLIBC_2.4 pthread_setschedprio F
> -GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_spin_destroy F
>  GLIBC_2.4 pthread_spin_init F
>  GLIBC_2.4 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 3525e76e3c..a7bc3a9a8e 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -158,11 +158,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> @@ -494,6 +496,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
> @@ -1563,6 +1566,7 @@ GLIBC_2.4 pthread_self F
>  GLIBC_2.4 pthread_setcancelstate F
>  GLIBC_2.4 pthread_setcanceltype F
>  GLIBC_2.4 pthread_setschedparam F
> +GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_sigmask F
>  GLIBC_2.4 ptrace F
>  GLIBC_2.4 ptsname F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index d6612a1e9e..2cb1f0e2f5 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
>  GLIBC_2.4 pthread_setaffinity_np F
>  GLIBC_2.4 pthread_setconcurrency F
>  GLIBC_2.4 pthread_setschedprio F
> -GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_spin_destroy F
>  GLIBC_2.4 pthread_spin_init F
>  GLIBC_2.4 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index ec6b7f2755..61de7117bd 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -335,6 +335,7 @@ GLIBC_2.29 __pthread_cleanup_routine F
>  GLIBC_2.29 __pthread_getspecific F
>  GLIBC_2.29 __pthread_key_create F
>  GLIBC_2.29 __pthread_once F
> +GLIBC_2.29 __pthread_setspecific F
>  GLIBC_2.29 __pthread_unwind_next F
>  GLIBC_2.29 __ptsname_r_chk F
>  GLIBC_2.29 __pwrite64 F
> @@ -1452,6 +1453,7 @@ GLIBC_2.29 pthread_self F
>  GLIBC_2.29 pthread_setcancelstate F
>  GLIBC_2.29 pthread_setcanceltype F
>  GLIBC_2.29 pthread_setschedparam F
> +GLIBC_2.29 pthread_setspecific F
>  GLIBC_2.29 pthread_sigmask F
>  GLIBC_2.29 ptrace F
>  GLIBC_2.29 ptsname F
> @@ -2134,8 +2136,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index 78eb06a880..760740a4ed 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -29,7 +29,6 @@ GLIBC_2.29 __pthread_rwlock_tryrdlock F
>  GLIBC_2.29 __pthread_rwlock_trywrlock F
>  GLIBC_2.29 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -145,7 +144,6 @@ GLIBC_2.29 pthread_setattr_default_np F
>  GLIBC_2.29 pthread_setconcurrency F
>  GLIBC_2.29 pthread_setname_np F
>  GLIBC_2.29 pthread_setschedprio F
> -GLIBC_2.29 pthread_setspecific F
>  GLIBC_2.29 pthread_sigqueue F
>  GLIBC_2.29 pthread_spin_destroy F
>  GLIBC_2.29 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 0ef57987cd..c380a422ca 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -359,6 +359,7 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x4
> @@ -1285,6 +1286,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2092,11 +2094,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index fa7a28a5e3..dd10b08625 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -878,6 +879,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2259,11 +2261,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 6c0211a134..6b644a2513 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 078315ddda..fe64b5c1f0 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -363,6 +363,7 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x8
> @@ -1306,6 +1307,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2124,11 +2126,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 f18ff271c2..1669fb860d 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index e297ce158e..1af30ff1b3 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -162,11 +162,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
>  GLIBC_2.4 _IO_2_1_stdin_ D 0x98
> @@ -483,6 +485,7 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
>  GLIBC_2.4 __pwrite64 F
> @@ -1546,6 +1549,7 @@ GLIBC_2.4 pthread_self F
>  GLIBC_2.4 pthread_setcancelstate F
>  GLIBC_2.4 pthread_setcanceltype F
>  GLIBC_2.4 pthread_setschedparam F
> +GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_sigmask F
>  GLIBC_2.4 ptrace F
>  GLIBC_2.4 ptsname F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index d6612a1e9e..2cb1f0e2f5 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -64,7 +64,6 @@ GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -162,7 +161,6 @@ GLIBC_2.4 pthread_rwlockattr_setpshared F
>  GLIBC_2.4 pthread_setaffinity_np F
>  GLIBC_2.4 pthread_setconcurrency F
>  GLIBC_2.4 pthread_setschedprio F
> -GLIBC_2.4 pthread_setspecific F
>  GLIBC_2.4 pthread_spin_destroy F
>  GLIBC_2.4 pthread_spin_init F
>  GLIBC_2.4 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 10c54ce3ab..372bb9db63 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -877,6 +878,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2204,11 +2206,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 6c0211a134..6b644a2513 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index e6d033a29b..7b1b02ff24 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -343,6 +343,7 @@ GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
> +GLIBC_2.18 __pthread_setspecific F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
>  GLIBC_2.18 __pwrite64 F
> @@ -1467,6 +1468,7 @@ GLIBC_2.18 pthread_self F
>  GLIBC_2.18 pthread_setcancelstate F
>  GLIBC_2.18 pthread_setcanceltype F
>  GLIBC_2.18 pthread_setschedparam F
> +GLIBC_2.18 pthread_setspecific F
>  GLIBC_2.18 pthread_sigmask F
>  GLIBC_2.18 ptrace F
>  GLIBC_2.18 ptsname F
> @@ -2185,8 +2187,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 4751a8e6c5..64e0587af6 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.18 __pthread_rwlock_tryrdlock F
>  GLIBC_2.18 __pthread_rwlock_trywrlock F
>  GLIBC_2.18 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -134,7 +133,6 @@ GLIBC_2.18 pthread_setattr_default_np F
>  GLIBC_2.18 pthread_setconcurrency F
>  GLIBC_2.18 pthread_setname_np F
>  GLIBC_2.18 pthread_setschedprio F
> -GLIBC_2.18 pthread_setspecific F
>  GLIBC_2.18 pthread_sigqueue F
>  GLIBC_2.18 pthread_spin_destroy F
>  GLIBC_2.18 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 448c257562..07ec814a0d 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -343,6 +343,7 @@ GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
> +GLIBC_2.18 __pthread_setspecific F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
>  GLIBC_2.18 __pwrite64 F
> @@ -1467,6 +1468,7 @@ GLIBC_2.18 pthread_self F
>  GLIBC_2.18 pthread_setcancelstate F
>  GLIBC_2.18 pthread_setcanceltype F
>  GLIBC_2.18 pthread_setschedparam F
> +GLIBC_2.18 pthread_setspecific F
>  GLIBC_2.18 pthread_sigmask F
>  GLIBC_2.18 ptrace F
>  GLIBC_2.18 ptsname F
> @@ -2182,8 +2184,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 4751a8e6c5..64e0587af6 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.18 __pthread_rwlock_tryrdlock F
>  GLIBC_2.18 __pthread_rwlock_trywrlock F
>  GLIBC_2.18 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -134,7 +133,6 @@ GLIBC_2.18 pthread_setattr_default_np F
>  GLIBC_2.18 pthread_setconcurrency F
>  GLIBC_2.18 pthread_setname_np F
>  GLIBC_2.18 pthread_setschedprio F
> -GLIBC_2.18 pthread_setspecific F
>  GLIBC_2.18 pthread_sigqueue F
>  GLIBC_2.18 pthread_spin_destroy F
>  GLIBC_2.18 pthread_spin_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 8f5df09289..51253a4216 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2175,11 +2177,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 ea9a850ba9..1118a25c82 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 4d39526a30..2574b7627e 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2173,11 +2175,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 ea9a850ba9..1118a25c82 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 3cfb9e62db..0580b260e2 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -874,6 +875,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2181,11 +2183,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 9b5cc5db4c..40fe64ea6b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -186,6 +186,7 @@ GLIBC_2.0 __progname_full D 0x8
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x8
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x8
> @@ -872,6 +873,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2175,11 +2177,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 1335395b2f..b9400803eb 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -380,6 +380,7 @@ GLIBC_2.21 __pthread_cleanup_routine F
>  GLIBC_2.21 __pthread_getspecific F
>  GLIBC_2.21 __pthread_key_create F
>  GLIBC_2.21 __pthread_once F
> +GLIBC_2.21 __pthread_setspecific F
>  GLIBC_2.21 __pthread_unwind_next F
>  GLIBC_2.21 __ptsname_r_chk F
>  GLIBC_2.21 __pwrite64 F
> @@ -1509,6 +1510,7 @@ GLIBC_2.21 pthread_self F
>  GLIBC_2.21 pthread_setcancelstate F
>  GLIBC_2.21 pthread_setcanceltype F
>  GLIBC_2.21 pthread_setschedparam F
> +GLIBC_2.21 pthread_setspecific F
>  GLIBC_2.21 pthread_sigmask F
>  GLIBC_2.21 ptrace F
>  GLIBC_2.21 ptsname F
> @@ -2223,8 +2225,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index e6354e8a80..96d1cd0f49 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.21 __pthread_rwlock_tryrdlock F
>  GLIBC_2.21 __pthread_rwlock_trywrlock F
>  GLIBC_2.21 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -134,7 +133,6 @@ GLIBC_2.21 pthread_setattr_default_np F
>  GLIBC_2.21 pthread_setconcurrency F
>  GLIBC_2.21 pthread_setname_np F
>  GLIBC_2.21 pthread_setschedprio F
> -GLIBC_2.21 pthread_setspecific F
>  GLIBC_2.21 pthread_sigqueue F
>  GLIBC_2.21 pthread_spin_destroy F
>  GLIBC_2.21 pthread_spin_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 eb5f9814e8..9f27e4aa50 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -197,6 +197,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -885,6 +886,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2231,11 +2233,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 a56ee2d7ca..a8111f4b92 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index b0372c3178..9c91e65fc1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -197,6 +197,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -885,6 +886,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2264,11 +2266,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 aa4aadbbb4..0ef070e285 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -412,6 +412,7 @@ GLIBC_2.3 __progname_full D 0x8
>  GLIBC_2.3 __pthread_getspecific F
>  GLIBC_2.3 __pthread_key_create F
>  GLIBC_2.3 __pthread_once F
> +GLIBC_2.3 __pthread_setspecific F
>  GLIBC_2.3 __pwrite64 F
>  GLIBC_2.3 __rawmemchr F
>  GLIBC_2.3 __rcmd_errstr D 0x8
> @@ -1392,6 +1393,7 @@ GLIBC_2.3 pthread_self F
>  GLIBC_2.3 pthread_setcancelstate F
>  GLIBC_2.3 pthread_setcanceltype F
>  GLIBC_2.3 pthread_setschedparam F
> +GLIBC_2.3 pthread_setspecific F
>  GLIBC_2.3 pthread_sigmask F
>  GLIBC_2.3 ptrace F
>  GLIBC_2.3 ptsname F
> @@ -2094,11 +2096,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 6b2c9bba60..a0f5dffd25 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -56,7 +56,6 @@ GLIBC_2.3 __pthread_rwlock_tryrdlock F
>  GLIBC_2.3 __pthread_rwlock_trywrlock F
>  GLIBC_2.3 __pthread_rwlock_unlock F
>  GLIBC_2.3 __pthread_rwlock_wrlock F
> -GLIBC_2.3 __pthread_setspecific F
>  GLIBC_2.3 __pwrite64 F
>  GLIBC_2.3 __read F
>  GLIBC_2.3 __res_state F
> @@ -138,7 +137,6 @@ 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_setconcurrency F
> -GLIBC_2.3 pthread_setspecific F
>  GLIBC_2.3 pthread_spin_destroy F
>  GLIBC_2.3 pthread_spin_init F
>  GLIBC_2.3 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 045912572c..4a6de68ece 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -428,6 +428,7 @@ GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
> +GLIBC_2.17 __pthread_setspecific F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
>  GLIBC_2.17 __pwrite64 F
> @@ -1553,6 +1554,7 @@ GLIBC_2.17 pthread_self F
>  GLIBC_2.17 pthread_setcancelstate F
>  GLIBC_2.17 pthread_setcanceltype F
>  GLIBC_2.17 pthread_setschedparam F
> +GLIBC_2.17 pthread_setspecific F
>  GLIBC_2.17 pthread_sigmask F
>  GLIBC_2.17 ptrace F
>  GLIBC_2.17 ptsname F
> @@ -2385,8 +2387,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 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 667e00551a..778eb45ffc 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.17 __pthread_rwlock_tryrdlock F
>  GLIBC_2.17 __pthread_rwlock_trywrlock F
>  GLIBC_2.17 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -132,7 +131,6 @@ GLIBC_2.17 pthread_setaffinity_np F
>  GLIBC_2.17 pthread_setconcurrency F
>  GLIBC_2.17 pthread_setname_np F
>  GLIBC_2.17 pthread_setschedprio F
> -GLIBC_2.17 pthread_setspecific F
>  GLIBC_2.17 pthread_sigqueue F
>  GLIBC_2.17 pthread_spin_destroy F
>  GLIBC_2.17 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 5ef9b35b6d..62f9d06cc6 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -328,6 +328,7 @@ GLIBC_2.33 __pthread_cleanup_routine F
>  GLIBC_2.33 __pthread_getspecific F
>  GLIBC_2.33 __pthread_key_create F
>  GLIBC_2.33 __pthread_once F
> +GLIBC_2.33 __pthread_setspecific F
>  GLIBC_2.33 __pthread_unwind_next F
>  GLIBC_2.33 __ptsname_r_chk F
>  GLIBC_2.33 __pwrite64 F
> @@ -1393,6 +1394,7 @@ GLIBC_2.33 pthread_self F
>  GLIBC_2.33 pthread_setcancelstate F
>  GLIBC_2.33 pthread_setcanceltype F
>  GLIBC_2.33 pthread_setschedparam F
> +GLIBC_2.33 pthread_setspecific F
>  GLIBC_2.33 pthread_sigmask F
>  GLIBC_2.33 ptrace F
>  GLIBC_2.33 ptsname F
> @@ -1952,8 +1954,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 5665726bbb..dc38dee1ae 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -29,7 +29,6 @@ GLIBC_2.33 __pthread_rwlock_tryrdlock F
>  GLIBC_2.33 __pthread_rwlock_trywrlock F
>  GLIBC_2.33 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -150,7 +149,6 @@ GLIBC_2.33 pthread_setattr_default_np F
>  GLIBC_2.33 pthread_setconcurrency F
>  GLIBC_2.33 pthread_setname_np F
>  GLIBC_2.33 pthread_setschedprio F
> -GLIBC_2.33 pthread_setspecific F
>  GLIBC_2.33 pthread_sigqueue F
>  GLIBC_2.33 pthread_spin_destroy F
>  GLIBC_2.33 pthread_spin_init F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 7f7385d87c..63976e8487 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -339,6 +339,7 @@ GLIBC_2.27 __pthread_cleanup_routine F
>  GLIBC_2.27 __pthread_getspecific F
>  GLIBC_2.27 __pthread_key_create F
>  GLIBC_2.27 __pthread_once F
> +GLIBC_2.27 __pthread_setspecific F
>  GLIBC_2.27 __pthread_unwind_next F
>  GLIBC_2.27 __ptsname_r_chk F
>  GLIBC_2.27 __pwrite64 F
> @@ -1455,6 +1456,7 @@ GLIBC_2.27 pthread_self F
>  GLIBC_2.27 pthread_setcancelstate F
>  GLIBC_2.27 pthread_setcanceltype F
>  GLIBC_2.27 pthread_setschedparam F
> +GLIBC_2.27 pthread_setspecific F
>  GLIBC_2.27 pthread_sigmask F
>  GLIBC_2.27 ptrace F
>  GLIBC_2.27 ptsname F
> @@ -2152,8 +2154,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 5abf715b3b..a78a847c1a 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.27 __pthread_rwlock_tryrdlock F
>  GLIBC_2.27 __pthread_rwlock_trywrlock F
>  GLIBC_2.27 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -134,7 +133,6 @@ GLIBC_2.27 pthread_setattr_default_np F
>  GLIBC_2.27 pthread_setconcurrency F
>  GLIBC_2.27 pthread_setname_np F
>  GLIBC_2.27 pthread_setschedprio F
> -GLIBC_2.27 pthread_setspecific F
>  GLIBC_2.27 pthread_sigqueue F
>  GLIBC_2.27 pthread_spin_destroy F
>  GLIBC_2.27 pthread_spin_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 c062cbcde7..8b159936e4 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -188,6 +188,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -876,6 +877,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2229,11 +2231,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 bfeb7b715f..5f9f4da233 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index cfc797c7fb..5bbf8fdbb4 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -373,6 +373,7 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x8
> @@ -1303,6 +1304,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2130,11 +2132,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 3de726cb37..ec27acf8c2 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -36,7 +36,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -119,7 +118,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 08db66df29..10ea3c59b9 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -362,6 +362,7 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x4
> @@ -1289,6 +1290,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2099,11 +2101,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 10b8352efb..12d492b088 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -362,6 +362,7 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x4
> @@ -1289,6 +1290,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2096,11 +2098,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 cc98751c47..c24d832b13 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index dce478788e..3bb06d6ce0 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -192,6 +192,7 @@ GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
>  GLIBC_2.0 __pthread_once F
> +GLIBC_2.0 __pthread_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __realloc_hook D 0x4
> @@ -879,6 +880,7 @@ GLIBC_2.0 pthread_self F
>  GLIBC_2.0 pthread_setcancelstate F
>  GLIBC_2.0 pthread_setcanceltype F
>  GLIBC_2.0 pthread_setschedparam F
> +GLIBC_2.0 pthread_setspecific F
>  GLIBC_2.0 pthread_sigmask F
>  GLIBC_2.0 ptrace F
>  GLIBC_2.0 putc F
> @@ -2220,11 +2222,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 66f17908e0..8ccbe19154 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -16,7 +16,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_setspecific F
>  GLIBC_2.0 __read F
>  GLIBC_2.0 __send F
>  GLIBC_2.0 __sigaction F
> @@ -54,7 +53,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_setspecific F
>  GLIBC_2.0 pthread_testcancel F
>  GLIBC_2.0 raise F
>  GLIBC_2.0 read F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 1dc6c45074..8a32fa3e95 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -400,6 +400,7 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __rcmd_errstr D 0x8
> @@ -1332,6 +1333,7 @@ GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
>  GLIBC_2.2 pthread_setschedparam F
> +GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_sigmask F
>  GLIBC_2.2 ptrace F
>  GLIBC_2.2 ptsname F
> @@ -2147,11 +2149,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 f18ff271c2..1669fb860d 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
>  GLIBC_2.2 __pthread_rwlock_wrlock F
> -GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2 pthread_setspecific F
>  GLIBC_2.2 pthread_spin_destroy F
>  GLIBC_2.2 pthread_spin_init F
>  GLIBC_2.2 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index e74d5c43c6..e05acdd11a 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -361,6 +361,7 @@ GLIBC_2.2.5 __progname_full D 0x8
>  GLIBC_2.2.5 __pthread_getspecific F
>  GLIBC_2.2.5 __pthread_key_create F
>  GLIBC_2.2.5 __pthread_once F
> +GLIBC_2.2.5 __pthread_setspecific F
>  GLIBC_2.2.5 __pwrite64 F
>  GLIBC_2.2.5 __rawmemchr F
>  GLIBC_2.2.5 __rcmd_errstr D 0x8
> @@ -1300,6 +1301,7 @@ GLIBC_2.2.5 pthread_self F
>  GLIBC_2.2.5 pthread_setcancelstate F
>  GLIBC_2.2.5 pthread_setcanceltype F
>  GLIBC_2.2.5 pthread_setschedparam F
> +GLIBC_2.2.5 pthread_setspecific F
>  GLIBC_2.2.5 pthread_sigmask F
>  GLIBC_2.2.5 ptrace F
>  GLIBC_2.2.5 ptsname F
> @@ -2106,11 +2108,13 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_setspecific 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 5ea8f8020b..f4d633ca96 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -35,7 +35,6 @@ GLIBC_2.2.5 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2.5 __pthread_rwlock_trywrlock F
>  GLIBC_2.2.5 __pthread_rwlock_unlock F
>  GLIBC_2.2.5 __pthread_rwlock_wrlock F
> -GLIBC_2.2.5 __pthread_setspecific F
>  GLIBC_2.2.5 __pwrite64 F
>  GLIBC_2.2.5 __read F
>  GLIBC_2.2.5 __res_state F
> @@ -118,7 +117,6 @@ 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_setconcurrency F
> -GLIBC_2.2.5 pthread_setspecific F
>  GLIBC_2.2.5 pthread_spin_destroy F
>  GLIBC_2.2.5 pthread_spin_init F
>  GLIBC_2.2.5 pthread_spin_lock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 007dd401d3..8800e570a4 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -343,6 +343,7 @@ GLIBC_2.16 __pthread_cleanup_routine F
>  GLIBC_2.16 __pthread_getspecific F
>  GLIBC_2.16 __pthread_key_create F
>  GLIBC_2.16 __pthread_once F
> +GLIBC_2.16 __pthread_setspecific F
>  GLIBC_2.16 __pthread_unwind_next F
>  GLIBC_2.16 __ptsname_r_chk F
>  GLIBC_2.16 __pwrite64 F
> @@ -1472,6 +1473,7 @@ GLIBC_2.16 pthread_self F
>  GLIBC_2.16 pthread_setcancelstate F
>  GLIBC_2.16 pthread_setcanceltype F
>  GLIBC_2.16 pthread_setschedparam F
> +GLIBC_2.16 pthread_setspecific F
>  GLIBC_2.16 pthread_sigmask F
>  GLIBC_2.16 ptrace F
>  GLIBC_2.16 ptsname F
> @@ -2204,8 +2206,10 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 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 6e3cb18549..b687932187 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -30,7 +30,6 @@ GLIBC_2.16 __pthread_rwlock_tryrdlock F
>  GLIBC_2.16 __pthread_rwlock_trywrlock F
>  GLIBC_2.16 __pthread_rwlock_unlock F
>  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 __pwrite64 F
> @@ -132,7 +131,6 @@ GLIBC_2.16 pthread_setaffinity_np F
>  GLIBC_2.16 pthread_setconcurrency F
>  GLIBC_2.16 pthread_setname_np F
>  GLIBC_2.16 pthread_setschedprio F
> -GLIBC_2.16 pthread_setspecific F
>  GLIBC_2.16 pthread_sigqueue F
>  GLIBC_2.16 pthread_spin_destroy F
>  GLIBC_2.16 pthread_spin_init F
> 

Ok.

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

* Re: [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-24 14:09   ` Adhemerval Zanella
@ 2021-03-24 14:32     ` Florian Weimer
  2021-03-24 14:42       ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-24 14:32 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> @@ -86,7 +88,9 @@ libc {
>>    }
>>    GLIBC_2.34 {
>>      __pthread_cleanup_routine;
>> +    __pthread_key_create;
>>      __pthread_once;
>> +    pthread_key_create;
>>      pthread_mutex_consistent;
>>      pthread_once;
>>    }
>
> Why do we need a __pthread_key_create for 2.34?

__pthread_key_create is used by libstdc++.

>> @@ -47,5 +47,18 @@ __pthread_key_create (pthread_key_t *key, void (*destr) (void *))
>>  
>>    return EAGAIN;
>>  }
>> -weak_alias (__pthread_key_create, pthread_key_create)
>> -hidden_def (__pthread_key_create)
>> +versioned_symbol (libc, __pthread_key_create_1, __pthread_key_create,
>> +		  GLIBC_2_34);
>> +libc_hidden_ver (__pthread_key_create_1, __pthread_key_create)
>> +
>> +/* Several aliases for setting different symbol versions.  */
>> +strong_alias (__pthread_key_create_1, __pthread_key_create_2)
>> +strong_alias (__pthread_key_create_1, __pthread_key_create_3)
>> +strong_alias (__pthread_key_create_1, __pthread_key_create_4)
>> +
>> +versioned_symbol (libc, __pthread_key_create_2, pthread_key_create,
>> +		  GLIBC_2_34);
>> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
>> +compat_symbol (libc, __pthread_key_create_3, __pthread_key_create, GLIBC_2_0);
>> +compat_symbol (libc, __pthread_key_create_4, pthread_key_create, GLIBC_2_0);
>> +#endif
>
> I think you might want to revise it once compat_symbol has support
> for multiple targets.

Right that, applies in other places throughout the series, too.

Speaking of which, should I repost the compat_symbol patches?

Thanks,
Florian


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

* Re: [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific into libc
  2021-03-24 14:12   ` Adhemerval Zanella
@ 2021-03-24 14:38     ` Florian Weimer
  2021-03-24 14:43       ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-24 14:38 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> diff --git a/nptl/Versions b/nptl/Versions
>> index d44958f5b6..218d6bbbf8 100644
>> --- a/nptl/Versions
>> +++ b/nptl/Versions
>> @@ -1,5 +1,6 @@
>>  libc {
>>    GLIBC_2.0 {
>> +    __pthread_getspecific;
>>      __pthread_key_create;
>>      __pthread_once;
>>      _pthread_cleanup_pop;
>> @@ -29,6 +30,7 @@ libc {
>>      pthread_equal;
>>      pthread_exit;
>>      pthread_getschedparam;
>> +    pthread_getspecific;
>>      pthread_key_create;
>>      pthread_mutex_destroy;
>>      pthread_mutex_init;
>> @@ -88,8 +90,10 @@ libc {
>>    }
>>    GLIBC_2.34 {
>>      __pthread_cleanup_routine;
>> +    __pthread_getspecific;
>
> Why do we need a __pthread_getspecific for 2.34?

I can turn __pthread_getspecific into a compat symbol once tss_get has
been moved into libc.  Then we do not need
__pthread_getspecific@@GLIBC_2.34 anymore.

As discussed before, I do not want to introduce
__pthread_getspecific@@GLIBC_PRIVATE because relinking applications
which previously used the public __pthread_getspecific symbol will
suddenly switch to the internal GLIBC_PRIVATE symbol, which would be a
regression.

(__pthread_getspecific is not used by libstdc++.)

Thanks,
Florian


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

* Re: [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-24 14:32     ` Florian Weimer
@ 2021-03-24 14:42       ` Adhemerval Zanella
  2021-03-24 15:08         ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:42 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 24/03/2021 11:32, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> @@ -86,7 +88,9 @@ libc {
>>>    }
>>>    GLIBC_2.34 {
>>>      __pthread_cleanup_routine;
>>> +    __pthread_key_create;
>>>      __pthread_once;
>>> +    pthread_key_create;
>>>      pthread_mutex_consistent;
>>>      pthread_once;
>>>    }
>>
>> Why do we need a __pthread_key_create for 2.34?
> 
> __pthread_key_create is used by libstdc++.

Sigh... the description at libgcc/gthr-posix.h is *really* hacky and I
think we provide the __libc_single_threaded exactly to avoid keep
providing this kind of interfaces. 

> 
>>> @@ -47,5 +47,18 @@ __pthread_key_create (pthread_key_t *key, void (*destr) (void *))
>>>  
>>>    return EAGAIN;
>>>  }
>>> -weak_alias (__pthread_key_create, pthread_key_create)
>>> -hidden_def (__pthread_key_create)
>>> +versioned_symbol (libc, __pthread_key_create_1, __pthread_key_create,
>>> +		  GLIBC_2_34);
>>> +libc_hidden_ver (__pthread_key_create_1, __pthread_key_create)
>>> +
>>> +/* Several aliases for setting different symbol versions.  */
>>> +strong_alias (__pthread_key_create_1, __pthread_key_create_2)
>>> +strong_alias (__pthread_key_create_1, __pthread_key_create_3)
>>> +strong_alias (__pthread_key_create_1, __pthread_key_create_4)
>>> +
>>> +versioned_symbol (libc, __pthread_key_create_2, pthread_key_create,
>>> +		  GLIBC_2_34);
>>> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
>>> +compat_symbol (libc, __pthread_key_create_3, __pthread_key_create, GLIBC_2_0);
>>> +compat_symbol (libc, __pthread_key_create_4, pthread_key_create, GLIBC_2_0);
>>> +#endif
>>
>> I think you might want to revise it once compat_symbol has support
>> for multiple targets.
> 
> Right that, applies in other places throughout the series, too.
> 
> Speaking of which, should I repost the compat_symbol patches?

Isn't the one in patchwork the latest [1]?

[1] https://patchwork.sourceware.org/project/glibc/patch/07c2defd7f03c5f2493a4132de673f33457d7806.1616184336.git.fweimer@redhat.com/

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

* Re: [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific into libc
  2021-03-24 14:38     ` Florian Weimer
@ 2021-03-24 14:43       ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:43 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 24/03/2021 11:38, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> diff --git a/nptl/Versions b/nptl/Versions
>>> index d44958f5b6..218d6bbbf8 100644
>>> --- a/nptl/Versions
>>> +++ b/nptl/Versions
>>> @@ -1,5 +1,6 @@
>>>  libc {
>>>    GLIBC_2.0 {
>>> +    __pthread_getspecific;
>>>      __pthread_key_create;
>>>      __pthread_once;
>>>      _pthread_cleanup_pop;
>>> @@ -29,6 +30,7 @@ libc {
>>>      pthread_equal;
>>>      pthread_exit;
>>>      pthread_getschedparam;
>>> +    pthread_getspecific;
>>>      pthread_key_create;
>>>      pthread_mutex_destroy;
>>>      pthread_mutex_init;
>>> @@ -88,8 +90,10 @@ libc {
>>>    }
>>>    GLIBC_2.34 {
>>>      __pthread_cleanup_routine;
>>> +    __pthread_getspecific;
>>
>> Why do we need a __pthread_getspecific for 2.34?
> 
> I can turn __pthread_getspecific into a compat symbol once tss_get has
> been moved into libc.  Then we do not need
> __pthread_getspecific@@GLIBC_2.34 anymore.

Right.

> 
> As discussed before, I do not want to introduce
> __pthread_getspecific@@GLIBC_PRIVATE because relinking applications
> which previously used the public __pthread_getspecific symbol will
> suddenly switch to the internal GLIBC_PRIVATE symbol, which would be a
> regression.
> 
> (__pthread_getspecific is not used by libstdc++.)

Yeah, I am still not 100% convinced that relinking should something
we should be constrained but it looks ok for now.

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

* Re: [PATCH v3 27/37] nptl: Move pthread_key_delete into libc.
  2021-03-16 17:30 ` [PATCH v3 27/37] nptl: Move pthread_key_delete " Florian Weimer
@ 2021-03-24 14:45   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 14:45 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:30, Florian Weimer via Libc-alpha wrote:
> The symbol was moved using scripts/move-symbol-to-libc.py.
> 
> tss_delete (still in libpthread) uses the __pthread_key_create
> alias, so that is now exported under GLIBC_PRIVATE.

LGTM, thanks.

> ---
>  nptl/Makefile                                   |  2 +-
>  nptl/Versions                                   |  4 +++-
>  nptl/pthreadP.h                                 |  1 +
>  nptl/pthread_key_delete.c                       | 17 ++++++++++++++---
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist    |  2 ++
>  .../unix/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 ++
>  sysdeps/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 ++
>  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 -
>  .../unix/sysv/linux/m68k/coldfire/libc.abilist  |  2 ++
>  .../sysv/linux/m68k/coldfire/libpthread.abilist |  1 -
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist    |  2 ++
>  .../sysv/linux/m68k/m680x0/libpthread.abilist   |  1 -
>  .../unix/sysv/linux/microblaze/be/libc.abilist  |  2 ++
>  .../sysv/linux/microblaze/be/libpthread.abilist |  1 -
>  .../unix/sysv/linux/microblaze/le/libc.abilist  |  2 ++
>  .../sysv/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 ++
>  .../linux/powerpc/powerpc32/libpthread.abilist  |  1 -
>  .../linux/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 -
>  sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist |  2 ++
>  .../sysv/linux/riscv/rv32/libpthread.abilist    |  1 -
>  sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist |  2 ++
>  .../sysv/linux/riscv/rv64/libpthread.abilist    |  1 -
>  .../unix/sysv/linux/s390/s390-32/libc.abilist   |  2 ++
>  .../sysv/linux/s390/s390-32/libpthread.abilist  |  1 -
>  .../unix/sysv/linux/s390/s390-64/libc.abilist   |  2 ++
>  .../sysv/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 -
>  .../unix/sysv/linux/sparc/sparc32/libc.abilist  |  2 ++
>  .../sysv/linux/sparc/sparc32/libpthread.abilist |  1 -
>  .../unix/sysv/linux/sparc/sparc64/libc.abilist  |  2 ++
>  .../sysv/linux/sparc/sparc64/libpthread.abilist |  1 -
>  sysdeps/unix/sysv/linux/x86_64/64/libc.abilist  |  2 ++
>  .../sysv/linux/x86_64/64/libpthread.abilist     |  1 -
>  sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist |  2 ++
>  .../sysv/linux/x86_64/x32/libpthread.abilist    |  1 -
>  65 files changed, 83 insertions(+), 34 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index fa8bcf8c62..5d4276d9f9 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -80,6 +80,7 @@ routines = \
>    pthread_getschedparam \
>    pthread_getspecific \
>    pthread_key_create \
> +  pthread_key_delete \
>    pthread_keys \
>    pthread_mutex_consistent \
>    pthread_once \
> @@ -162,7 +163,6 @@ libpthread-routines = \
>    pthread_getname \
>    pthread_join \
>    pthread_join_common \
> -  pthread_key_delete \
>    pthread_kill \
>    pthread_kill_other_threads \
>    pthread_mutex_cond_lock \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 58a37b8816..e93c27b083 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -33,6 +33,7 @@ libc {
>      pthread_getschedparam;
>      pthread_getspecific;
>      pthread_key_create;
> +    pthread_key_delete;
>      pthread_mutex_destroy;
>      pthread_mutex_init;
>      pthread_mutex_lock;
> @@ -98,6 +99,7 @@ libc {
>      __pthread_setspecific;
>      pthread_getspecific;
>      pthread_key_create;
> +    pthread_key_delete;
>      pthread_mutex_consistent;
>      pthread_once;
>      pthread_setspecific;
> @@ -134,6 +136,7 @@ libc {
>      __pthread_exit;
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
> +    __pthread_key_delete;
>      __pthread_keys;
>      __pthread_setcancelstate;
>      __pthread_unwind;
> @@ -188,7 +191,6 @@ libpthread {
>      pthread_create;
>      pthread_detach;
>      pthread_join;
> -    pthread_key_delete;
>      pthread_kill;
>      pthread_kill_other_threads_np;
>      pthread_mutex_destroy;

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index c9e845e4a2..515c58039b 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -517,6 +517,7 @@ extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
>  extern int __pthread_condattr_init (pthread_condattr_t *attr);
>  extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
>  extern int __pthread_key_delete (pthread_key_t key);
> +libc_hidden_proto (__pthread_key_delete)
>  extern void *__pthread_getspecific (pthread_key_t key);
>  libc_hidden_proto (__pthread_getspecific)
>  extern int __pthread_setspecific (pthread_key_t key, const void *value);

Ok.

> diff --git a/nptl/pthread_key_delete.c b/nptl/pthread_key_delete.c
> index b9018306b1..081821cc02 100644
> --- a/nptl/pthread_key_delete.c
> +++ b/nptl/pthread_key_delete.c
> @@ -19,10 +19,10 @@
>  #include <errno.h>
>  #include "pthreadP.h"
>  #include <atomic.h>
> -
> +#include <shlib-compat.h>
>  
>  int
> -__pthread_key_delete (pthread_key_t key)
> +__pthread_key_delete_1 (pthread_key_t key)
>  {
>    int result = EINVAL;
>  
> @@ -39,4 +39,15 @@ __pthread_key_delete (pthread_key_t key)
>  
>    return result;
>  }
> -weak_alias (__pthread_key_delete, pthread_key_delete)
> +versioned_symbol (libc, __pthread_key_delete_1, pthread_key_delete,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_key_delete_1, __pthread_key_delete)
> +
> +strong_alias (__pthread_key_delete_1, __pthread_key_delete_2)
> +versioned_symbol (libc, __pthread_key_delete_2, __pthread_key_delete,
> +		  GLIBC_PRIVATE);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +strong_alias (__pthread_key_delete_1, __pthread_key_delete_3)
> +compat_symbol (libc, __pthread_key_delete_3, pthread_key_delete, GLIBC_2_0);
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 2601be32bf..991efa0044 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -1454,6 +1454,7 @@ GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
>  GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_key_create F
> +GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
> @@ -2196,6 +2197,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 778eb45ffc..50ab959905 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.17 pthread_getconcurrency F
>  GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index d334d0759d..a1229e4a1a 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -893,6 +893,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2277,6 +2278,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 8ccbe19154..9d78d94466 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 49034a2bdd..ceee863b25 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -1381,6 +1381,7 @@ GLIBC_2.32 pthread_getattr_np F
>  GLIBC_2.32 pthread_getschedparam F
>  GLIBC_2.32 pthread_getspecific F
>  GLIBC_2.32 pthread_key_create F
> +GLIBC_2.32 pthread_key_delete F
>  GLIBC_2.32 pthread_mutex_consistent F
>  GLIBC_2.32 pthread_mutex_consistent_np F
>  GLIBC_2.32 pthread_mutex_destroy F
> @@ -1956,6 +1957,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index fba129cfad..6fed825b25 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -99,7 +99,6 @@ GLIBC_2.32 pthread_getconcurrency F
>  GLIBC_2.32 pthread_getcpuclockid F
>  GLIBC_2.32 pthread_getname_np F
>  GLIBC_2.32 pthread_join F
> -GLIBC_2.32 pthread_key_delete F
>  GLIBC_2.32 pthread_kill F
>  GLIBC_2.32 pthread_kill_other_threads_np F
>  GLIBC_2.32 pthread_mutex_clocklock F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 3727e33898..31e2de3cc2 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -165,6 +165,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> @@ -1559,6 +1560,7 @@ GLIBC_2.4 pthread_getattr_np F
>  GLIBC_2.4 pthread_getschedparam F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_key_create F
> +GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index 2cb1f0e2f5..5d3859b245 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_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index a7bc3a9a8e..c6f9e3dbc3 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -162,6 +162,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> @@ -1556,6 +1557,7 @@ GLIBC_2.4 pthread_getattr_np F
>  GLIBC_2.4 pthread_getschedparam F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_key_create F
> +GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index 2cb1f0e2f5..5d3859b245 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_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 61de7117bd..ec7f3bde74 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -1442,6 +1442,7 @@ GLIBC_2.29 pthread_getattr_np F
>  GLIBC_2.29 pthread_getschedparam F
>  GLIBC_2.29 pthread_getspecific F
>  GLIBC_2.29 pthread_key_create F
> +GLIBC_2.29 pthread_key_delete F
>  GLIBC_2.29 pthread_mutex_consistent F
>  GLIBC_2.29 pthread_mutex_consistent_np F
>  GLIBC_2.29 pthread_mutex_destroy F
> @@ -2140,6 +2141,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index 760740a4ed..cf7869867c 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -97,7 +97,6 @@ GLIBC_2.29 pthread_getconcurrency F
>  GLIBC_2.29 pthread_getcpuclockid F
>  GLIBC_2.29 pthread_getname_np F
>  GLIBC_2.29 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index c380a422ca..ebced5d8c3 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -1277,6 +1277,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2098,6 +2099,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index c24d832b13..d0e8564302 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index dd10b08625..d15479dabd 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -870,6 +870,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2265,6 +2266,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index 6b644a2513..99e53d0c49 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index fe64b5c1f0..62c8c7d461 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -1298,6 +1298,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2130,6 +2131,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index 1669fb860d..ff37f3905e 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 1af30ff1b3..83e8a6824f 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -166,6 +166,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> @@ -1539,6 +1540,7 @@ GLIBC_2.4 pthread_getattr_np F
>  GLIBC_2.4 pthread_getschedparam F
>  GLIBC_2.4 pthread_getspecific F
>  GLIBC_2.4 pthread_key_create F
> +GLIBC_2.4 pthread_key_delete F
>  GLIBC_2.4 pthread_mutex_consistent_np F
>  GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_init F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index 2cb1f0e2f5..5d3859b245 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_detach F
>  GLIBC_2.4 pthread_getconcurrency F
>  GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 372bb9db63..5a81c61de7 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -869,6 +869,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2210,6 +2211,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index 6b644a2513..99e53d0c49 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 7b1b02ff24..39c806db53 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -1457,6 +1457,7 @@ GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
>  GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_key_create F
> +GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
> @@ -2191,6 +2192,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 64e0587af6..8b3785414d 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -86,7 +86,6 @@ GLIBC_2.18 pthread_getconcurrency F
>  GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 07ec814a0d..ce2823207c 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -1457,6 +1457,7 @@ GLIBC_2.18 pthread_getattr_np F
>  GLIBC_2.18 pthread_getschedparam F
>  GLIBC_2.18 pthread_getspecific F
>  GLIBC_2.18 pthread_key_create F
> +GLIBC_2.18 pthread_key_delete F
>  GLIBC_2.18 pthread_mutex_consistent F
>  GLIBC_2.18 pthread_mutex_consistent_np F
>  GLIBC_2.18 pthread_mutex_destroy F
> @@ -2188,6 +2189,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 64e0587af6..8b3785414d 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -86,7 +86,6 @@ GLIBC_2.18 pthread_getconcurrency F
>  GLIBC_2.18 pthread_getcpuclockid F
>  GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_join 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_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 51253a4216..5e8abfa6ae 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2181,6 +2182,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 1118a25c82..cd0d6d7419 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 2574b7627e..93002ae842 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2179,6 +2180,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 1118a25c82..cd0d6d7419 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 0580b260e2..245a840e12 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -866,6 +866,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2187,6 +2188,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 40fe64ea6b..24b2dddb51 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -864,6 +864,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2181,6 +2182,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index b9400803eb..7d4b4dd278 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -1499,6 +1499,7 @@ GLIBC_2.21 pthread_getattr_np F
>  GLIBC_2.21 pthread_getschedparam F
>  GLIBC_2.21 pthread_getspecific F
>  GLIBC_2.21 pthread_key_create F
> +GLIBC_2.21 pthread_key_delete F
>  GLIBC_2.21 pthread_mutex_consistent F
>  GLIBC_2.21 pthread_mutex_consistent_np F
>  GLIBC_2.21 pthread_mutex_destroy F
> @@ -2229,6 +2230,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 96d1cd0f49..0250c9756d 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -86,7 +86,6 @@ GLIBC_2.21 pthread_getconcurrency F
>  GLIBC_2.21 pthread_getcpuclockid F
>  GLIBC_2.21 pthread_getname_np F
>  GLIBC_2.21 pthread_join 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_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 9f27e4aa50..65ea41b2db 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -877,6 +877,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2237,6 +2238,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index a8111f4b92..e0eb362a7a 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 9c91e65fc1..9d413de126 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -877,6 +877,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2270,6 +2271,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 0ef070e285..16c24bfc69 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -1384,6 +1384,7 @@ GLIBC_2.3 pthread_getattr_np F
>  GLIBC_2.3 pthread_getschedparam F
>  GLIBC_2.3 pthread_getspecific F
>  GLIBC_2.3 pthread_key_create F
> +GLIBC_2.3 pthread_key_delete F
>  GLIBC_2.3 pthread_mutex_destroy F
>  GLIBC_2.3 pthread_mutex_init F
>  GLIBC_2.3 pthread_mutex_lock F
> @@ -2100,6 +2101,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index a0f5dffd25..1099d88afe 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_detach F
>  GLIBC_2.3 pthread_getconcurrency F
>  GLIBC_2.3 pthread_getcpuclockid F
>  GLIBC_2.3 pthread_join F
> -GLIBC_2.3 pthread_key_delete F
>  GLIBC_2.3 pthread_kill F
>  GLIBC_2.3 pthread_kill_other_threads_np F
>  GLIBC_2.3 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 4a6de68ece..d97c594edd 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -1543,6 +1543,7 @@ GLIBC_2.17 pthread_getattr_np F
>  GLIBC_2.17 pthread_getschedparam F
>  GLIBC_2.17 pthread_getspecific F
>  GLIBC_2.17 pthread_key_create F
> +GLIBC_2.17 pthread_key_delete F
>  GLIBC_2.17 pthread_mutex_consistent F
>  GLIBC_2.17 pthread_mutex_consistent_np F
>  GLIBC_2.17 pthread_mutex_destroy F
> @@ -2391,6 +2392,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 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 778eb45ffc..50ab959905 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.17 pthread_getconcurrency F
>  GLIBC_2.17 pthread_getcpuclockid F
>  GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_join 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_destroy F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 62f9d06cc6..44b0121343 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -1383,6 +1383,7 @@ GLIBC_2.33 pthread_getattr_np F
>  GLIBC_2.33 pthread_getschedparam F
>  GLIBC_2.33 pthread_getspecific F
>  GLIBC_2.33 pthread_key_create F
> +GLIBC_2.33 pthread_key_delete F
>  GLIBC_2.33 pthread_mutex_consistent F
>  GLIBC_2.33 pthread_mutex_consistent_np F
>  GLIBC_2.33 pthread_mutex_destroy F
> @@ -1958,6 +1959,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index dc38dee1ae..6c6fdd0cbf 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -99,7 +99,6 @@ GLIBC_2.33 pthread_getconcurrency F
>  GLIBC_2.33 pthread_getcpuclockid F
>  GLIBC_2.33 pthread_getname_np F
>  GLIBC_2.33 pthread_join F
> -GLIBC_2.33 pthread_key_delete F
>  GLIBC_2.33 pthread_kill F
>  GLIBC_2.33 pthread_kill_other_threads_np F
>  GLIBC_2.33 pthread_mutex_clocklock F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 63976e8487..22a34442f0 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -1445,6 +1445,7 @@ GLIBC_2.27 pthread_getattr_np F
>  GLIBC_2.27 pthread_getschedparam F
>  GLIBC_2.27 pthread_getspecific F
>  GLIBC_2.27 pthread_key_create F
> +GLIBC_2.27 pthread_key_delete F
>  GLIBC_2.27 pthread_mutex_consistent F
>  GLIBC_2.27 pthread_mutex_consistent_np F
>  GLIBC_2.27 pthread_mutex_destroy F
> @@ -2158,6 +2159,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index a78a847c1a..359545faee 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -86,7 +86,6 @@ GLIBC_2.27 pthread_getconcurrency F
>  GLIBC_2.27 pthread_getcpuclockid F
>  GLIBC_2.27 pthread_getname_np F
>  GLIBC_2.27 pthread_join 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_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 8b159936e4..21f49b1fa0 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -868,6 +868,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2235,6 +2236,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index 5f9f4da233..5eb6187d98 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 5bbf8fdbb4..114591d6f5 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -1295,6 +1295,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2136,6 +2137,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index ec27acf8c2..8f60a6b633 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 10ea3c59b9..ad487f0c9f 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -1281,6 +1281,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2105,6 +2106,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index c24d832b13..d0e8564302 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 12d492b088..7f6886ff02 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -1281,6 +1281,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2102,6 +2103,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index c24d832b13..d0e8564302 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 3bb06d6ce0..4ae6d45923 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -871,6 +871,7 @@ GLIBC_2.0 pthread_exit F
>  GLIBC_2.0 pthread_getschedparam F
>  GLIBC_2.0 pthread_getspecific F
>  GLIBC_2.0 pthread_key_create F
> +GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_mutex_destroy F
>  GLIBC_2.0 pthread_mutex_init F
>  GLIBC_2.0 pthread_mutex_lock F
> @@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 8ccbe19154..9d78d94466 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -41,7 +41,6 @@ GLIBC_2.0 pthread_cond_wait F
>  GLIBC_2.0 pthread_create F
>  GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
> -GLIBC_2.0 pthread_key_delete F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
>  GLIBC_2.0 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 8a32fa3e95..44d0f68cb2 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -1324,6 +1324,7 @@ GLIBC_2.2 pthread_exit F
>  GLIBC_2.2 pthread_getschedparam F
>  GLIBC_2.2 pthread_getspecific F
>  GLIBC_2.2 pthread_key_create F
> +GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_mutex_destroy F
>  GLIBC_2.2 pthread_mutex_init F
>  GLIBC_2.2 pthread_mutex_lock F
> @@ -2153,6 +2154,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index 1669fb860d..ff37f3905e 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_detach F
>  GLIBC_2.2 pthread_getconcurrency F
>  GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
> -GLIBC_2.2 pthread_key_delete F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
>  GLIBC_2.2 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index e05acdd11a..d96699a20d 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -1292,6 +1292,7 @@ GLIBC_2.2.5 pthread_getattr_np F
>  GLIBC_2.2.5 pthread_getschedparam F
>  GLIBC_2.2.5 pthread_getspecific F
>  GLIBC_2.2.5 pthread_key_create F
> +GLIBC_2.2.5 pthread_key_delete F
>  GLIBC_2.2.5 pthread_mutex_destroy F
>  GLIBC_2.2.5 pthread_mutex_init F
>  GLIBC_2.2.5 pthread_mutex_lock F
> @@ -2112,6 +2113,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index f4d633ca96..511240921e 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_detach F
>  GLIBC_2.2.5 pthread_getconcurrency F
>  GLIBC_2.2.5 pthread_getcpuclockid F
>  GLIBC_2.2.5 pthread_join F
> -GLIBC_2.2.5 pthread_key_delete F
>  GLIBC_2.2.5 pthread_kill F
>  GLIBC_2.2.5 pthread_kill_other_threads_np F
>  GLIBC_2.2.5 pthread_mutex_destroy F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 8800e570a4..33bbaff90c 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -1462,6 +1462,7 @@ GLIBC_2.16 pthread_getattr_np F
>  GLIBC_2.16 pthread_getschedparam F
>  GLIBC_2.16 pthread_getspecific F
>  GLIBC_2.16 pthread_key_create F
> +GLIBC_2.16 pthread_key_delete F
>  GLIBC_2.16 pthread_mutex_consistent F
>  GLIBC_2.16 pthread_mutex_consistent_np F
>  GLIBC_2.16 pthread_mutex_destroy F
> @@ -2210,6 +2211,7 @@ GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
> +GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
>  GLIBC_2.34 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 b687932187..a481ef56ab 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -85,7 +85,6 @@ GLIBC_2.16 pthread_getconcurrency F
>  GLIBC_2.16 pthread_getcpuclockid F
>  GLIBC_2.16 pthread_getname_np F
>  GLIBC_2.16 pthread_join 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_destroy F
> 

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

* Re: [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-24 14:42       ` Adhemerval Zanella
@ 2021-03-24 15:08         ` Florian Weimer
  2021-03-24 15:46           ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-03-24 15:08 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> Sigh... the description at libgcc/gthr-posix.h is *really* hacky and I
> think we provide the __libc_single_threaded exactly to avoid keep
> providing this kind of interfaces.

The newer versions should use it, but there is just one header file
shared by everything POSIX-like.

>> Right that, applies in other places throughout the series, too.
>> 
>> Speaking of which, should I repost the compat_symbol patches?
>
> Isn't the one in patchwork the latest [1]?
>
> [1] https://patchwork.sourceware.org/project/glibc/patch/07c2defd7f03c5f2493a4132de673f33457d7806.1616184336.git.fweimer@redhat.com/

I think it lacks the __attribute__ ((nocommon)) for
__malloc_initialize_hook (need for building with GCC 9 and earlier).

Thanks,
Florian


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

* Re: [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc
  2021-03-24 15:08         ` Florian Weimer
@ 2021-03-24 15:46           ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-24 15:46 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 24/03/2021 12:08, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> Sigh... the description at libgcc/gthr-posix.h is *really* hacky and I
>> think we provide the __libc_single_threaded exactly to avoid keep
>> providing this kind of interfaces.
> 
> The newer versions should use it, but there is just one header file
> shared by everything POSIX-like.
> 
>>> Right that, applies in other places throughout the series, too.
>>>
>>> Speaking of which, should I repost the compat_symbol patches?
>>
>> Isn't the one in patchwork the latest [1]?
>>
>> [1] https://patchwork.sourceware.org/project/glibc/patch/07c2defd7f03c5f2493a4132de673f33457d7806.1616184336.git.fweimer@redhat.com/
> 
> I think it lacks the __attribute__ ((nocommon)) for
> __malloc_initialize_hook (need for building with GCC 9 and earlier).

Ah right, I think there is no need for a newer version.  I review/ack
the one you already sent.

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

* Re: [PATCH v3 28/37] nptl: Move rwlock functions with forwarders into libc
  2021-03-16 17:31 ` [PATCH v3 28/37] nptl: Move rwlock functions with forwarders " Florian Weimer
@ 2021-03-25 19:52   ` Adhemerval Zanella
  2021-03-27 21:41     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 19:52 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> The forwarders were only used internally, so new symbol versions
> are needed.  All symbols are moved at once because the forwarders
> are no-ops if libpthread is not loaded, leading to inconsistencies
> in case of a partial migration.
> 
> The symbols __pthread_rwlock_rdlock, __pthread_rwlock_unlock,
> __pthread_rwlock_wrlock, pthread_rwlock_rdlock,
> pthread_rwlock_unlock, pthread_rwlock_wrlock have been moved using
> scripts/move-symbol-to-libc.py.

LGTM, thanks (you probably want to rebase to use the compat_symbol
multiple reference support).

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

> ---
>  nptl/Makefile                                 |  6 ++---
>  nptl/Versions                                 | 20 ++++++++++++-----
>  nptl/nptl-init.c                              |  3 ---
>  nptl/pthreadP.h                               |  4 ++--
>  nptl/pthread_rwlock_rdlock.c                  | 22 ++++++++++++++++---
>  nptl/pthread_rwlock_unlock.c                  | 22 ++++++++++++++++---
>  nptl/pthread_rwlock_wrlock.c                  | 22 ++++++++++++++++---
>  sysdeps/nptl/libc-lockP.h                     | 21 +++++-------------
>  sysdeps/nptl/pthread-functions.h              |  3 ---
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  | 12 ++++++++++
>  .../sysv/linux/aarch64/libpthread.abilist     |  6 -----
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    | 12 ++++++++++
>  .../unix/sysv/linux/alpha/libpthread.abilist  |  6 -----
>  sysdeps/unix/sysv/linux/arc/libc.abilist      | 12 ++++++++++
>  .../unix/sysv/linux/arc/libpthread.abilist    |  6 -----
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   | 12 ++++++++++
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  6 -----
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   | 12 ++++++++++
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  6 -----
>  sysdeps/unix/sysv/linux/csky/libc.abilist     | 12 ++++++++++
>  .../unix/sysv/linux/csky/libpthread.abilist   |  6 -----
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     | 12 ++++++++++
>  .../unix/sysv/linux/hppa/libpthread.abilist   |  6 -----
>  sysdeps/unix/sysv/linux/i386/libc.abilist     | 12 ++++++++++
>  .../unix/sysv/linux/i386/libpthread.abilist   |  6 -----
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     | 12 ++++++++++
>  .../unix/sysv/linux/ia64/libpthread.abilist   |  6 -----
>  .../sysv/linux/m68k/coldfire/libc.abilist     | 12 ++++++++++
>  .../linux/m68k/coldfire/libpthread.abilist    |  6 -----
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  | 12 ++++++++++
>  .../sysv/linux/m68k/m680x0/libpthread.abilist |  6 -----
>  .../sysv/linux/microblaze/be/libc.abilist     | 12 ++++++++++
>  .../linux/microblaze/be/libpthread.abilist    |  6 -----
>  .../sysv/linux/microblaze/le/libc.abilist     | 12 ++++++++++
>  .../linux/microblaze/le/libpthread.abilist    |  6 -----
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   | 12 ++++++++++
>  .../sysv/linux/mips/mips32/libpthread.abilist |  6 -----
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist | 12 ++++++++++
>  .../sysv/linux/mips/mips64/libpthread.abilist |  6 -----
>  .../sysv/linux/mips/mips64/n32/libc.abilist   | 12 ++++++++++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   | 12 ++++++++++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    | 12 ++++++++++
>  .../unix/sysv/linux/nios2/libpthread.abilist  |  6 -----
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  | 12 ++++++++++
>  .../powerpc/powerpc32/libpthread.abilist      |  6 -----
>  .../powerpc/powerpc32/nofpu/libc.abilist      | 12 ++++++++++
>  .../linux/powerpc/powerpc64/be/libc.abilist   | 12 ++++++++++
>  .../powerpc/powerpc64/be/libpthread.abilist   |  6 -----
>  .../linux/powerpc/powerpc64/le/libc.abilist   | 12 ++++++++++
>  .../powerpc/powerpc64/le/libpthread.abilist   |  6 -----
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   | 12 ++++++++++
>  .../sysv/linux/riscv/rv32/libpthread.abilist  |  6 -----
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   | 12 ++++++++++
>  .../sysv/linux/riscv/rv64/libpthread.abilist  |  6 -----
>  .../unix/sysv/linux/s390/s390-32/libc.abilist | 12 ++++++++++
>  .../linux/s390/s390-32/libpthread.abilist     |  6 -----
>  .../unix/sysv/linux/s390/s390-64/libc.abilist | 12 ++++++++++
>  .../linux/s390/s390-64/libpthread.abilist     |  6 -----
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    | 12 ++++++++++
>  .../unix/sysv/linux/sh/be/libpthread.abilist  |  6 -----
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    | 12 ++++++++++
>  .../unix/sysv/linux/sh/le/libpthread.abilist  |  6 -----
>  .../sysv/linux/sparc/sparc32/libc.abilist     | 12 ++++++++++
>  .../linux/sparc/sparc32/libpthread.abilist    |  6 -----
>  .../sysv/linux/sparc/sparc64/libc.abilist     | 12 ++++++++++
>  .../linux/sparc/sparc64/libpthread.abilist    |  6 -----
>  .../unix/sysv/linux/x86_64/64/libc.abilist    | 12 ++++++++++
>  .../sysv/linux/x86_64/64/libpthread.abilist   |  6 -----
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   | 12 ++++++++++
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  6 -----
>  70 files changed, 466 insertions(+), 215 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 5d4276d9f9..1eca75ef35 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -84,6 +84,9 @@ routines = \
>    pthread_keys \
>    pthread_mutex_consistent \
>    pthread_once \
> +  pthread_rwlock_rdlock \
> +  pthread_rwlock_unlock \
> +  pthread_rwlock_wrlock \
>    pthread_self \
>    pthread_setcancelstate \
>    pthread_setcanceltype \
> @@ -191,13 +194,10 @@ libpthread-routines = \
>    pthread_rwlock_clockwrlock \
>    pthread_rwlock_destroy \
>    pthread_rwlock_init \
> -  pthread_rwlock_rdlock \
>    pthread_rwlock_timedrdlock \
>    pthread_rwlock_timedwrlock \
>    pthread_rwlock_tryrdlock \
>    pthread_rwlock_trywrlock \
> -  pthread_rwlock_unlock \
> -  pthread_rwlock_wrlock \
>    pthread_rwlockattr_destroy \
>    pthread_rwlockattr_getkind_np \
>    pthread_rwlockattr_getpshared \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index e93c27b083..b3feadd045 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -48,6 +48,14 @@ libc {
>    }
>    GLIBC_2.1 {
>      pthread_attr_init;
> +    pthread_rwlock_rdlock;
> +    pthread_rwlock_unlock;
> +    pthread_rwlock_wrlock;
> +  }
> +  GLIBC_2.2 {
> +    __pthread_rwlock_rdlock;
> +    __pthread_rwlock_unlock;
> +    __pthread_rwlock_wrlock;
>    }
>    GLIBC_2.2.3 {
>      pthread_getattr_np;
> @@ -96,12 +104,18 @@ libc {
>      __pthread_getspecific;
>      __pthread_key_create;
>      __pthread_once;
> +    __pthread_rwlock_rdlock;
> +    __pthread_rwlock_unlock;
> +    __pthread_rwlock_wrlock;
>      __pthread_setspecific;
>      pthread_getspecific;
>      pthread_key_create;
>      pthread_key_delete;
>      pthread_mutex_consistent;
>      pthread_once;
> +    pthread_rwlock_rdlock;
> +    pthread_rwlock_unlock;
> +    pthread_rwlock_wrlock;
>      pthread_setspecific;
>    }
>    GLIBC_PRIVATE {

Ok.

> @@ -241,11 +255,8 @@ libpthread {
>      pthread_mutexattr_settype;
>      pthread_rwlock_destroy;
>      pthread_rwlock_init;
> -    pthread_rwlock_rdlock;
>      pthread_rwlock_tryrdlock;
>      pthread_rwlock_trywrlock;
> -    pthread_rwlock_unlock;
> -    pthread_rwlock_wrlock;
>      pthread_rwlockattr_destroy;
>      pthread_rwlockattr_getkind_np;
>      pthread_rwlockattr_getpshared;
> @@ -276,11 +287,8 @@ libpthread {
>      __pread64;
>      __pthread_rwlock_destroy;
>      __pthread_rwlock_init;
> -    __pthread_rwlock_rdlock;
>      __pthread_rwlock_tryrdlock;
>      __pthread_rwlock_trywrlock;
> -    __pthread_rwlock_unlock;
> -    __pthread_rwlock_wrlock;
>      __pwrite64;
>      __res_state;
>      lseek64;

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index cacbf045a7..0c07b46a77 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -67,9 +67,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_rwlock_rdlock = __pthread_rwlock_rdlock,
> -    .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
> -    .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock,
>      .ptr__nptl_setxid = __nptl_setxid,
>    };
>  # define ptr_pthread_functions &pthread_functions

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 515c58039b..527e4acd4f 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -441,8 +441,10 @@ extern int __pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
>  				  __attr);
>  extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
>  extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
> +libc_hidden_proto (__pthread_rwlock_rdlock)
>  extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
>  extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
> +libc_hidden_proto (__pthread_rwlock_wrlock)
>  extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
>  extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
>  extern int __pthread_cond_broadcast (pthread_cond_t *cond);
> @@ -553,8 +555,6 @@ hidden_proto (__pthread_mutex_destroy)
>  hidden_proto (__pthread_mutex_lock)
>  hidden_proto (__pthread_mutex_trylock)
>  hidden_proto (__pthread_mutex_unlock)
> -hidden_proto (__pthread_rwlock_rdlock)
> -hidden_proto (__pthread_rwlock_wrlock)
>  hidden_proto (__pthread_rwlock_unlock)
>  hidden_proto (__pthread_testcancel)
>  hidden_proto (__pthread_mutexattr_init)

Ok.

> diff --git a/nptl/pthread_rwlock_rdlock.c b/nptl/pthread_rwlock_rdlock.c
> index 0eeee50834..6793e01e7b 100644
> --- a/nptl/pthread_rwlock_rdlock.c
> +++ b/nptl/pthread_rwlock_rdlock.c
> @@ -20,7 +20,7 @@
>  
>  /* See pthread_rwlock_common.c.  */
>  int
> -__pthread_rwlock_rdlock (pthread_rwlock_t *rwlock)
> +__pthread_rwlock_rdlock_1 (pthread_rwlock_t *rwlock)
>  {
>    LIBC_PROBE (rdlock_entry, 1, rwlock);
>  
> @@ -28,6 +28,22 @@ __pthread_rwlock_rdlock (pthread_rwlock_t *rwlock)
>    LIBC_PROBE (rdlock_acquire_read, 1, rwlock);
>    return result;
>  }
> +versioned_symbol (libc, __pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock)
>  
> -weak_alias (__pthread_rwlock_rdlock, pthread_rwlock_rdlock)
> -hidden_def (__pthread_rwlock_rdlock)
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_2)
> +strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_3)
> +strong_alias (__pthread_rwlock_rdlock_1, __pthread_rwlock_rdlock_4)
> +
> +versioned_symbol (libc, __pthread_rwlock_rdlock_2, pthread_rwlock_rdlock,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_rdlock_3, pthread_rwlock_rdlock,
> +	       GLIBC_2_1);
> +#endif
> +#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_rdlock_4, __pthread_rwlock_rdlock,
> +	       GLIBC_2_2);
> +#endif

Ok, although you might want to revise it with compat_symbol support for
multiple targets.

> diff --git a/nptl/pthread_rwlock_unlock.c b/nptl/pthread_rwlock_unlock.c
> index 356d63a045..6d0fb76afd 100644
> --- a/nptl/pthread_rwlock_unlock.c
> +++ b/nptl/pthread_rwlock_unlock.c
> @@ -27,7 +27,7 @@
>  
>  /* See pthread_rwlock_common.c for an overview.  */
>  int
> -__pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
> +__pthread_rwlock_unlock_1 (pthread_rwlock_t *rwlock)
>  {
>    LIBC_PROBE (rwlock_unlock, 1, rwlock);
>  
> @@ -43,6 +43,22 @@ __pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
>      __pthread_rwlock_rdunlock (rwlock);
>    return 0;
>  }
> +versioned_symbol (libc, __pthread_rwlock_unlock_1, __pthread_rwlock_unlock,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock)
>  
> -weak_alias (__pthread_rwlock_unlock, pthread_rwlock_unlock)
> -hidden_def (__pthread_rwlock_unlock)
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_2)
> +strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_3)
> +strong_alias (__pthread_rwlock_unlock_1, __pthread_rwlock_unlock_4)
> +
> +versioned_symbol (libc, __pthread_rwlock_unlock_2, pthread_rwlock_unlock,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_unlock_3, pthread_rwlock_unlock,
> +	       GLIBC_2_1);
> +#endif
> +#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_unlock_4, __pthread_rwlock_unlock,
> +	       GLIBC_2_2);
> +#endif

Same as before.

> diff --git a/nptl/pthread_rwlock_wrlock.c b/nptl/pthread_rwlock_wrlock.c
> index 98882a87e4..7b625201c5 100644
> --- a/nptl/pthread_rwlock_wrlock.c
> +++ b/nptl/pthread_rwlock_wrlock.c
> @@ -20,7 +20,7 @@
>  
>  /* See pthread_rwlock_common.c.  */
>  int
> -__pthread_rwlock_wrlock (pthread_rwlock_t *rwlock)
> +__pthread_rwlock_wrlock_1 (pthread_rwlock_t *rwlock)
>  {
>    LIBC_PROBE (wrlock_entry, 1, rwlock);
>  
> @@ -28,6 +28,22 @@ __pthread_rwlock_wrlock (pthread_rwlock_t *rwlock)
>    LIBC_PROBE (wrlock_acquire_write, 1, rwlock);
>    return result;
>  }
> +versioned_symbol (libc, __pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock)
>  
> -weak_alias (__pthread_rwlock_wrlock, pthread_rwlock_wrlock)
> -hidden_def (__pthread_rwlock_wrlock)
> +/* Several aliases for setting different symbol versions.  */
> +strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_2)
> +strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_3)
> +strong_alias (__pthread_rwlock_wrlock_1, __pthread_rwlock_wrlock_4)
> +
> +versioned_symbol (libc, __pthread_rwlock_wrlock_2, pthread_rwlock_wrlock,
> +		  GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_wrlock_3, pthread_rwlock_wrlock,
> +	       GLIBC_2_1);
> +#endif
> +#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_34)
> +compat_symbol (libc, __pthread_rwlock_wrlock_4, __pthread_rwlock_wrlock,
> +	       GLIBC_2_2);
> +#endif

Ditto.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 10a24568a9..89910560fa 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -167,10 +167,8 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  # define __libc_lock_lock(NAME) \
>    __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
>  #endif
> -#define __libc_rwlock_rdlock(NAME) \
> -  __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0)
> -#define __libc_rwlock_wrlock(NAME) \
> -  __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0)
> +#define __libc_rwlock_rdlock(NAME) __pthread_rwlock_rdlock (&(NAME))
> +#define __libc_rwlock_wrlock(NAME) __pthread_rwlock_wrlock (&(NAME))
>  
>  /* Try to lock the named lock variable.  */
>  #if IS_IN (libc) || IS_IN (libpthread)
> @@ -199,8 +197,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  # define __libc_lock_unlock(NAME) \
>    __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
>  #endif
> -#define __libc_rwlock_unlock(NAME) \
> -  __libc_ptf_call (__pthread_rwlock_unlock, (&(NAME)), 0)
> +#define __libc_rwlock_unlock(NAME) __pthread_rwlock_unlock (&(NAME))
>  
>  #ifdef SHARED
>  # define __rtld_lock_default_lock_recursive(lock) \
> @@ -299,15 +296,15 @@ extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
>  extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
>  
>  extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
> -
> +libc_hidden_proto (__pthread_rwlock_rdlock)
>  extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
>  
>  extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
> -
> +libc_hidden_proto (__pthread_rwlock_wrlock)
>  extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
>  
>  extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
> -
> +libc_hidden_proto (__pthread_rwlock_unlock)
>  extern int __pthread_once (pthread_once_t *__once_control,
>  			   void (*__init_routine) (void));
>  libc_hidden_proto (__pthread_once)
> @@ -333,11 +330,8 @@ weak_extern (__pthread_mutexattr_destroy)
>  weak_extern (__pthread_mutexattr_settype)
>  weak_extern (__pthread_rwlock_init)
>  weak_extern (__pthread_rwlock_destroy)
> -weak_extern (__pthread_rwlock_rdlock)
>  weak_extern (__pthread_rwlock_tryrdlock)
> -weak_extern (__pthread_rwlock_wrlock)
>  weak_extern (__pthread_rwlock_trywrlock)
> -weak_extern (__pthread_rwlock_unlock)
>  weak_extern (__pthread_initialize)
>  weak_extern (__pthread_atfork)
>  # else
> @@ -350,11 +344,8 @@ weak_extern (__pthread_atfork)
>  #  pragma weak __pthread_mutexattr_destroy
>  #  pragma weak __pthread_mutexattr_settype
>  #  pragma weak __pthread_rwlock_destroy
> -#  pragma weak __pthread_rwlock_rdlock
>  #  pragma weak __pthread_rwlock_tryrdlock
> -#  pragma weak __pthread_rwlock_wrlock
>  #  pragma weak __pthread_rwlock_trywrlock
> -#  pragma weak __pthread_rwlock_unlock
>  #  pragma weak __pthread_initialize
>  #  pragma weak __pthread_atfork
>  # endif

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 2d89013ff5..8535e142d5 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -46,9 +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_rwlock_rdlock) (pthread_rwlock_t *);
> -  int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
> -  int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
>    int (*ptr__nptl_setxid) (struct xid_command *);
>  };
>  

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 991efa0044..9191b2e760 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -342,6 +342,9 @@ GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
> +GLIBC_2.17 __pthread_rwlock_rdlock F
> +GLIBC_2.17 __pthread_rwlock_unlock F
> +GLIBC_2.17 __pthread_rwlock_wrlock F
>  GLIBC_2.17 __pthread_setspecific F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
> @@ -1462,6 +1465,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.17 pthread_rwlock_unlock F
> +GLIBC_2.17 pthread_rwlock_wrlock F
>  GLIBC_2.17 pthread_self F
>  GLIBC_2.17 pthread_setcancelstate F
>  GLIBC_2.17 pthread_setcanceltype F
> @@ -2193,6 +2199,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2200,4 +2209,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 50ab959905..9a24f796de 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.17 __pthread_register_cancel F
>  GLIBC_2.17 __pthread_register_cancel_defer F
>  GLIBC_2.17 __pthread_rwlock_destroy F
>  GLIBC_2.17 __pthread_rwlock_init F
> -GLIBC_2.17 __pthread_rwlock_rdlock F
>  GLIBC_2.17 __pthread_rwlock_tryrdlock F
>  GLIBC_2.17 __pthread_rwlock_trywrlock F
> -GLIBC_2.17 __pthread_rwlock_unlock F
> -GLIBC_2.17 __pthread_rwlock_wrlock F
>  GLIBC_2.17 __pthread_unregister_cancel F
>  GLIBC_2.17 __pthread_unregister_cancel_restore F
>  GLIBC_2.17 __pwrite64 F
> @@ -113,13 +110,10 @@ GLIBC_2.17 pthread_mutexattr_setrobust_np F
>  GLIBC_2.17 pthread_mutexattr_settype F
>  GLIBC_2.17 pthread_rwlock_destroy F
>  GLIBC_2.17 pthread_rwlock_init F
> -GLIBC_2.17 pthread_rwlock_rdlock F
>  GLIBC_2.17 pthread_rwlock_timedrdlock F
>  GLIBC_2.17 pthread_rwlock_timedwrlock F
>  GLIBC_2.17 pthread_rwlock_tryrdlock F
>  GLIBC_2.17 pthread_rwlock_trywrlock F
> -GLIBC_2.17 pthread_rwlock_unlock F
> -GLIBC_2.17 pthread_rwlock_wrlock F
>  GLIBC_2.17 pthread_rwlockattr_destroy F
>  GLIBC_2.17 pthread_rwlockattr_getkind_np F
>  GLIBC_2.17 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index a1229e4a1a..71dd49d25c 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -1588,6 +1588,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1861,6 +1864,9 @@ GLIBC_2.2 __fwriting F
>  GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2274,6 +2280,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2281,6 +2290,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 9d78d94466..a7b3fd73ab 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index ceee863b25..38764a6746 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -331,6 +331,9 @@ GLIBC_2.32 __pthread_cleanup_routine F
>  GLIBC_2.32 __pthread_getspecific F
>  GLIBC_2.32 __pthread_key_create F
>  GLIBC_2.32 __pthread_once F
> +GLIBC_2.32 __pthread_rwlock_rdlock F
> +GLIBC_2.32 __pthread_rwlock_unlock F
> +GLIBC_2.32 __pthread_rwlock_wrlock F
>  GLIBC_2.32 __pthread_setspecific F
>  GLIBC_2.32 __pthread_unwind_next F
>  GLIBC_2.32 __ptsname_r_chk F
> @@ -1389,6 +1392,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.32 pthread_rwlock_unlock F
> +GLIBC_2.32 pthread_rwlock_wrlock F
>  GLIBC_2.32 pthread_self F
>  GLIBC_2.32 pthread_setcancelstate F
>  GLIBC_2.32 pthread_setcanceltype F
> @@ -1953,6 +1959,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -1960,4 +1969,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index 6fed825b25..0d8b928e6d 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -24,11 +24,8 @@ GLIBC_2.32 __pthread_register_cancel F
>  GLIBC_2.32 __pthread_register_cancel_defer F
>  GLIBC_2.32 __pthread_rwlock_destroy F
>  GLIBC_2.32 __pthread_rwlock_init F
> -GLIBC_2.32 __pthread_rwlock_rdlock F
>  GLIBC_2.32 __pthread_rwlock_tryrdlock F
>  GLIBC_2.32 __pthread_rwlock_trywrlock F
> -GLIBC_2.32 __pthread_rwlock_unlock F
> -GLIBC_2.32 __pthread_rwlock_wrlock F
>  GLIBC_2.32 __pthread_unregister_cancel F
>  GLIBC_2.32 __pthread_unregister_cancel_restore F
>  GLIBC_2.32 __pwrite64 F
> @@ -130,13 +127,10 @@ GLIBC_2.32 pthread_rwlock_clockrdlock F
>  GLIBC_2.32 pthread_rwlock_clockwrlock F
>  GLIBC_2.32 pthread_rwlock_destroy F
>  GLIBC_2.32 pthread_rwlock_init F
> -GLIBC_2.32 pthread_rwlock_rdlock F
>  GLIBC_2.32 pthread_rwlock_timedrdlock F
>  GLIBC_2.32 pthread_rwlock_timedwrlock F
>  GLIBC_2.32 pthread_rwlock_tryrdlock F
>  GLIBC_2.32 pthread_rwlock_trywrlock F
> -GLIBC_2.32 pthread_rwlock_unlock F
> -GLIBC_2.32 pthread_rwlock_wrlock F
>  GLIBC_2.32 pthread_rwlockattr_destroy F
>  GLIBC_2.32 pthread_rwlockattr_getkind_np F
>  GLIBC_2.32 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 31e2de3cc2..86d971e7d2 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -161,6 +161,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -168,6 +171,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
> @@ -500,6 +506,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_rwlock_rdlock F
> +GLIBC_2.4 __pthread_rwlock_unlock F
> +GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1567,6 +1576,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.4 pthread_rwlock_unlock F
> +GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
>  GLIBC_2.4 __pthread_register_cancel_defer F
>  GLIBC_2.4 __pthread_rwlock_destroy F
>  GLIBC_2.4 __pthread_rwlock_init F
> -GLIBC_2.4 __pthread_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
> -GLIBC_2.4 __pthread_rwlock_unlock F
> -GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_unregister_cancel F
>  GLIBC_2.4 __pthread_unregister_cancel_restore F
>  GLIBC_2.4 __pwrite64 F
> @@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
>  GLIBC_2.4 pthread_mutexattr_settype F
>  GLIBC_2.4 pthread_rwlock_destroy F
>  GLIBC_2.4 pthread_rwlock_init F
> -GLIBC_2.4 pthread_rwlock_rdlock F
>  GLIBC_2.4 pthread_rwlock_timedrdlock F
>  GLIBC_2.4 pthread_rwlock_timedwrlock F
>  GLIBC_2.4 pthread_rwlock_tryrdlock F
>  GLIBC_2.4 pthread_rwlock_trywrlock F
> -GLIBC_2.4 pthread_rwlock_unlock F
> -GLIBC_2.4 pthread_rwlock_wrlock F
>  GLIBC_2.4 pthread_rwlockattr_destroy F
>  GLIBC_2.4 pthread_rwlockattr_getkind_np F
>  GLIBC_2.4 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index c6f9e3dbc3..caf3f6a141 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -158,6 +158,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -165,6 +168,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
> @@ -497,6 +503,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_rwlock_rdlock F
> +GLIBC_2.4 __pthread_rwlock_unlock F
> +GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1564,6 +1573,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.4 pthread_rwlock_unlock F
> +GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
>  GLIBC_2.4 __pthread_register_cancel_defer F
>  GLIBC_2.4 __pthread_rwlock_destroy F
>  GLIBC_2.4 __pthread_rwlock_init F
> -GLIBC_2.4 __pthread_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
> -GLIBC_2.4 __pthread_rwlock_unlock F
> -GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_unregister_cancel F
>  GLIBC_2.4 __pthread_unregister_cancel_restore F
>  GLIBC_2.4 __pwrite64 F
> @@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
>  GLIBC_2.4 pthread_mutexattr_settype F
>  GLIBC_2.4 pthread_rwlock_destroy F
>  GLIBC_2.4 pthread_rwlock_init F
> -GLIBC_2.4 pthread_rwlock_rdlock F
>  GLIBC_2.4 pthread_rwlock_timedrdlock F
>  GLIBC_2.4 pthread_rwlock_timedwrlock F
>  GLIBC_2.4 pthread_rwlock_tryrdlock F
>  GLIBC_2.4 pthread_rwlock_trywrlock F
> -GLIBC_2.4 pthread_rwlock_unlock F
> -GLIBC_2.4 pthread_rwlock_wrlock F
>  GLIBC_2.4 pthread_rwlockattr_destroy F
>  GLIBC_2.4 pthread_rwlockattr_getkind_np F
>  GLIBC_2.4 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index ec7f3bde74..aeb6424389 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -335,6 +335,9 @@ GLIBC_2.29 __pthread_cleanup_routine F
>  GLIBC_2.29 __pthread_getspecific F
>  GLIBC_2.29 __pthread_key_create F
>  GLIBC_2.29 __pthread_once F
> +GLIBC_2.29 __pthread_rwlock_rdlock F
> +GLIBC_2.29 __pthread_rwlock_unlock F
> +GLIBC_2.29 __pthread_rwlock_wrlock F
>  GLIBC_2.29 __pthread_setspecific F
>  GLIBC_2.29 __pthread_unwind_next F
>  GLIBC_2.29 __ptsname_r_chk F
> @@ -1450,6 +1453,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.29 pthread_rwlock_unlock F
> +GLIBC_2.29 pthread_rwlock_wrlock F
>  GLIBC_2.29 pthread_self F
>  GLIBC_2.29 pthread_setcancelstate F
>  GLIBC_2.29 pthread_setcanceltype F
> @@ -2137,6 +2143,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2144,4 +2153,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index cf7869867c..440c0507d1 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -24,11 +24,8 @@ GLIBC_2.29 __pthread_register_cancel F
>  GLIBC_2.29 __pthread_register_cancel_defer F
>  GLIBC_2.29 __pthread_rwlock_destroy F
>  GLIBC_2.29 __pthread_rwlock_init F
> -GLIBC_2.29 __pthread_rwlock_rdlock F
>  GLIBC_2.29 __pthread_rwlock_tryrdlock F
>  GLIBC_2.29 __pthread_rwlock_trywrlock F
> -GLIBC_2.29 __pthread_rwlock_unlock F
> -GLIBC_2.29 __pthread_rwlock_wrlock F
>  GLIBC_2.29 __pthread_unregister_cancel F
>  GLIBC_2.29 __pthread_unregister_cancel_restore F
>  GLIBC_2.29 __pwrite64 F
> @@ -125,13 +122,10 @@ GLIBC_2.29 pthread_mutexattr_setrobust_np F
>  GLIBC_2.29 pthread_mutexattr_settype F
>  GLIBC_2.29 pthread_rwlock_destroy F
>  GLIBC_2.29 pthread_rwlock_init F
> -GLIBC_2.29 pthread_rwlock_rdlock F
>  GLIBC_2.29 pthread_rwlock_timedrdlock F
>  GLIBC_2.29 pthread_rwlock_timedwrlock F
>  GLIBC_2.29 pthread_rwlock_tryrdlock F
>  GLIBC_2.29 pthread_rwlock_trywrlock F
> -GLIBC_2.29 pthread_rwlock_unlock F
> -GLIBC_2.29 pthread_rwlock_wrlock F
>  GLIBC_2.29 pthread_rwlockattr_destroy F
>  GLIBC_2.29 pthread_rwlockattr_getkind_np F
>  GLIBC_2.29 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index ebced5d8c3..e1d02058c9 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -359,6 +359,9 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1283,6 +1286,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2095,6 +2101,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2102,6 +2111,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index d15479dabd..717344a690 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -1556,6 +1556,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1865,6 +1868,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2262,6 +2268,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2269,6 +2278,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 99e53d0c49..35cc2f61c5 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 62c8c7d461..284b7072a3 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -363,6 +363,9 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1304,6 +1307,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2127,6 +2133,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2134,6 +2143,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 ff37f3905e..2e69109cdc 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 83e8a6824f..404d16b92a 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -162,6 +162,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -169,6 +172,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
> @@ -486,6 +492,9 @@ GLIBC_2.4 __pthread_cleanup_routine F
>  GLIBC_2.4 __pthread_getspecific F
>  GLIBC_2.4 __pthread_key_create F
>  GLIBC_2.4 __pthread_once F
> +GLIBC_2.4 __pthread_rwlock_rdlock F
> +GLIBC_2.4 __pthread_rwlock_unlock F
> +GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_setspecific F
>  GLIBC_2.4 __pthread_unwind_next F
>  GLIBC_2.4 __ptsname_r_chk F
> @@ -1547,6 +1556,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.4 pthread_rwlock_unlock F
> +GLIBC_2.4 pthread_rwlock_wrlock 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 5d3859b245..833b53362d 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -59,11 +59,8 @@ GLIBC_2.4 __pthread_register_cancel F
>  GLIBC_2.4 __pthread_register_cancel_defer F
>  GLIBC_2.4 __pthread_rwlock_destroy F
>  GLIBC_2.4 __pthread_rwlock_init F
> -GLIBC_2.4 __pthread_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_tryrdlock F
>  GLIBC_2.4 __pthread_rwlock_trywrlock F
> -GLIBC_2.4 __pthread_rwlock_unlock F
> -GLIBC_2.4 __pthread_rwlock_wrlock F
>  GLIBC_2.4 __pthread_unregister_cancel F
>  GLIBC_2.4 __pthread_unregister_cancel_restore F
>  GLIBC_2.4 __pwrite64 F
> @@ -144,13 +141,10 @@ GLIBC_2.4 pthread_mutexattr_setrobust_np F
>  GLIBC_2.4 pthread_mutexattr_settype F
>  GLIBC_2.4 pthread_rwlock_destroy F
>  GLIBC_2.4 pthread_rwlock_init F
> -GLIBC_2.4 pthread_rwlock_rdlock F
>  GLIBC_2.4 pthread_rwlock_timedrdlock F
>  GLIBC_2.4 pthread_rwlock_timedwrlock F
>  GLIBC_2.4 pthread_rwlock_tryrdlock F
>  GLIBC_2.4 pthread_rwlock_trywrlock F
> -GLIBC_2.4 pthread_rwlock_unlock F
> -GLIBC_2.4 pthread_rwlock_wrlock F
>  GLIBC_2.4 pthread_rwlockattr_destroy F
>  GLIBC_2.4 pthread_rwlockattr_getkind_np F
>  GLIBC_2.4 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 5a81c61de7..b1ad96e072 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -1552,6 +1552,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1821,6 +1824,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2207,6 +2213,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2214,6 +2223,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 99e53d0c49..35cc2f61c5 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 39c806db53..3e0cceae93 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -343,6 +343,9 @@ GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
> +GLIBC_2.18 __pthread_rwlock_rdlock F
> +GLIBC_2.18 __pthread_rwlock_unlock F
> +GLIBC_2.18 __pthread_rwlock_wrlock F
>  GLIBC_2.18 __pthread_setspecific F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
> @@ -1465,6 +1468,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.18 pthread_rwlock_unlock F
> +GLIBC_2.18 pthread_rwlock_wrlock F
>  GLIBC_2.18 pthread_self F
>  GLIBC_2.18 pthread_setcancelstate F
>  GLIBC_2.18 pthread_setcanceltype F
> @@ -2188,6 +2194,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2195,4 +2204,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 8b3785414d..0db83c2f88 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.18 __pthread_register_cancel F
>  GLIBC_2.18 __pthread_register_cancel_defer F
>  GLIBC_2.18 __pthread_rwlock_destroy F
>  GLIBC_2.18 __pthread_rwlock_init F
> -GLIBC_2.18 __pthread_rwlock_rdlock F
>  GLIBC_2.18 __pthread_rwlock_tryrdlock F
>  GLIBC_2.18 __pthread_rwlock_trywrlock F
> -GLIBC_2.18 __pthread_rwlock_unlock F
> -GLIBC_2.18 __pthread_rwlock_wrlock F
>  GLIBC_2.18 __pthread_unregister_cancel F
>  GLIBC_2.18 __pthread_unregister_cancel_restore F
>  GLIBC_2.18 __pwrite64 F
> @@ -114,13 +111,10 @@ GLIBC_2.18 pthread_mutexattr_setrobust_np F
>  GLIBC_2.18 pthread_mutexattr_settype F
>  GLIBC_2.18 pthread_rwlock_destroy F
>  GLIBC_2.18 pthread_rwlock_init F
> -GLIBC_2.18 pthread_rwlock_rdlock F
>  GLIBC_2.18 pthread_rwlock_timedrdlock F
>  GLIBC_2.18 pthread_rwlock_timedwrlock F
>  GLIBC_2.18 pthread_rwlock_tryrdlock F
>  GLIBC_2.18 pthread_rwlock_trywrlock F
> -GLIBC_2.18 pthread_rwlock_unlock F
> -GLIBC_2.18 pthread_rwlock_wrlock F
>  GLIBC_2.18 pthread_rwlockattr_destroy F
>  GLIBC_2.18 pthread_rwlockattr_getkind_np F
>  GLIBC_2.18 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index ce2823207c..4ee88a1d01 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -343,6 +343,9 @@ GLIBC_2.18 __pthread_cleanup_routine F
>  GLIBC_2.18 __pthread_getspecific F
>  GLIBC_2.18 __pthread_key_create F
>  GLIBC_2.18 __pthread_once F
> +GLIBC_2.18 __pthread_rwlock_rdlock F
> +GLIBC_2.18 __pthread_rwlock_unlock F
> +GLIBC_2.18 __pthread_rwlock_wrlock F
>  GLIBC_2.18 __pthread_setspecific F
>  GLIBC_2.18 __pthread_unwind_next F
>  GLIBC_2.18 __ptsname_r_chk F
> @@ -1465,6 +1468,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.18 pthread_rwlock_unlock F
> +GLIBC_2.18 pthread_rwlock_wrlock F
>  GLIBC_2.18 pthread_self F
>  GLIBC_2.18 pthread_setcancelstate F
>  GLIBC_2.18 pthread_setcanceltype F
> @@ -2185,6 +2191,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2192,4 +2201,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 8b3785414d..0db83c2f88 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.18 __pthread_register_cancel F
>  GLIBC_2.18 __pthread_register_cancel_defer F
>  GLIBC_2.18 __pthread_rwlock_destroy F
>  GLIBC_2.18 __pthread_rwlock_init F
> -GLIBC_2.18 __pthread_rwlock_rdlock F
>  GLIBC_2.18 __pthread_rwlock_tryrdlock F
>  GLIBC_2.18 __pthread_rwlock_trywrlock F
> -GLIBC_2.18 __pthread_rwlock_unlock F
> -GLIBC_2.18 __pthread_rwlock_wrlock F
>  GLIBC_2.18 __pthread_unregister_cancel F
>  GLIBC_2.18 __pthread_unregister_cancel_restore F
>  GLIBC_2.18 __pwrite64 F
> @@ -114,13 +111,10 @@ GLIBC_2.18 pthread_mutexattr_setrobust_np F
>  GLIBC_2.18 pthread_mutexattr_settype F
>  GLIBC_2.18 pthread_rwlock_destroy F
>  GLIBC_2.18 pthread_rwlock_init F
> -GLIBC_2.18 pthread_rwlock_rdlock F
>  GLIBC_2.18 pthread_rwlock_timedrdlock F
>  GLIBC_2.18 pthread_rwlock_timedwrlock F
>  GLIBC_2.18 pthread_rwlock_tryrdlock F
>  GLIBC_2.18 pthread_rwlock_trywrlock F
> -GLIBC_2.18 pthread_rwlock_unlock F
> -GLIBC_2.18 pthread_rwlock_wrlock F
>  GLIBC_2.18 pthread_rwlockattr_destroy F
>  GLIBC_2.18 pthread_rwlockattr_getkind_np F
>  GLIBC_2.18 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 5e8abfa6ae..e67af35000 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -1526,6 +1526,9 @@ GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __poll F
>  GLIBC_2.2 __pread64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __res_init F
> @@ -1813,6 +1816,9 @@ GLIBC_2.2 pread64 F
>  GLIBC_2.2 printf_size F
>  GLIBC_2.2 printf_size_info F
>  GLIBC_2.2 pthread_attr_init F
> +GLIBC_2.2 pthread_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 ptsname F
>  GLIBC_2.2 ptsname_r F
>  GLIBC_2.2 putgrent F
> @@ -2178,6 +2184,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2185,6 +2194,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 cd0d6d7419..a1a66138d4 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -86,11 +86,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> @@ -123,13 +120,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 93002ae842..1ce0179391 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -1524,6 +1524,9 @@ GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __poll F
>  GLIBC_2.2 __pread64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __res_init F
> @@ -1811,6 +1814,9 @@ GLIBC_2.2 pread64 F
>  GLIBC_2.2 printf_size F
>  GLIBC_2.2 printf_size_info F
>  GLIBC_2.2 pthread_attr_init F
> +GLIBC_2.2 pthread_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 ptsname F
>  GLIBC_2.2 ptsname_r F
>  GLIBC_2.2 putgrent F
> @@ -2176,6 +2182,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2183,6 +2192,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 cd0d6d7419..a1a66138d4 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -86,11 +86,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> @@ -123,13 +120,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 245a840e12..54c2300420 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -1524,6 +1524,9 @@ GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __poll F
>  GLIBC_2.2 __pread64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __res_init F
> @@ -1811,6 +1814,9 @@ GLIBC_2.2 pread64 F
>  GLIBC_2.2 printf_size F
>  GLIBC_2.2 printf_size_info F
>  GLIBC_2.2 pthread_attr_init F
> +GLIBC_2.2 pthread_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 ptsname F
>  GLIBC_2.2 ptsname_r F
>  GLIBC_2.2 putgrent F
> @@ -2184,6 +2190,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2191,6 +2200,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 24b2dddb51..90bbb7f253 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -1520,6 +1520,9 @@ GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __poll F
>  GLIBC_2.2 __pread64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
>  GLIBC_2.2 __res_init F
> @@ -1807,6 +1810,9 @@ GLIBC_2.2 pread64 F
>  GLIBC_2.2 printf_size F
>  GLIBC_2.2 printf_size_info F
>  GLIBC_2.2 pthread_attr_init F
> +GLIBC_2.2 pthread_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 ptsname F
>  GLIBC_2.2 ptsname_r F
>  GLIBC_2.2 putgrent F
> @@ -2178,6 +2184,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2185,6 +2194,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 7d4b4dd278..1f68c2a3fb 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -380,6 +380,9 @@ GLIBC_2.21 __pthread_cleanup_routine F
>  GLIBC_2.21 __pthread_getspecific F
>  GLIBC_2.21 __pthread_key_create F
>  GLIBC_2.21 __pthread_once F
> +GLIBC_2.21 __pthread_rwlock_rdlock F
> +GLIBC_2.21 __pthread_rwlock_unlock F
> +GLIBC_2.21 __pthread_rwlock_wrlock F
>  GLIBC_2.21 __pthread_setspecific F
>  GLIBC_2.21 __pthread_unwind_next F
>  GLIBC_2.21 __ptsname_r_chk F
> @@ -1507,6 +1510,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.21 pthread_rwlock_unlock F
> +GLIBC_2.21 pthread_rwlock_wrlock F
>  GLIBC_2.21 pthread_self F
>  GLIBC_2.21 pthread_setcancelstate F
>  GLIBC_2.21 pthread_setcanceltype F
> @@ -2226,6 +2232,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2233,4 +2242,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 0250c9756d..806432b7b4 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.21 __pthread_register_cancel F
>  GLIBC_2.21 __pthread_register_cancel_defer F
>  GLIBC_2.21 __pthread_rwlock_destroy F
>  GLIBC_2.21 __pthread_rwlock_init F
> -GLIBC_2.21 __pthread_rwlock_rdlock F
>  GLIBC_2.21 __pthread_rwlock_tryrdlock F
>  GLIBC_2.21 __pthread_rwlock_trywrlock F
> -GLIBC_2.21 __pthread_rwlock_unlock F
> -GLIBC_2.21 __pthread_rwlock_wrlock F
>  GLIBC_2.21 __pthread_unregister_cancel F
>  GLIBC_2.21 __pthread_unregister_cancel_restore F
>  GLIBC_2.21 __pwrite64 F
> @@ -114,13 +111,10 @@ GLIBC_2.21 pthread_mutexattr_setrobust_np F
>  GLIBC_2.21 pthread_mutexattr_settype F
>  GLIBC_2.21 pthread_rwlock_destroy F
>  GLIBC_2.21 pthread_rwlock_init F
> -GLIBC_2.21 pthread_rwlock_rdlock F
>  GLIBC_2.21 pthread_rwlock_timedrdlock F
>  GLIBC_2.21 pthread_rwlock_timedwrlock F
>  GLIBC_2.21 pthread_rwlock_tryrdlock F
>  GLIBC_2.21 pthread_rwlock_trywrlock F
> -GLIBC_2.21 pthread_rwlock_unlock F
> -GLIBC_2.21 pthread_rwlock_wrlock F
>  GLIBC_2.21 pthread_rwlockattr_destroy F
>  GLIBC_2.21 pthread_rwlockattr_getkind_np F
>  GLIBC_2.21 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 65ea41b2db..a41536e4cd 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -1560,6 +1560,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1827,6 +1830,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2234,6 +2240,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2241,6 +2250,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 e0eb362a7a..d0646d0eaf 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 9d413de126..cdd6e98496 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -1560,6 +1560,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1831,6 +1834,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2267,6 +2273,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2274,6 +2283,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 16c24bfc69..63a7449937 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -412,6 +412,9 @@ GLIBC_2.3 __progname_full D 0x8
>  GLIBC_2.3 __pthread_getspecific F
>  GLIBC_2.3 __pthread_key_create F
>  GLIBC_2.3 __pthread_once F
> +GLIBC_2.3 __pthread_rwlock_rdlock F
> +GLIBC_2.3 __pthread_rwlock_unlock F
> +GLIBC_2.3 __pthread_rwlock_wrlock F
>  GLIBC_2.3 __pthread_setspecific F
>  GLIBC_2.3 __pwrite64 F
>  GLIBC_2.3 __rawmemchr F
> @@ -1390,6 +1393,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.3 pthread_rwlock_unlock F
> +GLIBC_2.3 pthread_rwlock_wrlock F
>  GLIBC_2.3 pthread_self F
>  GLIBC_2.3 pthread_setcancelstate F
>  GLIBC_2.3 pthread_setcanceltype F
> @@ -2097,6 +2103,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2104,6 +2113,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 1099d88afe..72d49ce4f3 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -51,11 +51,8 @@ GLIBC_2.3 __pthread_mutexattr_init F
>  GLIBC_2.3 __pthread_mutexattr_settype F
>  GLIBC_2.3 __pthread_rwlock_destroy F
>  GLIBC_2.3 __pthread_rwlock_init F
> -GLIBC_2.3 __pthread_rwlock_rdlock F
>  GLIBC_2.3 __pthread_rwlock_tryrdlock F
>  GLIBC_2.3 __pthread_rwlock_trywrlock F
> -GLIBC_2.3 __pthread_rwlock_unlock F
> -GLIBC_2.3 __pthread_rwlock_wrlock F
>  GLIBC_2.3 __pwrite64 F
>  GLIBC_2.3 __read F
>  GLIBC_2.3 __res_state F
> @@ -122,13 +119,10 @@ GLIBC_2.3 pthread_mutexattr_setpshared F
>  GLIBC_2.3 pthread_mutexattr_settype F
>  GLIBC_2.3 pthread_rwlock_destroy F
>  GLIBC_2.3 pthread_rwlock_init F
> -GLIBC_2.3 pthread_rwlock_rdlock F
>  GLIBC_2.3 pthread_rwlock_timedrdlock F
>  GLIBC_2.3 pthread_rwlock_timedwrlock F
>  GLIBC_2.3 pthread_rwlock_tryrdlock F
>  GLIBC_2.3 pthread_rwlock_trywrlock F
> -GLIBC_2.3 pthread_rwlock_unlock F
> -GLIBC_2.3 pthread_rwlock_wrlock F
>  GLIBC_2.3 pthread_rwlockattr_destroy F
>  GLIBC_2.3 pthread_rwlockattr_getkind_np F
>  GLIBC_2.3 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index d97c594edd..b6de88ea41 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -428,6 +428,9 @@ GLIBC_2.17 __pthread_cleanup_routine F
>  GLIBC_2.17 __pthread_getspecific F
>  GLIBC_2.17 __pthread_key_create F
>  GLIBC_2.17 __pthread_once F
> +GLIBC_2.17 __pthread_rwlock_rdlock F
> +GLIBC_2.17 __pthread_rwlock_unlock F
> +GLIBC_2.17 __pthread_rwlock_wrlock F
>  GLIBC_2.17 __pthread_setspecific F
>  GLIBC_2.17 __pthread_unwind_next F
>  GLIBC_2.17 __ptsname_r_chk F
> @@ -1551,6 +1554,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.17 pthread_rwlock_unlock F
> +GLIBC_2.17 pthread_rwlock_wrlock F
>  GLIBC_2.17 pthread_self F
>  GLIBC_2.17 pthread_setcancelstate F
>  GLIBC_2.17 pthread_setcanceltype F
> @@ -2388,6 +2394,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2395,4 +2404,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 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 50ab959905..9a24f796de 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.17 __pthread_register_cancel F
>  GLIBC_2.17 __pthread_register_cancel_defer F
>  GLIBC_2.17 __pthread_rwlock_destroy F
>  GLIBC_2.17 __pthread_rwlock_init F
> -GLIBC_2.17 __pthread_rwlock_rdlock F
>  GLIBC_2.17 __pthread_rwlock_tryrdlock F
>  GLIBC_2.17 __pthread_rwlock_trywrlock F
> -GLIBC_2.17 __pthread_rwlock_unlock F
> -GLIBC_2.17 __pthread_rwlock_wrlock F
>  GLIBC_2.17 __pthread_unregister_cancel F
>  GLIBC_2.17 __pthread_unregister_cancel_restore F
>  GLIBC_2.17 __pwrite64 F
> @@ -113,13 +110,10 @@ GLIBC_2.17 pthread_mutexattr_setrobust_np F
>  GLIBC_2.17 pthread_mutexattr_settype F
>  GLIBC_2.17 pthread_rwlock_destroy F
>  GLIBC_2.17 pthread_rwlock_init F
> -GLIBC_2.17 pthread_rwlock_rdlock F
>  GLIBC_2.17 pthread_rwlock_timedrdlock F
>  GLIBC_2.17 pthread_rwlock_timedwrlock F
>  GLIBC_2.17 pthread_rwlock_tryrdlock F
>  GLIBC_2.17 pthread_rwlock_trywrlock F
> -GLIBC_2.17 pthread_rwlock_unlock F
> -GLIBC_2.17 pthread_rwlock_wrlock F
>  GLIBC_2.17 pthread_rwlockattr_destroy F
>  GLIBC_2.17 pthread_rwlockattr_getkind_np F
>  GLIBC_2.17 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 44b0121343..d81b46d597 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -328,6 +328,9 @@ GLIBC_2.33 __pthread_cleanup_routine F
>  GLIBC_2.33 __pthread_getspecific F
>  GLIBC_2.33 __pthread_key_create F
>  GLIBC_2.33 __pthread_once F
> +GLIBC_2.33 __pthread_rwlock_rdlock F
> +GLIBC_2.33 __pthread_rwlock_unlock F
> +GLIBC_2.33 __pthread_rwlock_wrlock F
>  GLIBC_2.33 __pthread_setspecific F
>  GLIBC_2.33 __pthread_unwind_next F
>  GLIBC_2.33 __ptsname_r_chk F
> @@ -1391,6 +1394,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.33 pthread_rwlock_unlock F
> +GLIBC_2.33 pthread_rwlock_wrlock F
>  GLIBC_2.33 pthread_self F
>  GLIBC_2.33 pthread_setcancelstate F
>  GLIBC_2.33 pthread_setcanceltype F
> @@ -1955,6 +1961,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -1962,4 +1971,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 6c6fdd0cbf..10e50b67c0 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -24,11 +24,8 @@ GLIBC_2.33 __pthread_register_cancel F
>  GLIBC_2.33 __pthread_register_cancel_defer F
>  GLIBC_2.33 __pthread_rwlock_destroy F
>  GLIBC_2.33 __pthread_rwlock_init F
> -GLIBC_2.33 __pthread_rwlock_rdlock F
>  GLIBC_2.33 __pthread_rwlock_tryrdlock F
>  GLIBC_2.33 __pthread_rwlock_trywrlock F
> -GLIBC_2.33 __pthread_rwlock_unlock F
> -GLIBC_2.33 __pthread_rwlock_wrlock F
>  GLIBC_2.33 __pthread_unregister_cancel F
>  GLIBC_2.33 __pthread_unregister_cancel_restore F
>  GLIBC_2.33 __pwrite64 F
> @@ -130,13 +127,10 @@ GLIBC_2.33 pthread_rwlock_clockrdlock F
>  GLIBC_2.33 pthread_rwlock_clockwrlock F
>  GLIBC_2.33 pthread_rwlock_destroy F
>  GLIBC_2.33 pthread_rwlock_init F
> -GLIBC_2.33 pthread_rwlock_rdlock F
>  GLIBC_2.33 pthread_rwlock_timedrdlock F
>  GLIBC_2.33 pthread_rwlock_timedwrlock F
>  GLIBC_2.33 pthread_rwlock_tryrdlock F
>  GLIBC_2.33 pthread_rwlock_trywrlock F
> -GLIBC_2.33 pthread_rwlock_unlock F
> -GLIBC_2.33 pthread_rwlock_wrlock F
>  GLIBC_2.33 pthread_rwlockattr_destroy F
>  GLIBC_2.33 pthread_rwlockattr_getkind_np F
>  GLIBC_2.33 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 22a34442f0..fbd1c5e5cf 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -339,6 +339,9 @@ GLIBC_2.27 __pthread_cleanup_routine F
>  GLIBC_2.27 __pthread_getspecific F
>  GLIBC_2.27 __pthread_key_create F
>  GLIBC_2.27 __pthread_once F
> +GLIBC_2.27 __pthread_rwlock_rdlock F
> +GLIBC_2.27 __pthread_rwlock_unlock F
> +GLIBC_2.27 __pthread_rwlock_wrlock F
>  GLIBC_2.27 __pthread_setspecific F
>  GLIBC_2.27 __pthread_unwind_next F
>  GLIBC_2.27 __ptsname_r_chk F
> @@ -1453,6 +1456,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.27 pthread_rwlock_unlock F
> +GLIBC_2.27 pthread_rwlock_wrlock F
>  GLIBC_2.27 pthread_self F
>  GLIBC_2.27 pthread_setcancelstate F
>  GLIBC_2.27 pthread_setcanceltype F
> @@ -2155,6 +2161,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2162,4 +2171,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 359545faee..ed24898e0d 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.27 __pthread_register_cancel F
>  GLIBC_2.27 __pthread_register_cancel_defer F
>  GLIBC_2.27 __pthread_rwlock_destroy F
>  GLIBC_2.27 __pthread_rwlock_init F
> -GLIBC_2.27 __pthread_rwlock_rdlock F
>  GLIBC_2.27 __pthread_rwlock_tryrdlock F
>  GLIBC_2.27 __pthread_rwlock_trywrlock F
> -GLIBC_2.27 __pthread_rwlock_unlock F
> -GLIBC_2.27 __pthread_rwlock_wrlock F
>  GLIBC_2.27 __pthread_unregister_cancel F
>  GLIBC_2.27 __pthread_unregister_cancel_restore F
>  GLIBC_2.27 __pwrite64 F
> @@ -114,13 +111,10 @@ GLIBC_2.27 pthread_mutexattr_setrobust_np F
>  GLIBC_2.27 pthread_mutexattr_settype F
>  GLIBC_2.27 pthread_rwlock_destroy F
>  GLIBC_2.27 pthread_rwlock_init F
> -GLIBC_2.27 pthread_rwlock_rdlock F
>  GLIBC_2.27 pthread_rwlock_timedrdlock F
>  GLIBC_2.27 pthread_rwlock_timedwrlock F
>  GLIBC_2.27 pthread_rwlock_tryrdlock F
>  GLIBC_2.27 pthread_rwlock_trywrlock F
> -GLIBC_2.27 pthread_rwlock_unlock F
> -GLIBC_2.27 pthread_rwlock_wrlock F
>  GLIBC_2.27 pthread_rwlockattr_destroy F
>  GLIBC_2.27 pthread_rwlockattr_getkind_np F
>  GLIBC_2.27 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 21f49b1fa0..27a9b011a8 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -1552,6 +1552,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1825,6 +1828,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2232,6 +2238,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2239,6 +2248,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 5eb6187d98..d6e91c977a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -121,11 +118,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 114591d6f5..9e79331100 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -373,6 +373,9 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1301,6 +1304,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2133,6 +2139,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2140,6 +2149,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 8f60a6b633..14489b39d0 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -31,11 +31,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -103,13 +100,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index ad487f0c9f..b7dd795864 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -362,6 +362,9 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1287,6 +1290,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2102,6 +2108,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2109,6 +2118,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 7f6886ff02..eea30cd098 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -362,6 +362,9 @@ GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1287,6 +1290,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2099,6 +2105,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2106,6 +2115,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 d0e8564302..70af59d791 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 4ae6d45923..4944c4159b 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -1553,6 +1553,9 @@ GLIBC_2.1 pread64 F
>  GLIBC_2.1 printf_size F
>  GLIBC_2.1 printf_size_info F
>  GLIBC_2.1 pthread_attr_init F
> +GLIBC_2.1 pthread_rwlock_rdlock F
> +GLIBC_2.1 pthread_rwlock_unlock F
> +GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 ptsname F
>  GLIBC_2.1 ptsname_r F
>  GLIBC_2.1 putgrent F
> @@ -1823,6 +1826,9 @@ GLIBC_2.2 __getmntent_r F
>  GLIBC_2.2 __lxstat64 F
>  GLIBC_2.2 __nl_langinfo_l F
>  GLIBC_2.2 __open64 F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __res_init F
>  GLIBC_2.2 __res_nclose F
>  GLIBC_2.2 __res_ninit F
> @@ -2223,6 +2229,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2230,6 +2239,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 9d78d94466..a7b3fd73ab 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -87,11 +87,8 @@ GLIBC_2.1 pthread_mutexattr_gettype F
>  GLIBC_2.1 pthread_mutexattr_settype F
>  GLIBC_2.1 pthread_rwlock_destroy F
>  GLIBC_2.1 pthread_rwlock_init F
> -GLIBC_2.1 pthread_rwlock_rdlock F
>  GLIBC_2.1 pthread_rwlock_tryrdlock F
>  GLIBC_2.1 pthread_rwlock_trywrlock F
> -GLIBC_2.1 pthread_rwlock_unlock F
> -GLIBC_2.1 pthread_rwlock_wrlock F
>  GLIBC_2.1 pthread_rwlockattr_destroy F
>  GLIBC_2.1 pthread_rwlockattr_getkind_np F
>  GLIBC_2.1 pthread_rwlockattr_getpshared F
> @@ -120,11 +117,8 @@ GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __res_state F
>  GLIBC_2.2 lseek64 F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 44d0f68cb2..e69420994f 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -400,6 +400,9 @@ GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
>  GLIBC_2.2 __pthread_once F
> +GLIBC_2.2 __pthread_rwlock_rdlock F
> +GLIBC_2.2 __pthread_rwlock_unlock F
> +GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pthread_setspecific F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __rawmemchr F
> @@ -1330,6 +1333,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2 pthread_rwlock_unlock F
> +GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_self F
>  GLIBC_2.2 pthread_setcancelstate F
>  GLIBC_2.2 pthread_setcanceltype F
> @@ -2150,6 +2156,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2157,6 +2166,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 ff37f3905e..2e69109cdc 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2 __pthread_mutexattr_init F
>  GLIBC_2.2 __pthread_mutexattr_settype F
>  GLIBC_2.2 __pthread_rwlock_destroy F
>  GLIBC_2.2 __pthread_rwlock_init F
> -GLIBC_2.2 __pthread_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2 __pthread_rwlock_trywrlock F
> -GLIBC_2.2 __pthread_rwlock_unlock F
> -GLIBC_2.2 __pthread_rwlock_wrlock F
>  GLIBC_2.2 __pwrite64 F
>  GLIBC_2.2 __read F
>  GLIBC_2.2 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2 pthread_mutexattr_setpshared F
>  GLIBC_2.2 pthread_mutexattr_settype F
>  GLIBC_2.2 pthread_rwlock_destroy F
>  GLIBC_2.2 pthread_rwlock_init F
> -GLIBC_2.2 pthread_rwlock_rdlock F
>  GLIBC_2.2 pthread_rwlock_timedrdlock F
>  GLIBC_2.2 pthread_rwlock_timedwrlock F
>  GLIBC_2.2 pthread_rwlock_tryrdlock F
>  GLIBC_2.2 pthread_rwlock_trywrlock F
> -GLIBC_2.2 pthread_rwlock_unlock F
> -GLIBC_2.2 pthread_rwlock_wrlock F
>  GLIBC_2.2 pthread_rwlockattr_destroy F
>  GLIBC_2.2 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index d96699a20d..dfe78d93cb 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -361,6 +361,9 @@ GLIBC_2.2.5 __progname_full D 0x8
>  GLIBC_2.2.5 __pthread_getspecific F
>  GLIBC_2.2.5 __pthread_key_create F
>  GLIBC_2.2.5 __pthread_once F
> +GLIBC_2.2.5 __pthread_rwlock_rdlock F
> +GLIBC_2.2.5 __pthread_rwlock_unlock F
> +GLIBC_2.2.5 __pthread_rwlock_wrlock F
>  GLIBC_2.2.5 __pthread_setspecific F
>  GLIBC_2.2.5 __pwrite64 F
>  GLIBC_2.2.5 __rawmemchr F
> @@ -1298,6 +1301,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.2.5 pthread_rwlock_unlock F
> +GLIBC_2.2.5 pthread_rwlock_wrlock F
>  GLIBC_2.2.5 pthread_self F
>  GLIBC_2.2.5 pthread_setcancelstate F
>  GLIBC_2.2.5 pthread_setcanceltype F
> @@ -2109,6 +2115,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2116,6 +2125,9 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 pthread_setspecific 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 511240921e..4f8dfa000a 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -30,11 +30,8 @@ GLIBC_2.2.5 __pthread_mutexattr_init F
>  GLIBC_2.2.5 __pthread_mutexattr_settype 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
>  GLIBC_2.2.5 __pthread_rwlock_tryrdlock F
>  GLIBC_2.2.5 __pthread_rwlock_trywrlock F
> -GLIBC_2.2.5 __pthread_rwlock_unlock F
> -GLIBC_2.2.5 __pthread_rwlock_wrlock F
>  GLIBC_2.2.5 __pwrite64 F
>  GLIBC_2.2.5 __read F
>  GLIBC_2.2.5 __res_state F
> @@ -102,13 +99,10 @@ GLIBC_2.2.5 pthread_mutexattr_setpshared F
>  GLIBC_2.2.5 pthread_mutexattr_settype 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
>  GLIBC_2.2.5 pthread_rwlock_timedrdlock F
>  GLIBC_2.2.5 pthread_rwlock_timedwrlock F
>  GLIBC_2.2.5 pthread_rwlock_tryrdlock F
>  GLIBC_2.2.5 pthread_rwlock_trywrlock F
> -GLIBC_2.2.5 pthread_rwlock_unlock F
> -GLIBC_2.2.5 pthread_rwlock_wrlock F
>  GLIBC_2.2.5 pthread_rwlockattr_destroy F
>  GLIBC_2.2.5 pthread_rwlockattr_getkind_np F
>  GLIBC_2.2.5 pthread_rwlockattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 33bbaff90c..3accd92583 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -343,6 +343,9 @@ GLIBC_2.16 __pthread_cleanup_routine F
>  GLIBC_2.16 __pthread_getspecific F
>  GLIBC_2.16 __pthread_key_create F
>  GLIBC_2.16 __pthread_once F
> +GLIBC_2.16 __pthread_rwlock_rdlock F
> +GLIBC_2.16 __pthread_rwlock_unlock F
> +GLIBC_2.16 __pthread_rwlock_wrlock F
>  GLIBC_2.16 __pthread_setspecific F
>  GLIBC_2.16 __pthread_unwind_next F
>  GLIBC_2.16 __ptsname_r_chk F
> @@ -1470,6 +1473,9 @@ 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_rwlock_rdlock F
> +GLIBC_2.16 pthread_rwlock_unlock F
> +GLIBC_2.16 pthread_rwlock_wrlock F
>  GLIBC_2.16 pthread_self F
>  GLIBC_2.16 pthread_setcancelstate F
>  GLIBC_2.16 pthread_setcanceltype F
> @@ -2207,6 +2213,9 @@ GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
>  GLIBC_2.34 __pthread_once F
> +GLIBC_2.34 __pthread_rwlock_rdlock F
> +GLIBC_2.34 __pthread_rwlock_unlock F
> +GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
>  GLIBC_2.34 pthread_getspecific F
> @@ -2214,4 +2223,7 @@ GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
>  GLIBC_2.34 pthread_mutex_consistent F
>  GLIBC_2.34 pthread_once F
> +GLIBC_2.34 pthread_rwlock_rdlock F
> +GLIBC_2.34 pthread_rwlock_unlock F
> +GLIBC_2.34 pthread_rwlock_wrlock F
>  GLIBC_2.34 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 a481ef56ab..0b017c0218 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -25,11 +25,8 @@ GLIBC_2.16 __pthread_register_cancel F
>  GLIBC_2.16 __pthread_register_cancel_defer F
>  GLIBC_2.16 __pthread_rwlock_destroy F
>  GLIBC_2.16 __pthread_rwlock_init F
> -GLIBC_2.16 __pthread_rwlock_rdlock F
>  GLIBC_2.16 __pthread_rwlock_tryrdlock F
>  GLIBC_2.16 __pthread_rwlock_trywrlock F
> -GLIBC_2.16 __pthread_rwlock_unlock F
> -GLIBC_2.16 __pthread_rwlock_wrlock F
>  GLIBC_2.16 __pthread_unregister_cancel F
>  GLIBC_2.16 __pthread_unregister_cancel_restore F
>  GLIBC_2.16 __pwrite64 F
> @@ -113,13 +110,10 @@ GLIBC_2.16 pthread_mutexattr_setrobust_np F
>  GLIBC_2.16 pthread_mutexattr_settype F
>  GLIBC_2.16 pthread_rwlock_destroy F
>  GLIBC_2.16 pthread_rwlock_init F
> -GLIBC_2.16 pthread_rwlock_rdlock F
>  GLIBC_2.16 pthread_rwlock_timedrdlock F
>  GLIBC_2.16 pthread_rwlock_timedwrlock F
>  GLIBC_2.16 pthread_rwlock_tryrdlock F
>  GLIBC_2.16 pthread_rwlock_trywrlock F
> -GLIBC_2.16 pthread_rwlock_unlock F
> -GLIBC_2.16 pthread_rwlock_wrlock F
>  GLIBC_2.16 pthread_rwlockattr_destroy F
>  GLIBC_2.16 pthread_rwlockattr_getkind_np F
>  GLIBC_2.16 pthread_rwlockattr_getpshared F
> 

Ok.

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

* Re: [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols into libc
  2021-03-16 17:31 ` [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols " Florian Weimer
@ 2021-03-25 20:21   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 20:21 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> This is a prerequisite for moving the mutex implementation.

LGTM, thanks.

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

> ---
>  nptl/Makefile   |  2 +-
>  nptl/Versions   |  5 +++++
>  nptl/pthreadP.h | 16 ++++++++++------
>  nptl/tpp.c      |  6 +++++-
>  4 files changed, 21 insertions(+), 8 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 1eca75ef35..353cbf8911 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -93,6 +93,7 @@ routines = \
>    pthread_setschedparam \
>    pthread_setspecific \
>    pthread_sigmask \
> +  tpp \
>    unwind \
>  
>  shared-only-routines = forward
> @@ -232,7 +233,6 @@ libpthread-routines = \
>    sem_unlink \
>    sem_wait \
>    sigaction \
> -  tpp \
>    vars \
>    version \
>  

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index b3feadd045..4dee682ed9 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -121,6 +121,7 @@ libc {
>    GLIBC_PRIVATE {
>      __futex_abstimed_wait64;
>      __futex_abstimed_wait_cancelable64;
> +    __init_sched_fifo_prio;
>      __libc_alloca_cutoff;
>      __libc_allocate_rtsig_private;
>      __libc_cleanup_pop_restore;
> @@ -147,13 +148,17 @@ libc {
>      __pthread_cleanup_upto;
>      __pthread_cond_destroy; # Used by the C11 threads.
>      __pthread_cond_init; # Used by the C11 threads.
> +    __pthread_current_priority;
>      __pthread_exit;
>      __pthread_force_elision;
>      __pthread_getattr_default_np;
>      __pthread_key_delete;
>      __pthread_keys;
>      __pthread_setcancelstate;
> +    __pthread_tpp_change_priority;
>      __pthread_unwind;
> +    __sched_fifo_max_prio;
> +    __sched_fifo_min_prio;
>    }
>  }
>  

Ok. I presume we might remove them once mutex code is moved to libc, right?

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 527e4acd4f..7fd290e004 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -231,12 +231,16 @@ rtld_hidden_proto (__nptl_set_robust_list_avail)
>  #endif
>  
>  /* Thread Priority Protection.  */
> -extern int __sched_fifo_min_prio attribute_hidden;
> -extern int __sched_fifo_max_prio attribute_hidden;
> -extern void __init_sched_fifo_prio (void) attribute_hidden;
> -extern int __pthread_tpp_change_priority (int prev_prio, int new_prio)
> -     attribute_hidden;
> -extern int __pthread_current_priority (void) attribute_hidden;
> +extern int __sched_fifo_min_prio;
> +libc_hidden_proto (__sched_fifo_min_prio)
> +extern int __sched_fifo_max_prio;
> +libc_hidden_proto (__sched_fifo_max_prio)
> +extern void __init_sched_fifo_prio (void);
> +libc_hidden_proto (__init_sched_fifo_prio)
> +extern int __pthread_tpp_change_priority (int prev_prio, int new_prio);
> +libc_hidden_proto (__pthread_tpp_change_priority)
> +extern int __pthread_current_priority (void);
> +libc_hidden_proto (__pthread_current_priority)
>  
>  /* The library can run in debugging mode where it performs a lot more
>     tests.  */

Ok.

> diff --git a/nptl/tpp.c b/nptl/tpp.c
> index 8b7d9a2d23..7f58a75731 100644
> --- a/nptl/tpp.c
> +++ b/nptl/tpp.c
> @@ -25,9 +25,10 @@
>  #include <stdlib.h>
>  #include <atomic.h>
>  
> -
>  int __sched_fifo_min_prio = -1;
> +libc_hidden_data_def (__sched_fifo_min_prio)
>  int __sched_fifo_max_prio = -1;
> +libc_hidden_data_def (__sched_fifo_max_prio)
>  
>  /* We only want to initialize __sched_fifo_min_prio and __sched_fifo_max_prio
>     once.  The standard solution would be similar to pthread_once, but then
> @@ -47,6 +48,7 @@ __init_sched_fifo_prio (void)
>    atomic_store_relaxed (&__sched_fifo_min_prio,
>  			__sched_get_priority_min (SCHED_FIFO));
>  }
> +libc_hidden_def (__init_sched_fifo_prio)
>  
>  int
>  __pthread_tpp_change_priority (int previous_prio, int new_prio)
> @@ -155,6 +157,7 @@ __pthread_tpp_change_priority (int previous_prio, int new_prio)
>  
>    return result;
>  }
> +libc_hidden_def (__pthread_tpp_change_priority)
>  
>  int
>  __pthread_current_priority (void)
> @@ -193,3 +196,4 @@ __pthread_current_priority (void)
>  
>    return result;
>  }
> +libc_hidden_def (__pthread_current_priority)
> 

Ok.

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

* Re: [PATCH v3 30/37] pthread: Introduce __pthread_early_init
  2021-03-16 17:31 ` [PATCH v3 30/37] pthread: Introduce __pthread_early_init Florian Weimer
@ 2021-03-25 20:22   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 20:22 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> This function is called from __libc_early_init to initialize the
> pthread subsystem.

LGTM, thanks.

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

> ---
>  elf/libc_early_init.c                |  3 +++
>  sysdeps/pthread/pthread_early_init.h | 29 ++++++++++++++++++++++++++++
>  2 files changed, 32 insertions(+)
>  create mode 100644 sysdeps/pthread/pthread_early_init.h
> 
> diff --git a/elf/libc_early_init.c b/elf/libc_early_init.c
> index 9b1901a706..525edf1e7d 100644
> --- a/elf/libc_early_init.c
> +++ b/elf/libc_early_init.c
> @@ -21,6 +21,7 @@
>  #include <libc-early-init.h>
>  #include <libc-internal.h>
>  #include <lowlevellock.h>
> +#include <pthread_early_init.h>
>  #include <sys/single_threaded.h>
>  
>  #ifdef SHARED
> @@ -40,6 +41,8 @@ __libc_early_init (_Bool initial)
>    __libc_initial = initial;
>  #endif
>  
> +  __pthread_early_init ();
> +
>  #if ENABLE_ELISION_SUPPORT
>    __lll_elision_init ();
>  #endif

Ok.

> diff --git a/sysdeps/pthread/pthread_early_init.h b/sysdeps/pthread/pthread_early_init.h
> new file mode 100644
> index 0000000000..b8bb9b762d
> --- /dev/null
> +++ b/sysdeps/pthread/pthread_early_init.h
> @@ -0,0 +1,29 @@
> +/* pthread initialization called from __libc_early_init.  Generic 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/>.  */
> +
> +#ifndef _PTHREAD_EARLY_INIT_H
> +#define _PTHREAD_EARLY_INIT_H 1
> +
> +static inline void
> +__pthread_early_init (void)
> +{
> +  /* The generic version does not require any additional
> +     initialization.  */
> +}
> +
> +#endif /* _PTHREAD_EARLY_INIT_H */

Double space before '*/'.

> 

Ok.

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

* Re: [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc
  2021-03-16 17:31 ` [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc Florian Weimer
@ 2021-03-25 20:24   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 20:24 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> This is in preparation of moving the mutex code into libc.
> 
> __pthread_tunables_init is now called via __libc_early_init.
> For non-NPTL targets, a stub version is provided.

LGTM, thanks.

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

> ---
>  nptl/Makefile                               |  2 +-
>  nptl/Versions                               |  1 +
>  nptl/nptl-init.c                            |  4 ---
>  nptl/pthread_mutex_conf.c                   |  1 +
>  sysdeps/nptl/pthread_early_init.h           | 33 +++++++++++++++++++++
>  {nptl => sysdeps/nptl}/pthread_mutex_conf.h |  9 +++++-
>  sysdeps/pthread/pthread_mutex_conf.h        | 28 +++++++++++++++++
>  7 files changed, 72 insertions(+), 6 deletions(-)
>  create mode 100644 sysdeps/nptl/pthread_early_init.h
>  rename {nptl => sysdeps/nptl}/pthread_mutex_conf.h (86%)
>  create mode 100644 sysdeps/pthread/pthread_mutex_conf.h
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 353cbf8911..3ae0e1e8c8 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -82,6 +82,7 @@ routines = \
>    pthread_key_create \
>    pthread_key_delete \
>    pthread_keys \
> +  pthread_mutex_conf \
>    pthread_mutex_consistent \
>    pthread_once \
>    pthread_rwlock_rdlock \
> @@ -170,7 +171,6 @@ libpthread-routines = \
>    pthread_kill \
>    pthread_kill_other_threads \
>    pthread_mutex_cond_lock \
> -  pthread_mutex_conf \
>    pthread_mutex_destroy \
>    pthread_mutex_getprioceiling \
>    pthread_mutex_init \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 4dee682ed9..2b9508bd6f 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -136,6 +136,7 @@ libc {
>      __lll_lock_wait_private;
>      __lll_trylock_elision;
>      __lll_unlock_elision;
> +    __mutex_aconf;
>      __nptl_deallocate_tsd;
>      __nptl_nthreads;
>      __pthread_attr_copy;

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 0c07b46a77..5c85f75cc1 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -269,10 +269,6 @@ __pthread_initialize_minimal_internal (void)
>    __libc_multiple_threads_ptr =
>  #endif
>      __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions);
> -
> -#if HAVE_TUNABLES
> -  __pthread_tunables_init ();
> -#endif
>  }
>  strong_alias (__pthread_initialize_minimal_internal,
>  	      __pthread_initialize_minimal)

Ok.

> diff --git a/nptl/pthread_mutex_conf.c b/nptl/pthread_mutex_conf.c
> index e6532ba1d7..e6235dea47 100644
> --- a/nptl/pthread_mutex_conf.c
> +++ b/nptl/pthread_mutex_conf.c
> @@ -30,6 +30,7 @@ struct mutex_config __mutex_aconf =
>    calling into kernel to block.  */
>    .spin_count = DEFAULT_ADAPTIVE_COUNT,
>  };
> +libc_hidden_data_def (__mutex_aconf)
>  
>  static void
>  TUNABLE_CALLBACK (set_mutex_spin_count) (tunable_val_t *valp)

Ok.

> diff --git a/sysdeps/nptl/pthread_early_init.h b/sysdeps/nptl/pthread_early_init.h
> new file mode 100644
> index 0000000000..69e700dae1
> --- /dev/null
> +++ b/sysdeps/nptl/pthread_early_init.h
> @@ -0,0 +1,33 @@
> +/* pthread initialization called from __libc_early_init.  NPTL 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/>.  */
> +
> +#ifndef _PTHREAD_EARLY_INIT_H
> +#define _PTHREAD_EARLY_INIT_H 1
> +
> +#include <nptl/pthreadP.h>
> +#include <pthread_mutex_conf.h>
> +
> +static inline void
> +__pthread_early_init (void)
> +{
> +#if HAVE_TUNABLES
> +  __pthread_tunables_init ();
> +#endif
> +}
> +
> +#endif /* _PTHREAD_EARLY_INIT_H */

Double space before '*/'.

> diff --git a/nptl/pthread_mutex_conf.h b/sysdeps/nptl/pthread_mutex_conf.h
> similarity index 86%
> rename from nptl/pthread_mutex_conf.h
> rename to sysdeps/nptl/pthread_mutex_conf.h
> index 14e135a539..9dba4bfa6d 100644
> --- a/nptl/pthread_mutex_conf.h
> +++ b/sysdeps/nptl/pthread_mutex_conf.h
> @@ -26,9 +26,16 @@ struct mutex_config
>    int spin_count;
>  };
>  
> -extern struct mutex_config __mutex_aconf attribute_hidden;
> +extern struct mutex_config __mutex_aconf;
> +libc_hidden_proto (__mutex_aconf)
>  
>  extern void __pthread_tunables_init (void) attribute_hidden;
> +#else
> +static inline void
> +__pthread_tunables_init (void)
> +{
> +  /* No tunables to initialize.  */
> +}
>  #endif
>  
>  #endif

Ok.

> diff --git a/sysdeps/pthread/pthread_mutex_conf.h b/sysdeps/pthread/pthread_mutex_conf.h
> new file mode 100644
> index 0000000000..c999c980f7
> --- /dev/null
> +++ b/sysdeps/pthread/pthread_mutex_conf.h
> @@ -0,0 +1,28 @@
> +/* Pthread mutex tunable parameters.  Generic version.
> +   Copyright (C) 2018-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/>.  */
> +
> +#ifndef _PTHREAD_MUTEX_CONF_H
> +#define _PTHREAD_MUTEX_CONF_H 1
> +
> +static inline void
> +__pthread_tunables_init (void)
> +{
> +  /* The generic version does not have any tunables to init.  */
> +}
> +
> +#endif
> 
Ok.

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

* Re: [PATCH v3 33/37] x86: Remove low-level lock optimization
  2021-03-16 17:31 ` [PATCH v3 33/37] x86: Remove low-level lock optimization Florian Weimer
@ 2021-03-25 20:30   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 20:30 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> The current approach is to do this optimizations at a higher level,
> in generic code, so that single-threaded cases can be specifically
> targeted.
> 
> Furthermore, using IS_IN (libc) as a compile-time indicator that
> all locks are private is no longer correct once process-shared lock
> implementations are moved into libc.
> 
> The generic <lowlevellock.h> is not compatible with assembler code
> (obviously), so it's necessary to remove two long-unused #includes.

LGTM, thanks.

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

> ---
>  sysdeps/i386/nptl/pthread_spin_lock.S      |  1 -
>  sysdeps/unix/sysv/linux/x86/lowlevellock.h | 87 ----------------------
>  sysdeps/x86_64/nptl/pthread_spin_lock.S    |  1 -
>  3 files changed, 89 deletions(-)
>  delete mode 100644 sysdeps/unix/sysv/linux/x86/lowlevellock.h
> 
> diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S
> index eec157fde7..985b236aae 100644
> --- a/sysdeps/i386/nptl/pthread_spin_lock.S
> +++ b/sysdeps/i386/nptl/pthread_spin_lock.S
> @@ -16,7 +16,6 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <sysdep.h>
> -#include <lowlevellock.h>
>  
>  ENTRY (pthread_spin_lock)
>  	mov	4(%esp), %eax

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86/lowlevellock.h b/sysdeps/unix/sysv/linux/x86/lowlevellock.h
> deleted file mode 100644
> index 7205bcadfd..0000000000
> --- a/sysdeps/unix/sysv/linux/x86/lowlevellock.h
> +++ /dev/null
> @@ -1,87 +0,0 @@
> -/* Low-level lock implementation, x86 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/>.  */
> -
> -#ifndef _X86_64_LOWLEVELLOCK_H
> -#define _X86_64_LOWLEVELLOCK_H	1
> -
> -#ifndef __ASSEMBLER__
> -#include <sysdeps/nptl/lowlevellock.h>
> -#include <single-thread.h>
> -
> -/* The lll_trylock, lll_lock, and lll_unlock implements a single-thread
> -   optimization using the cmpxchgl instruction.  It checks if the process
> -   is single thread and avoid a more expensive atomic instruction.  */
> -
> -/* The single-thread optimization only works for libc itself, we need
> -   atomicity for libpthread in case of shared futexes.  */
> -#if !IS_IN(libc)
> -# define is_single_thread 0
> -#else
> -# define is_single_thread SINGLE_THREAD_P
> -#endif
> -
> -/* In the __lllc_as we simply return the value in %eax after the cmpxchg
> -   instruction.  In case the operation succeeded this value is zero.  In case
> -   the operation failed, the cmpxchg instruction has loaded the current value
> -   of the memory work which is guaranteed to be nonzero.  */
> -static inline int
> -__attribute__ ((always_inline))
> -__lll_cas_lock (int *futex)
> -{
> -  int ret;
> -  asm volatile ("cmpxchgl %2, %1"
> -		: "=a" (ret), "=m" (*futex)
> -		: "r" (1), "m" (*futex), "0" (0)
> -		: "memory");
> -  return ret;
> -}
> -
> -#undef lll_trylock
> -#define lll_trylock(lock)						     \
> -  ({									     \
> -    int __ret;								     \
> -    if (is_single_thread)						     \
> -      __ret = __lll_cas_lock (&(lock));					     \
> -    else								     \
> -      __ret = __lll_trylock (&(lock));					     \
> -    __ret;								     \
> -  })
> -
> -#undef lll_lock
> -#define lll_lock(lock, private)						     \
> -  ((void)								     \
> -   ({									     \
> -     if (is_single_thread)						     \
> -       __lll_cas_lock (&(lock));					     \
> -     else								     \
> -       __lll_lock (&(lock), private);					     \
> -   }))
> -
> -#undef lll_unlock
> -#define lll_unlock(lock, private)					     \
> -  ((void)								     \
> -   ({									     \
> -     if (is_single_thread)						     \
> -       (lock)--;							     \
> -     else								     \
> -       __lll_unlock (&(lock), private);					     \
> -   }))
> -
> -#endif  /* !__ASSEMBLER__ */
> -
> -#endif	/* lowlevellock.h */

Ok.

> diff --git a/sysdeps/x86_64/nptl/pthread_spin_lock.S b/sysdeps/x86_64/nptl/pthread_spin_lock.S
> index 66cbbc5252..ff5e7525ca 100644
> --- a/sysdeps/x86_64/nptl/pthread_spin_lock.S
> +++ b/sysdeps/x86_64/nptl/pthread_spin_lock.S
> @@ -15,7 +15,6 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include <lowlevellock.h>
>  #include <sysdep.h>
>  
>  ENTRY(pthread_spin_lock)
> 

Ok.

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

* Re: [PATCH v3 34/37] nptl: Move core mutex functions into libc
  2021-03-16 17:31 ` [PATCH v3 34/37] nptl: Move core mutex functions into libc Florian Weimer
@ 2021-03-25 20:46   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-25 20:46 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> This is complicated because of a second compilation of
> nptl/pthread_mutex_lock.c via nptl/pthread_mutex_cond_lock.c.
> PTHREAD_MUTEX_VERSIONS is introduced to suppress symbol versions
> in that case.

I am wondering if it would worth a refactor to make the cond wait
code to just enable/disable lock elision and call the default 
symbol instead of providing an specific implementation.

> 
> The symbols __pthread_mutex_lock, __pthread_mutex_unlock,
> __pthread_mutex_init, __pthread_mutex_destroy, pthread_mutex_lock,
> pthread_mutex_unlock, pthread_mutex_init, pthread_mutex_destroy
> have beeb moved using scripts/move-symbol-to-libc.py.

s/beeb/been.

LGTM, thanks.

(Same comment regarding compat_symbol with multiple references 
as before).

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

> ---
>  nptl/Makefile                                 |  8 ++---
>  nptl/Versions                                 | 17 +++++-----
>  nptl/forward.c                                | 11 -------
>  nptl/nptl-init.c                              |  4 ---
>  nptl/pthreadP.h                               | 11 ++++---
>  nptl/pthread_mutex_cond_lock.c                |  3 +-
>  nptl/pthread_mutex_destroy.c                  | 18 ++++++++---
>  nptl/pthread_mutex_init.c                     | 16 ++++++++--
>  nptl/pthread_mutex_lock.c                     | 22 ++++++++++---
>  nptl/pthread_mutex_unlock.c                   | 19 ++++++++---
>  sysdeps/nptl/libc-lockP.h                     | 32 ++++++-------------
>  sysdeps/nptl/pthread-functions.h              |  5 ---
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  8 +++++
>  .../sysv/linux/aarch64/libpthread.abilist     |  8 -----
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  8 +++++
>  .../unix/sysv/linux/alpha/libpthread.abilist  |  8 -----
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  8 +++++
>  .../unix/sysv/linux/arc/libpthread.abilist    |  8 -----
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  8 +++++
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  8 -----
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  8 +++++
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  8 -----
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  8 +++++
>  .../unix/sysv/linux/csky/libpthread.abilist   |  8 -----
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  8 +++++
>  .../unix/sysv/linux/hppa/libpthread.abilist   |  8 -----
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  8 +++++
>  .../unix/sysv/linux/i386/libpthread.abilist   |  8 -----
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  8 +++++
>  .../unix/sysv/linux/ia64/libpthread.abilist   |  8 -----
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  8 +++++
>  .../linux/m68k/coldfire/libpthread.abilist    |  8 -----
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  8 +++++
>  .../sysv/linux/m68k/m680x0/libpthread.abilist |  8 -----
>  .../sysv/linux/microblaze/be/libc.abilist     |  8 +++++
>  .../linux/microblaze/be/libpthread.abilist    |  8 -----
>  .../sysv/linux/microblaze/le/libc.abilist     |  8 +++++
>  .../linux/microblaze/le/libpthread.abilist    |  8 -----
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  8 +++++
>  .../sysv/linux/mips/mips32/libpthread.abilist |  8 -----
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  8 +++++
>  .../sysv/linux/mips/mips64/libpthread.abilist |  8 -----
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  8 +++++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  8 +++++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  8 +++++
>  .../unix/sysv/linux/nios2/libpthread.abilist  |  8 -----
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  8 +++++
>  .../powerpc/powerpc32/libpthread.abilist      |  8 -----
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  8 +++++
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  8 +++++
>  .../powerpc/powerpc64/be/libpthread.abilist   |  8 -----
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  8 +++++
>  .../powerpc/powerpc64/le/libpthread.abilist   |  8 -----
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  8 +++++
>  .../sysv/linux/riscv/rv32/libpthread.abilist  |  8 -----
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  8 +++++
>  .../sysv/linux/riscv/rv64/libpthread.abilist  |  8 -----
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  8 +++++
>  .../linux/s390/s390-32/libpthread.abilist     |  8 -----
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  8 +++++
>  .../linux/s390/s390-64/libpthread.abilist     |  8 -----
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  8 +++++
>  .../unix/sysv/linux/sh/be/libpthread.abilist  |  8 -----
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  8 +++++
>  .../unix/sysv/linux/sh/le/libpthread.abilist  |  8 -----
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  8 +++++
>  .../linux/sparc/sparc32/libpthread.abilist    |  8 -----
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  8 +++++
>  .../linux/sparc/sparc64/libpthread.abilist    |  8 -----
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  8 +++++
>  .../sysv/linux/x86_64/64/libpthread.abilist   |  8 -----
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  8 +++++
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  8 -----
>  73 files changed, 346 insertions(+), 308 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 3ae0e1e8c8..e0ba8bea13 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -84,6 +84,10 @@ routines = \
>    pthread_keys \
>    pthread_mutex_conf \
>    pthread_mutex_consistent \
> +  pthread_mutex_destroy \
> +  pthread_mutex_init \
> +  pthread_mutex_lock \
> +  pthread_mutex_unlock \
>    pthread_once \
>    pthread_rwlock_rdlock \
>    pthread_rwlock_unlock \
> @@ -171,14 +175,10 @@ libpthread-routines = \
>    pthread_kill \
>    pthread_kill_other_threads \
>    pthread_mutex_cond_lock \
> -  pthread_mutex_destroy \
>    pthread_mutex_getprioceiling \
> -  pthread_mutex_init \
> -  pthread_mutex_lock \
>    pthread_mutex_setprioceiling \
>    pthread_mutex_timedlock \
>    pthread_mutex_trylock \
> -  pthread_mutex_unlock \
>    pthread_mutexattr_destroy \
>    pthread_mutexattr_getprioceiling \
>    pthread_mutexattr_getprotocol \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 2b9508bd6f..2352b74c7e 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -2,6 +2,10 @@ libc {
>    GLIBC_2.0 {
>      __pthread_getspecific;
>      __pthread_key_create;
> +    __pthread_mutex_destroy;
> +    __pthread_mutex_init;
> +    __pthread_mutex_lock;
> +    __pthread_mutex_unlock;
>      __pthread_once;
>      __pthread_setspecific;
>      _pthread_cleanup_pop;
> @@ -103,6 +107,10 @@ libc {
>      __pthread_cleanup_routine;
>      __pthread_getspecific;
>      __pthread_key_create;
> +    __pthread_mutex_destroy;
> +    __pthread_mutex_init;
> +    __pthread_mutex_lock;
> +    __pthread_mutex_unlock;
>      __pthread_once;
>      __pthread_rwlock_rdlock;
>      __pthread_rwlock_unlock;
> @@ -155,6 +163,7 @@ libc {
>      __pthread_getattr_default_np;
>      __pthread_key_delete;
>      __pthread_keys;
> +    __pthread_mutex_unlock_usercnt;
>      __pthread_setcancelstate;
>      __pthread_tpp_change_priority;
>      __pthread_unwind;
> @@ -177,11 +186,7 @@ libpthread {
>      __lseek;
>      __open;
>      __pthread_atfork;
> -    __pthread_mutex_destroy;
> -    __pthread_mutex_init;
> -    __pthread_mutex_lock;
>      __pthread_mutex_trylock;
> -    __pthread_mutex_unlock;
>      __pthread_mutexattr_destroy;
>      __pthread_mutexattr_init;
>      __pthread_mutexattr_settype;
> @@ -213,11 +218,7 @@ libpthread {
>      pthread_join;
>      pthread_kill;
>      pthread_kill_other_threads_np;
> -    pthread_mutex_destroy;
> -    pthread_mutex_init;
> -    pthread_mutex_lock;
>      pthread_mutex_trylock;
> -    pthread_mutex_unlock;
>      pthread_mutexattr_destroy;
>      pthread_mutexattr_getkind_np;
>      pthread_mutexattr_init;

Ok.

> diff --git a/nptl/forward.c b/nptl/forward.c
> index de4e9cd6ab..c914baec4f 100644
> --- a/nptl/forward.c
> +++ b/nptl/forward.c
> @@ -90,14 +90,3 @@ FORWARD (__pthread_cond_timedwait,
>  	  const struct timespec *abstime), (cond, mutex, abstime), 0)
>  versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
>  		  GLIBC_2_3_2);
> -
> -
> -FORWARD (pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), 0)
> -
> -FORWARD (pthread_mutex_init,
> -	 (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr),
> -	 (mutex, mutexattr), 0)
> -
> -FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0)
> -
> -FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 5c85f75cc1..cbc9430ecb 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -63,10 +63,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_mutex_destroy = __pthread_mutex_destroy,
> -    .ptr_pthread_mutex_init = __pthread_mutex_init,
> -    .ptr_pthread_mutex_lock = __pthread_mutex_lock,
> -    .ptr_pthread_mutex_unlock = __pthread_mutex_unlock,
>      .ptr__nptl_setxid = __nptl_setxid,
>    };
>  # define ptr_pthread_functions &pthread_functions

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 7fd290e004..4feebdf09e 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -389,9 +389,12 @@ extern int __pthread_setschedparam (pthread_t thread_id, int policy,
>  				    const struct sched_param *param);
>  extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
>  				 const pthread_mutexattr_t *__mutexattr);
> +libc_hidden_proto (__pthread_mutex_init)
>  extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
> +libc_hidden_proto (__pthread_mutex_destroy)
>  extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex);
>  extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
> +libc_hidden_proto (__pthread_mutex_lock)
>  extern int __pthread_mutex_timedlock (pthread_mutex_t *__mutex,
>       const struct timespec *__abstime);
>  extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
> @@ -399,8 +402,10 @@ extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
>  extern void __pthread_mutex_cond_lock_adjust (pthread_mutex_t *__mutex)
>       attribute_hidden;
>  extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
> +libc_hidden_proto (__pthread_mutex_unlock)
>  extern int __pthread_mutex_unlock_usercnt (pthread_mutex_t *__mutex,
> -					   int __decr) attribute_hidden;
> +					   int __decr);
> +libc_hidden_proto (__pthread_mutex_unlock_usercnt)
>  extern int __pthread_mutexattr_init (pthread_mutexattr_t *attr);
>  extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *attr);
>  extern int __pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind);
> @@ -554,11 +559,7 @@ libc_hidden_proto (__pthread_sigmask);
>  
>  
>  #if IS_IN (libpthread)
> -hidden_proto (__pthread_mutex_init)
> -hidden_proto (__pthread_mutex_destroy)
> -hidden_proto (__pthread_mutex_lock)
>  hidden_proto (__pthread_mutex_trylock)
> -hidden_proto (__pthread_mutex_unlock)
>  hidden_proto (__pthread_rwlock_unlock)
>  hidden_proto (__pthread_testcancel)
>  hidden_proto (__pthread_mutexattr_init)

Ok.

> diff --git a/nptl/pthread_mutex_cond_lock.c b/nptl/pthread_mutex_cond_lock.c
> index 3386bd689b..f3af514305 100644
> --- a/nptl/pthread_mutex_cond_lock.c
> +++ b/nptl/pthread_mutex_cond_lock.c
> @@ -15,8 +15,9 @@
>  /* We need to assume that there are other threads blocked on the futex.
>     See __pthread_mutex_lock_full for further details.  */
>  #define LLL_ROBUST_MUTEX_LOCK_MODIFIER FUTEX_WAITERS
> -#define __pthread_mutex_lock  __pthread_mutex_cond_lock
> +#define PTHREAD_MUTEX_LOCK  __pthread_mutex_cond_lock
>  #define __pthread_mutex_lock_full __pthread_mutex_cond_lock_full
>  #define NO_INCR
> +#define PTHREAD_MUTEX_VERSIONS 0
>  
>  #include <nptl/pthread_mutex_lock.c>

Ok.

> diff --git a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c
> index d2fb816e11..98da991a9d 100644
> --- a/nptl/pthread_mutex_destroy.c
> +++ b/nptl/pthread_mutex_destroy.c
> @@ -18,12 +18,12 @@
>  
>  #include <errno.h>
>  #include "pthreadP.h"
> -
> +#include <shlib-compat.h>
>  #include <stap-probe.h>
>  
>  
>  int
> -__pthread_mutex_destroy (pthread_mutex_t *mutex)
> +__pthread_mutex_destroy_1 (pthread_mutex_t *mutex)
>  {
>    LIBC_PROBE (mutex_destroy, 1, mutex);
>  
> @@ -41,5 +41,15 @@ __pthread_mutex_destroy (pthread_mutex_t *mutex)
>  
>    return 0;
>  }
> -weak_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
> -hidden_def (__pthread_mutex_destroy)
> +versioned_symbol (libc, __pthread_mutex_destroy_1, __pthread_mutex_destroy,
> +                  GLIBC_2_34);
> +libc_hidden_ver (__pthread_mutex_destroy_1, __pthread_mutex_destroy)
> +strong_alias (__pthread_mutex_destroy_1, __pthread_mutex_destroy_2)
> +versioned_symbol (libc, __pthread_mutex_destroy_2, pthread_mutex_destroy,
> +                  GLIBC_2_0);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +strong_alias (__pthread_mutex_destroy_1, __pthread_mutex_destroy_3)
> +compat_symbol (libc, __pthread_mutex_destroy_3, __pthread_mutex_destroy,
> +               GLIBC_2_0);
> +#endif

Ok.

> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
> index f5c3a4b464..b3af7fcd48 100644
> --- a/nptl/pthread_mutex_init.c
> +++ b/nptl/pthread_mutex_init.c
> @@ -25,6 +25,7 @@
>  #include <atomic.h>
>  #include <pthread-offsets.h>
>  #include <futex-internal.h>
> +#include <shlib-compat.h>
>  
>  #include <stap-probe.h>
>  
> @@ -48,7 +49,7 @@ prio_inherit_missing (void)
>  }
>  
>  int
> -__pthread_mutex_init (pthread_mutex_t *mutex,
> +__pthread_mutex_init_1 (pthread_mutex_t *mutex,
>  		      const pthread_mutexattr_t *mutexattr)
>  {
>    const struct pthread_mutexattr *imutexattr;
> @@ -150,5 +151,14 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
>  
>    return 0;
>  }
> -weak_alias (__pthread_mutex_init, pthread_mutex_init)
> -hidden_def (__pthread_mutex_init)
> +versioned_symbol (libc, __pthread_mutex_init_1, __pthread_mutex_init,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_mutex_init_1, __pthread_mutex_init)
> +strong_alias (__pthread_mutex_init_1, __pthread_mutex_init_2)
> +versioned_symbol (libc, __pthread_mutex_init_2, pthread_mutex_init,
> +		  GLIBC_2_0);
> +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +strong_alias (__pthread_mutex_init_1, __pthread_mutex_init_3)
> +compat_symbol (libc, __pthread_mutex_init_3, __pthread_mutex_init,
> +	       GLIBC_2_0);
> +#endif

Ok.

> diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
> index 8649a92ffb..261cd5a72d 100644
> --- a/nptl/pthread_mutex_lock.c
> +++ b/nptl/pthread_mutex_lock.c
> @@ -26,6 +26,7 @@
>  #include <atomic.h>
>  #include <futex-internal.h>
>  #include <stap-probe.h>
> +#include <shlib-compat.h>
>  
>  /* Some of the following definitions differ when pthread_mutex_cond_lock.c
>     includes this file.  */
> @@ -60,13 +61,15 @@ lll_mutex_lock_optimized (pthread_mutex_t *mutex)
>  # define LLL_MUTEX_TRYLOCK_ELISION(mutex) \
>    lll_trylock_elision((mutex)->__data.__lock, (mutex)->__data.__elision, \
>  		   PTHREAD_MUTEX_PSHARED (mutex))
> +# define PTHREAD_MUTEX_LOCK __pthread_mutex_lock_1
> +# define PTHREAD_MUTEX_VERSIONS 1
>  #endif
>  
>  static int __pthread_mutex_lock_full (pthread_mutex_t *mutex)
>       __attribute_noinline__;
>  
>  int
> -__pthread_mutex_lock (pthread_mutex_t *mutex)
> +PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex)
>  {
>    /* See concurrency notes regarding mutex type which is loaded from __kind
>       in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
> @@ -604,10 +607,19 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
>  
>    return 0;
>  }
> -#ifndef __pthread_mutex_lock
> -weak_alias (__pthread_mutex_lock, pthread_mutex_lock)
> -hidden_def (__pthread_mutex_lock)
> -#endif
> +
> +#if PTHREAD_MUTEX_VERSIONS
> +versioned_symbol (libc, __pthread_mutex_lock_1, __pthread_mutex_lock,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_mutex_lock_1, __pthread_mutex_lock)
> +strong_alias (__pthread_mutex_lock_1, __pthread_mutex_lock_2)
> +versioned_symbol (libc, __pthread_mutex_lock_2, pthread_mutex_lock, GLIBC_2_0);
> +
> +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +strong_alias (__pthread_mutex_lock_1, __pthread_mutex_lock_3)
> +compat_symbol (libc, __pthread_mutex_lock_3, __pthread_mutex_lock, GLIBC_2_0);
> +# endif
> +#endif /* PTHREAD_MUTEX_VERSIONS */
>  
>  
>  #ifdef NO_INCR

Ok.

> diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
> index 655093ee9a..159720198c 100644
> --- a/nptl/pthread_mutex_unlock.c
> +++ b/nptl/pthread_mutex_unlock.c
> @@ -23,6 +23,7 @@
>  #include <lowlevellock.h>
>  #include <stap-probe.h>
>  #include <futex-internal.h>
> +#include <shlib-compat.h>
>  
>  static int
>  __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
> @@ -44,7 +45,6 @@ lll_mutex_unlock_optimized (pthread_mutex_t *mutex)
>  }
>  
>  int
> -attribute_hidden
>  __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
>  {
>    /* See concurrency notes regarding mutex type which is loaded from __kind
> @@ -103,6 +103,7 @@ __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
>        goto normal;
>      }
>  }
> +libc_hidden_def (__pthread_mutex_unlock_usercnt)
>  
>  
>  static int
> @@ -363,9 +364,19 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
>  
>  
>  int
> -__pthread_mutex_unlock (pthread_mutex_t *mutex)
> +__pthread_mutex_unlock_1 (pthread_mutex_t *mutex)
>  {
>    return __pthread_mutex_unlock_usercnt (mutex, 1);
>  }
> -weak_alias (__pthread_mutex_unlock, pthread_mutex_unlock)
> -hidden_def (__pthread_mutex_unlock)
> +versioned_symbol (libc, __pthread_mutex_unlock_1, __pthread_mutex_unlock,
> +		  GLIBC_2_34);
> +libc_hidden_ver (__pthread_mutex_unlock_1, __pthread_mutex_unlock)
> +strong_alias (__pthread_mutex_unlock_1, __pthread_mutex_unlock_2)
> +versioned_symbol (libc, __pthread_mutex_unlock_2, pthread_mutex_unlock,
> +		  GLIBC_2_0);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +strong_alias (__pthread_mutex_unlock_1, __pthread_mutex_unlock_3)
> +compat_symbol (libc, __pthread_mutex_unlock_3, __pthread_mutex_unlock,
> +	       GLIBC_2_0);
> +#endif

Ok.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 89910560fa..0dd2ea1147 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -128,8 +128,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  # define __libc_lock_init(NAME) \
>    ((void) ((NAME) = LLL_LOCK_INITIALIZER))
>  #else
> -# define __libc_lock_init(NAME) \
> -  __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
> +# define __libc_lock_init(NAME) __pthread_mutex_init (&(NAME))
>  #endif
>  #if defined SHARED && IS_IN (libc)
>  /* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER) is inefficient.  */

Ok.

> @@ -146,8 +145,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  #if IS_IN (libc) || IS_IN (libpthread)
>  # define __libc_lock_fini(NAME) ((void) 0)
>  #else
> -# define __libc_lock_fini(NAME) \
> -  __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
> +# define __libc_lock_fini(NAME) __pthread_mutex_destroy (&(NAME))
>  #endif
>  #if defined SHARED && IS_IN (libc)
>  # define __libc_rwlock_fini(NAME) ((void) 0)

Ok.

> @@ -164,8 +162,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  # endif
>  #else
>  # undef __libc_lock_lock
> -# define __libc_lock_lock(NAME) \
> -  __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
> +# define __libc_lock_lock(NAME) __pthread_mutex_lock (&(NAME))
>  #endif
>  #define __libc_rwlock_rdlock(NAME) __pthread_rwlock_rdlock (&(NAME))
>  #define __libc_rwlock_wrlock(NAME) __pthread_rwlock_wrlock (&(NAME))

Ok.

> @@ -194,8 +191,7 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>  # define __libc_lock_unlock(NAME) \
>    lll_unlock (NAME, LLL_PRIVATE)
>  #else
> -# define __libc_lock_unlock(NAME) \
> -  __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
> +# define __libc_lock_unlock(NAME) __pthread_mutex_unlock (&(NAME))
>  #endif
>  #define __libc_rwlock_unlock(NAME) __pthread_rwlock_unlock (&(NAME))
>  

Ok.

> @@ -213,10 +209,10 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>    GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
>  #else
>  # define __rtld_lock_lock_recursive(NAME) \
> -  __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
> +  __pthread_mutex_lock (&(NAME).mutex)
>  
>  # define __rtld_lock_unlock_recursive(NAME) \
> -  __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
> +  __pthread_mutex_unlock (&(NAME).mutex)
>  #endif
>  
>  /* Define once control variable.  */

Ok.

> @@ -274,15 +270,15 @@ extern int __register_atfork (void (*__prepare) (void),
>  
>  extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
>  				 const pthread_mutexattr_t *__mutex_attr);
> -
> +libc_hidden_proto (__pthread_mutex_init)
>  extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
> -
> +libc_hidden_proto (__pthread_mutex_destroy)
>  extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
>  
>  extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
> -
> +libc_hidden_proto (__pthread_mutex_lock)
>  extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
> -
> +libc_hidden_proto (__pthread_mutex_unlock)
>  extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
>  
>  extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);

Ok.

> @@ -320,11 +316,7 @@ libc_hidden_proto (__pthread_setcancelstate)
>     single-threaded processes.  */
>  #ifndef __NO_WEAK_PTHREAD_ALIASES
>  # ifdef weak_extern
> -weak_extern (__pthread_mutex_init)
> -weak_extern (__pthread_mutex_destroy)
> -weak_extern (__pthread_mutex_lock)
>  weak_extern (__pthread_mutex_trylock)
> -weak_extern (__pthread_mutex_unlock)
>  weak_extern (__pthread_mutexattr_init)
>  weak_extern (__pthread_mutexattr_destroy)
>  weak_extern (__pthread_mutexattr_settype)

Ok.

> @@ -335,11 +327,7 @@ weak_extern (__pthread_rwlock_trywrlock)
>  weak_extern (__pthread_initialize)
>  weak_extern (__pthread_atfork)
>  # else
> -#  pragma weak __pthread_mutex_init
> -#  pragma weak __pthread_mutex_destroy
> -#  pragma weak __pthread_mutex_lock
>  #  pragma weak __pthread_mutex_trylock
> -#  pragma weak __pthread_mutex_unlock
>  #  pragma weak __pthread_mutexattr_init
>  #  pragma weak __pthread_mutexattr_destroy
>  #  pragma weak __pthread_mutexattr_settype

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 8535e142d5..dab5a2831e 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -41,11 +41,6 @@ struct pthread_functions
>    int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
>  					   pthread_mutex_t *,
>  					   const struct timespec *);
> -  int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
> -  int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
> -				 const pthread_mutexattr_t *);
> -  int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
> -  int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
>    int (*ptr__nptl_setxid) (struct xid_command *);
>  };
>  

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 9191b2e760..381947232e 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -341,6 +341,10 @@ GLIBC_2.17 __progname_full D 0x8
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.17 __pthread_rwlock_unlock F
> @@ -2198,6 +2202,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 9a24f796de..29a98fc2f4 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.17 __lseek F
>  GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
> -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_trylock F
> -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
> @@ -84,14 +80,10 @@ GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_join F
>  GLIBC_2.17 pthread_kill F
>  GLIBC_2.17 pthread_kill_other_threads_np F
> -GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_getprioceiling F
> -GLIBC_2.17 pthread_mutex_init F
> -GLIBC_2.17 pthread_mutex_lock F
>  GLIBC_2.17 pthread_mutex_setprioceiling F
>  GLIBC_2.17 pthread_mutex_timedlock F
>  GLIBC_2.17 pthread_mutex_trylock F
> -GLIBC_2.17 pthread_mutex_unlock F
>  GLIBC_2.17 pthread_mutexattr_destroy F
>  GLIBC_2.17 pthread_mutexattr_getkind_np F
>  GLIBC_2.17 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 71dd49d25c..7e314dd68b 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -190,6 +190,10 @@ GLIBC_2.0 __progname D 0x8
>  GLIBC_2.0 __progname_full D 0x8
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x8
> @@ -2279,6 +2283,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index a7b3fd73ab..29cb6259a5 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 38764a6746..014b30c7bd 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -330,6 +330,10 @@ GLIBC_2.32 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.32 __pthread_rwlock_unlock F
> @@ -1958,6 +1962,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index 0d8b928e6d..b926ef9dba 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -12,11 +12,7 @@ GLIBC_2.32 __lseek F
>  GLIBC_2.32 __open F
>  GLIBC_2.32 __open64 F
>  GLIBC_2.32 __pread64 F
> -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_trylock F
> -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
> @@ -99,14 +95,10 @@ GLIBC_2.32 pthread_join 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_destroy F
>  GLIBC_2.32 pthread_mutex_getprioceiling F
> -GLIBC_2.32 pthread_mutex_init F
> -GLIBC_2.32 pthread_mutex_lock F
>  GLIBC_2.32 pthread_mutex_setprioceiling F
>  GLIBC_2.32 pthread_mutex_timedlock F
>  GLIBC_2.32 pthread_mutex_trylock F
> -GLIBC_2.32 pthread_mutex_unlock F
>  GLIBC_2.32 pthread_mutexattr_destroy F
>  GLIBC_2.32 pthread_mutexattr_getkind_np F
>  GLIBC_2.32 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 86d971e7d2..412eb541fc 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -160,6 +160,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> @@ -505,6 +509,10 @@ GLIBC_2.4 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index 833b53362d..8dd2c3f7a6 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -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_trylock F
> -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
> @@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> -GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
> -GLIBC_2.4 pthread_mutex_init F
> -GLIBC_2.4 pthread_mutex_lock F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutex_timedlock F
>  GLIBC_2.4 pthread_mutex_trylock F
> -GLIBC_2.4 pthread_mutex_unlock F
>  GLIBC_2.4 pthread_mutexattr_destroy F
>  GLIBC_2.4 pthread_mutexattr_getkind_np F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index caf3f6a141..588f1d6b42 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -157,6 +157,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> @@ -502,6 +506,10 @@ GLIBC_2.4 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index 833b53362d..8dd2c3f7a6 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -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_trylock F
> -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
> @@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> -GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
> -GLIBC_2.4 pthread_mutex_init F
> -GLIBC_2.4 pthread_mutex_lock F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutex_timedlock F
>  GLIBC_2.4 pthread_mutex_trylock F
> -GLIBC_2.4 pthread_mutex_unlock F
>  GLIBC_2.4 pthread_mutexattr_destroy F
>  GLIBC_2.4 pthread_mutexattr_getkind_np F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index aeb6424389..76fb31f895 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -334,6 +334,10 @@ GLIBC_2.29 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.29 __pthread_rwlock_unlock F
> @@ -2142,6 +2146,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index 440c0507d1..2c4d219569 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -12,11 +12,7 @@ GLIBC_2.29 __lseek F
>  GLIBC_2.29 __open F
>  GLIBC_2.29 __open64 F
>  GLIBC_2.29 __pread64 F
> -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_trylock F
> -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
> @@ -96,14 +92,10 @@ GLIBC_2.29 pthread_getname_np F
>  GLIBC_2.29 pthread_join F
>  GLIBC_2.29 pthread_kill F
>  GLIBC_2.29 pthread_kill_other_threads_np F
> -GLIBC_2.29 pthread_mutex_destroy F
>  GLIBC_2.29 pthread_mutex_getprioceiling F
> -GLIBC_2.29 pthread_mutex_init F
> -GLIBC_2.29 pthread_mutex_lock F
>  GLIBC_2.29 pthread_mutex_setprioceiling F
>  GLIBC_2.29 pthread_mutex_timedlock F
>  GLIBC_2.29 pthread_mutex_trylock F
> -GLIBC_2.29 pthread_mutex_unlock F
>  GLIBC_2.29 pthread_mutexattr_destroy F
>  GLIBC_2.29 pthread_mutexattr_getkind_np F
>  GLIBC_2.29 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index e1d02058c9..e99899dee5 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -358,6 +358,10 @@ GLIBC_2.2 __progname D 0x4
>  GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2100,6 +2104,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index 70af59d791..9e15deaad8 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 717344a690..29b8e0c1eb 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2267,6 +2271,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index 35cc2f61c5..4065a88a3b 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 284b7072a3..fb8a36ce20 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -362,6 +362,10 @@ GLIBC_2.2 __progname D 0x8
>  GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2132,6 +2136,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index 2e69109cdc..684bf559e5 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 404d16b92a..03e80e6a12 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -161,6 +161,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> @@ -491,6 +495,10 @@ GLIBC_2.4 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.4 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index 833b53362d..8dd2c3f7a6 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -47,11 +47,7 @@ GLIBC_2.4 __lseek F
>  GLIBC_2.4 __open F
>  GLIBC_2.4 __open64 F
>  GLIBC_2.4 __pread64 F
> -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_trylock F
> -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
> @@ -117,14 +113,10 @@ GLIBC_2.4 pthread_getcpuclockid F
>  GLIBC_2.4 pthread_join F
>  GLIBC_2.4 pthread_kill F
>  GLIBC_2.4 pthread_kill_other_threads_np F
> -GLIBC_2.4 pthread_mutex_destroy F
>  GLIBC_2.4 pthread_mutex_getprioceiling F
> -GLIBC_2.4 pthread_mutex_init F
> -GLIBC_2.4 pthread_mutex_lock F
>  GLIBC_2.4 pthread_mutex_setprioceiling F
>  GLIBC_2.4 pthread_mutex_timedlock F
>  GLIBC_2.4 pthread_mutex_trylock F
> -GLIBC_2.4 pthread_mutex_unlock F
>  GLIBC_2.4 pthread_mutexattr_destroy F
>  GLIBC_2.4 pthread_mutexattr_getkind_np F
>  GLIBC_2.4 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index b1ad96e072..2a5bee30d1 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2212,6 +2216,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index 35cc2f61c5..4065a88a3b 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 3e0cceae93..b46567880e 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -342,6 +342,10 @@ GLIBC_2.18 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.18 __pthread_rwlock_unlock F
> @@ -2193,6 +2197,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index 0db83c2f88..d8a9642f66 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.18 __lseek F
>  GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
> -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_trylock F
> -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
> @@ -85,14 +81,10 @@ GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_join F
>  GLIBC_2.18 pthread_kill F
>  GLIBC_2.18 pthread_kill_other_threads_np F
> -GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_getprioceiling F
> -GLIBC_2.18 pthread_mutex_init F
> -GLIBC_2.18 pthread_mutex_lock F
>  GLIBC_2.18 pthread_mutex_setprioceiling F
>  GLIBC_2.18 pthread_mutex_timedlock F
>  GLIBC_2.18 pthread_mutex_trylock F
> -GLIBC_2.18 pthread_mutex_unlock F
>  GLIBC_2.18 pthread_mutexattr_destroy F
>  GLIBC_2.18 pthread_mutexattr_getkind_np F
>  GLIBC_2.18 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 4ee88a1d01..7796c5313a 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -342,6 +342,10 @@ GLIBC_2.18 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.18 __pthread_rwlock_unlock F
> @@ -2190,6 +2194,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index 0db83c2f88..d8a9642f66 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.18 __lseek F
>  GLIBC_2.18 __open F
>  GLIBC_2.18 __open64 F
>  GLIBC_2.18 __pread64 F
> -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_trylock F
> -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
> @@ -85,14 +81,10 @@ GLIBC_2.18 pthread_getname_np F
>  GLIBC_2.18 pthread_join F
>  GLIBC_2.18 pthread_kill F
>  GLIBC_2.18 pthread_kill_other_threads_np F
> -GLIBC_2.18 pthread_mutex_destroy F
>  GLIBC_2.18 pthread_mutex_getprioceiling F
> -GLIBC_2.18 pthread_mutex_init F
> -GLIBC_2.18 pthread_mutex_lock F
>  GLIBC_2.18 pthread_mutex_setprioceiling F
>  GLIBC_2.18 pthread_mutex_timedlock F
>  GLIBC_2.18 pthread_mutex_trylock F
> -GLIBC_2.18 pthread_mutex_unlock F
>  GLIBC_2.18 pthread_mutexattr_destroy F
>  GLIBC_2.18 pthread_mutexattr_getkind_np F
>  GLIBC_2.18 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index e67af35000..c3e658dbc1 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2183,6 +2187,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index a1a66138d4..4bd5de2dd7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 1ce0179391..bae73ebb39 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2181,6 +2185,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index a1a66138d4..4bd5de2dd7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 54c2300420..74fb3b997e 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2189,6 +2193,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 90bbb7f253..3083e3d821 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -185,6 +185,10 @@ GLIBC_2.0 __progname D 0x8
>  GLIBC_2.0 __progname_full D 0x8
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x8
> @@ -2183,6 +2187,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 1f68c2a3fb..f79ca91eb7 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -379,6 +379,10 @@ GLIBC_2.21 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.21 __pthread_rwlock_unlock F
> @@ -2231,6 +2235,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index 806432b7b4..c469853b65 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.21 __lseek F
>  GLIBC_2.21 __open F
>  GLIBC_2.21 __open64 F
>  GLIBC_2.21 __pread64 F
> -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_trylock F
> -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
> @@ -85,14 +81,10 @@ GLIBC_2.21 pthread_getname_np F
>  GLIBC_2.21 pthread_join F
>  GLIBC_2.21 pthread_kill F
>  GLIBC_2.21 pthread_kill_other_threads_np F
> -GLIBC_2.21 pthread_mutex_destroy F
>  GLIBC_2.21 pthread_mutex_getprioceiling F
> -GLIBC_2.21 pthread_mutex_init F
> -GLIBC_2.21 pthread_mutex_lock F
>  GLIBC_2.21 pthread_mutex_setprioceiling F
>  GLIBC_2.21 pthread_mutex_timedlock F
>  GLIBC_2.21 pthread_mutex_trylock F
> -GLIBC_2.21 pthread_mutex_unlock F
>  GLIBC_2.21 pthread_mutexattr_destroy F
>  GLIBC_2.21 pthread_mutexattr_getkind_np F
>  GLIBC_2.21 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index a41536e4cd..f5408e6078 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -196,6 +196,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2239,6 +2243,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index d0646d0eaf..44fb3a6743 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index cdd6e98496..a7587dcc45 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -196,6 +196,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2272,6 +2276,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 63a7449937..7ea6dc6574 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -411,6 +411,10 @@ GLIBC_2.3 __progname D 0x8
>  GLIBC_2.3 __progname_full D 0x8
>  GLIBC_2.3 __pthread_getspecific F
>  GLIBC_2.3 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.3 __pthread_rwlock_unlock F
> @@ -2102,6 +2106,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 72d49ce4f3..2e77dc2fb3 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -41,11 +41,7 @@ GLIBC_2.3 __lseek F
>  GLIBC_2.3 __open F
>  GLIBC_2.3 __open64 F
>  GLIBC_2.3 __pread64 F
> -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_trylock F
> -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
> @@ -103,12 +99,8 @@ GLIBC_2.3 pthread_getcpuclockid F
>  GLIBC_2.3 pthread_join F
>  GLIBC_2.3 pthread_kill F
>  GLIBC_2.3 pthread_kill_other_threads_np F
> -GLIBC_2.3 pthread_mutex_destroy F
> -GLIBC_2.3 pthread_mutex_init F
> -GLIBC_2.3 pthread_mutex_lock F
>  GLIBC_2.3 pthread_mutex_timedlock F
>  GLIBC_2.3 pthread_mutex_trylock F
> -GLIBC_2.3 pthread_mutex_unlock F
>  GLIBC_2.3 pthread_mutexattr_destroy F
>  GLIBC_2.3 pthread_mutexattr_getkind_np F
>  GLIBC_2.3 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index b6de88ea41..f994892fd9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -427,6 +427,10 @@ GLIBC_2.17 __progname_full D 0x8
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.17 __pthread_rwlock_unlock F
> @@ -2393,6 +2397,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index 9a24f796de..29a98fc2f4 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.17 __lseek F
>  GLIBC_2.17 __open F
>  GLIBC_2.17 __open64 F
>  GLIBC_2.17 __pread64 F
> -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_trylock F
> -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
> @@ -84,14 +80,10 @@ GLIBC_2.17 pthread_getname_np F
>  GLIBC_2.17 pthread_join F
>  GLIBC_2.17 pthread_kill F
>  GLIBC_2.17 pthread_kill_other_threads_np F
> -GLIBC_2.17 pthread_mutex_destroy F
>  GLIBC_2.17 pthread_mutex_getprioceiling F
> -GLIBC_2.17 pthread_mutex_init F
> -GLIBC_2.17 pthread_mutex_lock F
>  GLIBC_2.17 pthread_mutex_setprioceiling F
>  GLIBC_2.17 pthread_mutex_timedlock F
>  GLIBC_2.17 pthread_mutex_trylock F
> -GLIBC_2.17 pthread_mutex_unlock F
>  GLIBC_2.17 pthread_mutexattr_destroy F
>  GLIBC_2.17 pthread_mutexattr_getkind_np F
>  GLIBC_2.17 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index d81b46d597..70b873f9fb 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -327,6 +327,10 @@ GLIBC_2.33 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.33 __pthread_rwlock_unlock F
> @@ -1960,6 +1964,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 10e50b67c0..911969f7eb 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -12,11 +12,7 @@ GLIBC_2.33 __lseek F
>  GLIBC_2.33 __open F
>  GLIBC_2.33 __open64 F
>  GLIBC_2.33 __pread64 F
> -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_trylock F
> -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
> @@ -99,14 +95,10 @@ GLIBC_2.33 pthread_join 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_destroy F
>  GLIBC_2.33 pthread_mutex_getprioceiling F
> -GLIBC_2.33 pthread_mutex_init F
> -GLIBC_2.33 pthread_mutex_lock F
>  GLIBC_2.33 pthread_mutex_setprioceiling F
>  GLIBC_2.33 pthread_mutex_timedlock F
>  GLIBC_2.33 pthread_mutex_trylock F
> -GLIBC_2.33 pthread_mutex_unlock F
>  GLIBC_2.33 pthread_mutexattr_destroy F
>  GLIBC_2.33 pthread_mutexattr_getkind_np F
>  GLIBC_2.33 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index fbd1c5e5cf..ddfac62fd0 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -338,6 +338,10 @@ GLIBC_2.27 __progname_full D 0x8
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.27 __pthread_rwlock_unlock F
> @@ -2160,6 +2164,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index ed24898e0d..21f462137a 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.27 __lseek F
>  GLIBC_2.27 __open F
>  GLIBC_2.27 __open64 F
>  GLIBC_2.27 __pread64 F
> -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_trylock F
> -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
> @@ -85,14 +81,10 @@ GLIBC_2.27 pthread_getname_np F
>  GLIBC_2.27 pthread_join F
>  GLIBC_2.27 pthread_kill F
>  GLIBC_2.27 pthread_kill_other_threads_np F
> -GLIBC_2.27 pthread_mutex_destroy F
>  GLIBC_2.27 pthread_mutex_getprioceiling F
> -GLIBC_2.27 pthread_mutex_init F
> -GLIBC_2.27 pthread_mutex_lock F
>  GLIBC_2.27 pthread_mutex_setprioceiling F
>  GLIBC_2.27 pthread_mutex_timedlock F
>  GLIBC_2.27 pthread_mutex_trylock F
> -GLIBC_2.27 pthread_mutex_unlock F
>  GLIBC_2.27 pthread_mutexattr_destroy F
>  GLIBC_2.27 pthread_mutexattr_getkind_np F
>  GLIBC_2.27 pthread_mutexattr_getprioceiling F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 27a9b011a8..078237adb2 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -187,6 +187,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2237,6 +2241,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index d6e91c977a..7b2edb7f57 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 9e79331100..a2700aba32 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -372,6 +372,10 @@ GLIBC_2.2 __progname D 0x8
>  GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2138,6 +2142,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 14489b39d0..8b4729fb7a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -21,11 +21,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -84,12 +80,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index b7dd795864..4fce4b408e 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -361,6 +361,10 @@ GLIBC_2.2 __progname D 0x4
>  GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2107,6 +2111,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index 70af59d791..9e15deaad8 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index eea30cd098..5dba0f5d0c 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -361,6 +361,10 @@ GLIBC_2.2 __progname D 0x4
>  GLIBC_2.2 __progname_full D 0x4
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2104,6 +2108,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index 70af59d791..9e15deaad8 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 4944c4159b..e064e5a4dc 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -191,6 +191,10 @@ GLIBC_2.0 __progname D 0x4
>  GLIBC_2.0 __progname_full D 0x4
>  GLIBC_2.0 __pthread_getspecific F
>  GLIBC_2.0 __pthread_key_create F
> +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_setspecific F
>  GLIBC_2.0 __rcmd_errstr D 0x4
> @@ -2228,6 +2232,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index a7b3fd73ab..29cb6259a5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -8,11 +8,7 @@ GLIBC_2.0 __fcntl F
>  GLIBC_2.0 __h_errno_location F
>  GLIBC_2.0 __lseek F
>  GLIBC_2.0 __open F
> -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_trylock F
> -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
> @@ -43,11 +39,7 @@ GLIBC_2.0 pthread_detach F
>  GLIBC_2.0 pthread_join F
>  GLIBC_2.0 pthread_kill F
>  GLIBC_2.0 pthread_kill_other_threads_np F
> -GLIBC_2.0 pthread_mutex_destroy F
> -GLIBC_2.0 pthread_mutex_init F
> -GLIBC_2.0 pthread_mutex_lock F
>  GLIBC_2.0 pthread_mutex_trylock F
> -GLIBC_2.0 pthread_mutex_unlock F
>  GLIBC_2.0 pthread_mutexattr_destroy F
>  GLIBC_2.0 pthread_mutexattr_getkind_np F
>  GLIBC_2.0 pthread_mutexattr_init F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index e69420994f..36fed3cf99 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -399,6 +399,10 @@ GLIBC_2.2 __progname D 0x8
>  GLIBC_2.2 __progname_full D 0x8
>  GLIBC_2.2 __pthread_getspecific F
>  GLIBC_2.2 __pthread_key_create F
> +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_rwlock_rdlock F
>  GLIBC_2.2 __pthread_rwlock_unlock F
> @@ -2155,6 +2159,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index 2e69109cdc..684bf559e5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2 __lseek F
>  GLIBC_2.2 __open F
>  GLIBC_2.2 __open64 F
>  GLIBC_2.2 __pread64 F
> -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_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2 pthread_getcpuclockid F
>  GLIBC_2.2 pthread_join F
>  GLIBC_2.2 pthread_kill F
>  GLIBC_2.2 pthread_kill_other_threads_np F
> -GLIBC_2.2 pthread_mutex_destroy F
> -GLIBC_2.2 pthread_mutex_init F
> -GLIBC_2.2 pthread_mutex_lock F
>  GLIBC_2.2 pthread_mutex_timedlock F
>  GLIBC_2.2 pthread_mutex_trylock F
> -GLIBC_2.2 pthread_mutex_unlock F
>  GLIBC_2.2 pthread_mutexattr_destroy F
>  GLIBC_2.2 pthread_mutexattr_getkind_np F
>  GLIBC_2.2 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index dfe78d93cb..6858c1328f 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -360,6 +360,10 @@ GLIBC_2.2.5 __progname D 0x8
>  GLIBC_2.2.5 __progname_full D 0x8
>  GLIBC_2.2.5 __pthread_getspecific F
>  GLIBC_2.2.5 __pthread_key_create F
> +GLIBC_2.2.5 __pthread_mutex_destroy F
> +GLIBC_2.2.5 __pthread_mutex_init F
> +GLIBC_2.2.5 __pthread_mutex_lock F
> +GLIBC_2.2.5 __pthread_mutex_unlock F
>  GLIBC_2.2.5 __pthread_once F
>  GLIBC_2.2.5 __pthread_rwlock_rdlock F
>  GLIBC_2.2.5 __pthread_rwlock_unlock F
> @@ -2114,6 +2118,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index 4f8dfa000a..54ad81fdd6 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -20,11 +20,7 @@ GLIBC_2.2.5 __lseek F
>  GLIBC_2.2.5 __open F
>  GLIBC_2.2.5 __open64 F
>  GLIBC_2.2.5 __pread64 F
> -GLIBC_2.2.5 __pthread_mutex_destroy F
> -GLIBC_2.2.5 __pthread_mutex_init F
> -GLIBC_2.2.5 __pthread_mutex_lock F
>  GLIBC_2.2.5 __pthread_mutex_trylock F
> -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
> @@ -83,12 +79,8 @@ GLIBC_2.2.5 pthread_getcpuclockid F
>  GLIBC_2.2.5 pthread_join F
>  GLIBC_2.2.5 pthread_kill F
>  GLIBC_2.2.5 pthread_kill_other_threads_np F
> -GLIBC_2.2.5 pthread_mutex_destroy F
> -GLIBC_2.2.5 pthread_mutex_init F
> -GLIBC_2.2.5 pthread_mutex_lock F
>  GLIBC_2.2.5 pthread_mutex_timedlock F
>  GLIBC_2.2.5 pthread_mutex_trylock F
> -GLIBC_2.2.5 pthread_mutex_unlock F
>  GLIBC_2.2.5 pthread_mutexattr_destroy F
>  GLIBC_2.2.5 pthread_mutexattr_getkind_np F
>  GLIBC_2.2.5 pthread_mutexattr_getpshared F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 3accd92583..72da8cceaa 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -342,6 +342,10 @@ GLIBC_2.16 __progname_full D 0x4
>  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
> +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_rwlock_rdlock F
>  GLIBC_2.16 __pthread_rwlock_unlock F
> @@ -2212,6 +2216,10 @@ GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __pthread_cleanup_routine F
>  GLIBC_2.34 __pthread_getspecific F
>  GLIBC_2.34 __pthread_key_create F
> +GLIBC_2.34 __pthread_mutex_destroy F
> +GLIBC_2.34 __pthread_mutex_init F
> +GLIBC_2.34 __pthread_mutex_lock F
> +GLIBC_2.34 __pthread_mutex_unlock F
>  GLIBC_2.34 __pthread_once F
>  GLIBC_2.34 __pthread_rwlock_rdlock F
>  GLIBC_2.34 __pthread_rwlock_unlock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index 0b017c0218..6b095bf36a 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -13,11 +13,7 @@ GLIBC_2.16 __lseek F
>  GLIBC_2.16 __open F
>  GLIBC_2.16 __open64 F
>  GLIBC_2.16 __pread64 F
> -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_trylock F
> -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
> @@ -84,14 +80,10 @@ GLIBC_2.16 pthread_getname_np F
>  GLIBC_2.16 pthread_join F
>  GLIBC_2.16 pthread_kill F
>  GLIBC_2.16 pthread_kill_other_threads_np F
> -GLIBC_2.16 pthread_mutex_destroy F
>  GLIBC_2.16 pthread_mutex_getprioceiling F
> -GLIBC_2.16 pthread_mutex_init F
> -GLIBC_2.16 pthread_mutex_lock F
>  GLIBC_2.16 pthread_mutex_setprioceiling F
>  GLIBC_2.16 pthread_mutex_timedlock F
>  GLIBC_2.16 pthread_mutex_trylock F
> -GLIBC_2.16 pthread_mutex_unlock F
>  GLIBC_2.16 pthread_mutexattr_destroy F
>  GLIBC_2.16 pthread_mutexattr_getkind_np F
>  GLIBC_2.16 pthread_mutexattr_getprioceiling F
> 

Ok.

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

* Re: [PATCH v3 35/37] nptl: Move core condition variable functions into libc
  2021-03-16 17:31 ` [PATCH v3 35/37] nptl: Move core condition variable " Florian Weimer
@ 2021-03-26 17:14   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-26 17:14 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> Onl pthread_cond_clockwait did not have a forwarder, so it needs
> a new symbol version.
> 
> Some complications arise due to the need to supply hidden aliases,
> GLIBC_PRIVATE exports (for the C11 condition variable implementation
> that still remains in libpthread) and 64-bit time_t stubs.
> 
> pthread_cond_broadcast, pthread_cond_signal,  pthread_cond_timedwait,
> pthread_cond_wait, pthread_cond_clockwait have been moved using
> scripts/move-symbol-to-libc.py.

The patch can be simplified now that compat_symbol can reference multiple
target and I think you might want to use OTHER_SHLIB_COMPAT instead of
SHLIB_COMPAT in some places.

LGTM with the changes above.

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

> ---
>  nptl/Makefile                                 | 16 ++---
>  nptl/Versions                                 | 19 +++---
>  nptl/forward.c                                | 61 -----------------
>  nptl/libpthread-compat.c                      |  5 ++
>  nptl/nptl-init.c                              | 10 ---
>  nptl/old_pthread_cond_broadcast.c             |  4 +-
>  nptl/old_pthread_cond_signal.c                |  4 +-
>  nptl/old_pthread_cond_timedwait.c             |  4 +-
>  nptl/old_pthread_cond_wait.c                  |  4 +-
>  nptl/pthreadP.h                               |  9 ++-
>  nptl/pthread_cond_broadcast.c                 | 11 ++--
>  nptl/pthread_cond_signal.c                    |  9 ++-
>  nptl/pthread_cond_wait.c                      | 66 +++++++++++++------
>  sysdeps/nptl/pthread-functions.h              | 11 ----
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 +
>  .../sysv/linux/aarch64/libpthread.abilist     |  5 --
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 +
>  .../unix/sysv/linux/alpha/libpthread.abilist  | 10 +--
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 +
>  .../unix/sysv/linux/arc/libpthread.abilist    |  5 --
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +
>  .../unix/sysv/linux/arm/be/libpthread.abilist |  5 --
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +
>  .../unix/sysv/linux/arm/le/libpthread.abilist |  5 --
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +
>  .../unix/sysv/linux/csky/libpthread.abilist   |  5 --
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +
>  .../unix/sysv/linux/hppa/libpthread.abilist   | 10 +--
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +
>  .../unix/sysv/linux/i386/libpthread.abilist   | 10 +--
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  2 +
>  .../unix/sysv/linux/ia64/libpthread.abilist   | 10 +--
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +
>  .../linux/m68k/coldfire/libpthread.abilist    |  5 --
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +
>  .../sysv/linux/m68k/m680x0/libpthread.abilist | 10 +--
>  .../sysv/linux/microblaze/be/libc.abilist     |  2 +
>  .../linux/microblaze/be/libpthread.abilist    |  5 --
>  .../sysv/linux/microblaze/le/libc.abilist     |  2 +
>  .../linux/microblaze/le/libpthread.abilist    |  5 --
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +
>  .../sysv/linux/mips/mips32/libpthread.abilist | 10 +--
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +
>  .../sysv/linux/mips/mips64/libpthread.abilist | 10 +--
>  .../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  |  5 --
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +
>  .../powerpc/powerpc32/libpthread.abilist      | 10 +--
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  2 +
>  .../powerpc/powerpc64/be/libpthread.abilist   | 10 +--
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  2 +
>  .../powerpc/powerpc64/le/libpthread.abilist   |  5 --
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  2 +
>  .../sysv/linux/riscv/rv32/libpthread.abilist  |  5 --
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 +
>  .../sysv/linux/riscv/rv64/libpthread.abilist  |  5 --
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 +
>  .../linux/s390/s390-32/libpthread.abilist     | 10 +--
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  2 +
>  .../linux/s390/s390-64/libpthread.abilist     | 10 +--
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +
>  .../unix/sysv/linux/sh/be/libpthread.abilist  | 10 +--
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +
>  .../unix/sysv/linux/sh/le/libpthread.abilist  | 10 +--
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +
>  .../linux/sparc/sparc32/libpthread.abilist    | 10 +--
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  2 +
>  .../linux/sparc/sparc64/libpthread.abilist    | 10 +--
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 +
>  .../sysv/linux/x86_64/64/libpthread.abilist   | 10 +--
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 +
>  .../sysv/linux/x86_64/x32/libpthread.abilist  |  5 --
>  75 files changed, 176 insertions(+), 346 deletions(-)
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index e0ba8bea13..1cf72fd5df 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -47,8 +47,12 @@ routines = \
>    lowlevellock \
>    nptl_deallocate_tsd \
>    nptl_nthreads \
> +  old_pthread_cond_broadcast \
>    old_pthread_cond_destroy \
>    old_pthread_cond_init \
> +  old_pthread_cond_signal \
> +  old_pthread_cond_timedwait \
> +  old_pthread_cond_wait \
>    pthread_atfork \
>    pthread_attr_copy \
>    pthread_attr_destroy \
> @@ -69,8 +73,11 @@ routines = \
>    pthread_attr_setsigmask \
>    pthread_attr_setsigmask_internal \
>    pthread_cleanup_upto \
> +  pthread_cond_broadcast \
>    pthread_cond_destroy \
>    pthread_cond_init \
> +  pthread_cond_signal \
> +  pthread_cond_wait \
>    pthread_condattr_destroy \
>    pthread_condattr_init \
>    pthread_equal \
> @@ -82,6 +89,7 @@ routines = \
>    pthread_key_create \
>    pthread_key_delete \
>    pthread_keys \
> +  pthread_mutex_cond_lock \
>    pthread_mutex_conf \
>    pthread_mutex_consistent \
>    pthread_mutex_destroy \
> @@ -130,10 +138,6 @@ libpthread-routines = \
>    nptl-init \
>    nptlfreeres \
>    old_pthread_atfork \
> -  old_pthread_cond_broadcast \
> -  old_pthread_cond_signal \
> -  old_pthread_cond_timedwait \
> -  old_pthread_cond_wait \
>    pt-allocrtsig \
>    pt-fcntl \
>    pt-interp \
> @@ -157,9 +161,6 @@ libpthread-routines = \
>    pthread_barrierattr_setpshared \
>    pthread_cancel \
>    pthread_clockjoin \
> -  pthread_cond_broadcast \
> -  pthread_cond_signal \
> -  pthread_cond_wait \
>    pthread_condattr_getclock \
>    pthread_condattr_getpshared \
>    pthread_condattr_setclock \
> @@ -174,7 +175,6 @@ libpthread-routines = \
>    pthread_join_common \
>    pthread_kill \
>    pthread_kill_other_threads \
> -  pthread_mutex_cond_lock \
>    pthread_mutex_getprioceiling \
>    pthread_mutex_setprioceiling \
>    pthread_mutex_timedlock \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index 2352b74c7e..a6c8746449 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -95,6 +95,9 @@ libc {
>      thrd_sleep;
>      thrd_yield;
>    }
> +  GLIBC_2.30 {
> +    pthread_cond_clockwait;
> +  }
>    GLIBC_2.32 {
>      pthread_attr_getsigmask_np;
>      pthread_attr_setaffinity_np;
> @@ -116,6 +119,7 @@ libc {
>      __pthread_rwlock_unlock;
>      __pthread_rwlock_wrlock;
>      __pthread_setspecific;
> +    pthread_cond_clockwait;
>      pthread_getspecific;
>      pthread_key_create;
>      pthread_key_delete;
> @@ -155,8 +159,12 @@ libc {
>      __pthread_cleanup_pop;
>      __pthread_cleanup_push;
>      __pthread_cleanup_upto;
> +    __pthread_cond_broadcast; # Used by the C11 threads.
>      __pthread_cond_destroy; # Used by the C11 threads.
>      __pthread_cond_init; # Used by the C11 threads.
> +    __pthread_cond_signal; # Used by the C11 threads.
> +    __pthread_cond_timedwait; # Used by the C11 threads.
> +    __pthread_cond_wait; # Used by the C11 threads.
>      __pthread_current_priority;
>      __pthread_exit;
>      __pthread_force_elision;

Ok.

> @@ -209,10 +217,6 @@ libpthread {
>      pause;
>      pthread_atfork;
>      pthread_cancel;
> -    pthread_cond_broadcast;
> -    pthread_cond_signal;
> -    pthread_cond_timedwait;
> -    pthread_cond_wait;
>      pthread_create;
>      pthread_detach;
>      pthread_join;
> @@ -338,11 +342,7 @@ libpthread {
>    }
>  
>    GLIBC_2.3.2 {
> -    pthread_cond_broadcast;
> -    pthread_cond_init;
> -    pthread_cond_signal;
> -    pthread_cond_timedwait;
> -    pthread_cond_wait;
> +    __libpthread_version_placeholder;
>    }
>  
>    GLIBC_2.3.3 {
> @@ -419,7 +419,6 @@ libpthread {
>    }
>  
>    GLIBC_2.30 {
> -    pthread_cond_clockwait;
>      pthread_mutex_clocklock;
>      pthread_rwlock_clockrdlock;
>      pthread_rwlock_clockwrlock;

Ok.

> diff --git a/nptl/forward.c b/nptl/forward.c
> index c914baec4f..c819ab6f2a 100644
> --- a/nptl/forward.c
> +++ b/nptl/forward.c
> @@ -29,64 +29,3 @@
>  /* Pointers to the libc functions.  */
>  struct pthread_functions __libc_pthread_functions attribute_hidden;
>  int __libc_pthread_functions_init attribute_hidden;
> -
> -
> -#define FORWARD2(name, rettype, decl, params, defaction) \
> -rettype									      \
> -name decl								      \
> -{									      \
> -  if (!__libc_pthread_functions_init)					      \
> -    defaction;								      \
> -									      \
> -  return PTHFCT_CALL (ptr_##name, params);				      \
> -}
> -
> -#define FORWARD(name, decl, params, defretval) \
> -  FORWARD2 (name, int, decl, params, return defretval)
> -
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
> -FORWARD2 (__pthread_cond_broadcast_2_0, int attribute_compat_text_section,
> -	  (pthread_cond_2_0_t *cond), (cond), return 0)
> -compat_symbol (libc, __pthread_cond_broadcast_2_0, pthread_cond_broadcast,
> -	       GLIBC_2_0);
> -#endif
> -FORWARD (__pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
> -versioned_symbol (libc, __pthread_cond_broadcast, pthread_cond_broadcast,
> -		  GLIBC_2_3_2);
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
> -FORWARD2 (__pthread_cond_signal_2_0, int attribute_compat_text_section,
> -	  (pthread_cond_2_0_t *cond), (cond), return 0)
> -compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
> -	       GLIBC_2_0);
> -#endif
> -FORWARD (__pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
> -versioned_symbol (libc, __pthread_cond_signal, pthread_cond_signal,
> -		  GLIBC_2_3_2);
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
> -FORWARD2 (__pthread_cond_wait_2_0, int attribute_compat_text_section,
> -	  (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex), (cond, mutex),
> -	  return 0)
> -compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
> -	       GLIBC_2_0);
> -#endif
> -FORWARD (__pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
> -	 (cond, mutex), 0)
> -versioned_symbol (libc, __pthread_cond_wait, pthread_cond_wait,
> -		  GLIBC_2_3_2);
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
> -FORWARD2 (__pthread_cond_timedwait_2_0, int attribute_compat_text_section,
> -	  (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
> -	   const struct timespec *abstime), (cond, mutex, abstime),
> -	  return 0)
> -compat_symbol (libc, __pthread_cond_timedwait_2_0, pthread_cond_timedwait,
> -	       GLIBC_2_0);
> -#endif
> -FORWARD (__pthread_cond_timedwait,
> -	 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> -	  const struct timespec *abstime), (cond, mutex, abstime), 0)
> -versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
> -		  GLIBC_2_3_2);

Ok.

> diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
> index 820dcd6a8f..ee6ba66644 100644
> --- a/nptl/libpthread-compat.c
> +++ b/nptl/libpthread-compat.c
> @@ -50,3 +50,8 @@ compat_symbol_unique (libpthread,
>  compat_symbol_unique (libpthread,
>  		      __libpthread_version_placeholder, GLIBC_2_2_6);
>  #endif
> +
> +#if (SHLIB_COMPAT (libpthread, GLIBC_2_3_2, GLIBC_2_3_4))
> +compat_symbol_unique (libpthread,
> +		      __libpthread_version_placeholder, GLIBC_2_3_2);
> +#endif

Use compat_symbol instead.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index cbc9430ecb..50bc19c4e3 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -53,16 +53,6 @@ static const char nptl_version[] __attribute_used__ = VERSION;
>  #ifdef SHARED
>  static const struct pthread_functions pthread_functions =
>    {
> -    .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
> -    .ptr___pthread_cond_signal = __pthread_cond_signal,
> -    .ptr___pthread_cond_wait = __pthread_cond_wait,
> -    .ptr___pthread_cond_timedwait = __pthread_cond_timedwait,
> -# if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
> -    .ptr___pthread_cond_broadcast_2_0 = __pthread_cond_broadcast_2_0,
> -    .ptr___pthread_cond_signal_2_0 = __pthread_cond_signal_2_0,
> -    .ptr___pthread_cond_wait_2_0 = __pthread_cond_wait_2_0,
> -    .ptr___pthread_cond_timedwait_2_0 = __pthread_cond_timedwait_2_0,
> -# endif
>      .ptr__nptl_setxid = __nptl_setxid,
>    };
>  # define ptr_pthread_functions &pthread_functions

Ok.

> diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c
> index 4224ad9cf3..52dbc58ae4 100644
> --- a/nptl/old_pthread_cond_broadcast.c
> +++ b/nptl/old_pthread_cond_broadcast.c
> @@ -23,7 +23,7 @@
>  #include <shlib-compat.h>
>  
>  
> -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
> +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
>  int
>  __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
>  {

We can not use OTHER_SHLIB_COMPAT.

> @@ -42,6 +42,6 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
>  
>    return __pthread_cond_broadcast (cond->cond);
>  }
> -compat_symbol (libpthread, __pthread_cond_broadcast_2_0,
> +compat_symbol (libc, __pthread_cond_broadcast_2_0,
>  	       pthread_cond_broadcast, GLIBC_2_0);
>  #endif

Ok.

> diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c
> index bab12fd57f..38dd48ccaa 100644
> --- a/nptl/old_pthread_cond_signal.c
> +++ b/nptl/old_pthread_cond_signal.c
> @@ -23,7 +23,7 @@
>  #include <shlib-compat.h>
>  
>  
> -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
> +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
>  int
>  __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
>  {

Same as before.

> @@ -42,6 +42,6 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
>  
>    return __pthread_cond_signal (cond->cond);
>  }
> -compat_symbol (libpthread, __pthread_cond_signal_2_0, pthread_cond_signal,
> +compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
>  	       GLIBC_2_0);
>  #endif

Ok.

> diff --git a/nptl/old_pthread_cond_timedwait.c b/nptl/old_pthread_cond_timedwait.c
> index fdddf3072f..14ef5e7efa 100644
> --- a/nptl/old_pthread_cond_timedwait.c
> +++ b/nptl/old_pthread_cond_timedwait.c
> @@ -23,7 +23,7 @@
>  #include <shlib-compat.h>
>  
>  
> -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
> +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
>  int
>  __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
>  			      const struct timespec *abstime)

Same as before.

> @@ -43,6 +43,6 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
>  
>    return __pthread_cond_timedwait (cond->cond, mutex, abstime);
>  }
> -compat_symbol (libpthread, __pthread_cond_timedwait_2_0,
> +compat_symbol (libc, __pthread_cond_timedwait_2_0,
>  	       pthread_cond_timedwait, GLIBC_2_0);
>  #endif

Ok.

> diff --git a/nptl/old_pthread_cond_wait.c b/nptl/old_pthread_cond_wait.c
> index 156493d6be..a45bbd89e7 100644
> --- a/nptl/old_pthread_cond_wait.c
> +++ b/nptl/old_pthread_cond_wait.c
> @@ -23,7 +23,7 @@
>  #include <shlib-compat.h>
>  
>  
> -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
> +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
>  int
>  __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
>  {

Same as before.

> @@ -42,6 +42,6 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
>  
>    return __pthread_cond_wait (cond->cond, mutex);
>  }
> -compat_symbol (libpthread, __pthread_cond_wait_2_0, pthread_cond_wait,
> +compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
>  	       GLIBC_2_0);
>  #endif

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 4feebdf09e..786c566e81 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -457,13 +457,16 @@ libc_hidden_proto (__pthread_rwlock_wrlock)
>  extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
>  extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
>  extern int __pthread_cond_broadcast (pthread_cond_t *cond);
> +libc_hidden_proto (__pthread_cond_broadcast)
>  extern int __pthread_cond_destroy (pthread_cond_t *cond);
>  libc_hidden_proto (__pthread_cond_destroy)
>  extern int __pthread_cond_init (pthread_cond_t *cond,
>  				const pthread_condattr_t *cond_attr);
>  libc_hidden_proto (__pthread_cond_init)
>  extern int __pthread_cond_signal (pthread_cond_t *cond);
> +libc_hidden_proto (__pthread_cond_signal)
>  extern int __pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);
> +libc_hidden_proto (__pthread_cond_wait)
>  
>  #if __TIMESIZE == 64
>  # define __pthread_clockjoin_np64 __pthread_clockjoin_np

Ok.

> @@ -487,12 +490,12 @@ libpthread_hidden_proto (__pthread_timedjoin_np64)
>  extern int __pthread_cond_timedwait64 (pthread_cond_t *cond,
>                                         pthread_mutex_t *mutex,
>                                         const struct __timespec64 *abstime);
> -libpthread_hidden_proto (__pthread_cond_timedwait64)
> +libc_hidden_proto (__pthread_cond_timedwait64)
>  extern int __pthread_cond_clockwait64 (pthread_cond_t *cond,
>                                         pthread_mutex_t *mutex,
>                                         clockid_t clockid,
>                                         const struct __timespec64 *abstime);
> -libpthread_hidden_proto (__pthread_cond_clockwait64)
> +libc_hidden_proto (__pthread_cond_clockwait64)
>  extern int __pthread_rwlock_clockrdlock64 (pthread_rwlock_t *rwlock,
>                                             clockid_t clockid,
>                                             const struct __timespec64 *abstime);

Ok.

> @@ -519,11 +522,13 @@ libpthread_hidden_proto (__pthread_mutex_timedlock64)
>  extern int __pthread_cond_timedwait (pthread_cond_t *cond,
>  				     pthread_mutex_t *mutex,
>  				     const struct timespec *abstime);
> +libc_hidden_proto (__pthread_cond_timedwait)
>  extern int __pthread_cond_clockwait (pthread_cond_t *cond,
>  				     pthread_mutex_t *mutex,
>  				     clockid_t clockid,
>  				     const struct timespec *abstime)
>    __nonnull ((1, 2, 4));
> +libc_hidden_proto (__pthread_cond_clockwait)
>  extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
>  extern int __pthread_condattr_init (pthread_condattr_t *attr);
>  extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));

Ok.

> diff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
> index e64e124b5b..00326ad435 100644
> --- a/nptl/pthread_cond_broadcast.c
> +++ b/nptl/pthread_cond_broadcast.c
> @@ -36,7 +36,7 @@
>     G1.  We don't need to do all these steps if there are no waiters in G1
>     and/or G2.  See __pthread_cond_signal for further details.  */
>  int
> -__pthread_cond_broadcast (pthread_cond_t *cond)
> +__pthread_cond_broadcast_1 (pthread_cond_t *cond)
>  {
>    LIBC_PROBE (cond_broadcast, 1, cond);
>  
> @@ -87,6 +87,9 @@ __pthread_cond_broadcast (pthread_cond_t *cond)
>  
>    return 0;
>  }
> -
> -versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast,
> -		  GLIBC_2_3_2);
> +versioned_symbol (libpthread, __pthread_cond_broadcast_1,
> +		  pthread_cond_broadcast, GLIBC_2_3_2);
> +libc_hidden_ver (__pthread_cond_broadcast_1, __pthread_cond_broadcast)
> +strong_alias (__pthread_cond_broadcast_1, __pthread_cond_broadcast_2)
> +versioned_symbol (libpthread, __pthread_cond_broadcast_2,
> +		  __pthread_cond_broadcast, GLIBC_PRIVATE);

Ok. Maybe we can add the same compat_symbol support for multiple references
to versioned_symbol as well?

> diff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c
> index 77073342b2..88ce3811d2 100644
> --- a/nptl/pthread_cond_signal.c
> +++ b/nptl/pthread_cond_signal.c
> @@ -32,7 +32,7 @@
>  
>  /* See __pthread_cond_wait for a high-level description of the algorithm.  */
>  int
> -__pthread_cond_signal (pthread_cond_t *cond)
> +__pthread_cond_signal_1 (pthread_cond_t *cond)
>  {
>    LIBC_PROBE (cond_signal, 1, cond);
>  
> @@ -95,6 +95,9 @@ __pthread_cond_signal (pthread_cond_t *cond)
>  
>    return 0;
>  }
> -
> -versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal,
> +versioned_symbol (libpthread, __pthread_cond_signal_1, pthread_cond_signal,
>  		  GLIBC_2_3_2);
> +libc_hidden_ver (__pthread_cond_signal_1, __pthread_cond_signal)
> +strong_alias (__pthread_cond_signal_1, __pthread_cond_signal_2)
> +versioned_symbol (libpthread, __pthread_cond_signal_2,
> +		  __pthread_cond_signal, GLIBC_PRIVATE);

Ok.

> diff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c
> index a481bb55fc..2eb6c85f4e 100644
> --- a/nptl/pthread_cond_wait.c
> +++ b/nptl/pthread_cond_wait.c
> @@ -613,16 +613,23 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,
>  
>  /* See __pthread_cond_wait_common.  */
>  int
> -__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
> +__pthread_cond_wait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex)
>  {
>    /* clockid is unused when abstime is NULL. */
>    return __pthread_cond_wait_common (cond, mutex, 0, NULL);
>  }
>  
> +versioned_symbol (libpthread, __pthread_cond_wait_1, pthread_cond_wait,
> +		  GLIBC_2_3_2);
> +libc_hidden_ver (__pthread_cond_wait_1, __pthread_cond_wait)
> +strong_alias (__pthread_cond_wait_1, __pthread_cond_wait_2)
> +versioned_symbol (libpthread, __pthread_cond_wait_2, __pthread_cond_wait,
> +		  GLIBC_PRIVATE);
> +
>  /* See __pthread_cond_wait_common.  */
>  int
> -__pthread_cond_timedwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> -                            const struct __timespec64 *abstime)
> +__pthread_cond_timedwait64_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> +			      const struct __timespec64 *abstime)
>  {
>    /* Check parameter validity.  This should also tell the compiler that
>       it can assume that abstime is not NULL.  */

Ok.

> @@ -637,29 +644,34 @@ __pthread_cond_timedwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
>    return __pthread_cond_wait_common (cond, mutex, clockid, abstime);
>  }
>  
> -#if __TIMESIZE != 64
> -libpthread_hidden_def (__pthread_cond_timedwait64)
> +#if __TIMESIZE == 64
> +strong_alias (__pthread_cond_timedwait64_1, __pthread_cond_timedwait_1)
> +#else
> +versioned_symbol (libc, __pthread_cond_timedwait64_1,
> +		  __pthread_cond_timedwait64, GLIBC_PRIVATE);
> +libc_hidden_ver (__pthread_cond_timedwait64_1, __pthread_cond_timedwait64)
>  
>  int
> -__pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
> -                          const struct timespec *abstime)
> +__pthread_cond_timedwait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> +			    const struct timespec *abstime)
>  {
>    struct __timespec64 ts64 = valid_timespec_to_timespec64 (*abstime);
>  
>    return __pthread_cond_timedwait64 (cond, mutex, &ts64);
>  }
> -#endif
> -
> -versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
> -		  GLIBC_2_3_2);
> -versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
> -		  GLIBC_2_3_2);
> +#endif /* __TIMESIZE == 64 */
> +versioned_symbol (libpthread, __pthread_cond_timedwait_1,
> +		  pthread_cond_timedwait, GLIBC_2_3_2);
> +libc_hidden_ver (__pthread_cond_timedwait_1, __pthread_cond_timedwait)
> +strong_alias (__pthread_cond_timedwait_1, __pthread_cond_timedwait_2)
> +versioned_symbol (libpthread, __pthread_cond_timedwait_2,
> +		  __pthread_cond_timedwait, GLIBC_PRIVATE);
>  
>  /* See __pthread_cond_wait_common.  */
>  int
> -__pthread_cond_clockwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> -                            clockid_t clockid,
> -                            const struct __timespec64 *abstime)
> +__pthread_cond_clockwait64_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
> +			      clockid_t clockid,
> +			      const struct __timespec64 *abstime)
>  {
>    /* Check parameter validity.  This should also tell the compiler that
>       it can assume that abstime is not NULL.  */

Ok.

> @@ -672,11 +684,15 @@ __pthread_cond_clockwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex,
>    return __pthread_cond_wait_common (cond, mutex, clockid, abstime);
>  }
>  
> -#if __TIMESIZE != 64
> -libpthread_hidden_def (__pthread_cond_clockwait64)
> +#if __TIMESIZE == 64
> +strong_alias (__pthread_cond_clockwait64_1, __pthread_cond_clockwait_1)
> +#else
> +versioned_symbol (libc, __pthread_cond_clockwait64_1,
> +		  __pthread_cond_clockwait64, GLIBC_PRIVATE);
> +libc_hidden_ver (__pthread_cond_clockwait64_1, __pthread_cond_clockwait64)
>  
>  int
> -__pthread_cond_clockwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
> +__pthread_cond_clockwait_1 (pthread_cond_t *cond, pthread_mutex_t *mutex,
>                            clockid_t clockid,
>                            const struct timespec *abstime)
>  {

Ok.

> @@ -684,5 +700,15 @@ __pthread_cond_clockwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
>  
>    return __pthread_cond_clockwait64 (cond, mutex, clockid, &ts64);
>  }
> +#endif /* __TIMESIZE == 64 */
> +versioned_symbol (libc, __pthread_cond_clockwait_1,
> +		  __pthread_cond_clockwait, GLIBC_PRIVATE);
> +libc_hidden_ver (__pthread_cond_clockwait_1, __pthread_cond_clockwait)
> +strong_alias (__pthread_cond_clockwait_1, __pthread_cond_clockwait_2)
> +versioned_symbol (libc, __pthread_cond_clockwait_2,
> +		  pthread_cond_clockwait, GLIBC_2_34);
> +#if SHLIB_COMPAT (libc, GLIBC_2_30, GLIBC_2_34)
> +strong_alias (__pthread_cond_clockwait_1, __pthread_cond_clockwait_3)
> +compat_symbol (libc, __pthread_cond_clockwait_3,
> +	       pthread_cond_clockwait, GLIBC_2_30);
>  #endif

There is no need to add strong_alias anymore.

> -weak_alias (__pthread_cond_clockwait, pthread_cond_clockwait);
> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index dab5a2831e..56c746a01c 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -30,17 +30,6 @@ struct xid_command;
>     the thread functions.  */
>  struct pthread_functions
>  {
> -  int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
> -  int (*ptr___pthread_cond_signal) (pthread_cond_t *);
> -  int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
> -  int (*ptr___pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
> -				       const struct timespec *);
> -  int (*ptr___pthread_cond_broadcast_2_0) (pthread_cond_2_0_t *);
> -  int (*ptr___pthread_cond_signal_2_0) (pthread_cond_2_0_t *);
> -  int (*ptr___pthread_cond_wait_2_0) (pthread_cond_2_0_t *, pthread_mutex_t *);
> -  int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
> -					   pthread_mutex_t *,
> -					   const struct timespec *);
>    int (*ptr__nptl_setxid) (struct xid_command *);
>  };
>  

Ok.

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 381947232e..918e8ad5ce 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2174,6 +2174,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2212,6 +2213,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> index 29a98fc2f4..421b093c4c 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.17 pthread_barrierattr_getpshared F
>  GLIBC_2.17 pthread_barrierattr_init F
>  GLIBC_2.17 pthread_barrierattr_setpshared F
>  GLIBC_2.17 pthread_cancel F
> -GLIBC_2.17 pthread_cond_broadcast F
> -GLIBC_2.17 pthread_cond_signal F
> -GLIBC_2.17 pthread_cond_timedwait F
> -GLIBC_2.17 pthread_cond_wait F
>  GLIBC_2.17 pthread_condattr_getclock F
>  GLIBC_2.17 pthread_condattr_getpshared F
>  GLIBC_2.17 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 7e314dd68b..b197b40425 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2255,6 +2255,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2293,6 +2294,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> index 29cb6259a5..69809f7794 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -185,7 +178,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 014b30c7bd..fccb579d59 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -1374,6 +1374,7 @@ GLIBC_2.32 pthread_attr_setschedpolicy F
>  GLIBC_2.32 pthread_attr_setscope F
>  GLIBC_2.32 pthread_attr_setsigmask_np F
>  GLIBC_2.32 pthread_cond_broadcast F
> +GLIBC_2.32 pthread_cond_clockwait F
>  GLIBC_2.32 pthread_cond_destroy F
>  GLIBC_2.32 pthread_cond_init F
>  GLIBC_2.32 pthread_cond_signal F
> @@ -1972,6 +1973,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> index b926ef9dba..9e16734b8c 100644
> --- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
> @@ -76,11 +76,6 @@ GLIBC_2.32 pthread_barrierattr_init F
>  GLIBC_2.32 pthread_barrierattr_setpshared F
>  GLIBC_2.32 pthread_cancel F
>  GLIBC_2.32 pthread_clockjoin_np F
> -GLIBC_2.32 pthread_cond_broadcast F
> -GLIBC_2.32 pthread_cond_clockwait F
> -GLIBC_2.32 pthread_cond_signal F
> -GLIBC_2.32 pthread_cond_timedwait F
> -GLIBC_2.32 pthread_cond_wait F
>  GLIBC_2.32 pthread_condattr_getclock F
>  GLIBC_2.32 pthread_condattr_getpshared F
>  GLIBC_2.32 pthread_condattr_setclock F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 412eb541fc..0e3cb8f22b 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -129,6 +129,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -170,6 +171,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> index 8dd2c3f7a6..bd870717f2 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
> @@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> @@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
>  GLIBC_2.4 pthread_barrierattr_init F
>  GLIBC_2.4 pthread_barrierattr_setpshared F
>  GLIBC_2.4 pthread_cancel F
> -GLIBC_2.4 pthread_cond_broadcast F
> -GLIBC_2.4 pthread_cond_signal F
> -GLIBC_2.4 pthread_cond_timedwait F
> -GLIBC_2.4 pthread_cond_wait F
>  GLIBC_2.4 pthread_condattr_getclock F
>  GLIBC_2.4 pthread_condattr_getpshared F
>  GLIBC_2.4 pthread_condattr_setclock F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 588f1d6b42..10b35e83ab 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -129,6 +129,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -167,6 +168,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> index 8dd2c3f7a6..bd870717f2 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
> @@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> @@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
>  GLIBC_2.4 pthread_barrierattr_init F
>  GLIBC_2.4 pthread_barrierattr_setpshared F
>  GLIBC_2.4 pthread_cancel F
> -GLIBC_2.4 pthread_cond_broadcast F
> -GLIBC_2.4 pthread_cond_signal F
> -GLIBC_2.4 pthread_cond_timedwait F
> -GLIBC_2.4 pthread_cond_wait F
>  GLIBC_2.4 pthread_condattr_getclock F
>  GLIBC_2.4 pthread_condattr_getpshared F
>  GLIBC_2.4 pthread_condattr_setclock F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 76fb31f895..dbbf62eba3 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2118,6 +2118,7 @@ GLIBC_2.29 xprt_register F
>  GLIBC_2.29 xprt_unregister F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2156,6 +2157,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> index 2c4d219569..e4d8c8fcb0 100644
> --- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
> @@ -75,10 +75,6 @@ GLIBC_2.29 pthread_barrierattr_getpshared F
>  GLIBC_2.29 pthread_barrierattr_init F
>  GLIBC_2.29 pthread_barrierattr_setpshared F
>  GLIBC_2.29 pthread_cancel F
> -GLIBC_2.29 pthread_cond_broadcast F
> -GLIBC_2.29 pthread_cond_signal F
> -GLIBC_2.29 pthread_cond_timedwait F
> -GLIBC_2.29 pthread_cond_wait F
>  GLIBC_2.29 pthread_condattr_getclock F
>  GLIBC_2.29 pthread_condattr_getpshared F
>  GLIBC_2.29 pthread_condattr_setclock F
> @@ -171,7 +167,6 @@ GLIBC_2.29 tss_delete F
>  GLIBC_2.29 tss_get F
>  GLIBC_2.29 tss_set F
>  GLIBC_2.29 write F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index e99899dee5..8b3960aff8 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2076,6 +2076,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2114,6 +2115,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> index 9e15deaad8..3eb40a91f7 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 29b8e0c1eb..bbc1d42e71 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2242,6 +2242,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2281,6 +2282,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> index 4065a88a3b..3d9efa60e0 100644
> --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index fb8a36ce20..4cf13e29a8 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2108,6 +2108,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2146,6 +2147,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> index 684bf559e5..974fa09b43 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -177,7 +170,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 03e80e6a12..75e546da5d 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -130,6 +130,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -171,6 +172,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> index 8dd2c3f7a6..bd870717f2 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
> @@ -26,7 +26,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> @@ -98,10 +97,6 @@ GLIBC_2.4 pthread_barrierattr_getpshared F
>  GLIBC_2.4 pthread_barrierattr_init F
>  GLIBC_2.4 pthread_barrierattr_setpshared F
>  GLIBC_2.4 pthread_cancel F
> -GLIBC_2.4 pthread_cond_broadcast F
> -GLIBC_2.4 pthread_cond_signal F
> -GLIBC_2.4 pthread_cond_timedwait F
> -GLIBC_2.4 pthread_cond_wait F
>  GLIBC_2.4 pthread_condattr_getclock F
>  GLIBC_2.4 pthread_condattr_getpshared F
>  GLIBC_2.4 pthread_condattr_setclock F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 2a5bee30d1..7a24d3ce17 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2185,6 +2185,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> index 4065a88a3b..3d9efa60e0 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index b46567880e..4d0fef0d93 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2166,6 +2166,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -2207,6 +2208,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> index d8a9642f66..3ad8bce93a 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.18 pthread_barrierattr_getpshared F
>  GLIBC_2.18 pthread_barrierattr_init F
>  GLIBC_2.18 pthread_barrierattr_setpshared F
>  GLIBC_2.18 pthread_cancel F
> -GLIBC_2.18 pthread_cond_broadcast F
> -GLIBC_2.18 pthread_cond_signal F
> -GLIBC_2.18 pthread_cond_timedwait F
> -GLIBC_2.18 pthread_cond_wait F
>  GLIBC_2.18 pthread_condattr_getclock F
>  GLIBC_2.18 pthread_condattr_getpshared F
>  GLIBC_2.18 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 7796c5313a..2a06c0ed64 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2166,6 +2166,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2204,6 +2205,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> index d8a9642f66..3ad8bce93a 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.18 pthread_barrierattr_getpshared F
>  GLIBC_2.18 pthread_barrierattr_init F
>  GLIBC_2.18 pthread_barrierattr_setpshared F
>  GLIBC_2.18 pthread_cancel F
> -GLIBC_2.18 pthread_cond_broadcast F
> -GLIBC_2.18 pthread_cond_signal F
> -GLIBC_2.18 pthread_cond_timedwait F
> -GLIBC_2.18 pthread_cond_wait F
>  GLIBC_2.18 pthread_condattr_getclock F
>  GLIBC_2.18 pthread_condattr_getpshared F
>  GLIBC_2.18 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index c3e658dbc1..99bb618f1f 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2159,6 +2159,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2197,6 +2198,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> index 4bd5de2dd7..2ab8395a4a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -164,10 +160,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index bae73ebb39..7d66f78876 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2157,6 +2157,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2195,6 +2196,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> index 4bd5de2dd7..2ab8395a4a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -164,10 +160,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 74fb3b997e..55cc5e99bf 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2165,6 +2165,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2203,6 +2204,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 3083e3d821..208a801c9d 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2159,6 +2159,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2197,6 +2198,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index f79ca91eb7..7525da4a92 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2207,6 +2207,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2245,6 +2246,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> index c469853b65..263808a2b8 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.21 pthread_barrierattr_getpshared F
>  GLIBC_2.21 pthread_barrierattr_init F
>  GLIBC_2.21 pthread_barrierattr_setpshared F
>  GLIBC_2.21 pthread_cancel F
> -GLIBC_2.21 pthread_cond_broadcast F
> -GLIBC_2.21 pthread_cond_signal F
> -GLIBC_2.21 pthread_cond_timedwait F
> -GLIBC_2.21 pthread_cond_wait F
>  GLIBC_2.21 pthread_condattr_getclock F
>  GLIBC_2.21 pthread_condattr_getpshared F
>  GLIBC_2.21 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index f5408e6078..7c85534f61 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2215,6 +2215,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2253,6 +2254,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> index 44fb3a6743..7d696c9be7 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -183,7 +176,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index a7587dcc45..1e4059c7f6 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2248,6 +2248,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2286,6 +2287,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 7ea6dc6574..e72f329cf9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2078,6 +2078,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2116,6 +2117,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> index 2e77dc2fb3..342642ee59 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
> @@ -86,10 +86,6 @@ GLIBC_2.3 pthread_barrierattr_destroy F
>  GLIBC_2.3 pthread_barrierattr_init F
>  GLIBC_2.3 pthread_barrierattr_setpshared F
>  GLIBC_2.3 pthread_cancel F
> -GLIBC_2.3 pthread_cond_broadcast F
> -GLIBC_2.3 pthread_cond_signal F
> -GLIBC_2.3 pthread_cond_timedwait F
> -GLIBC_2.3 pthread_cond_wait F
>  GLIBC_2.3 pthread_condattr_getpshared F
>  GLIBC_2.3 pthread_condattr_setpshared F
>  GLIBC_2.3 pthread_create F
> @@ -154,10 +150,7 @@ GLIBC_2.3 sigwait F
>  GLIBC_2.3 system F
>  GLIBC_2.3 tcdrain F
>  GLIBC_2.3 write F
> -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.2 __libpthread_version_placeholder 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
> @@ -172,7 +165,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index f994892fd9..36dd35b01a 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2276,6 +2276,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __argp_errorieee128 F
> @@ -2407,6 +2408,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> index 29a98fc2f4..421b093c4c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.17 pthread_barrierattr_getpshared F
>  GLIBC_2.17 pthread_barrierattr_init F
>  GLIBC_2.17 pthread_barrierattr_setpshared F
>  GLIBC_2.17 pthread_cancel F
> -GLIBC_2.17 pthread_cond_broadcast F
> -GLIBC_2.17 pthread_cond_signal F
> -GLIBC_2.17 pthread_cond_timedwait F
> -GLIBC_2.17 pthread_cond_wait F
>  GLIBC_2.17 pthread_condattr_getclock F
>  GLIBC_2.17 pthread_condattr_getpshared F
>  GLIBC_2.17 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 70b873f9fb..955b5df1f3 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -1376,6 +1376,7 @@ GLIBC_2.33 pthread_attr_setschedpolicy F
>  GLIBC_2.33 pthread_attr_setscope F
>  GLIBC_2.33 pthread_attr_setsigmask_np F
>  GLIBC_2.33 pthread_cond_broadcast F
> +GLIBC_2.33 pthread_cond_clockwait F
>  GLIBC_2.33 pthread_cond_destroy F
>  GLIBC_2.33 pthread_cond_init F
>  GLIBC_2.33 pthread_cond_signal F
> @@ -1974,6 +1975,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> index 911969f7eb..23b5630a69 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
> @@ -76,11 +76,6 @@ GLIBC_2.33 pthread_barrierattr_init F
>  GLIBC_2.33 pthread_barrierattr_setpshared F
>  GLIBC_2.33 pthread_cancel F
>  GLIBC_2.33 pthread_clockjoin_np F
> -GLIBC_2.33 pthread_cond_broadcast F
> -GLIBC_2.33 pthread_cond_clockwait F
> -GLIBC_2.33 pthread_cond_signal F
> -GLIBC_2.33 pthread_cond_timedwait F
> -GLIBC_2.33 pthread_cond_wait F
>  GLIBC_2.33 pthread_condattr_getclock F
>  GLIBC_2.33 pthread_condattr_getpshared F
>  GLIBC_2.33 pthread_condattr_setclock F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index ddfac62fd0..74bf464fa9 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2136,6 +2136,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2174,6 +2175,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> index 21f462137a..58402c8360 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.27 pthread_barrierattr_getpshared F
>  GLIBC_2.27 pthread_barrierattr_init F
>  GLIBC_2.27 pthread_barrierattr_setpshared F
>  GLIBC_2.27 pthread_cancel F
> -GLIBC_2.27 pthread_cond_broadcast F
> -GLIBC_2.27 pthread_cond_signal F
> -GLIBC_2.27 pthread_cond_timedwait F
> -GLIBC_2.27 pthread_cond_wait F
>  GLIBC_2.27 pthread_condattr_getclock F
>  GLIBC_2.27 pthread_condattr_getpshared F
>  GLIBC_2.27 pthread_condattr_setclock F
> @@ -173,7 +169,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 078237adb2..ad26a36c0b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2210,6 +2210,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -2251,6 +2252,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> index 7b2edb7f57..0f527c3335 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -166,10 +162,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -184,7 +177,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index a2700aba32..b75431f830 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2114,6 +2114,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2152,6 +2153,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> index 8b4729fb7a..5af8b32f0b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
> @@ -67,10 +67,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -158,10 +154,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -176,7 +169,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 4fce4b408e..fc6dfece0a 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2080,6 +2080,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.31 msgctl F
> @@ -2121,6 +2122,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> index 9e15deaad8..3eb40a91f7 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 5dba0f5d0c..15e858df71 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2080,6 +2080,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2118,6 +2119,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> index 9e15deaad8..3eb40a91f7 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -175,7 +168,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index e064e5a4dc..157da004d6 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2204,6 +2204,7 @@ GLIBC_2.30 __nldbl_warn F
>  GLIBC_2.30 __nldbl_warnx F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2242,6 +2243,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> index 29cb6259a5..69809f7794 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
> @@ -30,10 +30,6 @@ GLIBC_2.0 open F
>  GLIBC_2.0 pause F
>  GLIBC_2.0 pthread_atfork F
>  GLIBC_2.0 pthread_cancel F
> -GLIBC_2.0 pthread_cond_broadcast F
> -GLIBC_2.0 pthread_cond_signal F
> -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_join F
> @@ -165,10 +161,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -185,7 +178,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 36fed3cf99..b13a3b4036 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2131,6 +2131,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2169,6 +2170,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> index 684bf559e5..974fa09b43 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2 pthread_barrierattr_destroy F
>  GLIBC_2.2 pthread_barrierattr_init F
>  GLIBC_2.2 pthread_barrierattr_setpshared F
>  GLIBC_2.2 pthread_cancel F
> -GLIBC_2.2 pthread_cond_broadcast F
> -GLIBC_2.2 pthread_cond_signal F
> -GLIBC_2.2 pthread_cond_timedwait F
> -GLIBC_2.2 pthread_cond_wait F
>  GLIBC_2.2 pthread_condattr_getpshared F
>  GLIBC_2.2 pthread_condattr_setpshared F
>  GLIBC_2.2 pthread_create F
> @@ -157,10 +153,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -177,7 +170,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 6858c1328f..ae1b8c21f4 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2089,6 +2089,7 @@ GLIBC_2.3.4 xdr_quad_t F
>  GLIBC_2.3.4 xdr_u_quad_t F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2128,6 +2129,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> index 54ad81fdd6..ddd052cc92 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
> @@ -66,10 +66,6 @@ GLIBC_2.2.5 pthread_barrierattr_destroy F
>  GLIBC_2.2.5 pthread_barrierattr_init F
>  GLIBC_2.2.5 pthread_barrierattr_setpshared F
>  GLIBC_2.2.5 pthread_cancel F
> -GLIBC_2.2.5 pthread_cond_broadcast F
> -GLIBC_2.2.5 pthread_cond_signal F
> -GLIBC_2.2.5 pthread_cond_timedwait F
> -GLIBC_2.2.5 pthread_cond_wait F
>  GLIBC_2.2.5 pthread_condattr_getpshared F
>  GLIBC_2.2.5 pthread_condattr_setpshared F
>  GLIBC_2.2.5 pthread_create F
> @@ -156,10 +152,7 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -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.2 __libpthread_version_placeholder 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
> @@ -174,7 +167,6 @@ GLIBC_2.3.3 pthread_tryjoin_np 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.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 72da8cceaa..2d1abe3605 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2187,6 +2187,7 @@ GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
>  GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
>  GLIBC_2.30 getdents64 F
>  GLIBC_2.30 gettid F
> +GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 tgkill F
>  GLIBC_2.30 twalk_r F
>  GLIBC_2.32 __libc_single_threaded D 0x1
> @@ -2226,6 +2227,7 @@ GLIBC_2.34 __pthread_rwlock_unlock F
>  GLIBC_2.34 __pthread_rwlock_wrlock F
>  GLIBC_2.34 __pthread_setspecific F
>  GLIBC_2.34 __pthread_unwind_next F
> +GLIBC_2.34 pthread_cond_clockwait F
>  GLIBC_2.34 pthread_getspecific F
>  GLIBC_2.34 pthread_key_create F
>  GLIBC_2.34 pthread_key_delete F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> index 6b095bf36a..b0c512fec3 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
> @@ -64,10 +64,6 @@ GLIBC_2.16 pthread_barrierattr_getpshared F
>  GLIBC_2.16 pthread_barrierattr_init F
>  GLIBC_2.16 pthread_barrierattr_setpshared F
>  GLIBC_2.16 pthread_cancel F
> -GLIBC_2.16 pthread_cond_broadcast F
> -GLIBC_2.16 pthread_cond_signal F
> -GLIBC_2.16 pthread_cond_timedwait F
> -GLIBC_2.16 pthread_cond_wait F
>  GLIBC_2.16 pthread_condattr_getclock F
>  GLIBC_2.16 pthread_condattr_getpshared F
>  GLIBC_2.16 pthread_condattr_setclock F
> @@ -174,7 +170,6 @@ GLIBC_2.28 tss_create F
>  GLIBC_2.28 tss_delete F
>  GLIBC_2.28 tss_get F
>  GLIBC_2.28 tss_set F
> -GLIBC_2.30 pthread_cond_clockwait F
>  GLIBC_2.30 pthread_mutex_clocklock F
>  GLIBC_2.30 pthread_rwlock_clockrdlock F
>  GLIBC_2.30 pthread_rwlock_clockwrlock F
> 

Ok

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

* Re: [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization
  2021-03-16 17:31 ` [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization Florian Weimer
@ 2021-03-26 18:00   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-26 18:00 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> This is optimization is similar in spirit to the SINGLE_THREAD_P check
> in the malloc implementation.  Doing this in generic code allows us
> to prioritize those cases which are likely to occur in single-threaded
> programs (normal and recursive mutexes).

At first I though about suggesting to move it on generic lowlevellock.h,
but it is used quite only in some specific places and once libpthread is 
moved we can use libc_lock_lock (which uses pthread_mutex) instead.

The only issue with the approach of moving this optimization to 
pthread_mutex_lock (instead of custom lock as lll_lock) is to use a
slight more memory due pthread_mutex_t object, but I think the sparse
usage within glibc should be ok.

It would be good if we disentangle and consolidate both lowlevellock.h 
and libc-lock.h so we have only header and definitions.

LGTM, thanks.

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

> ---
>  nptl/pthread_mutex_cond_lock.c |  1 +
>  nptl/pthread_mutex_lock.c      | 25 ++++++++++++++++++++++---
>  nptl/pthread_mutex_unlock.c    | 17 ++++++++++++++++-
>  3 files changed, 39 insertions(+), 4 deletions(-)
> 
> diff --git a/nptl/pthread_mutex_cond_lock.c b/nptl/pthread_mutex_cond_lock.c
> index 2f0771302f..3386bd689b 100644
> --- a/nptl/pthread_mutex_cond_lock.c
> +++ b/nptl/pthread_mutex_cond_lock.c
> @@ -2,6 +2,7 @@
>  
>  #define LLL_MUTEX_LOCK(mutex) \
>    lll_cond_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))
> +#define LLL_MUTEX_LOCK_OPTIMIZED(mutex) LLL_MUTEX_LOCK (mutex)
>  
>  /* Not actually elided so far. Needed? */
>  #define LLL_MUTEX_LOCK_ELISION(mutex)  \
> diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
> index f0de7b7fd6..8649a92ffb 100644
> --- a/nptl/pthread_mutex_lock.c
> +++ b/nptl/pthread_mutex_lock.c
> @@ -30,8 +30,27 @@
>  /* Some of the following definitions differ when pthread_mutex_cond_lock.c
>     includes this file.  */
>  #ifndef LLL_MUTEX_LOCK
> -# define LLL_MUTEX_LOCK(mutex) \
> +/* lll_lock with single-thread optimization.  */
> +static inline void
> +lll_mutex_lock_optimized (pthread_mutex_t *mutex)
> +{
> +  /* The single-threaded optimization is only valid for private
> +     mutexes.  For process-shared mutexes, the mutex could be in a
> +     shared mapping, so synchronization with another process is needed
> +     even without any threads.  If the lock is already marked as
> +     acquired, POSIX requires that pthread_mutex_lock deadlocks for
> +     normal mutexes, so skip the optimization in that case as
> +     well.  */
> +  int private = PTHREAD_MUTEX_PSHARED (mutex);
> +  if (private == LLL_PRIVATE && SINGLE_THREAD_P && mutex->__data.__lock == 0)
> +    mutex->__data.__lock = 1;
> +  else
> +    lll_lock (mutex->__data.__lock, private);
> +}
> +
> +# define LLL_MUTEX_LOCK(mutex)						\
>    lll_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))

Ok.

> +# define LLL_MUTEX_LOCK_OPTIMIZED(mutex) lll_mutex_lock_optimized (mutex)
>  # define LLL_MUTEX_TRYLOCK(mutex) \
>    lll_trylock ((mutex)->__data.__lock)
>  # define LLL_ROBUST_MUTEX_LOCK_MODIFIER 0
> @@ -64,7 +83,7 @@ __pthread_mutex_lock (pthread_mutex_t *mutex)
>        FORCE_ELISION (mutex, goto elision);
>      simple:
>        /* Normal mutex.  */
> -      LLL_MUTEX_LOCK (mutex);
> +      LLL_MUTEX_LOCK_OPTIMIZED (mutex);
>        assert (mutex->__data.__owner == 0);
>      }
>  #if ENABLE_ELISION_SUPPORT

Ok.

> @@ -99,7 +118,7 @@ __pthread_mutex_lock (pthread_mutex_t *mutex)
>  	}
>  
>        /* We have to get the mutex.  */
> -      LLL_MUTEX_LOCK (mutex);
> +      LLL_MUTEX_LOCK_OPTIMIZED (mutex);
>  
>        assert (mutex->__data.__owner == 0);
>        mutex->__data.__count = 1;

Ok.

> diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
> index 3b5ccdacf9..655093ee9a 100644
> --- a/nptl/pthread_mutex_unlock.c
> +++ b/nptl/pthread_mutex_unlock.c
> @@ -28,6 +28,21 @@ static int
>  __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
>       __attribute_noinline__;
>  
> +/* lll_lock with single-thread optimization.  */
> +static inline void
> +lll_mutex_unlock_optimized (pthread_mutex_t *mutex)
> +{
> +  /* The single-threaded optimization is only valid for private
> +     mutexes.  For process-shared mutexes, the mutex could be in a
> +     shared mapping, so synchronization with another process is needed
> +     even without any threads.  */
> +  int private = PTHREAD_MUTEX_PSHARED (mutex);
> +  if (private == LLL_PRIVATE && SINGLE_THREAD_P)
> +    mutex->__data.__lock = 0;
> +  else
> +    lll_unlock (mutex->__data.__lock, private);
> +}
> +
>  int
>  attribute_hidden
>  __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
> @@ -51,7 +66,7 @@ __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
>  	--mutex->__data.__nusers;
>  
>        /* Unlock.  */
> -      lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
> +      lll_mutex_unlock_optimized (mutex);
>  
>        LIBC_PROBE (mutex_release, 1, mutex);
>  
> 

Ok.

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

* Re: [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-03-16 17:31 ` [PATCH v3 36/37] nptl: Move setxid broadcast implementation " Florian Weimer
@ 2021-03-26 18:15   ` Adhemerval Zanella
  2021-04-06 18:41     ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-26 18:15 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> The signal handler is exported as __nptl_setxid_sighandler, so
> that the libpthread initialization code can install it.  This
> is sufficient for now because it is guarantueed to happen before
> the first pthread_create call.

LGTM with some small changes below.

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

> ---
>  nptl/Makefile                              |   1 +
>  nptl/Versions                              |   1 +
>  nptl/allocatestack.c                       | 209 ---------------
>  nptl/nptl-init.c                           |  49 +---
>  nptl/nptl_setxid.c                         | 279 +++++++++++++++++++++
>  nptl/pthreadP.h                            |   2 +
>  sysdeps/nptl/pthread-functions.h           |   1 -
>  sysdeps/nptl/setxid.h                      |  26 +-
>  sysdeps/unix/sysv/linux/internal-signals.h |   4 -
>  9 files changed, 287 insertions(+), 285 deletions(-)
>  create mode 100644 nptl/nptl_setxid.c
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 1cf72fd5df..1b5038485d 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -47,6 +47,7 @@ routines = \
>    lowlevellock \
>    nptl_deallocate_tsd \
>    nptl_nthreads \
> +  nptl_setxid \
>    old_pthread_cond_broadcast \
>    old_pthread_cond_destroy \
>    old_pthread_cond_init \

Ok.

> diff --git a/nptl/Versions b/nptl/Versions
> index a6c8746449..0039594cdd 100644
> --- a/nptl/Versions
> +++ b/nptl/Versions
> @@ -151,6 +151,7 @@ libc {
>      __mutex_aconf;
>      __nptl_deallocate_tsd;
>      __nptl_nthreads;
> +    __nptl_setxid_sighandler;
>      __pthread_attr_copy;
>      __pthread_attr_destroy;
>      __pthread_attr_init;

Ok.

> diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
> index 149b999603..6e0808f1a0 100644
> --- a/nptl/allocatestack.c
> +++ b/nptl/allocatestack.c
> @@ -963,215 +963,6 @@ __reclaim_stacks (void)
>  }
>  
>  
> -static void
> -setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
> -{
> -  int ch;
> -
> -  /* Wait until this thread is cloned.  */
> -  if (t->setxid_futex == -1
> -      && ! atomic_compare_and_exchange_bool_acq (&t->setxid_futex, -2, -1))
> -    do
> -      futex_wait_simple (&t->setxid_futex, -2, FUTEX_PRIVATE);
> -    while (t->setxid_futex == -2);
> -
> -  /* Don't let the thread exit before the setxid handler runs.  */
> -  t->setxid_futex = 0;
> -
> -  do
> -    {
> -      ch = t->cancelhandling;
> -
> -      /* If the thread is exiting right now, ignore it.  */
> -      if ((ch & EXITING_BITMASK) != 0)
> -	{
> -	  /* Release the futex if there is no other setxid in
> -	     progress.  */
> -	  if ((ch & SETXID_BITMASK) == 0)
> -	    {
> -	      t->setxid_futex = 1;
> -	      futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
> -	    }
> -	  return;
> -	}
> -    }
> -  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
> -					       ch | SETXID_BITMASK, ch));
> -}
> -
> -
> -static void
> -setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
> -{
> -  int ch;
> -
> -  do
> -    {
> -      ch = t->cancelhandling;
> -      if ((ch & SETXID_BITMASK) == 0)
> -	return;
> -    }
> -  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
> -					       ch & ~SETXID_BITMASK, ch));
> -
> -  /* Release the futex just in case.  */
> -  t->setxid_futex = 1;
> -  futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
> -}
> -
> -
> -static int
> -setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
> -{
> -  if ((t->cancelhandling & SETXID_BITMASK) == 0)
> -    return 0;
> -
> -  int val;
> -  pid_t pid = __getpid ();
> -  val = INTERNAL_SYSCALL_CALL (tgkill, pid, t->tid, SIGSETXID);
> -
> -  /* If this failed, it must have had not started yet or else exited.  */
> -  if (!INTERNAL_SYSCALL_ERROR_P (val))
> -    {
> -      atomic_increment (&cmdp->cntr);
> -      return 1;
> -    }
> -  else
> -    return 0;
> -}
> -
> -/* Check for consistency across set*id system call results.  The abort
> -   should not happen as long as all privileges changes happen through
> -   the glibc wrappers.  ERROR must be 0 (no error) or an errno
> -   code.  */
> -void
> -attribute_hidden
> -__nptl_setxid_error (struct xid_command *cmdp, int error)
> -{
> -  do
> -    {
> -      int olderror = cmdp->error;
> -      if (olderror == error)
> -	break;
> -      if (olderror != -1)
> -	{
> -	  /* Mismatch between current and previous results.  Save the
> -	     error value to memory so that is not clobbered by the
> -	     abort function and preserved in coredumps.  */
> -	  volatile int xid_err __attribute__((unused)) = error;
> -	  abort ();
> -	}
> -    }
> -  while (atomic_compare_and_exchange_bool_acq (&cmdp->error, error, -1));
> -}
> -
> -int
> -attribute_hidden
> -__nptl_setxid (struct xid_command *cmdp)
> -{
> -  int signalled;
> -  int result;
> -  lll_lock (GL (dl_stack_cache_lock), LLL_PRIVATE);
> -
> -  __xidcmd = cmdp;
> -  cmdp->cntr = 0;
> -  cmdp->error = -1;
> -
> -  struct pthread *self = THREAD_SELF;
> -
> -  /* Iterate over the list with system-allocated threads first.  */
> -  list_t *runp;
> -  list_for_each (runp, &GL (dl_stack_used))
> -    {
> -      struct pthread *t = list_entry (runp, struct pthread, list);
> -      if (t == self)
> -	continue;
> -
> -      setxid_mark_thread (cmdp, t);
> -    }
> -
> -  /* Now the list with threads using user-allocated stacks.  */
> -  list_for_each (runp, &GL (dl_stack_user))
> -    {
> -      struct pthread *t = list_entry (runp, struct pthread, list);
> -      if (t == self)
> -	continue;
> -
> -      setxid_mark_thread (cmdp, t);
> -    }
> -
> -  /* Iterate until we don't succeed in signalling anyone.  That means
> -     we have gotten all running threads, and their children will be
> -     automatically correct once started.  */
> -  do
> -    {
> -      signalled = 0;
> -
> -      list_for_each (runp, &GL (dl_stack_used))
> -	{
> -	  struct pthread *t = list_entry (runp, struct pthread, list);
> -	  if (t == self)
> -	    continue;
> -
> -	  signalled += setxid_signal_thread (cmdp, t);
> -	}
> -
> -      list_for_each (runp, &GL (dl_stack_user))
> -	{
> -	  struct pthread *t = list_entry (runp, struct pthread, list);
> -	  if (t == self)
> -	    continue;
> -
> -	  signalled += setxid_signal_thread (cmdp, t);
> -	}
> -
> -      int cur = cmdp->cntr;
> -      while (cur != 0)
> -	{
> -	  futex_wait_simple ((unsigned int *) &cmdp->cntr, cur,
> -			     FUTEX_PRIVATE);
> -	  cur = cmdp->cntr;
> -	}
> -    }
> -  while (signalled != 0);
> -
> -  /* Clean up flags, so that no thread blocks during exit waiting
> -     for a signal which will never come.  */
> -  list_for_each (runp, &GL (dl_stack_used))
> -    {
> -      struct pthread *t = list_entry (runp, struct pthread, list);
> -      if (t == self)
> -	continue;
> -
> -      setxid_unmark_thread (cmdp, t);
> -    }
> -
> -  list_for_each (runp, &GL (dl_stack_user))
> -    {
> -      struct pthread *t = list_entry (runp, struct pthread, list);
> -      if (t == self)
> -	continue;
> -
> -      setxid_unmark_thread (cmdp, t);
> -    }
> -
> -  /* This must be last, otherwise the current thread might not have
> -     permissions to send SIGSETXID syscall to the other threads.  */
> -  result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3,
> -				 cmdp->id[0], cmdp->id[1], cmdp->id[2]);
> -  int error = 0;
> -  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
> -    {
> -      error = INTERNAL_SYSCALL_ERRNO (result);
> -      __set_errno (error);
> -      result = -1;
> -    }
> -  __nptl_setxid_error (cmdp, error);
> -
> -  lll_unlock (GL (dl_stack_cache_lock), LLL_PRIVATE);
> -  return result;
> -}
> -
>  static inline void __attribute__((always_inline))
>  init_one_static_tls (struct pthread *curp, struct link_map *map)
>  {

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index 50bc19c4e3..f4a603b32d 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -53,7 +53,6 @@ static const char nptl_version[] __attribute_used__ = VERSION;
>  #ifdef SHARED
>  static const struct pthread_functions pthread_functions =
>    {
> -    .ptr__nptl_setxid = __nptl_setxid,
>    };
>  # define ptr_pthread_functions &pthread_functions
>  #else
> @@ -107,52 +106,6 @@ sigcancel_handler (int sig, siginfo_t *si, void *ctx)
>  }
>  
>  
> -struct xid_command *__xidcmd attribute_hidden;
> -
> -/* We use the SIGSETXID signal in the setuid, setgid, etc. implementations to
> -   tell each thread to call the respective setxid syscall on itself.  This is
> -   the handler.  */
> -static void
> -sighandler_setxid (int sig, siginfo_t *si, void *ctx)
> -{
> -  int result;
> -
> -  /* Safety check.  It would be possible to call this function for
> -     other signals and send a signal from another process.  This is not
> -     correct and might even be a security problem.  Try to catch as
> -     many incorrect invocations as possible.  */
> -  if (sig != SIGSETXID
> -      || si->si_pid != __getpid ()
> -      || si->si_code != SI_TKILL)
> -    return;
> -
> -  result = INTERNAL_SYSCALL_NCS (__xidcmd->syscall_no, 3, __xidcmd->id[0],
> -				 __xidcmd->id[1], __xidcmd->id[2]);
> -  int error = 0;
> -  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
> -    error = INTERNAL_SYSCALL_ERRNO (result);
> -  __nptl_setxid_error (__xidcmd, error);
> -
> -  /* Reset the SETXID flag.  */
> -  struct pthread *self = THREAD_SELF;
> -  int flags, newval;
> -  do
> -    {
> -      flags = THREAD_GETMEM (self, cancelhandling);
> -      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> -					  flags & ~SETXID_BITMASK, flags);
> -    }
> -  while (flags != newval);
> -
> -  /* And release the futex.  */
> -  self->setxid_futex = 1;
> -  futex_wake (&self->setxid_futex, 1, FUTEX_PRIVATE);
> -
> -  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
> -    futex_wake ((unsigned int *) &__xidcmd->cntr, 1, FUTEX_PRIVATE);
> -}
> -
> -
>  /* When using __thread for this, we do it in libc so as not
>     to give libpthread its own TLS segment just for this.  */
>  extern void **__libc_dl_error_tsd (void) __attribute__ ((const));

Ok,.

> @@ -184,7 +137,7 @@ __pthread_initialize_minimal_internal (void)
>    (void) __libc_sigaction (SIGCANCEL, &sa, NULL);
>  
>    /* Install the handle to change the threads' uid/gid.  */
> -  sa.sa_sigaction = sighandler_setxid;
> +  sa.sa_sigaction = __nptl_setxid_sighandler;
>    sa.sa_flags = SA_SIGINFO | SA_RESTART;
>    (void) __libc_sigaction (SIGSETXID, &sa, NULL);
>  
> diff --git a/nptl/nptl_setxid.c b/nptl/nptl_setxid.c
> new file mode 100644
> index 0000000000..607c8f426e
> --- /dev/null
> +++ b/nptl/nptl_setxid.c
> @@ -0,0 +1,279 @@

Missing one line description.

> +/* 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.

Remove the 'Contributed by' Line.

> +
> +   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 <futex-internal.h>
> +#include <ldsodefs.h>
> +#include <list.h>
> +#include <lowlevellock.h>
> +#include <pthreadP.h>
> +#include <unistd.h>
> +
> +static struct xid_command *__xidcmd;

No need double underscore for static variables.

> +
> +/* We use the SIGSETXID signal in the setuid, setgid, etc. implementations to
> +   tell each thread to call the respective setxid syscall on itself.  This is
> +   the handler.  */
> +void
> +__nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx)
> +{
> +  int result;
> +
> +  /* Safety check.  It would be possible to call this function for
> +     other signals and send a signal from another process.  This is not
> +     correct and might even be a security problem.  Try to catch as
> +     many incorrect invocations as possible.  */
> +  if (sig != SIGSETXID
> +      || si->si_pid != __getpid ()
> +      || si->si_code != SI_TKILL)
> +    return;
> +
> +  result = INTERNAL_SYSCALL_NCS (__xidcmd->syscall_no, 3, __xidcmd->id[0],
> +				 __xidcmd->id[1], __xidcmd->id[2]);
> +  int error = 0;
> +  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
> +    error = INTERNAL_SYSCALL_ERRNO (result);
> +  __nptl_setxid_error (__xidcmd, error);
> +
> +  /* Reset the SETXID flag.  */
> +  struct pthread *self = THREAD_SELF;
> +  int flags, newval;
> +  do
> +    {
> +      flags = THREAD_GETMEM (self, cancelhandling);
> +      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
> +					  flags & ~SETXID_BITMASK, flags);
> +    }
> +  while (flags != newval);
> +
> +  /* And release the futex.  */
> +  self->setxid_futex = 1;
> +  futex_wake (&self->setxid_futex, 1, FUTEX_PRIVATE);
> +
> +  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
> +    futex_wake ((unsigned int *) &__xidcmd->cntr, 1, FUTEX_PRIVATE);
> +}
> +libc_hidden_def (__nptl_setxid_sighandler)

Ok.

> +
> +static void
> +setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
> +{
> +  int ch;
> +
> +  /* Wait until this thread is cloned.  */
> +  if (t->setxid_futex == -1
> +      && ! atomic_compare_and_exchange_bool_acq (&t->setxid_futex, -2, -1))
> +    do
> +      futex_wait_simple (&t->setxid_futex, -2, FUTEX_PRIVATE);
> +    while (t->setxid_futex == -2);
> +
> +  /* Don't let the thread exit before the setxid handler runs.  */
> +  t->setxid_futex = 0;
> +
> +  do
> +    {
> +      ch = t->cancelhandling;
> +
> +      /* If the thread is exiting right now, ignore it.  */
> +      if ((ch & EXITING_BITMASK) != 0)
> +        {
> +          /* Release the futex if there is no other setxid in
> +             progress.  */
> +          if ((ch & SETXID_BITMASK) == 0)
> +            {
> +              t->setxid_futex = 1;
> +              futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
> +            }
> +          return;
> +        }
> +    }
> +  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
> +                                               ch | SETXID_BITMASK, ch));
> +}
> +
> +
> +static void
> +setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
> +{
> +  int ch;
> +
> +  do
> +    {
> +      ch = t->cancelhandling;
> +      if ((ch & SETXID_BITMASK) == 0)
> +        return;
> +    }
> +  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
> +                                               ch & ~SETXID_BITMASK, ch));
> +
> +  /* Release the futex just in case.  */
> +  t->setxid_futex = 1;
> +  futex_wake (&t->setxid_futex, 1, FUTEX_PRIVATE);
> +}
> +
> +
> +static int
> +setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
> +{
> +  if ((t->cancelhandling & SETXID_BITMASK) == 0)
> +    return 0;
> +
> +  int val;
> +  pid_t pid = __getpid ();
> +  val = INTERNAL_SYSCALL_CALL (tgkill, pid, t->tid, SIGSETXID);
> +
> +  /* If this failed, it must have had not started yet or else exited.  */
> +  if (!INTERNAL_SYSCALL_ERROR_P (val))
> +    {
> +      atomic_increment (&cmdp->cntr);
> +      return 1;
> +    }
> +  else
> +    return 0;
> +}
> +
> +/* Check for consistency across set*id system call results.  The abort
> +   should not happen as long as all privileges changes happen through
> +   the glibc wrappers.  ERROR must be 0 (no error) or an errno
> +   code.  */
> +void
> +attribute_hidden
> +__nptl_setxid_error (struct xid_command *cmdp, int error)
> +{
> +  do
> +    {
> +      int olderror = cmdp->error;
> +      if (olderror == error)
> +        break;
> +      if (olderror != -1)
> +        {
> +          /* Mismatch between current and previous results.  Save the
> +             error value to memory so that is not clobbered by the
> +             abort function and preserved in coredumps.  */
> +          volatile int xid_err __attribute__((unused)) = error;
> +          abort ();
> +        }
> +    }
> +  while (atomic_compare_and_exchange_bool_acq (&cmdp->error, error, -1));
> +}
> +
> +int
> +attribute_hidden
> +__nptl_setxid (struct xid_command *cmdp)
> +{
> +  int signalled;
> +  int result;
> +  lll_lock (GL (dl_stack_cache_lock), LLL_PRIVATE);
> +
> +  __xidcmd = cmdp;
> +  cmdp->cntr = 0;
> +  cmdp->error = -1;
> +
> +  struct pthread *self = THREAD_SELF;
> +
> +  /* Iterate over the list with system-allocated threads first.  */
> +  list_t *runp;
> +  list_for_each (runp, &GL (dl_stack_used))
> +    {
> +      struct pthread *t = list_entry (runp, struct pthread, list);
> +      if (t == self)
> +        continue;
> +
> +      setxid_mark_thread (cmdp, t);
> +    }
> +
> +  /* Now the list with threads using user-allocated stacks.  */
> +  list_for_each (runp, &GL (dl_stack_user))
> +    {
> +      struct pthread *t = list_entry (runp, struct pthread, list);
> +      if (t == self)
> +        continue;
> +
> +      setxid_mark_thread (cmdp, t);
> +    }
> +
> +  /* Iterate until we don't succeed in signalling anyone.  That means
> +     we have gotten all running threads, and their children will be
> +     automatically correct once started.  */
> +  do
> +    {
> +      signalled = 0;
> +
> +      list_for_each (runp, &GL (dl_stack_used))
> +        {
> +          struct pthread *t = list_entry (runp, struct pthread, list);
> +          if (t == self)
> +            continue;
> +
> +          signalled += setxid_signal_thread (cmdp, t);
> +        }
> +
> +      list_for_each (runp, &GL (dl_stack_user))
> +        {
> +          struct pthread *t = list_entry (runp, struct pthread, list);
> +          if (t == self)
> +            continue;
> +
> +          signalled += setxid_signal_thread (cmdp, t);
> +        }
> +
> +      int cur = cmdp->cntr;
> +      while (cur != 0)
> +        {
> +          futex_wait_simple ((unsigned int *) &cmdp->cntr, cur,
> +                             FUTEX_PRIVATE);
> +          cur = cmdp->cntr;
> +        }
> +    }
> +  while (signalled != 0);
> +
> +  /* Clean up flags, so that no thread blocks during exit waiting
> +     for a signal which will never come.  */
> +  list_for_each (runp, &GL (dl_stack_used))
> +    {
> +      struct pthread *t = list_entry (runp, struct pthread, list);
> +      if (t == self)
> +        continue;
> +
> +      setxid_unmark_thread (cmdp, t);
> +    }
> +
> +  list_for_each (runp, &GL (dl_stack_user))
> +    {
> +      struct pthread *t = list_entry (runp, struct pthread, list);
> +      if (t == self)
> +        continue;
> +
> +      setxid_unmark_thread (cmdp, t);
> +    }
> +
> +  /* This must be last, otherwise the current thread might not have
> +     permissions to send SIGSETXID syscall to the other threads.  */
> +  result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3,
> +                                 cmdp->id[0], cmdp->id[1], cmdp->id[2]);
> +  int error = 0;
> +  if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result)))
> +    {
> +      error = INTERNAL_SYSCALL_ERRNO (result);
> +      __set_errno (error);
> +      result = -1;
> +    }
> +  __nptl_setxid_error (cmdp, error);
> +
> +  lll_unlock (GL (dl_stack_cache_lock), LLL_PRIVATE);
> +  return result;
> +}

Ok, this is basically moving the code from nptl/allocatestack.c

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 786c566e81..9852906b3a 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -695,6 +695,8 @@ extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer
>  extern void __nptl_deallocate_tsd (void);
>  libc_hidden_proto (__nptl_deallocate_tsd)
>  
> +void __nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx);
> +libc_hidden_proto (__nptl_setxid_sighandler)
>  extern void __nptl_setxid_error (struct xid_command *cmdp, int error)
>    attribute_hidden;

Ok.

>  extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> index 56c746a01c..d76b2cdecf 100644
> --- a/sysdeps/nptl/pthread-functions.h
> +++ b/sysdeps/nptl/pthread-functions.h
> @@ -30,7 +30,6 @@ struct xid_command;
>     the thread functions.  */
>  struct pthread_functions
>  {
> -  int (*ptr__nptl_setxid) (struct xid_command *);
>  };
>  
>  /* Variable in libc.so.  */

Ok.

> diff --git a/sysdeps/nptl/setxid.h b/sysdeps/nptl/setxid.h
> index 57b665cb5b..8b49d11550 100644
> --- a/sysdeps/nptl/setxid.h
> +++ b/sysdeps/nptl/setxid.h
> @@ -16,6 +16,7 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <nptl/pthreadP.h>
> +#include <sys/single_threaded.h>
>  #include <sysdep.h>
>  
>  #define __SETXID_1(cmd, arg1) \
> @@ -25,30 +26,10 @@
>  #define __SETXID_3(cmd, arg1, arg2, arg3) \
>    __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3
>  
> -#ifdef SINGLE_THREAD
> -# define INLINE_SETXID_SYSCALL(name, nr, args...) \
> -  INLINE_SYSCALL (name, nr, args)
> -#elif defined SHARED
> -# define INLINE_SETXID_SYSCALL(name, nr, args...) \
> +#define INLINE_SETXID_SYSCALL(name, nr, args...) \
>    ({									\
>      int __result;							\
> -    if (__builtin_expect (__libc_pthread_functions_init, 0))		\
> -      {									\
> -	struct xid_command __cmd;					\
> -	__cmd.syscall_no = __NR_##name;					\
> -	__SETXID_##nr (__cmd, args);					\
> -	__result = PTHFCT_CALL (ptr__nptl_setxid, (&__cmd));		\
> -	}								\
> -    else								\
> -      __result = INLINE_SYSCALL (name, nr, args);			\
> -    __result;								\
> -   })
> -#else
> -# define INLINE_SETXID_SYSCALL(name, nr, args...) \
> -  ({									\
> -    extern __typeof (__nptl_setxid) __nptl_setxid __attribute__((weak));\
> -    int __result;							\
> -    if (__glibc_unlikely (__nptl_setxid	!= NULL))			      \
> +    if (!__libc_single_threaded)					\
>        {									\
>  	struct xid_command __cmd;					\
>  	__cmd.syscall_no = __NR_##name;					\
> @@ -59,4 +40,3 @@
>        __result = INLINE_SYSCALL (name, nr, args);			\
>      __result;								\
>     })
> -#endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/internal-signals.h b/sysdeps/unix/sysv/linux/internal-signals.h
> index 1535f5e530..1357b8f5f8 100644
> --- a/sysdeps/unix/sysv/linux/internal-signals.h
> +++ b/sysdeps/unix/sysv/linux/internal-signals.h
> @@ -105,8 +105,4 @@ __libc_signal_restore_set (const sigset_t *set)
>    INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, set, NULL,
>  			 __NSIG_BYTES);
>  }
> -
> -/* Used to communicate with signal handler.  */
> -extern struct xid_command *__xidcmd attribute_hidden;
> -
>  #endif
> 

Ok.

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

* Re: [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface
  2021-03-16 17:31 ` [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface Florian Weimer
@ 2021-03-26 18:19   ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-26 18:19 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha



On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
> All previously forwarded functions are now implemented in libc.

LGTM, thanks.

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

> ---
>  nptl/Makefile                    |  1 -
>  nptl/forward.c                   | 31 --------------------
>  nptl/libc_pthread_init.c         | 29 +-----------------
>  nptl/nptl-init.c                 | 11 +------
>  nptl/pthreadP.h                  |  7 ++---
>  sysdeps/nptl/libc-lockP.h        | 28 ++++--------------
>  sysdeps/nptl/pthread-functions.h | 50 --------------------------------
>  7 files changed, 10 insertions(+), 147 deletions(-)
>  delete mode 100644 nptl/forward.c
>  delete mode 100644 sysdeps/nptl/pthread-functions.h
> 
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 1b5038485d..7423967cd2 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -38,7 +38,6 @@ routines = \
>    elision-timed \
>    elision-trylock \
>    elision-unlock \
> -  forward \
>    futex-internal \
>    libc-cancellation \
>    libc-cleanup \

Ok.

> diff --git a/nptl/forward.c b/nptl/forward.c
> deleted file mode 100644
> index c819ab6f2a..0000000000
> --- a/nptl/forward.c
> +++ /dev/null
> @@ -1,31 +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 <dlfcn.h>
> -#include <pthreadP.h>
> -#include <signal.h>
> -#include <stdlib.h>
> -
> -#include <shlib-compat.h>
> -#include <atomic.h>
> -#include <safe-fatal.h>
> -
> -
> -/* Pointers to the libc functions.  */
> -struct pthread_functions __libc_pthread_functions attribute_hidden;
> -int __libc_pthread_functions_init attribute_hidden;

Ok.

> diff --git a/nptl/libc_pthread_init.c b/nptl/libc_pthread_init.c
> index 85fceff930..c951332666 100644
> --- a/nptl/libc_pthread_init.c
> +++ b/nptl/libc_pthread_init.c
> @@ -34,38 +34,11 @@ extern int __libc_multiple_threads attribute_hidden;
>  
>  int *
>  #endif
> -__libc_pthread_init (void (*reclaim) (void),
> -		     const struct pthread_functions *functions)
> +__libc_pthread_init (void (*reclaim) (void))
>  {
>    /* Called by a child after fork.  */
>    __register_atfork (NULL, NULL, reclaim, NULL);
>  
> -#ifdef SHARED
> -  /* Copy the function pointers into an array in libc.  This enables
> -     access with just one memory reference but moreso, it prevents
> -     hijacking the function pointers with just one pointer change.  We
> -     "encrypt" the function pointers since we cannot write-protect the
> -     array easily enough.  */
> -  union ptrhack
> -  {
> -    struct pthread_functions pf;
> -# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *))
> -    void *parr[NPTRS];
> -  } __attribute__ ((may_alias)) const *src;
> -  union ptrhack *dest;
> -
> -  src = (const void *) functions;
> -  dest = (void *) &__libc_pthread_functions;
> -
> -  for (size_t cnt = 0; cnt < NPTRS; ++cnt)
> -    {
> -      void *p = src->parr[cnt];
> -      PTR_MANGLE (p);
> -      dest->parr[cnt] = p;
> -    }
> -  __libc_pthread_functions_init = 1;
> -#endif
> -
>  #ifndef TLS_MULTIPLE_THREADS_IN_TCB
>    return &__libc_multiple_threads;
>  #endif

Ok.

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
> index f4a603b32d..061e3ff8d7 100644
> --- a/nptl/nptl-init.c
> +++ b/nptl/nptl-init.c
> @@ -50,15 +50,6 @@ size_t __static_tls_align_m1;
>  /* Version of the library, used in libthread_db to detect mismatches.  */
>  static const char nptl_version[] __attribute_used__ = VERSION;
>  
> -#ifdef SHARED
> -static const struct pthread_functions pthread_functions =
> -  {
> -  };
> -# define ptr_pthread_functions &pthread_functions
> -#else
> -# define ptr_pthread_functions NULL
> -#endif
> -
>  /* For asynchronous cancellation we use a signal.  This is the handler.  */
>  static void
>  sigcancel_handler (int sig, siginfo_t *si, void *ctx)

Ok.

> @@ -207,7 +198,7 @@ __pthread_initialize_minimal_internal (void)
>  #ifndef TLS_MULTIPLE_THREADS_IN_TCB
>    __libc_multiple_threads_ptr =
>  #endif
> -    __libc_pthread_init (__reclaim_stacks, ptr_pthread_functions);
> +    __libc_pthread_init (__reclaim_stacks);
>  }
>  strong_alias (__pthread_initialize_minimal_internal,
>  	      __pthread_initialize_minimal)

Ok.

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
> index 9852906b3a..a1d34d5ff1 100644
> --- a/nptl/pthreadP.h
> +++ b/nptl/pthreadP.h
> @@ -30,7 +30,6 @@
>  #include <lowlevellock.h>
>  #include <stackinfo.h>
>  #include <internaltypes.h>
> -#include <pthread-functions.h>
>  #include <atomic.h>
>  #include <kernel-features.h>
>  #include <errno.h>
> @@ -364,11 +363,9 @@ 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 (void (*reclaim) (void),
> -				 const struct pthread_functions *functions);
> +extern void __libc_pthread_init (void (*reclaim) (void));
>  #else
> -extern int *__libc_pthread_init (void (*reclaim) (void),
> -				 const struct pthread_functions *functions);
> +extern int *__libc_pthread_init (void (*reclaim) (void));
>  
>  /* Variable set to a nonzero value either if more than one thread runs or ran,
>     or if a single-threaded process is trying to cancel itself.  See

Maybe move the __libc_pthread_init prototype out of TLS_MULTIPLE_THREADS_IN_TCB
since it is duplicated.

> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index 0dd2ea1147..e573689799 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -32,7 +32,6 @@
>     ld.so might be used on old kernels with a different libc.so.  */
>  #include <lowlevellock.h>
>  #include <tls.h>
> -#include <pthread-functions.h>
>  
>  #if IS_IN (libpthread)
>  /* This gets us the declarations of the __pthread_* internal names,
> @@ -100,27 +99,12 @@ _Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
>    (FUNC != NULL ? FUNC ARGS : ELSE)
>  #endif
>  
> -/* Call thread functions through the function pointer table.  */
> -#if defined SHARED && IS_IN (libc)
> -# define PTFAVAIL(NAME) __libc_pthread_functions_init
> -# define __libc_ptf_call(FUNC, ARGS, ELSE) \
> -  (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
> -# define __libc_ptf_call_always(FUNC, ARGS) \
> -  PTHFCT_CALL (ptr_##FUNC, ARGS)
> -#elif IS_IN (libpthread)
> -# define PTFAVAIL(NAME) 1
> -# define __libc_ptf_call(FUNC, ARGS, ELSE) \
> -  FUNC ARGS
> -# define __libc_ptf_call_always(FUNC, ARGS) \
> -  FUNC ARGS
> -#else
> -# define PTFAVAIL(NAME) (NAME != NULL)
> -# define __libc_ptf_call(FUNC, ARGS, ELSE) \
> -  __libc_maybe_call (FUNC, ARGS, ELSE)
> -# define __libc_ptf_call_always(FUNC, ARGS) \
> -  FUNC ARGS
> -#endif
> -
> +/* All previously forwarded functions are now called directly (either
> +   via local call in libc, or through a __export), but __libc_ptf_call
> +   is still used in generic code shared with Hurd.  */
> +#define PTFAVAIL(NAME) 1
> +#define __libc_ptf_call(FUNC, ARGS, ELSE) FUNC ARGS
> +#define __libc_ptf_call_always(FUNC, ARGS) FUNC ARGS
>  
>  /* Initialize the named lock variable, leaving it in a consistent, unlocked
>     state.  */

Ok.

> diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h
> deleted file mode 100644
> index d76b2cdecf..0000000000
> --- a/sysdeps/nptl/pthread-functions.h
> +++ /dev/null
> @@ -1,50 +0,0 @@
> -/* Copyright (C) 2003-2021 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
> -
> -   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/>.  */
> -
> -#ifndef _PTHREAD_FUNCTIONS_H
> -#define _PTHREAD_FUNCTIONS_H	1
> -
> -#include <pthread.h>
> -#include <setjmp.h>
> -#include <internaltypes.h>
> -#include <sysdep.h>
> -
> -struct xid_command;
> -
> -/* Data type shared with libc.  The libc uses it to pass on calls to
> -   the thread functions.  */
> -struct pthread_functions
> -{
> -};
> -
> -/* Variable in libc.so.  */
> -extern struct pthread_functions __libc_pthread_functions attribute_hidden;
> -extern int __libc_pthread_functions_init attribute_hidden;
> -
> -#ifdef PTR_DEMANGLE
> -# define PTHFCT_CALL(fct, params) \
> -  ({ __typeof (__libc_pthread_functions.fct) __p;			      \
> -     __p = __libc_pthread_functions.fct;				      \
> -     PTR_DEMANGLE (__p);						      \
> -     __p params; })
> -#else
> -# define PTHFCT_CALL(fct, params) \
> -  __libc_pthread_functions.fct params
> -#endif
> -
> -#endif	/* pthread-functions.h */
> 

Ok.

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

* Re: [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone
  2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
                   ` (37 preceding siblings ...)
  2021-03-18 22:06 ` [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
@ 2021-03-26 18:25 ` Adhemerval Zanella
  2021-03-31 10:18   ` Florian Weimer
  38 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-03-26 18:25 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



On 16/03/2021 14:27, Florian Weimer via Libc-alpha wrote:
> This series gets us to the point where no libc → libpthread function
> forwarding exists anymore.  It has been tested on i686-linux-gnu and
> x86_64-linux-gnu, and built by build-many-glibcs.py.  (A full bootstrap
> cycle is still under way.)
> 
> I incorporated Adhemerval feedback and his suggestion for keeping a
> static assert.
> 
> The TSD changes sort-of depend on the dlerror cleanup I originally
> posted separately, so I'm including them here as well.
> 
> The _Unwind_GetCFA cleanup is gone because I've pushed that separately.
> 
> The additional patches are basically more of the same, except that I had
> to move some of the libpthread early initialization into ld.so, so that
> previously impossible scenarios (like calling pthread_key_create without
> linking in libpthread) become supported.  This series does not add tests
> to cover those scenarios.  Similarly, I have to initialize more libc
> configuration things from __libc_early_init because those variables live
> in libc, not ld.so.
> 
> I had to remove the x86 low-level lock optimization, and redid it at the
> mutex level.  This way, it now works even if libpthread is linked in.
> This was a change I wanted to make eventually anyway, but it turns out
> the libpthread move invalidated the optimization (similar to the generic
> optimization we had for private mutexes), so I had to do something about
> it.
> 
> I moved the mutex and conditional variable functions in two blocks
> because of the many interdependencies, and the potential breakage from
> real/stub implementation mismatches.
> 
> Obviously, a lot of work still remains to do, but I believe at this
> stage, we are already in a much better shape when it comes to late
> loading of libpthread because we no longer use any stub implementations
> that produce state the real implementations cannot consume.

Hi Florian, 

I think I reviewed all the patches on the set and it looks good in general.
Most changes are related to to your own patch that add the multiple
reference support to compat_symbol, the remaining as mostly some question
regarding the code and small nits.

From my side there is no need to resend the patches that need rebase, so
I think the set should be good to push upstream once you adjust against
master.


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

* Re: [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772]
  2021-03-19 19:56   ` Adhemerval Zanella
@ 2021-03-27 16:57     ` Florian Weimer
  0 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-27 16:57 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> diff --git a/elf/dl-error-skeleton.c b/elf/dl-error-skeleton.c
>> index 2fd62777cf..b699936c6e 100644
>> --- a/elf/dl-error-skeleton.c
>> +++ b/elf/dl-error-skeleton.c
>> @@ -248,4 +248,16 @@ _dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
>>    catch_hook = old_catch;
>>    receiver = old_receiver;
>>  }
>> +
>> +/* Forwarder used for initializing GLRO (_dl_catch_error).  */
>> +int
>> +_rtld_catch_error (const char **objname, const char **errstring,
>> +		   bool *mallocedp, void (*operate) (void *),
>> +		   void *args)
>> +{
>> +  /* The reference to _dl_catch_error will eventually be relocated to
>> +     point to the implementation in libc.so.  */
>> +  return _dl_catch_error (objname, errstring, mallocedp, operate, args);
>> +}
>> +
>>  #endif /* DL_ERROR_BOOTSTRAP */
>
> Ok, but why change the usual prepend string to 'rtld'?

_dl_catch_error is already taken.

Thanks,
Florian


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

* Re: [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp
  2021-03-24 13:56   ` Adhemerval Zanella
@ 2021-03-27 17:19     ` Florian Weimer
  0 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-27 17:19 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
>> index 4b486b3577..68f8ef5aa1 100644
>> --- a/nptl/pthreadP.h
>> +++ b/nptl/pthreadP.h
>> @@ -224,8 +224,10 @@ 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.  */
>> -extern int __set_robust_list_avail attribute_hidden;
>> +/* True if the set_robust_list system call works.  Initialized in
>> +   __tls_init_tp.  */
>> +extern bool __nptl_set_robust_list_avail;
>> +rtld_hidden_proto (__nptl_set_robust_list_avail)
>>   #endif
>>     /* Thread Priority Protection.  */
>
> Now that you are touching it, maybe it would be better to move the
> __ASSUME_SET_ROBUST_LIST handling only to the dl-tls_init_tp.c and
> always define __nptl_set_robust_list_avail (at least one initialization
> case)?

I would like make this in a separate change because to make it
self-checking, I also need to turn __ASSUME_SET_ROBUST_LIST into an
always-defined macro.

Thanks,
Florian


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

* Re: [PATCH v3 28/37] nptl: Move rwlock functions with forwarders into libc
  2021-03-25 19:52   ` Adhemerval Zanella
@ 2021-03-27 21:41     ` Florian Weimer
  0 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-27 21:41 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 16/03/2021 14:31, Florian Weimer via Libc-alpha wrote:
>> The forwarders were only used internally, so new symbol versions
>> are needed.  All symbols are moved at once because the forwarders
>> are no-ops if libpthread is not loaded, leading to inconsistencies
>> in case of a partial migration.
>> 
>> The symbols __pthread_rwlock_rdlock, __pthread_rwlock_unlock,
>> __pthread_rwlock_wrlock, pthread_rwlock_rdlock,
>> pthread_rwlock_unlock, pthread_rwlock_wrlock have been moved using
>> scripts/move-symbol-to-libc.py.
>
> LGTM, thanks (you probably want to rebase to use the compat_symbol
> multiple reference support).

I don't think we need the __pthread_rwlock_* exports anymore, so I have
turned them into compat symbols in a revision of the patch.  (There are
no C11 rwlock functions.)  This avoids the need for the GLIBC_2.34
symbol versions.

Thanks,
Florian


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

* Re: [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone
  2021-03-26 18:25 ` Adhemerval Zanella
@ 2021-03-31 10:18   ` Florian Weimer
  0 siblings, 0 replies; 99+ messages in thread
From: Florian Weimer @ 2021-03-31 10:18 UTC (permalink / raw)
  To: Adhemerval Zanella via Libc-alpha

* Adhemerval Zanella via Libc-alpha:

> I think I reviewed all the patches on the set and it looks good in general.
> Most changes are related to to your own patch that add the multiple
> reference support to compat_symbol, the remaining as mostly some question
> regarding the code and small nits.
>
> From my side there is no need to resend the patches that need rebase, so
> I think the set should be good to push upstream once you adjust against
> master.

I'm sort of on vacation, which is why I haven't made much progress.

The next version will have quite a few changes, mostly related to
OTHER_SHLIB_COMPAT.  I also need to fix a localplt issue around
longjmp because a previously-hidden symbol is no longer hidden.  The
changes are all quite straightforward, I think.

I will come back to this next week.  I hope it does not block
anything.

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

* Re: [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-03-26 18:15   ` Adhemerval Zanella
@ 2021-04-06 18:41     ` Florian Weimer
  2021-04-06 18:54       ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-04-06 18:41 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

>> +/* 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.
>
> Remove the 'Contributed by' Line.

I prefer not to.  It's a copy of an existing file.  And in Germany,
authors have an inalienable right to be named.

>> +static struct xid_command *__xidcmd;
>
> No need double underscore for static variables.

Okay, I've also made some of the functions static.

Thanks,
Florian


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

* Re: [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-04-06 18:41     ` Florian Weimer
@ 2021-04-06 18:54       ` Adhemerval Zanella
  2021-04-06 19:23         ` Florian Weimer
  0 siblings, 1 reply; 99+ messages in thread
From: Adhemerval Zanella @ 2021-04-06 18:54 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 06/04/2021 15:41, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> +/* 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.
>>
>> Remove the 'Contributed by' Line.
> 
> I prefer not to.  It's a copy of an existing file.  And in Germany,
> authors have an inalienable right to be named.

I am far from Copyright expert here, but my understanding is since
we do not add such 'Contributed by' anymore and Copyright assignment
is what matter, it should be fine to remove even this is a copy.

> 
>>> +static struct xid_command *__xidcmd;
>>
>> No need double underscore for static variables.
> 
> Okay, I've also made some of the functions static.
> 
> Thanks,
> Florian
> 

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

* Re: [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-04-06 18:54       ` Adhemerval Zanella
@ 2021-04-06 19:23         ` Florian Weimer
  2021-04-06 19:40           ` Adhemerval Zanella
  0 siblings, 1 reply; 99+ messages in thread
From: Florian Weimer @ 2021-04-06 19:23 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

* Adhemerval Zanella:

> On 06/04/2021 15:41, Florian Weimer wrote:
>> * Adhemerval Zanella:
>> 
>>>> +/* 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.
>>>
>>> Remove the 'Contributed by' Line.
>> 
>> I prefer not to.  It's a copy of an existing file.  And in Germany,
>> authors have an inalienable right to be named.
>
> I am far from Copyright expert here, but my understanding is since
> we do not add such 'Contributed by' anymore and Copyright assignment
> is what matter, it should be fine to remove even this is a copy.

No, authorship and copyright ownership are different legal concepts.
You can sign away your copyright (or the equivalent, exploitation
rights), but you cannot sign away your authorship rights (or moral
rights, as they are sometimes called).

If someone else wants to do a bulk removal of “Contributed by”s, I won't
object to it (beyond what I have written above).  But I won't do it
myself.

Thanks,
Florian


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

* Re: [PATCH v3 36/37] nptl: Move setxid broadcast implementation into libc
  2021-04-06 19:23         ` Florian Weimer
@ 2021-04-06 19:40           ` Adhemerval Zanella
  0 siblings, 0 replies; 99+ messages in thread
From: Adhemerval Zanella @ 2021-04-06 19:40 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha



On 06/04/2021 16:23, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> On 06/04/2021 15:41, Florian Weimer wrote:
>>> * Adhemerval Zanella:
>>>
>>>>> +/* 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.
>>>>
>>>> Remove the 'Contributed by' Line.
>>>
>>> I prefer not to.  It's a copy of an existing file.  And in Germany,
>>> authors have an inalienable right to be named.
>>
>> I am far from Copyright expert here, but my understanding is since
>> we do not add such 'Contributed by' anymore and Copyright assignment
>> is what matter, it should be fine to remove even this is a copy.
> 
> No, authorship and copyright ownership are different legal concepts.
> You can sign away your copyright (or the equivalent, exploitation
> rights), but you cannot sign away your authorship rights (or moral
> rights, as they are sometimes called).
> 
> If someone else wants to do a bulk removal of “Contributed by”s, I won't
> object to it (beyond what I have written above).  But I won't do it
> myself.

Fair enough.

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

end of thread, other threads:[~2021-04-06 19:40 UTC | newest]

Thread overview: 99+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-16 17:27 [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
2021-03-16 17:27 ` [PATCH v3 01/37] nptl: Move pthread_mutex_consistent into libc Florian Weimer
2021-03-17 11:36   ` Adhemerval Zanella
2021-03-16 17:27 ` [PATCH v3 02/37] nptl: Move __pthread_cleanup_routine " Florian Weimer
2021-03-16 17:27 ` [PATCH v3 03/37] nptl: Move legacy unwinding implementation " Florian Weimer
2021-03-16 17:27 ` [PATCH v3 04/37] nptl: Move legacy cancelation handling into libc as compat symbols Florian Weimer
2021-03-16 17:27 ` [PATCH v3 05/37] nptl: Remove longjmp, siglongjmp from libpthread Florian Weimer
2021-03-17 11:38   ` Adhemerval Zanella
2021-03-16 17:28 ` [PATCH v3 06/37] x86: Restore compile-time check for shadow stack pointer in longjmp Florian Weimer
2021-03-16 17:28 ` [PATCH v3 07/37] nptl: Move __pthread_cleanup_upto into libc Florian Weimer
2021-03-16 17:28 ` [PATCH v3 08/37] nptl: Move pthread_once and __pthread_once " Florian Weimer
2021-03-17 13:30   ` Adhemerval Zanella
2021-03-17 13:37     ` Adhemerval Zanella
2021-03-17 14:45       ` Florian Weimer
2021-03-17 16:39         ` Adhemerval Zanella
2021-03-17 16:56           ` Florian Weimer
2021-03-17 17:22             ` Adhemerval Zanella
2021-03-17 17:43               ` Florian Weimer
2021-03-17 19:09                 ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 09/37] nptl: Move __pthread_unwind_next " Florian Weimer
2021-03-17 19:42   ` Adhemerval Zanella
2021-03-17 19:54     ` Florian Weimer
2021-03-17 20:16       ` Adhemerval Zanella
2021-03-17 20:33         ` Florian Weimer
2021-03-17 20:44           ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 10/37] csu: Move calling main out of __libc_start_main_impl Florian Weimer
2021-03-17 20:45   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 11/37] nptl: Move internal __nptl_nthreads variable into libc Florian Weimer
2021-03-18 12:42   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 12/37] nptl_db: Introduce DB_MAIN_ARRAY_VARIABLE Florian Weimer
2021-03-18 12:43   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 13/37] nptl: Move __pthread_keys global variable into libc Florian Weimer
2021-03-18 12:44   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 14/37] nptl: Move __nptl_deallocate_tsd " Florian Weimer
2021-03-18 12:46   ` Adhemerval Zanella
2021-03-18 17:16     ` Florian Weimer
2021-03-18 17:54       ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 15/37] nptl: Move pthread_exit " Florian Weimer
2021-03-18 12:49   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 16/37] nptl: Move pthread_setcancelstate " Florian Weimer
2021-03-18 12:52   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 17/37] nptl: Move pthread_setcanceltype " Florian Weimer
2021-03-18 12:53   ` Adhemerval Zanella
2021-03-16 17:29 ` [PATCH v3 18/37] nptl: Invoke the set_robust_list system call directly in fork Florian Weimer
2021-03-18 12:54   ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 19/37] dlfcn: Failures after dlmopen should not terminate process [BZ #24772] Florian Weimer
2021-03-19 19:56   ` Adhemerval Zanella
2021-03-27 16:57     ` Florian Weimer
2021-03-16 17:30 ` [PATCH v3 20/37] dlfcn: dlerror needs to call free from the base namespace [BZ #24773] Florian Weimer
2021-03-23 14:47   ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 21/37] Remove pthread_key_create-related internals from libc-lock.h Florian Weimer
2021-03-23 16:39   ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 22/37] elf: Introduce __tls_init_tp for second-phase TCB initialization Florian Weimer
2021-03-23 18:25   ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 23/37] nptl: Move part of TCB initialization from libpthread to __tls_init_tp Florian Weimer
2021-03-24 13:56   ` Adhemerval Zanella
2021-03-27 17:19     ` Florian Weimer
2021-03-16 17:30 ` [PATCH v3 24/37] nptl: Move pthread_key_create, __pthread_key_create into libc Florian Weimer
2021-03-24 14:09   ` Adhemerval Zanella
2021-03-24 14:32     ` Florian Weimer
2021-03-24 14:42       ` Adhemerval Zanella
2021-03-24 15:08         ` Florian Weimer
2021-03-24 15:46           ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 25/37] nptl: Move pthread_getspecific, __pthread_getspecific " Florian Weimer
2021-03-24 14:12   ` Adhemerval Zanella
2021-03-24 14:38     ` Florian Weimer
2021-03-24 14:43       ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 26/37] nptl: Move pthread_setspecific, __pthread_setspecific " Florian Weimer
2021-03-24 14:26   ` Adhemerval Zanella
2021-03-16 17:30 ` [PATCH v3 27/37] nptl: Move pthread_key_delete " Florian Weimer
2021-03-24 14:45   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 28/37] nptl: Move rwlock functions with forwarders " Florian Weimer
2021-03-25 19:52   ` Adhemerval Zanella
2021-03-27 21:41     ` Florian Weimer
2021-03-16 17:31 ` [PATCH v3 29/37] nptl: Move the internal thread priority protection symbols " Florian Weimer
2021-03-25 20:21   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 30/37] pthread: Introduce __pthread_early_init Florian Weimer
2021-03-25 20:22   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 31/37] nptl: Move internal symbol __mutex_aconf into libc Florian Weimer
2021-03-25 20:24   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 32/37] nptl: pthread_mutex_lock, pthread_mutex_unock single-threaded optimization Florian Weimer
2021-03-26 18:00   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 33/37] x86: Remove low-level lock optimization Florian Weimer
2021-03-25 20:30   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 34/37] nptl: Move core mutex functions into libc Florian Weimer
2021-03-25 20:46   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 35/37] nptl: Move core condition variable " Florian Weimer
2021-03-26 17:14   ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 36/37] nptl: Move setxid broadcast implementation " Florian Weimer
2021-03-26 18:15   ` Adhemerval Zanella
2021-04-06 18:41     ` Florian Weimer
2021-04-06 18:54       ` Adhemerval Zanella
2021-04-06 19:23         ` Florian Weimer
2021-04-06 19:40           ` Adhemerval Zanella
2021-03-16 17:31 ` [PATCH v3 37/37] nptl: Remove remnants of the libc/libpthread forwarder interface Florian Weimer
2021-03-26 18:19   ` Adhemerval Zanella
2021-03-18 22:06 ` [PATCH v3 00/37] libpthread removal: NPTL forwarders are gone Florian Weimer
2021-03-26 18:25 ` Adhemerval Zanella
2021-03-31 10:18   ` 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).