(checked on {i686,x86_64}{-linux,}-gnu)

Samuel Thibault, le dim. 15 mars 2026 19:18:46 +0100, a ecrit:
> ---
>  Makeconfig                             |  8 +--
>  include/aio.h                          |  4 --
>  include/mqueue.h                       | 15 ------
>  include/time.h                         |  8 ---
>  rt/Makefile                            | 25 +++-------
>  rt/Versions                            | 63 +++++++-----------------
>  rt/aio_cancel.c                        | 19 +++----
>  rt/aio_error.c                         | 14 ++----
>  rt/aio_fsync.c                         | 14 ++----
>  rt/aio_misc.c                          | 29 ++---------
>  rt/aio_notify.c                        |  7 +--
>  rt/aio_read.c                          | 20 +++-----
>  rt/aio_read64.c                        |  9 ++--
>  rt/aio_return.c                        | 12 ++---
>  rt/aio_suspend.c                       | 36 ++++----------
>  rt/aio_write.c                         | 20 +++-----
>  rt/aio_write64.c                       |  9 ++--
>  rt/librt-compat.c                      | 26 +++++-----
>  rt/lio_listio-common.c                 | 30 +++++-------
>  rt/mq_close.c                          |  8 ++-
>  rt/mq_getattr.c                        |  8 ++-
>  rt/mq_notify.c                         |  8 ++-
>  rt/mq_open.c                           | 13 ++++-
>  rt/mq_receive.c                        | 10 +++-
>  rt/mq_send.c                           | 10 +++-
>  rt/mq_setattr.c                        | 12 +++--
>  rt/mq_timedreceive.c                   | 13 +++--
>  rt/mq_timedsend.c                      | 11 +++--
>  rt/mq_unlink.c                         |  8 ++-
>  rt/timer_create.c                      | 20 +++++---
>  rt/timer_delete.c                      | 15 ++++--
>  rt/timer_getoverr.c                    | 13 +++--
>  rt/timer_gettime.c                     | 13 +++--
>  rt/timer_settime.c                     | 19 ++++---
>  sysdeps/htl/Makefile                   |  2 +-
>  sysdeps/htl/pthreadP.h                 |  7 +++
>  sysdeps/htl/rt-libc.h                  |  1 +
>  sysdeps/htl/timer_routines.c           | 18 ++++---
>  sysdeps/mach/hurd/i386/libc.abilist    | 68 ++++++++++++++++++++++++++
>  sysdeps/mach/hurd/i386/librt.abilist   | 39 ++-------------
>  sysdeps/mach/hurd/x86_64/libc.abilist  | 66 +++++++++++++++++++++++++
>  sysdeps/mach/hurd/x86_64/librt.abilist | 34 +------------
>  sysdeps/nptl/rt-libc.h                 |  1 +
>  43 files changed, 405 insertions(+), 380 deletions(-)
>  create mode 100644 sysdeps/htl/rt-libc.h
>  create mode 100644 sysdeps/nptl/rt-libc.h
> 
> diff --git a/Makeconfig b/Makeconfig
> index 67be5ca4da..52c5c08bf1 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -1456,16 +1456,12 @@ endif
>  sysd-rules-targets := $(sort $(foreach p,$(sysd-rules-patterns),\
>                                        $(firstword $(subst :, ,$p))))
>  
> -# $(libpthread-routines-var) and $(librt-routines-var) are the make
> -# variable to which pthread routines need to be added to land in the
> +# $(libanl-routines-var) is the make
> +# variable to which libanl routines need to be added to land in the
>  # right library.
>  ifeq ($(pthread-in-libc),yes)
> -libpthread-routines-var = routines
> -librt-routines-var = routines
>  libanl-routines-var = routines
>  else
> -libpthread-routines-var = libpthread-routines
> -librt-routines-var = librt-routines
>  libanl-routines-var = libanl-routines
>  endif
>  
> diff --git a/include/aio.h b/include/aio.h
> index 5d67800aff..35f7846d98 100644
> --- a/include/aio.h
> +++ b/include/aio.h
> @@ -15,11 +15,7 @@ extern void __aio_init (const struct aioinit *__init);
>  # else
>  extern int __aio_suspend_time64 (const struct aiocb *const list[], int nent,
>                                   const struct __timespec64 *timeout);
> -#  if PTHREAD_IN_LIBC
>  libc_hidden_proto (__aio_suspend_time64)
> -#  else
> -librt_hidden_proto (__aio_suspend_time64)
> -#endif
>  # endif
>  #endif
>  
> diff --git a/include/mqueue.h b/include/mqueue.h
> index 7a2459e603..20580228dd 100644
> --- a/include/mqueue.h
> +++ b/include/mqueue.h
> @@ -4,15 +4,6 @@
>  extern __typeof (mq_timedreceive) __mq_timedreceive __nonnull ((2, 5));
>  extern __typeof (mq_timedsend) __mq_timedsend __nonnull ((2, 5));
>  
> -# if IS_IN (librt) && !PTHREAD_IN_LIBC
> -hidden_proto (mq_timedsend)
> -hidden_proto (__mq_timedsend)
> -hidden_proto (mq_setattr)
> -hidden_proto (mq_timedreceive)
> -hidden_proto (__mq_timedreceive)
> -# endif
> -
> -# if PTHREAD_IN_LIBC
>  libc_hidden_proto (mq_setattr)
>  libc_hidden_proto (__mq_timedreceive)
>  libc_hidden_proto (__mq_timedsend)
> @@ -20,7 +11,6 @@ libc_hidden_proto (__mq_timedsend)
>  /* Called from fork so that the new subprocess re-creates the
>     notification thread if necessary.  */
>  void __mq_notify_fork_subprocess (void) attribute_hidden;
> -# endif
>  
>  #include <struct___timespec64.h>
>  #if __TIMESIZE == 64
> @@ -36,12 +26,7 @@ extern ssize_t __mq_timedreceive_time64 (mqd_t mqdes,
>                                           unsigned int *__restrict msg_prio,
>                                           const struct __timespec64 
> *__restrict
>                                           abs_timeout);
> -#  if PTHREAD_IN_LIBC
>  libc_hidden_proto (__mq_timedreceive_time64)
>  libc_hidden_proto (__mq_timedsend_time64)
> -#  else
> -librt_hidden_proto (__mq_timedreceive_time64)
> -librt_hidden_proto (__mq_timedsend_time64)
> -#  endif
>  #endif
>  #endif
> diff --git a/include/time.h b/include/time.h
> index ceede2ea26..08a3215512 100644
> --- a/include/time.h
> +++ b/include/time.h
> @@ -221,11 +221,7 @@ libc_hidden_proto (__futimens64);
>  #else
>  extern int __timer_gettime64 (timer_t timerid, struct __itimerspec64 *value);
>  extern int __timerfd_gettime64 (int fd, struct __itimerspec64 *value);
> -# if PTHREAD_IN_LIBC
>  libc_hidden_proto (__timer_gettime64)
> -# else
> -librt_hidden_proto (__timer_gettime64)
> -# endif
>  libc_hidden_proto (__timerfd_gettime64);
>  #endif
>  
> @@ -239,11 +235,7 @@ extern int __timer_settime64 (timer_t timerid, int flags,
>  extern int __timerfd_settime64 (int fd, int flags,
>                                  const struct __itimerspec64 *value,
>                                  struct __itimerspec64 *ovalue);
> -# if PTHREAD_IN_LIBC
>  libc_hidden_proto (__timer_settime64)
> -#else
> -librt_hidden_proto (__timer_settime64)
> -#endif
>  libc_hidden_proto (__timerfd_settime64);
>  #endif
>  
> diff --git a/rt/Makefile b/rt/Makefile
> index d8d5c5d48a..39a3e5620b 100644
> --- a/rt/Makefile
> +++ b/rt/Makefile
> @@ -25,13 +25,6 @@ include ../Makeconfig
>  headers      := aio.h mqueue.h bits/mqueue.h bits/mqueue2.h
>  
>  routines = \
> -  shm_open \
> -  shm_unlink \
> -
> -librt-routines = librt-compat
> -librt-shared-only-routines = librt-compat
> -
> -$(librt-routines-var) += \
>    aio_cancel \
>    aio_error \
>    aio_fsync \
> @@ -56,18 +49,22 @@ $(librt-routines-var) += \
>    mq_timedreceive \
>    mq_timedsend \
>    mq_unlink \
> +  shm_open \
> +  shm_unlink \
>    timer_create \
>    timer_delete \
>    timer_getoverr \
>    timer_gettime \
>    timer_settime \
> +  # routines
> +
> +librt-routines = librt-compat
> +librt-shared-only-routines = librt-compat
>  
> -ifeq ($(pthread-in-libc),yes)
>  # Pretend that librt.so is a linker script, so that the symbolic
>  # link is not installed.
>  install-lib-ldscripts = librt.so
>  $(inst_libdir)/librt.so:
> -endif
>  
>  tests := tst-shm tst-timer tst-timer2 \
>        tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \
> @@ -111,14 +108,4 @@ LDFLAGS-rt.so = -Wl,--enable-new-dtags,-z,nodelete
>  
>  $(objpfx)librt.so: $(shared-thread-library)
>  
> -ifneq ($(pthread-in-libc),yes)
> -ifeq (yes,$(build-shared))
> -$(addprefix $(objpfx),$(tests) $(tests-internal)): \
> -     $(objpfx)librt.so $(shared-thread-library)
> -else
> -$(addprefix $(objpfx),$(tests)) $(tests-internal): \
> -     $(objpfx)librt.a $(static-thread-library)
> -endif
> -endif # !$(pthread-in-libc)
> -
>  tst-mqueue7-ARGS = -- $(host-test-program-cmd)
> diff --git a/rt/Versions b/rt/Versions
> index a3dc72cff4..8278ae430b 100644
> --- a/rt/Versions
> +++ b/rt/Versions
> @@ -1,6 +1,5 @@
>  libc {
>    GLIBC_2.1 {
> -%if PTHREAD_IN_LIBC
>      aio_init;
>      aio_cancel;
>      aio_cancel64;
> @@ -18,21 +17,17 @@ libc {
>      aio_write64;
>      lio_listio;
>      lio_listio64;
> -%endif
>    }
>    GLIBC_2.2 {
> -%if PTHREAD_IN_LIBC
>      timer_create;
>      timer_delete;
>      timer_getoverrun;
>      timer_gettime;
>      timer_settime;
> -%endif
>      shm_open;
>      shm_unlink;
>    }
>    GLIBC_2.3.4 {
> -%if PTHREAD_IN_LIBC
>      mq_close;
>      mq_getattr;
>      mq_notify;
> @@ -43,21 +38,15 @@ libc {
>      mq_timedreceive;
>      mq_timedsend;
>      mq_unlink;
> -%endif
>    }
>    GLIBC_2.4 {
> -%if PTHREAD_IN_LIBC
>      lio_listio;
>      lio_listio64;
> -%endif
>    }
>    GLIBC_2.7 {
> -%if PTHREAD_IN_LIBC
>     __mq_open_2;
> -%endif
>    }
>    GLIBC_2.34 {
> -%if PTHREAD_IN_LIBC
>      __mq_open_2;
>      aio_cancel64;
>      aio_cancel;
> @@ -91,16 +80,11 @@ libc {
>      timer_getoverrun;
>      timer_gettime;
>      timer_settime;
> -%endif
>      shm_open;
>      shm_unlink;
>    }
> -}
> -librt {
> -  GLIBC_2.1 {
> -%if PTHREAD_IN_LIBC
> -    __librt_version_placeholder;
> -%else
> +  GLIBC_2.44 {
> +    __mq_open_2;
>      aio_cancel;
>      aio_cancel64;
>      aio_error;
> @@ -118,23 +102,6 @@ librt {
>      aio_write64;
>      lio_listio;
>      lio_listio64;
> -%endif
> -  }
> -  GLIBC_2.2 {
> -%if PTHREAD_IN_LIBC
> -    __librt_version_placeholder;
> -%else
> -    timer_create;
> -    timer_delete;
> -    timer_getoverrun;
> -    timer_gettime;
> -    timer_settime;
> -%endif
> -  }
> -  GLIBC_2.3.4 {
> -%if PTHREAD_IN_LIBC
> -    __librt_version_placeholder;
> -%else
>      mq_close;
>      mq_getattr;
>      mq_notify;
> @@ -145,21 +112,27 @@ librt {
>      mq_timedreceive;
>      mq_timedsend;
>      mq_unlink;
> -%endif
> +    timer_create;
> +    timer_delete;
> +    timer_getoverrun;
> +    timer_gettime;
> +    timer_settime;
> +  }
> +}
> +librt {
> +  GLIBC_2.1 {
> +    __librt_version_placeholder;
> +  }
> +  GLIBC_2.2 {
> +    __librt_version_placeholder;
> +  }
> +  GLIBC_2.3.4 {
> +    __librt_version_placeholder;
>    }
>    GLIBC_2.4 {
> -%if PTHREAD_IN_LIBC
>      __librt_version_placeholder;
> -%else
> -    lio_listio;
> -    lio_listio64;
> -%endif
>    }
>    GLIBC_2.7 {
> -%if PTHREAD_IN_LIBC
>      __librt_version_placeholder;
> -%else
> -   __mq_open_2;
> -%endif
>    }
>  }
> diff --git a/rt/aio_cancel.c b/rt/aio_cancel.c
> index 0b94303ade..8cccae702d 100644
> --- a/rt/aio_cancel.c
> +++ b/rt/aio_cancel.c
> @@ -35,6 +35,8 @@
>  
>  #include <aio_misc.h>
>  #include <pthreadP.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  
>  int
> @@ -151,16 +153,11 @@ __aio_cancel (int fildes, struct aiocb *aiocbp)
>  
>    return result;
>  }
> -#if PTHREAD_IN_LIBC
> -# ifndef __aio_cancel
> -versioned_symbol (libc, __aio_cancel, aio_cancel, GLIBC_2_34);
> -versioned_symbol (libc, __aio_cancel, aio_cancel64, GLIBC_2_34);
> -#  if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +#ifndef __aio_cancel
> +versioned_symbol (libc, __aio_cancel, aio_cancel, RT_IN_LIBC);
> +versioned_symbol (libc, __aio_cancel, aio_cancel64, RT_IN_LIBC);
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_cancel, aio_cancel, GLIBC_2_1);
>  compat_symbol (librt, __aio_cancel, aio_cancel64, GLIBC_2_1);
> -#  endif
> -# endif /* __aio_cancel */
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_cancel, aio_cancel)
> -weak_alias (__aio_cancel, aio_cancel64)
> -#endif
> +# endif
> +#endif /* __aio_cancel */
> diff --git a/rt/aio_error.c b/rt/aio_error.c
> index 8f93c5f509..a645f4ae37 100644
> --- a/rt/aio_error.c
> +++ b/rt/aio_error.c
> @@ -30,6 +30,7 @@
>  #include <aio_misc.h>
>  #include <pthreadP.h>
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  int
>  __aio_error (const struct aiocb *aiocbp)
> @@ -45,14 +46,9 @@ __aio_error (const struct aiocb *aiocbp)
>    return ret;
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_error, aio_error, GLIBC_2_34);
> -versioned_symbol (libc, __aio_error, aio_error64, GLIBC_2_34);
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_error, aio_error, RT_IN_LIBC);
> +versioned_symbol (libc, __aio_error, aio_error64, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_error, aio_error, GLIBC_2_1);
>  compat_symbol (librt, __aio_error, aio_error64, GLIBC_2_1);
> -# endif
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_error, aio_error)
> -weak_alias (__aio_error, aio_error64)
> -#endif /* !PTHREAD_IN_LIBC */
> +#endif
> diff --git a/rt/aio_fsync.c b/rt/aio_fsync.c
> index 946e192e3a..c04e92d154 100644
> --- a/rt/aio_fsync.c
> +++ b/rt/aio_fsync.c
> @@ -31,6 +31,7 @@
>  
>  #include <aio_misc.h>
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  int
>  __aio_fsync (int op, struct aiocb *aiocbp)
> @@ -53,14 +54,9 @@ __aio_fsync (int op, struct aiocb *aiocbp)
>         ? -1 : 0);
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_fsync, aio_fsync, GLIBC_2_34);
> -versioned_symbol (libc, __aio_fsync, aio_fsync64, GLIBC_2_34);
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_fsync, aio_fsync, RT_IN_LIBC);
> +versioned_symbol (libc, __aio_fsync, aio_fsync64, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_fsync, aio_fsync, GLIBC_2_1);
>  compat_symbol (librt, __aio_fsync, aio_fsync64, GLIBC_2_1);
> -# endif
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_fsync, aio_fsync)
> -weak_alias (__aio_fsync, aio_fsync64)
> -#endif /* !PTHREAD_IN_LIBC */
> +#endif
> diff --git a/rt/aio_misc.c b/rt/aio_misc.c
> index a4d170fb18..724486e66f 100644
> --- a/rt/aio_misc.c
> +++ b/rt/aio_misc.c
> @@ -27,20 +27,8 @@
>  #include <sys/stat.h>
>  #include <sys/time.h>
>  #include <aio_misc.h>
> -
> -#if !PTHREAD_IN_LIBC
> -/* The available function names differ outside of libc.  (In libc, we
> -   need to use hidden aliases to avoid the PLT.)  */
> -# define __pread __libc_pread
> -# define __pthread_attr_destroy pthread_attr_destroy
> -# define __pthread_attr_init pthread_attr_init
> -# define __pthread_attr_setdetachstate pthread_attr_setdetachstate
> -# define __pthread_cond_signal pthread_cond_signal
> -# define __pthread_cond_timedwait pthread_cond_timedwait
> -# define __pthread_getschedparam pthread_getschedparam
> -# define __pthread_setschedparam pthread_setschedparam
> -# define __pwrite __libc_pwrite
> -#endif
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  #ifndef aio_create_helper_thread
>  # define aio_create_helper_thread __aio_create_helper_thread
> @@ -694,9 +682,6 @@ handle_fildes_io (void *arg)
>  
>  
>  /* Free allocated resources.  */
> -#if !PTHREAD_IN_LIBC
> -__attribute__ ((__destructor__)) static
> -#endif
>  void
>  __aio_freemem (void)
>  {
> @@ -737,11 +722,7 @@ add_request_to_runlist (struct requestlist *newrequest)
>      }
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_init, aio_init, GLIBC_2_34);
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_init, aio_init, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_init, aio_init, GLIBC_2_1);
> -# endif
> -#else /* !PTHREAD_IN_LIBC */
> -weak_alias (__aio_init, aio_init)
> -#endif /* !PTHREAD_IN_LIBC */
> +#endif
> diff --git a/rt/aio_notify.c b/rt/aio_notify.c
> index 9209c085e6..966c458f0c 100644
> --- a/rt/aio_notify.c
> +++ b/rt/aio_notify.c
> @@ -23,11 +23,6 @@
>  #include <aio_misc.h>
>  #include <signal.h>
>  
> -#if !PTHREAD_IN_LIBC
> -# define __pthread_attr_init pthread_attr_init
> -# define __pthread_attr_setdetachstate pthread_attr_setdetachstate
> -#endif
> -
>  #ifndef aio_start_notify_thread
>  # define aio_start_notify_thread() do { } while (0)
>  #endif
> @@ -142,7 +137,7 @@ __aio_notify (struct requestlist *req)
>         /* Decrement the counter.  */
>         --*waitlist->counterp;
>  
> -       pthread_cond_signal (waitlist->cond);
> +       __pthread_cond_signal (waitlist->cond);
>  #endif
>       }
>        else
> diff --git a/rt/aio_read.c b/rt/aio_read.c
> index 6907987fe7..01f7ee08f9 100644
> --- a/rt/aio_read.c
> +++ b/rt/aio_read.c
> @@ -28,6 +28,7 @@
>  
>  #include <aio_misc.h>
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  int
>  __aio_read (struct aiocb *aiocbp)
> @@ -36,20 +37,13 @@ __aio_read (struct aiocb *aiocbp)
>         ? -1 : 0);
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_read, aio_read, GLIBC_2_34);
> -# if __WORDSIZE == 64
> -versioned_symbol (libc, __aio_read, aio_read64, GLIBC_2_34);
> -# endif
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_read, aio_read, RT_IN_LIBC);
> +#if __WORDSIZE == 64
> +versioned_symbol (libc, __aio_read, aio_read64, RT_IN_LIBC);
> +#endif
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_read, aio_read, GLIBC_2_1);
> -#  if __WORDSIZE == 64
> +# if __WORDSIZE == 64
>  compat_symbol (librt, __aio_read, aio_read64, GLIBC_2_1);
> -#  endif
>  # endif
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_read, aio_read)
> -# if __WORDSIZE == 64
> -weak_alias (__aio_read, aio_read64)
>  #endif
> -#endif  /* !PTHREAD_IN_LIBC */
> diff --git a/rt/aio_read64.c b/rt/aio_read64.c
> index 17ea059e89..e69ce8f332 100644
> --- a/rt/aio_read64.c
> +++ b/rt/aio_read64.c
> @@ -22,6 +22,7 @@
>  # include <aio.h>
>  # include <aio_misc.h>
>  # include <shlib-compat.h>
> +# include <rt-libc.h>
>  
>  int
>  __aio_read64 (struct aiocb64 *aiocbp)
> @@ -30,12 +31,8 @@ __aio_read64 (struct aiocb64 *aiocbp)
>         ? -1 : 0);
>  }
>  
> -# if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_read64, aio_read64, GLIBC_2_34);
> -#  if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_read64, aio_read64, RT_IN_LIBC);
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_read64, aio_read64, GLIBC_2_1);
> -#  endif
> -# else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_read64, aio_read64)
>  # endif
>  #endif /* __WORDSIZE != 64 */
> diff --git a/rt/aio_return.c b/rt/aio_return.c
> index 3f9cd62002..291760d175 100644
> --- a/rt/aio_return.c
> +++ b/rt/aio_return.c
> @@ -28,6 +28,7 @@
>  #undef aio_return64
>  
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  ssize_t
>  __aio_return (struct aiocb *aiocbp)
> @@ -35,14 +36,9 @@ __aio_return (struct aiocb *aiocbp)
>    return aiocbp->__return_value;
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_return, aio_return, GLIBC_2_34);
> -versioned_symbol (libc, __aio_return, aio_return64, GLIBC_2_34);
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_return, aio_return, RT_IN_LIBC);
> +versioned_symbol (libc, __aio_return, aio_return64, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_return, aio_return, GLIBC_2_1);
>  compat_symbol (librt, __aio_return, aio_return64, GLIBC_2_1);
> -# endif
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_return, aio_return)
> -weak_alias (__aio_return, aio_return64)
>  #endif
> diff --git a/rt/aio_suspend.c b/rt/aio_suspend.c
> index 69a9454a55..10eb3dc59d 100644
> --- a/rt/aio_suspend.c
> +++ b/rt/aio_suspend.c
> @@ -37,6 +37,7 @@
>  #include <aio_misc.h>
>  #include <pthreadP.h>
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  
>  struct clparam
> @@ -85,7 +86,7 @@ cleanup (void *arg)
>  
>  #ifndef DONT_NEED_AIO_MISC_COND
>    /* Release the conditional variable.  */
> -  (void) pthread_cond_destroy (param->cond);
> +  (void) __pthread_cond_destroy (param->cond);
>  #endif
>  
>    /* Release the mutex.  */
> @@ -185,11 +186,7 @@ ___aio_suspend_time64 (const struct aiocb *const list[], 
> int nent,
>         .nent = nent
>       };
>  
> -#if PTHREAD_IN_LIBC
>        __libc_cleanup_region_start (1, cleanup, &clparam);
> -#else
> -      __pthread_cleanup_push (cleanup, &clparam);
> -#endif
>  
>  #ifdef DONT_NEED_AIO_MISC_COND
>        result = do_aio_misc_wait (&cntr, timeout == NULL ? NULL : &ts);
> @@ -200,11 +197,7 @@ ___aio_suspend_time64 (const struct aiocb *const list[], 
> int nent,
>                                        timeout == NULL ? NULL : &ts32);
>  #endif
>  
> -#if PTHREAD_IN_LIBC
>        __libc_cleanup_region_end (0);
> -#else
> -      pthread_cleanup_pop (0);
> -#endif
>      }
>  
>    /* Now remove the entry in the waiting list for all requests
> @@ -228,7 +221,7 @@ ___aio_suspend_time64 (const struct aiocb *const list[], 
> int nent,
>  
>  #ifndef DONT_NEED_AIO_MISC_COND
>    /* Release the conditional variable.  */
> -  if (__glibc_unlikely (pthread_cond_destroy (&cond) != 0))
> +  if (__glibc_unlikely (__pthread_cond_destroy (&cond) != 0))
>      /* This must never happen.  */
>      abort ();
>  #endif
> @@ -257,14 +250,10 @@ ___aio_suspend_time64 (const struct aiocb *const 
> list[], int nent,
>  #if __TIMESIZE == 64
>  strong_alias (___aio_suspend_time64, __aio_suspend)
>  #else /* __TIMESIZE != 64 */
> -# if PTHREAD_IN_LIBC
>  libc_hidden_ver (___aio_suspend_time64, __aio_suspend_time64)
> -/* The conditional is slightly wrong: PTHREAD_IN_LIBC is a stand-in
> -   for whether time64 support is needed.  */
> -versioned_symbol (libc, ___aio_suspend_time64, __aio_suspend_time64, 
> GLIBC_2_34);
> -# else
> -librt_hidden_ver (___aio_suspend_time64, __aio_suspend_time64)
> -# endif
> +#ifndef __PTHREAD_HTL
> +versioned_symbol (libc, ___aio_suspend_time64, __aio_suspend_time64, 
> RT_IN_LIBC);
> +#endif
>  
>  int
>  __aio_suspend (const struct aiocb *const list[], int nent,
> @@ -279,14 +268,9 @@ __aio_suspend (const struct aiocb *const list[], int 
> nent,
>  }
>  #endif /* __TIMESPEC64 != 64 */
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_suspend, aio_suspend, GLIBC_2_34);
> -versioned_symbol (libc, __aio_suspend, aio_suspend64, GLIBC_2_34);
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_suspend, aio_suspend, RT_IN_LIBC);
> +versioned_symbol (libc, __aio_suspend, aio_suspend64, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_suspend, aio_suspend, GLIBC_2_1);
>  compat_symbol (librt, __aio_suspend, aio_suspend64, GLIBC_2_1);
> -# endif
> -#else /* !PTHREAD_IN_LIBC */
> -weak_alias (__aio_suspend, aio_suspend)
> -weak_alias (__aio_suspend, aio_suspend64)
> -#endif /* !PTHREAD_IN_LIBC */
> +#endif
> diff --git a/rt/aio_write.c b/rt/aio_write.c
> index 39be868def..86b8d42dd0 100644
> --- a/rt/aio_write.c
> +++ b/rt/aio_write.c
> @@ -28,6 +28,7 @@
>  
>  #include <aio_misc.h>
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  int
>  __aio_write (struct aiocb *aiocbp)
> @@ -36,20 +37,13 @@ __aio_write (struct aiocb *aiocbp)
>         ? -1 : 0);
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_write, aio_write, GLIBC_2_34);
> -# if __WORDSIZE == 64
> -versioned_symbol (libc, __aio_write, aio_write64, GLIBC_2_34);
> -# endif
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_write, aio_write, RT_IN_LIBC);
> +#if __WORDSIZE == 64
> +versioned_symbol (libc, __aio_write, aio_write64, RT_IN_LIBC);
> +#endif
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_write, aio_write, GLIBC_2_1);
> -#  if __WORDSIZE == 64
> +# if __WORDSIZE == 64
>  compat_symbol (librt, __aio_write, aio_write64, GLIBC_2_1);
> -#  endif
>  # endif
> -#else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_write, aio_write)
> -# if __WORDSIZE == 64
> -weak_alias (__aio_write, aio_write64)
>  #endif
> -#endif  /* !PTHREAD_IN_LIBC */
> diff --git a/rt/aio_write64.c b/rt/aio_write64.c
> index c819779134..3bb9110888 100644
> --- a/rt/aio_write64.c
> +++ b/rt/aio_write64.c
> @@ -22,6 +22,7 @@
>  # include <aio.h>
>  # include <aio_misc.h>
>  # include <shlib-compat.h>
> +# include <rt-libc.h>
>  
>  int
>  __aio_write64 (struct aiocb64 *aiocbp)
> @@ -30,12 +31,8 @@ __aio_write64 (struct aiocb64 *aiocbp)
>         ? -1 : 0);
>  }
>  
> -# if PTHREAD_IN_LIBC
> -versioned_symbol (libc, __aio_write64, aio_write64, GLIBC_2_34);
> -#  if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +versioned_symbol (libc, __aio_write64, aio_write64, RT_IN_LIBC);
> +# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  compat_symbol (librt, __aio_write64, aio_write64, GLIBC_2_1);
> -#  endif
> -# else /* !PTHREAD_IN_LIBC */
> -strong_alias (__aio_write64, aio_write64)
>  # endif
>  #endif /* __WORDSIZE != 64 */
> diff --git a/rt/librt-compat.c b/rt/librt-compat.c
> index b171a63139..f11c759cb8 100644
> --- a/rt/librt-compat.c
> +++ b/rt/librt-compat.c
> @@ -16,11 +16,11 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if PTHREAD_IN_LIBC
> -# include <shlib-compat.h>
> -# include <sys/cdefs.h>
> +#include <shlib-compat.h>
> +#include <sys/cdefs.h>
> +#include <rt-libc.h>
>  
> -# if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
> +#if SHLIB_COMPAT (librt, GLIBC_2_1, RT_IN_LIBC)
>  void
>  attribute_compat_text_section
>  __attribute_used__
> @@ -30,26 +30,24 @@ __librt_version_placeholder_1 (void)
>  
>  compat_symbol (librt, __librt_version_placeholder_1,
>                 __librt_version_placeholder, GLIBC_2_1);
> -# endif
> +#endif
>  
> -# if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_34)
> +#if SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
>  compat_symbol (librt, __librt_version_placeholder_1,
>                 __librt_version_placeholder, GLIBC_2_2);
> -# endif
> +#endif
>  
> -# if SHLIB_COMPAT (librt, GLIBC_2_3_4, GLIBC_2_34)
> +#if SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
>  compat_symbol (librt, __librt_version_placeholder_1,
>                 __librt_version_placeholder, GLIBC_2_3_4);
> -# endif
> +#endif
>  
> -# if SHLIB_COMPAT (librt, GLIBC_2_4, GLIBC_2_34)
> +#if SHLIB_COMPAT (librt, GLIBC_2_4, RT_IN_LIBC)
>  compat_symbol (librt, __librt_version_placeholder_1,
>                 __librt_version_placeholder, GLIBC_2_4);
> -# endif
> +#endif
>  
> -# if SHLIB_COMPAT (librt, GLIBC_2_7, GLIBC_2_34)
> +#if SHLIB_COMPAT (librt, GLIBC_2_7, RT_IN_LIBC)
>  compat_symbol (librt, __librt_version_placeholder_1,
>                 __librt_version_placeholder, GLIBC_2_7);
> -# endif
> -
>  #endif
> diff --git a/rt/lio_listio-common.c b/rt/lio_listio-common.c
> index 3848c0097e..c5da257591 100644
> --- a/rt/lio_listio-common.c
> +++ b/rt/lio_listio-common.c
> @@ -46,6 +46,7 @@
>  #include <aio_misc.h>
>  
>  #include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  
>  /* We need this special structure to handle asynchronous I/O.  */
> @@ -160,16 +161,16 @@ lio_listio_internal (int mode, struct AIOCB *const 
> list[], int nent,
>        /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancellation
>        points we must be careful.  We added entries to the waiting lists
>        which we must remove.  So defer cancellation for now.  */
> -      pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
> +      __pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
>  
>        while (total > 0)
> -     pthread_cond_wait (&cond, &__aio_requests_mutex);
> +     __pthread_cond_wait (&cond, &__aio_requests_mutex);
>  
>        /* Now it's time to restore the cancellation state.  */
> -      pthread_setcancelstate (oldstate, NULL);
> +      __pthread_setcancelstate (oldstate, NULL);
>  
>        /* Release the conditional variable.  */
> -      if (pthread_cond_destroy (&cond) != 0)
> +      if (__pthread_cond_destroy (&cond) != 0)
>       /* This must never happen.  */
>       abort ();
>  #endif
> @@ -265,20 +266,13 @@ LIO_LISTIO_NEW (int mode, struct AIOCB *const list[], 
> int nent,
>    return lio_listio_internal (mode, list, nent, sig);
>  }
>  
> -#if PTHREAD_IN_LIBC
> -versioned_symbol (libc, LIO_LISTIO_NEW, LIO_LISTIO, GLIBC_2_34);
> -# if __WORDSIZE == 64
> -versioned_symbol (libc, LIO_LISTIO_NEW, lio_listio64, GLIBC_2_34);
> -# endif
> -# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_4, GLIBC_2_34)
> +versioned_symbol (libc, LIO_LISTIO_NEW, LIO_LISTIO, RT_IN_LIBC);
> +#if __WORDSIZE == 64
> +versioned_symbol (libc, LIO_LISTIO_NEW, lio_listio64, RT_IN_LIBC);
> +#endif
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_4, RT_IN_LIBC)
>  compat_symbol (librt, LIO_LISTIO_NEW, LIO_LISTIO, GLIBC_2_4);
> -#  if __WORDSIZE == 64
> -compat_symbol (librt, LIO_LISTIO_NEW, lio_listio64, GLIBC_2_4);
> -#  endif
> -# endif /* OTHER_SHLIB_COMPAT */
> -#else /* !PTHREAD_IN_LIBC */
> -versioned_symbol (librt, LIO_LISTIO_NEW, LIO_LISTIO, GLIBC_2_4);
>  # if __WORDSIZE == 64
> -versioned_symbol (librt, LIO_LISTIO_NEW, lio_listio64, GLIBC_2_4);
> +compat_symbol (librt, LIO_LISTIO_NEW, lio_listio64, GLIBC_2_4);
>  # endif
> -#endif /* !PTHREAD_IN_LIBC */
> +#endif /* OTHER_SHLIB_COMPAT */
> diff --git a/rt/mq_close.c b/rt/mq_close.c
> index 3f5b4c614b..9d50e3212f 100644
> --- a/rt/mq_close.c
> +++ b/rt/mq_close.c
> @@ -17,13 +17,19 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Removes the association between message queue descriptor MQDES and its
>     message queue.  */
>  int
> -mq_close (mqd_t mqdes)
> +__mq_close (mqd_t mqdes)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_close, mq_close, RT_IN_LIBC);
>  stub_warning (mq_close)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_close, mq_close, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_getattr.c b/rt/mq_getattr.c
> index 71d544097c..e2d33a38cd 100644
> --- a/rt/mq_getattr.c
> +++ b/rt/mq_getattr.c
> @@ -17,12 +17,18 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Query status and attributes of message queue MQDES.  */
>  int
> -mq_getattr (mqd_t mqdes, struct mq_attr *mqstat)
> +__mq_getattr (mqd_t mqdes, struct mq_attr *mqstat)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_getattr, mq_getattr, RT_IN_LIBC);
>  stub_warning (mq_getattr)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_getattr, mq_getattr, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_notify.c b/rt/mq_notify.c
> index de5cd3ff80..6f1274deb2 100644
> --- a/rt/mq_notify.c
> +++ b/rt/mq_notify.c
> @@ -17,13 +17,19 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Register notification upon message arrival to an empty message queue
>     MQDES.  */
>  int
> -mq_notify (mqd_t mqdes, const struct sigevent *notification)
> +__mq_notify (mqd_t mqdes, const struct sigevent *notification)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_notify, mq_notify, RT_IN_LIBC);
>  stub_warning (mq_notify)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_notify, mq_notify, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_open.c b/rt/mq_open.c
> index 3b1fc8e17d..34cef8d6d7 100644
> --- a/rt/mq_open.c
> +++ b/rt/mq_open.c
> @@ -18,6 +18,8 @@
>  #include <errno.h>
>  #include <mqueue.h>
>  #include <stdio.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Establish connection between a process and a message queue NAME and
>     return message queue descriptor or (mqd_t) -1 on error.  OFLAG determines
> @@ -32,11 +34,14 @@ __mq_open (const char *name, int oflag, ...)
>    __set_errno (ENOSYS);
>    return (mqd_t) -1;
>  }
> -strong_alias (__mq_open, mq_open);
> +versioned_symbol (libc, __mq_open, mq_open, RT_IN_LIBC);
>  stub_warning (mq_open)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_open, mq_open, GLIBC_2_3_4);
> +#endif
>  
>  mqd_t
> -__mq_open_2 (const char *name, int oflag)
> +___mq_open_2 (const char *name, int oflag)
>  {
>    if (oflag & O_CREAT)
>      __fortify_fail ("invalid mq_open call: O_CREAT without mode and attr");
> @@ -44,3 +49,7 @@ __mq_open_2 (const char *name, int oflag)
>    return __mq_open (name, oflag);
>  }
>  stub_warning (__mq_open_2)
> +versioned_symbol (libc, ___mq_open_2, __mq_open_2, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_7, RT_IN_LIBC)
> +compat_symbol (librt, ___mq_open_2, __mq_open_2, GLIBC_2_7);
> +#endif
> diff --git a/rt/mq_receive.c b/rt/mq_receive.c
> index e258feb89b..f4ebf3a432 100644
> --- a/rt/mq_receive.c
> +++ b/rt/mq_receive.c
> @@ -17,14 +17,20 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Receive the oldest from highest priority messages in message queue
>     MQDES.  */
>  ssize_t
> -mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len,
> -         unsigned int *msg_prio)
> +__mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len,
> +           unsigned int *msg_prio)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_receive, mq_receive, RT_IN_LIBC);
>  stub_warning (mq_receive)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_receive, mq_receive, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_send.c b/rt/mq_send.c
> index fbe53762ae..50ead894b3 100644
> --- a/rt/mq_send.c
> +++ b/rt/mq_send.c
> @@ -17,13 +17,19 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Add message pointed by MSG_PTR to message queue MQDES.  */
>  int
> -mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
> -      unsigned int msg_prio)
> +__mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
> +        unsigned int msg_prio)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_send, mq_send, RT_IN_LIBC);
>  stub_warning (mq_send)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_send, mq_send, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_setattr.c b/rt/mq_setattr.c
> index dfad7ab891..ad23c04cf0 100644
> --- a/rt/mq_setattr.c
> +++ b/rt/mq_setattr.c
> @@ -17,15 +17,21 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Set attributes associated with message queue MQDES and if OMQSTAT is
>     not NULL also query its old attributes.  */
>  int
> -mq_setattr (mqd_t mqdes, const struct mq_attr *__restrict mqstat,
> -         struct mq_attr *__restrict omqstat)
> +__mq_setattr (mqd_t mqdes, const struct mq_attr *__restrict mqstat,
> +           struct mq_attr *__restrict omqstat)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> -hidden_def (mq_setattr)
> +versioned_symbol (libc, __mq_setattr, mq_setattr, RT_IN_LIBC);
> +libc_hidden_ver (__mq_setattr, mq_setattr)
>  stub_warning (mq_setattr)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_setattr, mq_setattr, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/mq_timedreceive.c b/rt/mq_timedreceive.c
> index 3655d4b46b..1987d22de5 100644
> --- a/rt/mq_timedreceive.c
> +++ b/rt/mq_timedreceive.c
> @@ -17,18 +17,23 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Receive the oldest from highest priority messages in message queue
>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
>  ssize_t
>  __mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
> -              unsigned int *__restrict msg_prio,
> -              const struct timespec *__restrict abs_timeout)
> +                unsigned int *__restrict msg_prio,
> +                const struct timespec *__restrict abs_timeout)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
>  hidden_def (__mq_timedreceive)
> -weak_alias (__mq_timedreceive, mq_timedreceive)
> -hidden_weak (mq_timedreceive)
> +versioned_symbol (libc, __mq_timedreceive, mq_timedreceive, RT_IN_LIBC);
> +libc_hidden_ver (__mq_timedreceive, mq_timedreceive)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_timedreceive, mq_timedreceive, GLIBC_2_3_4);
> +#endif
>  stub_warning (mq_timedreceive)
> diff --git a/rt/mq_timedsend.c b/rt/mq_timedsend.c
> index 1ef30038ba..7c46f76d1c 100644
> --- a/rt/mq_timedsend.c
> +++ b/rt/mq_timedsend.c
> @@ -17,17 +17,22 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
>     on full message queue if ABS_TIMEOUT expires.  */
>  int
>  __mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
> -           unsigned int msg_prio, const struct timespec *abs_timeout)
> +             unsigned int msg_prio, const struct timespec *abs_timeout)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
>  hidden_def (__mq_timedsend)
> -weak_alias (__mq_timedsend, mq_timedsend)
> -hidden_weak (mq_timedsend)
> +versioned_symbol (libc, __mq_timedsend, mq_timedsend, RT_IN_LIBC);
> +libc_hidden_ver (__mq_timedsend, mq_timedsend)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_timedsend, mq_timedsend, GLIBC_2_3_4);
> +#endif
>  stub_warning (mq_timedsend)
> diff --git a/rt/mq_unlink.c b/rt/mq_unlink.c
> index c1f06cec6e..120e54352f 100644
> --- a/rt/mq_unlink.c
> +++ b/rt/mq_unlink.c
> @@ -17,12 +17,18 @@
>  
>  #include <errno.h>
>  #include <mqueue.h>
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
>  /* Remove message queue named NAME.  */
>  int
> -mq_unlink (const char *name)
> +__mq_unlink (const char *name)
>  {
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +versioned_symbol (libc, __mq_unlink, mq_unlink, RT_IN_LIBC);
>  stub_warning (mq_unlink)
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3_4, RT_IN_LIBC)
> +compat_symbol (librt, __mq_unlink, mq_unlink, GLIBC_2_3_4);
> +#endif
> diff --git a/rt/timer_create.c b/rt/timer_create.c
> index 4f03dcb867..33767db142 100644
> --- a/rt/timer_create.c
> +++ b/rt/timer_create.c
> @@ -21,12 +21,14 @@
>  #include <time.h>
>  #include <unistd.h>
>  
> -#include "posix-timer.h"
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
>  
> +#include "posix-timer.h"
>  
>  /* Create new per-process timer using CLOCK.  */
>  int
> -timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
> +__timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
>  {
>    int retval = -1;
>    struct timer_node *newtimer = NULL;
> @@ -53,7 +55,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, 
> timer_t *timerid)
>        return -1;
>      }
>  
> -  pthread_once (&__timer_init_once_control, __timer_init_once);
> +  __pthread_once (&__timer_init_once_control, __timer_init_once);
>  
>    if (__timer_init_failed)
>      {
> @@ -61,7 +63,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, 
> timer_t *timerid)
>        return -1;
>      }
>  
> -  pthread_mutex_lock (&__timer_mutex);
> +  __pthread_mutex_lock (&__timer_mutex);
>  
>    newtimer = __timer_alloc ();
>    if (__glibc_unlikely (newtimer == NULL))
> @@ -106,10 +108,10 @@ timer_create (clockid_t clock_id, struct sigevent *evp, 
> timer_t *timerid)
>        if (evp->sigev_notify_attributes)
>       newtimer->attr = *(pthread_attr_t *) evp->sigev_notify_attributes;
>        else
> -     pthread_attr_init (&newtimer->attr);
> +     __pthread_attr_init (&newtimer->attr);
>  
>        /* Ensure thread attributes call for detached thread.  */
> -      pthread_attr_setdetachstate (&newtimer->attr, PTHREAD_CREATE_DETACHED);
> +      __pthread_attr_setdetachstate (&newtimer->attr, 
> PTHREAD_CREATE_DETACHED);
>  
>        /* Try to find existing thread having the right attributes.  */
>        thread = __timer_thread_find_matching (&newtimer->attr, clock_id);
> @@ -159,7 +161,11 @@ timer_create (clockid_t clock_id, struct sigevent *evp, 
> timer_t *timerid)
>       }
>      }
>  
> -  pthread_mutex_unlock (&__timer_mutex);
> +  __pthread_mutex_unlock (&__timer_mutex);
>  
>    return retval;
>  }
> +versioned_symbol (libc, __timer_create, timer_create, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
> +compat_symbol (librt, __timer_create, timer_create, GLIBC_2_2);
> +#endif
> diff --git a/rt/timer_delete.c b/rt/timer_delete.c
> index dfd9e849f6..f6c08e62f9 100644
> --- a/rt/timer_delete.c
> +++ b/rt/timer_delete.c
> @@ -20,17 +20,20 @@
>  #include <pthread.h>
>  #include <time.h>
>  
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
> +
>  #include "posix-timer.h"
>  
>  
>  /* Delete timer TIMERID.  */
>  int
> -timer_delete (timer_t timerid)
> +__timer_delete (timer_t timerid)
>  {
>    struct timer_node *timer;
>    int retval = -1;
>  
> -  pthread_mutex_lock (&__timer_mutex);
> +  __pthread_mutex_lock (&__timer_mutex);
>  
>    timer = timer_id2ptr (timerid);
>    if (! timer_valid (timer))
> @@ -49,7 +52,7 @@ timer_delete (timer_t timerid)
>  
>         /* If timer is currently being serviced, wait for it to finish.  */
>         while (thread->current_timer == timer)
> -         pthread_cond_wait (&thread->cond, &__timer_mutex);
> +         __pthread_cond_wait (&thread->cond, &__timer_mutex);
>  
>         pthread_cleanup_pop (0);
>          }
> @@ -61,7 +64,11 @@ timer_delete (timer_t timerid)
>        retval = 0;
>      }
>  
> -  pthread_mutex_unlock (&__timer_mutex);
> +  __pthread_mutex_unlock (&__timer_mutex);
>  
>    return retval;
>  }
> +versioned_symbol (libc, __timer_delete, timer_delete, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
> +compat_symbol (librt, __timer_delete, timer_delete, GLIBC_2_2);
> +#endif
> diff --git a/rt/timer_getoverr.c b/rt/timer_getoverr.c
> index 3971edce3b..ef2f280336 100644
> --- a/rt/timer_getoverr.c
> +++ b/rt/timer_getoverr.c
> @@ -19,24 +19,31 @@
>  #include <pthread.h>
>  #include <time.h>
>  
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
> +
>  #include "posix-timer.h"
>  
>  
>  /* Get expiration overrun for timer TIMERID.  */
>  int
> -timer_getoverrun (timer_t timerid)
> +__timer_getoverrun (timer_t timerid)
>  {
>    struct timer_node *timer;
>    int retval = -1;
>  
> -  pthread_mutex_lock (&__timer_mutex);
> +  __pthread_mutex_lock (&__timer_mutex);
>  
>    if (! timer_valid (timer = timer_id2ptr (timerid)))
>      __set_errno (EINVAL);
>    else
>      retval = timer->overrun_count;
>  
> -  pthread_mutex_unlock (&__timer_mutex);
> +  __pthread_mutex_unlock (&__timer_mutex);
>  
>    return retval;
>  }
> +versioned_symbol (libc, __timer_getoverrun, timer_getoverrun, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
> +compat_symbol (librt, __timer_getoverrun, timer_getoverrun, GLIBC_2_2);
> +#endif
> diff --git a/rt/timer_gettime.c b/rt/timer_gettime.c
> index 2bf47605bc..1aa17b8d54 100644
> --- a/rt/timer_gettime.c
> +++ b/rt/timer_gettime.c
> @@ -19,19 +19,22 @@
>  #include <pthread.h>
>  #include <time.h>
>  
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
> +
>  #include "posix-timer.h"
>  
>  
>  /* Get current value of timer TIMERID and store it in VALUE.  */
>  int
> -timer_gettime (timer_t timerid, struct itimerspec *value)
> +__timer_gettime (timer_t timerid, struct itimerspec *value)
>  {
>    struct timer_node *timer;
>    struct timespec now, expiry;
>    int retval = -1, armed = 0, valid;
>    clock_t clock = 0;
>  
> -  pthread_mutex_lock (&__timer_mutex);
> +  __pthread_mutex_lock (&__timer_mutex);
>  
>    timer = timer_id2ptr (timerid);
>    valid = timer_valid (timer);
> @@ -43,7 +46,7 @@ timer_gettime (timer_t timerid, struct itimerspec *value)
>      value->it_interval = timer->value.it_interval;
>    }
>  
> -  pthread_mutex_unlock (&__timer_mutex);
> +  __pthread_mutex_unlock (&__timer_mutex);
>  
>    if (valid)
>      {
> @@ -71,3 +74,7 @@ timer_gettime (timer_t timerid, struct itimerspec *value)
>  
>    return retval;
>  }
> +versioned_symbol (libc, __timer_gettime, timer_gettime, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
> +compat_symbol (librt, __timer_gettime, timer_gettime, GLIBC_2_2);
> +#endif
> diff --git a/rt/timer_settime.c b/rt/timer_settime.c
> index 9c9c846543..bd34a87ade 100644
> --- a/rt/timer_settime.c
> +++ b/rt/timer_settime.c
> @@ -19,13 +19,16 @@
>  #include <pthread.h>
>  #include <time.h>
>  
> +#include <shlib-compat.h>
> +#include <rt-libc.h>
> +
>  #include "posix-timer.h"
>  
>  
>  /* Set timer TIMERID to VALUE, returning old value in OVLAUE.  */
>  int
> -timer_settime (timer_t timerid, int flags, const struct itimerspec *value,
> -            struct itimerspec *ovalue)
> +__timer_settime (timer_t timerid, int flags, const struct itimerspec *value,
> +              struct itimerspec *ovalue)
>  {
>    struct timer_node *timer;
>    struct thread_node *thread = NULL;
> @@ -56,7 +59,7 @@ timer_settime (timer_t timerid, int flags, const struct 
> itimerspec *value,
>        have_now = 1;
>      }
>  
> -  pthread_mutex_lock (&__timer_mutex);
> +  __pthread_mutex_lock (&__timer_mutex);
>    timer_addref (timer);
>  
>    /* One final check of timer validity; this one is possible only
> @@ -76,10 +79,10 @@ timer_settime (timer_t timerid, int flags, const struct 
> itimerspec *value,
>       {
>         if (! have_now)
>           {
> -           pthread_mutex_unlock (&__timer_mutex);
> +           __pthread_mutex_unlock (&__timer_mutex);
>             __clock_gettime (timer->clock, &now);
>             have_now = 1;
> -           pthread_mutex_lock (&__timer_mutex);
> +           __pthread_mutex_lock (&__timer_mutex);
>             timer_addref (timer);
>           }
>  
> @@ -120,7 +123,7 @@ timer_settime (timer_t timerid, int flags, const struct 
> itimerspec *value,
>  
>  unlock_bail:
>    timer_delref (timer);
> -  pthread_mutex_unlock (&__timer_mutex);
> +  __pthread_mutex_unlock (&__timer_mutex);
>  
>  bail:
>    if (thread != NULL && need_wakeup)
> @@ -128,3 +131,7 @@ bail:
>  
>    return retval;
>  }
> +versioned_symbol (libc, __timer_settime, timer_settime, RT_IN_LIBC);
> +#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, RT_IN_LIBC)
> +compat_symbol (librt, __timer_settime, timer_settime, GLIBC_2_2);
> +#endif
> diff --git a/sysdeps/htl/Makefile b/sysdeps/htl/Makefile
> index 12bb54ebf4..624d1be7b6 100644
> --- a/sysdeps/htl/Makefile
> +++ b/sysdeps/htl/Makefile
> @@ -1,5 +1,5 @@
>  ifeq ($(subdir),rt)
> -librt-sysdep_routines += timer_routines
> +sysdep_routines += timer_routines
>  endif
>  
>  ifeq ($(subdir),posix)
> diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h
> index 9ffd518b19..d6e669abf8 100644
> --- a/sysdeps/htl/pthreadP.h
> +++ b/sysdeps/htl/pthreadP.h
> @@ -200,8 +200,11 @@ int __pthread_key_delete (pthread_key_t key);
>  libc_hidden_proto (__pthread_key_delete)
>  int __pthread_once (pthread_once_t *once_control, void (*init_routine) 
> (void));
>  
> +int __pthread_attr_destroy (pthread_attr_t *attr);
>  int __pthread_getattr_np (pthread_t, pthread_attr_t *);
>  libc_hidden_proto (__pthread_getattr_np)
> +int __pthread_attr_setdetachstate (pthread_attr_t *attr,
> +                                int detachstate);
>  int __pthread_attr_getstackaddr (const pthread_attr_t *__restrict __attr,
>                                void **__restrict __stackaddr);
>  libc_hidden_proto (__pthread_attr_getstackaddr)
> @@ -221,6 +224,10 @@ void __pthread_testcancel (void);
>  libc_hidden_proto (__pthread_testcancel)
>  int __pthread_attr_init (pthread_attr_t *attr);
>  int __pthread_condattr_init (pthread_condattr_t *attr);
> +int __pthread_getschedparam (pthread_t thread_id, int *policy,
> +                          struct sched_param *param);
> +int __pthread_setschedparam (pthread_t thread_id, int policy,
> +                          const struct sched_param *param);
>  int __pthread_setconcurrency (int __new_level);
>  libc_hidden_proto (__pthread_setconcurrency)
>  int __pthread_getconcurrency (void);
> diff --git a/sysdeps/htl/rt-libc.h b/sysdeps/htl/rt-libc.h
> new file mode 100644
> index 0000000000..436055a8e8
> --- /dev/null
> +++ b/sysdeps/htl/rt-libc.h
> @@ -0,0 +1 @@
> +#define RT_IN_LIBC GLIBC_2_44
> diff --git a/sysdeps/htl/timer_routines.c b/sysdeps/htl/timer_routines.c
> index 2f46fa8168..808253dd94 100644
> --- a/sysdeps/htl/timer_routines.c
> +++ b/sysdeps/htl/timer_routines.c
> @@ -29,6 +29,8 @@
>  
>  #include "posix-timer.h"
>  #include <timer_routines.h>
> +#include <register-atfork.h>
> +#include <dso_handle.h>
>  
>  #ifndef DELAYTIMER_MAX
>  # define DELAYTIMER_MAX INT_MAX
> @@ -145,15 +147,15 @@ thread_init (struct thread_node *thread, const 
> pthread_attr_t *attr, clockid_t c
>      thread->attr = *attr;
>    else
>      {
> -      pthread_attr_init (&thread->attr);
> -      pthread_attr_setdetachstate (&thread->attr, PTHREAD_CREATE_DETACHED);
> +      __pthread_attr_init (&thread->attr);
> +      __pthread_attr_setdetachstate (&thread->attr, PTHREAD_CREATE_DETACHED);
>      }
>  
>    thread->exists = 0;
>    INIT_LIST_HEAD (&thread->timer_queue);
>    __pthread_cond_init (&thread->cond, 0);
>    thread->current_timer = 0;
> -  thread->captured = pthread_self ();
> +  thread->captured = __pthread_self ();
>    thread->clock_id = clock_id;
>  }
>  
> @@ -202,7 +204,7 @@ void
>  __timer_init_once (void)
>  {
>    init_module ();
> -  pthread_atfork (0, 0, reinit_after_fork);
> +  __register_atfork (0, 0, reinit_after_fork, __dso_handle);
>  }
>  
>  
> @@ -317,9 +319,9 @@ thread_expire_timer (struct thread_node *self, struct 
> timer_node *timer)
>       INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, info.si_signo, &info);
>        }
>  #else
> -      if (pthread_kill (self->captured, timer->event.sigev_signo) != 0)
> +      if (__pthread_kill (self->captured, timer->event.sigev_signo) != 0)
>       {
> -       if (pthread_kill (self->id, timer->event.sigev_signo) != 0)
> +       if (__pthread_kill (self->id, timer->event.sigev_signo) != 0)
>           abort ();
>          }
>  #endif
> @@ -470,8 +472,8 @@ __timer_thread_start (struct thread_node *thread)
>    sigfillset (&set);
>    __pthread_sigmask (SIG_SETMASK, &set, &oset);
>  
> -  if (pthread_create (&thread->id, &thread->attr,
> -                   (void *(*) (void *)) thread_func, thread) != 0)
> +  if (__pthread_create (&thread->id, &thread->attr,
> +                     (void *(*) (void *)) thread_func, thread) != 0)
>      {
>        thread->exists = 0;
>        retval = -1;
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist 
> b/sysdeps/mach/hurd/i386/libc.abilist
> index 08dcd85cd9..5641e986c1 100644
> --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -756,6 +756,21 @@ GLIBC_2.2.6 addmntent F
>  GLIBC_2.2.6 addseverity F
>  GLIBC_2.2.6 adjtime F
>  GLIBC_2.2.6 advance F
> +GLIBC_2.2.6 aio_cancel F
> +GLIBC_2.2.6 aio_cancel64 F
> +GLIBC_2.2.6 aio_error F
> +GLIBC_2.2.6 aio_error64 F
> +GLIBC_2.2.6 aio_fsync F
> +GLIBC_2.2.6 aio_fsync64 F
> +GLIBC_2.2.6 aio_init F
> +GLIBC_2.2.6 aio_read F
> +GLIBC_2.2.6 aio_read64 F
> +GLIBC_2.2.6 aio_return F
> +GLIBC_2.2.6 aio_return64 F
> +GLIBC_2.2.6 aio_suspend F
> +GLIBC_2.2.6 aio_suspend64 F
> +GLIBC_2.2.6 aio_write F
> +GLIBC_2.2.6 aio_write64 F
>  GLIBC_2.2.6 alarm F
>  GLIBC_2.2.6 alphasort F
>  GLIBC_2.2.6 alphasort64 F
> @@ -1340,6 +1355,8 @@ GLIBC_2.2.6 ldexpl F
>  GLIBC_2.2.6 ldiv F
>  GLIBC_2.2.6 lfind F
>  GLIBC_2.2.6 link F
> +GLIBC_2.2.6 lio_listio F
> +GLIBC_2.2.6 lio_listio64 F
>  GLIBC_2.2.6 listen F
>  GLIBC_2.2.6 llabs F
>  GLIBC_2.2.6 lldiv F
> @@ -1882,6 +1899,11 @@ GLIBC_2.2.6 thread_switch F
>  GLIBC_2.2.6 time F
>  GLIBC_2.2.6 timegm F
>  GLIBC_2.2.6 timelocal F
> +GLIBC_2.2.6 timer_create F
> +GLIBC_2.2.6 timer_delete F
> +GLIBC_2.2.6 timer_getoverrun F
> +GLIBC_2.2.6 timer_gettime F
> +GLIBC_2.2.6 timer_settime F
>  GLIBC_2.2.6 times F
>  GLIBC_2.2.6 timezone D 0x4
>  GLIBC_2.2.6 tmpfile F
> @@ -2327,6 +2349,16 @@ GLIBC_2.3.4 __xpg_strerror_r F
>  GLIBC_2.3.4 dlmopen F
>  GLIBC_2.3.4 getipv4sourcefilter F
>  GLIBC_2.3.4 getsourcefilter F
> +GLIBC_2.3.4 mq_close F
> +GLIBC_2.3.4 mq_getattr F
> +GLIBC_2.3.4 mq_notify F
> +GLIBC_2.3.4 mq_open F
> +GLIBC_2.3.4 mq_receive F
> +GLIBC_2.3.4 mq_send F
> +GLIBC_2.3.4 mq_setattr F
> +GLIBC_2.3.4 mq_timedreceive F
> +GLIBC_2.3.4 mq_timedsend F
> +GLIBC_2.3.4 mq_unlink F
>  GLIBC_2.3.4 regexec F
>  GLIBC_2.3.4 setipv4sourcefilter F
>  GLIBC_2.3.4 setsourcefilter F
> @@ -2617,6 +2649,8 @@ GLIBC_2.4 fchownat F
>  GLIBC_2.4 fdopendir F
>  GLIBC_2.4 futimesat F
>  GLIBC_2.4 linkat F
> +GLIBC_2.4 lio_listio F
> +GLIBC_2.4 lio_listio64 F
>  GLIBC_2.4 mkdirat F
>  GLIBC_2.4 mkfifoat F
>  GLIBC_2.4 open_wmemstream F
> @@ -2760,6 +2794,39 @@ GLIBC_2.43 tss_delete F
>  GLIBC_2.43 tss_get F
>  GLIBC_2.43 tss_set F
>  GLIBC_2.43 umaxabs F
> +GLIBC_2.44 __mq_open_2 F
> +GLIBC_2.44 aio_cancel F
> +GLIBC_2.44 aio_cancel64 F
> +GLIBC_2.44 aio_error F
> +GLIBC_2.44 aio_error64 F
> +GLIBC_2.44 aio_fsync F
> +GLIBC_2.44 aio_fsync64 F
> +GLIBC_2.44 aio_init F
> +GLIBC_2.44 aio_read F
> +GLIBC_2.44 aio_read64 F
> +GLIBC_2.44 aio_return F
> +GLIBC_2.44 aio_return64 F
> +GLIBC_2.44 aio_suspend F
> +GLIBC_2.44 aio_suspend64 F
> +GLIBC_2.44 aio_write F
> +GLIBC_2.44 aio_write64 F
> +GLIBC_2.44 lio_listio F
> +GLIBC_2.44 lio_listio64 F
> +GLIBC_2.44 mq_close F
> +GLIBC_2.44 mq_getattr F
> +GLIBC_2.44 mq_notify F
> +GLIBC_2.44 mq_open F
> +GLIBC_2.44 mq_receive F
> +GLIBC_2.44 mq_send F
> +GLIBC_2.44 mq_setattr F
> +GLIBC_2.44 mq_timedreceive F
> +GLIBC_2.44 mq_timedsend F
> +GLIBC_2.44 mq_unlink F
> +GLIBC_2.44 timer_create F
> +GLIBC_2.44 timer_delete F
> +GLIBC_2.44 timer_getoverrun F
> +GLIBC_2.44 timer_gettime F
> +GLIBC_2.44 timer_settime F
>  GLIBC_2.5 __readlinkat_chk F
>  GLIBC_2.5 inet6_opt_append F
>  GLIBC_2.5 inet6_opt_find F
> @@ -2792,6 +2859,7 @@ GLIBC_2.7 __isoc99_vsscanf F
>  GLIBC_2.7 __isoc99_vswscanf F
>  GLIBC_2.7 __isoc99_vwscanf F
>  GLIBC_2.7 __isoc99_wscanf F
> +GLIBC_2.7 __mq_open_2 F
>  GLIBC_2.7 __open64_2 F
>  GLIBC_2.7 __open_2 F
>  GLIBC_2.7 __openat64_2 F
> diff --git a/sysdeps/mach/hurd/i386/librt.abilist 
> b/sysdeps/mach/hurd/i386/librt.abilist
> index 022e10b897..5cd8c1366c 100644
> --- a/sysdeps/mach/hurd/i386/librt.abilist
> +++ b/sysdeps/mach/hurd/i386/librt.abilist
> @@ -1,35 +1,4 @@
> -GLIBC_2.2.6 aio_cancel F
> -GLIBC_2.2.6 aio_cancel64 F
> -GLIBC_2.2.6 aio_error F
> -GLIBC_2.2.6 aio_error64 F
> -GLIBC_2.2.6 aio_fsync F
> -GLIBC_2.2.6 aio_fsync64 F
> -GLIBC_2.2.6 aio_init F
> -GLIBC_2.2.6 aio_read F
> -GLIBC_2.2.6 aio_read64 F
> -GLIBC_2.2.6 aio_return F
> -GLIBC_2.2.6 aio_return64 F
> -GLIBC_2.2.6 aio_suspend F
> -GLIBC_2.2.6 aio_suspend64 F
> -GLIBC_2.2.6 aio_write F
> -GLIBC_2.2.6 aio_write64 F
> -GLIBC_2.2.6 lio_listio F
> -GLIBC_2.2.6 lio_listio64 F
> -GLIBC_2.2.6 timer_create F
> -GLIBC_2.2.6 timer_delete F
> -GLIBC_2.2.6 timer_getoverrun F
> -GLIBC_2.2.6 timer_gettime F
> -GLIBC_2.2.6 timer_settime F
> -GLIBC_2.3.4 mq_close F
> -GLIBC_2.3.4 mq_getattr F
> -GLIBC_2.3.4 mq_notify F
> -GLIBC_2.3.4 mq_open F
> -GLIBC_2.3.4 mq_receive F
> -GLIBC_2.3.4 mq_send F
> -GLIBC_2.3.4 mq_setattr F
> -GLIBC_2.3.4 mq_timedreceive F
> -GLIBC_2.3.4 mq_timedsend F
> -GLIBC_2.3.4 mq_unlink F
> -GLIBC_2.4 lio_listio F
> -GLIBC_2.4 lio_listio64 F
> -GLIBC_2.7 __mq_open_2 F
> +GLIBC_2.2.6 __librt_version_placeholder F
> +GLIBC_2.3.4 __librt_version_placeholder F
> +GLIBC_2.4 __librt_version_placeholder F
> +GLIBC_2.7 __librt_version_placeholder F
> diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist 
> b/sysdeps/mach/hurd/x86_64/libc.abilist
> index c17d5399e4..761e399dc9 100644
> --- a/sysdeps/mach/hurd/x86_64/libc.abilist
> +++ b/sysdeps/mach/hurd/x86_64/libc.abilist
> @@ -364,6 +364,7 @@ GLIBC_2.38 __mig_put_reply_port F
>  GLIBC_2.38 __mig_strncpy F
>  GLIBC_2.38 __mmap F
>  GLIBC_2.38 __monstartup F
> +GLIBC_2.38 __mq_open_2 F
>  GLIBC_2.38 __nanosleep F
>  GLIBC_2.38 __newlocale F
>  GLIBC_2.38 __nl_langinfo_l F
> @@ -634,6 +635,21 @@ GLIBC_2.38 acct F
>  GLIBC_2.38 addmntent F
>  GLIBC_2.38 addseverity F
>  GLIBC_2.38 adjtime F
> +GLIBC_2.38 aio_cancel F
> +GLIBC_2.38 aio_cancel64 F
> +GLIBC_2.38 aio_error F
> +GLIBC_2.38 aio_error64 F
> +GLIBC_2.38 aio_fsync F
> +GLIBC_2.38 aio_fsync64 F
> +GLIBC_2.38 aio_init F
> +GLIBC_2.38 aio_read F
> +GLIBC_2.38 aio_read64 F
> +GLIBC_2.38 aio_return F
> +GLIBC_2.38 aio_return64 F
> +GLIBC_2.38 aio_suspend F
> +GLIBC_2.38 aio_suspend64 F
> +GLIBC_2.38 aio_write F
> +GLIBC_2.38 aio_write64 F
>  GLIBC_2.38 alarm F
>  GLIBC_2.38 aligned_alloc F
>  GLIBC_2.38 alphasort F
> @@ -1293,6 +1309,8 @@ GLIBC_2.38 lfind F
>  GLIBC_2.38 lgetxattr F
>  GLIBC_2.38 link F
>  GLIBC_2.38 linkat F
> +GLIBC_2.38 lio_listio F
> +GLIBC_2.38 lio_listio64 F
>  GLIBC_2.38 listen F
>  GLIBC_2.38 listxattr F
>  GLIBC_2.38 llabs F
> @@ -1411,6 +1429,16 @@ GLIBC_2.38 moncontrol F
>  GLIBC_2.38 monstartup F
>  GLIBC_2.38 mprobe F
>  GLIBC_2.38 mprotect F
> +GLIBC_2.38 mq_close F
> +GLIBC_2.38 mq_getattr F
> +GLIBC_2.38 mq_notify F
> +GLIBC_2.38 mq_open F
> +GLIBC_2.38 mq_receive F
> +GLIBC_2.38 mq_send F
> +GLIBC_2.38 mq_setattr F
> +GLIBC_2.38 mq_timedreceive F
> +GLIBC_2.38 mq_timedsend F
> +GLIBC_2.38 mq_unlink F
>  GLIBC_2.38 mrand48 F
>  GLIBC_2.38 mrand48_r F
>  GLIBC_2.38 mremap F
> @@ -2059,6 +2087,11 @@ GLIBC_2.38 thread_switch F
>  GLIBC_2.38 time F
>  GLIBC_2.38 timegm F
>  GLIBC_2.38 timelocal F
> +GLIBC_2.38 timer_create F
> +GLIBC_2.38 timer_delete F
> +GLIBC_2.38 timer_getoverrun F
> +GLIBC_2.38 timer_gettime F
> +GLIBC_2.38 timer_settime F
>  GLIBC_2.38 times F
>  GLIBC_2.38 timespec_get F
>  GLIBC_2.38 timespec_getres F
> @@ -2437,6 +2470,39 @@ GLIBC_2.43 tss_delete F
>  GLIBC_2.43 tss_get F
>  GLIBC_2.43 tss_set F
>  GLIBC_2.43 umaxabs F
> +GLIBC_2.44 __mq_open_2 F
> +GLIBC_2.44 aio_cancel F
> +GLIBC_2.44 aio_cancel64 F
> +GLIBC_2.44 aio_error F
> +GLIBC_2.44 aio_error64 F
> +GLIBC_2.44 aio_fsync F
> +GLIBC_2.44 aio_fsync64 F
> +GLIBC_2.44 aio_init F
> +GLIBC_2.44 aio_read F
> +GLIBC_2.44 aio_read64 F
> +GLIBC_2.44 aio_return F
> +GLIBC_2.44 aio_return64 F
> +GLIBC_2.44 aio_suspend F
> +GLIBC_2.44 aio_suspend64 F
> +GLIBC_2.44 aio_write F
> +GLIBC_2.44 aio_write64 F
> +GLIBC_2.44 lio_listio F
> +GLIBC_2.44 lio_listio64 F
> +GLIBC_2.44 mq_close F
> +GLIBC_2.44 mq_getattr F
> +GLIBC_2.44 mq_notify F
> +GLIBC_2.44 mq_open F
> +GLIBC_2.44 mq_receive F
> +GLIBC_2.44 mq_send F
> +GLIBC_2.44 mq_setattr F
> +GLIBC_2.44 mq_timedreceive F
> +GLIBC_2.44 mq_timedsend F
> +GLIBC_2.44 mq_unlink F
> +GLIBC_2.44 timer_create F
> +GLIBC_2.44 timer_delete F
> +GLIBC_2.44 timer_getoverrun F
> +GLIBC_2.44 timer_gettime F
> +GLIBC_2.44 timer_settime F
>  HURD_CTHREADS_0.3 __mutex_init F
>  HURD_CTHREADS_0.3 __mutex_lock F
>  HURD_CTHREADS_0.3 __mutex_trylock F
> diff --git a/sysdeps/mach/hurd/x86_64/librt.abilist 
> b/sysdeps/mach/hurd/x86_64/librt.abilist
> index fa148abbac..f3235332ee 100644
> --- a/sysdeps/mach/hurd/x86_64/librt.abilist
> +++ b/sysdeps/mach/hurd/x86_64/librt.abilist
> @@ -1,33 +1 @@
> -GLIBC_2.38 __mq_open_2 F
> -GLIBC_2.38 aio_cancel F
> -GLIBC_2.38 aio_cancel64 F
> -GLIBC_2.38 aio_error F
> -GLIBC_2.38 aio_error64 F
> -GLIBC_2.38 aio_fsync F
> -GLIBC_2.38 aio_fsync64 F
> -GLIBC_2.38 aio_init F
> -GLIBC_2.38 aio_read F
> -GLIBC_2.38 aio_read64 F
> -GLIBC_2.38 aio_return F
> -GLIBC_2.38 aio_return64 F
> -GLIBC_2.38 aio_suspend F
> -GLIBC_2.38 aio_suspend64 F
> -GLIBC_2.38 aio_write F
> -GLIBC_2.38 aio_write64 F
> -GLIBC_2.38 lio_listio F
> -GLIBC_2.38 lio_listio64 F
> -GLIBC_2.38 mq_close F
> -GLIBC_2.38 mq_getattr F
> -GLIBC_2.38 mq_notify F
> -GLIBC_2.38 mq_open F
> -GLIBC_2.38 mq_receive F
> -GLIBC_2.38 mq_send F
> -GLIBC_2.38 mq_setattr F
> -GLIBC_2.38 mq_timedreceive F
> -GLIBC_2.38 mq_timedsend F
> -GLIBC_2.38 mq_unlink F
> -GLIBC_2.38 timer_create F
> -GLIBC_2.38 timer_delete F
> -GLIBC_2.38 timer_getoverrun F
> -GLIBC_2.38 timer_gettime F
> -GLIBC_2.38 timer_settime F
> +GLIBC_2.38 __librt_version_placeholder F
> diff --git a/sysdeps/nptl/rt-libc.h b/sysdeps/nptl/rt-libc.h
> new file mode 100644
> index 0000000000..12c6fa1743
> --- /dev/null
> +++ b/sysdeps/nptl/rt-libc.h
> @@ -0,0 +1 @@
> +#define RT_IN_LIBC GLIBC_2_34
> -- 
> 2.51.0
> 

-- 
Samuel
<Y> C'ETAIT PAS UN BUG !
<y> :ppp
<y> c ce qu'on dit ;)
<Y> (j'ai appuye sur ON, ca peut arriver, non ?)
 -+- #hp debuggue IRCprime -+-

Reply via email to