diff mbox series

[v3,08/37] nptl: Move pthread_once and __pthread_once into libc

Message ID 3ab7ccc92585d17c3171cf375605b53252d6b9a9.1615914631.git.fweimer@redhat.com
State Superseded
Delegated to: Adhemerval Zanella Netto
Headers show
Series libpthread removal: NPTL forwarders are gone | expand

Commit Message

Florian Weimer March 16, 2021, 5:28 p.m. UTC
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(-)

Comments

Adhemerval Zanella March 17, 2021, 1:30 p.m. UTC | #1
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.
Adhemerval Zanella March 17, 2021, 1:37 p.m. UTC | #2
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.
>
Florian Weimer March 17, 2021, 2:45 p.m. UTC | #3
* 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
Adhemerval Zanella March 17, 2021, 4:39 p.m. UTC | #4
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.
Florian Weimer March 17, 2021, 4:56 p.m. UTC | #5
* 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
Adhemerval Zanella March 17, 2021, 5:22 p.m. UTC | #6
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?
Florian Weimer March 17, 2021, 5:43 p.m. UTC | #7
* 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
Adhemerval Zanella March 17, 2021, 7:09 p.m. UTC | #8
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.
diff mbox series

Patch

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