[hurd,commited] rt: Move librt symbols to libc on hurd too

Samuel Thibault <[email protected]>
Newsgroups gmane.os.hurd.cvs,gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
---
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.