[34/34] Linux: Cleanups after librt move

Message ID df24df16f84f83370f9310303f3c54acf010d585.1623956058.git.fweimer@redhat.com
State New
Headers show
Series
  • Move librt into libc
Related show

Commit Message

H.J. Lu via Libc-alpha June 17, 2021, 7 p.m.
librt.so is no longer installed for PTHREAD_IN_LIBC, and tests
are not linked against it.

GLIBC_PRIVATE symbols that were needed during the transition are
removed again.
---
 elf/Makefile                                  |  4 +-
 nptl/Makefile                                 |  9 ----
 rt/Makefile                                   | 13 ++++--
 rt/Versions                                   | 13 ------
 rt/aio_misc.c                                 | 14 ------
 rt/aio_notify.c                               |  8 ----
 rt/aio_sigqueue.c                             |  1 -
 sysdeps/generic/aio_misc.h                    | 43 ++++++-------------
 sysdeps/pthread/Makefile                      |  2 +
 sysdeps/unix/sysv/linux/Versions              |  6 ---
 sysdeps/unix/sysv/linux/aio_sigqueue.c        |  1 -
 sysdeps/unix/sysv/linux/kernel-posix-timers.h | 19 +++-----
 sysdeps/unix/sysv/linux/timer_create.c        |  3 +-
 sysdeps/unix/sysv/linux/timer_routines.c      | 10 +----
 14 files changed, 37 insertions(+), 109 deletions(-)

-- 
2.31.1

Comments

H.J. Lu via Libc-alpha June 24, 2021, 5:45 p.m. | #1
On 17/06/2021 16:00, Florian Weimer via Libc-alpha wrote:
> librt.so is no longer installed for PTHREAD_IN_LIBC, and tests

> are not linked against it.

> 

> GLIBC_PRIVATE symbols that were needed during the transition are

> removed again.


There are some more leftover I recently added to add timers on time64
tests:

  ifeq (yes,$(build-shared))
  librt = $(common-objpfx)rt/librt.so
  else
  librt = $(common-objpfx)rt/librt.a
  endif

The patch looks ok, but you might want to update it against master.

> ---

>  elf/Makefile                                  |  4 +-

>  nptl/Makefile                                 |  9 ----

>  rt/Makefile                                   | 13 ++++--

>  rt/Versions                                   | 13 ------

>  rt/aio_misc.c                                 | 14 ------

>  rt/aio_notify.c                               |  8 ----

>  rt/aio_sigqueue.c                             |  1 -

>  sysdeps/generic/aio_misc.h                    | 43 ++++++-------------

>  sysdeps/pthread/Makefile                      |  2 +

>  sysdeps/unix/sysv/linux/Versions              |  6 ---

>  sysdeps/unix/sysv/linux/aio_sigqueue.c        |  1 -

>  sysdeps/unix/sysv/linux/kernel-posix-timers.h | 19 +++-----

>  sysdeps/unix/sysv/linux/timer_create.c        |  3 +-

>  sysdeps/unix/sysv/linux/timer_routines.c      | 10 +----

>  14 files changed, 37 insertions(+), 109 deletions(-)

> 

> diff --git a/elf/Makefile b/elf/Makefile

> index 38d08e03b8..f9dac8dcc9 100644

> --- a/elf/Makefile

> +++ b/elf/Makefile

> @@ -1179,7 +1179,6 @@ localplt-built-dso := $(addprefix $(common-objpfx),\

>  				  libc.so \

>  				  elf/ld.so \

>  				  math/libm.so \

> -				  rt/librt.so \

>  				  dlfcn/libdl.so \

>  				  resolv/libresolv.so \

>  		       )

> @@ -1192,6 +1191,9 @@ endif

>  ifeq ($(build-crypt),yes)

>  localplt-built-dso += $(addprefix $(common-objpfx), crypt/libcrypt.so)

>  endif

> +ifneq ($(pthread-in-libc),yes)

> +localplt-built-dso += $(addprefix $(common-objpfx), rt/librt.so)

> +endif

>  

>  vpath localplt.data $(+sysdep_dirs)

>  


Ok.

> diff --git a/nptl/Makefile b/nptl/Makefile

> index bbaf796771..17a4b63730 100644

> --- a/nptl/Makefile

> +++ b/nptl/Makefile

> @@ -536,15 +536,6 @@ $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \

>  	$(evaluate-test)

>  endif

>  

> -ifeq (yes,$(build-shared))

> -librt = $(common-objpfx)rt/librt.so

> -else

> -librt = $(common-objpfx)rt/librt.a

> -endif

> -

> -$(objpfx)tst-cancel17: $(librt)

> -$(objpfx)tst-cancelx17: $(librt)

> -

>  LDLIBS-tst-cancel24 = -Wl,--no-as-needed -lstdc++

>  LDLIBS-tst-cancel24-static = $(LDLIBS-tst-cancel24)

>  


Ok.

> diff --git a/rt/Makefile b/rt/Makefile

> index c1e989ede8..8945fbf94d 100644

> --- a/rt/Makefile

> +++ b/rt/Makefile

> @@ -28,9 +28,7 @@ routines = \

>    shm_open \

>    shm_unlink \

>  

> -librt-routines = \

> -  librt-compat \

> -

> +librt-routines = librt-compat

>  librt-shared-only-routines = librt-compat

>  

>  $(librt-routines-var) += \

> @@ -64,6 +62,13 @@ $(librt-routines-var) += \

>    timer_gettime \

>    timer_settime \

>  

> +ifeq ($(pthread-in-libc),yes)

> +# Pretend that libdl.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 \

>  	 tst-aio7 tst-aio8 tst-aio9 tst-aio10 \

> @@ -96,6 +101,7 @@ 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)

> @@ -103,5 +109,6 @@ else

>  $(addprefix $(objpfx),$(tests)) $(tests-internal): \

>  	$(objpfx)librt.a $(static-thread-library)

>  endif

> +endif # !$(pthread-in-libc)

>  

>  tst-mqueue7-ARGS = -- $(host-test-program-cmd)



Ok.

> diff --git a/rt/Versions b/rt/Versions

> index 7e41beae06..a3dc72cff4 100644

> --- a/rt/Versions

> +++ b/rt/Versions

> @@ -95,19 +95,6 @@ libc {

>      shm_open;

>      shm_unlink;

>    }

> -%if PTHREAD_IN_LIBC

> -  GLIBC_PRIVATE {

> -    __aio_enqueue_request;

> -    __aio_find_req;

> -    __aio_find_req_fd;

> -    __aio_free_request;

> -    __aio_notify;

> -    __aio_notify_only;

> -    __aio_remove_request;

> -    __aio_requests_mutex;

> -    __aio_sigqueue;

> -  }

> -%endif

>  }

>  librt {

>    GLIBC_2.1 {


Ok.

> diff --git a/rt/aio_misc.c b/rt/aio_misc.c

> index d9be8ac33d..856a1b2755 100644

> --- a/rt/aio_misc.c

> +++ b/rt/aio_misc.c

> @@ -735,24 +735,10 @@ add_request_to_runlist (struct requestlist *newrequest)

>  }

>  

>  #if PTHREAD_IN_LIBC

> -libc_hidden_data_def (__aio_requests_mutex)

> -libc_hidden_def (__aio_enqueue_request)

> -libc_hidden_def (__aio_find_req)

> -libc_hidden_def (__aio_find_req_fd)

> -libc_hidden_def (__aio_free_request)

> -libc_hidden_def (__aio_remove_request)

> -

>  versioned_symbol (libc, __aio_init, aio_init, GLIBC_2_34);

>  # if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)

>  compat_symbol (librt, __aio_init, aio_init, GLIBC_2_1);

>  # endif

> -

>  #else /* !PTHREAD_IN_LIBC */

> -librt_hidden_data_def (__aio_requests_mutex)

> -librt_hidden_def (__aio_enqueue_request)

> -librt_hidden_def (__aio_find_req)

> -librt_hidden_def (__aio_find_req_fd)

> -librt_hidden_def (__aio_free_request)

> -librt_hidden_def (__aio_remove_request)

>  weak_alias (__aio_init, aio_init)

>  #endif /* !PTHREAD_IN_LIBC */


Ok.

> diff --git a/rt/aio_notify.c b/rt/aio_notify.c

> index 432000e34b..0fa84f203c 100644

> --- a/rt/aio_notify.c

> +++ b/rt/aio_notify.c

> @@ -160,11 +160,3 @@ __aio_notify (struct requestlist *req)

>        waitlist = next;

>      }

>  }

> -

> -#if PTHREAD_IN_LIBC

> -libc_hidden_def (__aio_notify)

> -libc_hidden_def (__aio_notify_only)

> -#else

> -librt_hidden_def (__aio_notify)

> -librt_hidden_def (__aio_notify_only)

> -#endif


Ok.

> diff --git a/rt/aio_sigqueue.c b/rt/aio_sigqueue.c

> index 0ad95ae04c..84848bacd8 100644

> --- a/rt/aio_sigqueue.c

> +++ b/rt/aio_sigqueue.c

> @@ -28,5 +28,4 @@ __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)

>    __set_errno (ENOSYS);

>    return -1;

>  }

> -librt_hidden_def (__aio_sigqueue)

>  stub_warning (__aio_sigqueue)


Ok.

> diff --git a/sysdeps/generic/aio_misc.h b/sysdeps/generic/aio_misc.h

> index d9bff36e50..4d05b8cdd6 100644

> --- a/sysdeps/generic/aio_misc.h

> +++ b/sysdeps/generic/aio_misc.h

> @@ -87,55 +87,36 @@ struct requestlist

>  

>  

>  /* Lock for global I/O list of requests.  */

> -extern pthread_mutex_t __aio_requests_mutex;

> +extern pthread_mutex_t __aio_requests_mutex attribute_hidden;

>  

>  

>  /* Enqueue request.  */

>  extern struct requestlist *__aio_enqueue_request (aiocb_union *aiocbp,

> -						  int operation);

> +						  int operation)

> +  attribute_hidden;

>  

>  /* Find request entry for given AIO control block.  */

> -extern struct requestlist *__aio_find_req (aiocb_union *elem);

> +extern struct requestlist *__aio_find_req (aiocb_union *elem) attribute_hidden;

>  

>  /* Find request entry for given file descriptor.  */

> -extern struct requestlist *__aio_find_req_fd (int fildes);

> +extern struct requestlist *__aio_find_req_fd (int fildes) attribute_hidden;

>  

>  /* Remove request from the list.  */

>  extern void __aio_remove_request (struct requestlist *last,

> -				  struct requestlist *req, int all);

> +				  struct requestlist *req, int all)

> +  attribute_hidden;

>  

>  /* Release the entry for the request.  */

> -extern void __aio_free_request (struct requestlist *req);

> +extern void __aio_free_request (struct requestlist *req) attribute_hidden;

>  

>  /* Notify initiator of request and tell this everybody listening.  */

> -extern void __aio_notify (struct requestlist *req);

> +extern void __aio_notify (struct requestlist *req) attribute_hidden;

>  

>  /* Notify initiator of request.  */

> -extern int __aio_notify_only (struct sigevent *sigev);

> +extern int __aio_notify_only (struct sigevent *sigev) attribute_hidden;

>  

>  /* Send the signal.  */

> -extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid);

> -

> -#if PTHREAD_IN_LIBC

> -libc_hidden_proto (__aio_enqueue_request)

> -libc_hidden_proto (__aio_find_req)

> -libc_hidden_proto (__aio_find_req_fd)

> -libc_hidden_proto (__aio_free_request)

> -libc_hidden_proto (__aio_notify)

> -libc_hidden_proto (__aio_notify_only)

> -libc_hidden_proto (__aio_remove_request)

> -libc_hidden_proto (__aio_requests_mutex)

> -libc_hidden_proto (__aio_sigqueue)

> -#else

> -librt_hidden_proto (__aio_enqueue_request)

> -librt_hidden_proto (__aio_find_req)

> -librt_hidden_proto (__aio_find_req_fd)

> -librt_hidden_proto (__aio_free_request)

> -librt_hidden_proto (__aio_notify)

> -librt_hidden_proto (__aio_notify_only)

> -librt_hidden_proto (__aio_remove_request)

> -librt_hidden_proto (__aio_requests_mutex)

> -librt_hidden_proto (__aio_sigqueue)

> -#endif

> +extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)

> +  attribute_hidden;

>  

>  #endif /* aio_misc.h */


Ok.

> diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile

> index 9e6ed3c6f7..cca0d4da0d 100644

> --- a/sysdeps/pthread/Makefile

> +++ b/sysdeps/pthread/Makefile

> @@ -18,11 +18,13 @@

>  

>  ifeq ($(subdir),rt)

>  

> +ifneq ($(pthread-in-libc),yes)

>  ifeq (yes,$(build-shared))

>  $(objpfx)tst-timer: $(objpfx)librt.so $(shared-thread-library)

>  else

>  $(objpfx)tst-timer: $(objpfx)librt.a $(static-thread-library)

>  endif

> +endif # !$(pthread-in-libc)

>  

>  endif

>  


Ok.

> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions

> index 578d55e7fd..29ed24591d 100644

> --- a/sysdeps/unix/sysv/linux/Versions

> +++ b/sysdeps/unix/sysv/linux/Versions

> @@ -291,12 +291,6 @@ libc {

>      __pread64_nocancel;

>      __close_nocancel;

>      __sigtimedwait;

> -    __timer_active_sigev_thread;

> -    __timer_active_sigev_thread_lock;

> -    __timer_compat_list;

> -    __timer_helper_once;

> -    __timer_helper_tid;

> -    __timer_start_helper_thread;

>      # functions used by nscd

>      __netlink_assert_response;

>    }


Ok.

> diff --git a/sysdeps/unix/sysv/linux/aio_sigqueue.c b/sysdeps/unix/sysv/linux/aio_sigqueue.c

> index bd0da6e763..0b0f347197 100644

> --- a/sysdeps/unix/sysv/linux/aio_sigqueue.c

> +++ b/sysdeps/unix/sysv/linux/aio_sigqueue.c

> @@ -44,4 +44,3 @@ __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)

>  

>    return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, sig, &info);

>  }

> -libc_hidden_def (__aio_sigqueue)

> diff --git a/sysdeps/unix/sysv/linux/kernel-posix-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-timers.h

> index a976b028e0..0f7eff1794 100644

> --- a/sysdeps/unix/sysv/linux/kernel-posix-timers.h

> +++ b/sysdeps/unix/sysv/linux/kernel-posix-timers.h

> @@ -26,27 +26,23 @@

>  extern int __no_posix_timers attribute_hidden;

>  

>  /* Callback to start helper thread.  */

> -extern void __timer_start_helper_thread (void);

> -libc_hidden_proto (__timer_start_helper_thread)

> +extern void __timer_start_helper_thread (void) attribute_hidden;

>  

>  /* Control variable for helper thread creation.  */

> -extern pthread_once_t __timer_helper_once;

> -libc_hidden_proto (__timer_helper_once)

> +extern pthread_once_t __timer_helper_once attribute_hidden;

>  

>  /* Called from fork so that the new subprocess re-creates the

>     notification thread if necessary.  */

>  void __timer_fork_subprocess (void) attribute_hidden;

>  

>  /* TID of the helper thread.  */

> -extern pid_t __timer_helper_tid;

> -libc_hidden_proto (__timer_helper_tid)

> +extern pid_t __timer_helper_tid attribute_hidden;

>  

>  /* List of active SIGEV_THREAD timers.  */

> -extern struct timer *__timer_active_sigev_thread;

> -libc_hidden_proto (__timer_active_sigev_thread)

> +extern struct timer *__timer_active_sigev_thread attribute_hidden;

> +

>  /* Lock for __timer_active_sigev_thread.  */

> -extern pthread_mutex_t __timer_active_sigev_thread_lock;

> -libc_hidden_proto (__timer_active_sigev_thread_lock)

> +extern pthread_mutex_t __timer_active_sigev_thread_lock attribute_hidden;

>  

>  extern __typeof (timer_create) __timer_create;

>  libc_hidden_proto (__timer_create)

> @@ -117,5 +113,4 @@ timerid_to_kernel_timer (timer_t timerid)

>  

>  /* Used if an override sets TIMER_T_WAS_INT_COMPAT to 1.  */

>  #define OLD_TIMER_MAX 256

> -extern timer_t __timer_compat_list[OLD_TIMER_MAX];

> -libc_hidden_proto (__timer_compat_list)

> +extern timer_t __timer_compat_list[OLD_TIMER_MAX] attribute_hidden;


Ok.

> diff --git a/sysdeps/unix/sysv/linux/timer_create.c b/sysdeps/unix/sysv/linux/timer_create.c

> index 9861177cf2..230bc45083 100644

> --- a/sysdeps/unix/sysv/linux/timer_create.c

> +++ b/sysdeps/unix/sysv/linux/timer_create.c

> @@ -146,8 +146,7 @@ compat_symbol (librt, ___timer_create, timer_create, GLIBC_2_3_3);

>  # endif

>  

>  # if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)

> -timer_t __timer_compat_list[OLD_TIMER_MAX] __attribute__ ((nocommon));

> -libc_hidden_data_def (__timer_compat_list)

> +timer_t __timer_compat_list[OLD_TIMER_MAX];

>  

>  int

>  __timer_create_old (clockid_t clock_id, struct sigevent *evp, int *timerid)


Ok.

> diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c

> index fc3aa894ab..3a509d8ace 100644

> --- a/sysdeps/unix/sysv/linux/timer_routines.c

> +++ b/sysdeps/unix/sysv/linux/timer_routines.c

> @@ -26,13 +26,10 @@

>  

>  

>  /* List of active SIGEV_THREAD timers.  */

> -struct timer *__timer_active_sigev_thread __attribute__ ((nocommon));

> -libc_hidden_data_def (__timer_active_sigev_thread)

> +struct timer *__timer_active_sigev_thread;

>  

>  /* Lock for _timer_active_sigev_thread.  */

> -pthread_mutex_t __timer_active_sigev_thread_lock __attribute__ ((nocommon))

> -  = PTHREAD_MUTEX_INITIALIZER;

> -libc_hidden_data_def (__timer_active_sigev_thread_lock)

> +pthread_mutex_t __timer_active_sigev_thread_lock = PTHREAD_MUTEX_INITIALIZER;

>  

>  struct thread_start_data

>  {

> @@ -112,12 +109,10 @@ timer_helper_thread (void *arg)

>  /* Control variable for helper thread creation.  */

>  pthread_once_t __timer_helper_once __attribute__ ((nocommon))

>    = PTHREAD_ONCE_INIT;

> -libc_hidden_data_def (__timer_helper_once)

>  

>  

>  /* TID of the helper thread.  */

>  pid_t __timer_helper_tid __attribute__ ((nocommon));

> -libc_hidden_data_def (__timer_helper_tid)

>  

>  

>  /* Reset variables so that after a fork a new helper thread gets started.  */

> @@ -159,4 +154,3 @@ __timer_start_helper_thread (void)

>    /* No need for the attribute anymore.  */

>    (void) __pthread_attr_destroy (&attr);

>  }

> -libc_hidden_def (__timer_start_helper_thread)

> 


Ok.
H.J. Lu via Libc-alpha June 25, 2021, 8:53 a.m. | #2
* Adhemerval Zanella:

> On 17/06/2021 16:00, Florian Weimer via Libc-alpha wrote:

>> librt.so is no longer installed for PTHREAD_IN_LIBC, and tests

>> are not linked against it.

>> 

>> GLIBC_PRIVATE symbols that were needed during the transition are

>> removed again.

>

> There are some more leftover I recently added to add timers on time64

> tests:

>

>   ifeq (yes,$(build-shared))

>   librt = $(common-objpfx)rt/librt.so

>   else

>   librt = $(common-objpfx)rt/librt.a

>   endif

>

> The patch looks ok, but you might want to update it against master.


Okay, given that those are in generic code, we need to bring back
$(librt).

Thanks,
Florian

Patch

diff --git a/elf/Makefile b/elf/Makefile
index 38d08e03b8..f9dac8dcc9 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1179,7 +1179,6 @@  localplt-built-dso := $(addprefix $(common-objpfx),\
 				  libc.so \
 				  elf/ld.so \
 				  math/libm.so \
-				  rt/librt.so \
 				  dlfcn/libdl.so \
 				  resolv/libresolv.so \
 		       )
@@ -1192,6 +1191,9 @@  endif
 ifeq ($(build-crypt),yes)
 localplt-built-dso += $(addprefix $(common-objpfx), crypt/libcrypt.so)
 endif
+ifneq ($(pthread-in-libc),yes)
+localplt-built-dso += $(addprefix $(common-objpfx), rt/librt.so)
+endif
 
 vpath localplt.data $(+sysdep_dirs)
 
diff --git a/nptl/Makefile b/nptl/Makefile
index bbaf796771..17a4b63730 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -536,15 +536,6 @@  $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \
 	$(evaluate-test)
 endif
 
-ifeq (yes,$(build-shared))
-librt = $(common-objpfx)rt/librt.so
-else
-librt = $(common-objpfx)rt/librt.a
-endif
-
-$(objpfx)tst-cancel17: $(librt)
-$(objpfx)tst-cancelx17: $(librt)
-
 LDLIBS-tst-cancel24 = -Wl,--no-as-needed -lstdc++
 LDLIBS-tst-cancel24-static = $(LDLIBS-tst-cancel24)
 
diff --git a/rt/Makefile b/rt/Makefile
index c1e989ede8..8945fbf94d 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -28,9 +28,7 @@  routines = \
   shm_open \
   shm_unlink \
 
-librt-routines = \
-  librt-compat \
-
+librt-routines = librt-compat
 librt-shared-only-routines = librt-compat
 
 $(librt-routines-var) += \
@@ -64,6 +62,13 @@  $(librt-routines-var) += \
   timer_gettime \
   timer_settime \
 
+ifeq ($(pthread-in-libc),yes)
+# Pretend that libdl.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 \
 	 tst-aio7 tst-aio8 tst-aio9 tst-aio10 \
@@ -96,6 +101,7 @@  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)
@@ -103,5 +109,6 @@  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 7e41beae06..a3dc72cff4 100644
--- a/rt/Versions
+++ b/rt/Versions
@@ -95,19 +95,6 @@  libc {
     shm_open;
     shm_unlink;
   }
-%if PTHREAD_IN_LIBC
-  GLIBC_PRIVATE {
-    __aio_enqueue_request;
-    __aio_find_req;
-    __aio_find_req_fd;
-    __aio_free_request;
-    __aio_notify;
-    __aio_notify_only;
-    __aio_remove_request;
-    __aio_requests_mutex;
-    __aio_sigqueue;
-  }
-%endif
 }
 librt {
   GLIBC_2.1 {
diff --git a/rt/aio_misc.c b/rt/aio_misc.c
index d9be8ac33d..856a1b2755 100644
--- a/rt/aio_misc.c
+++ b/rt/aio_misc.c
@@ -735,24 +735,10 @@  add_request_to_runlist (struct requestlist *newrequest)
 }
 
 #if PTHREAD_IN_LIBC
-libc_hidden_data_def (__aio_requests_mutex)
-libc_hidden_def (__aio_enqueue_request)
-libc_hidden_def (__aio_find_req)
-libc_hidden_def (__aio_find_req_fd)
-libc_hidden_def (__aio_free_request)
-libc_hidden_def (__aio_remove_request)
-
 versioned_symbol (libc, __aio_init, aio_init, GLIBC_2_34);
 # if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
 compat_symbol (librt, __aio_init, aio_init, GLIBC_2_1);
 # endif
-
 #else /* !PTHREAD_IN_LIBC */
-librt_hidden_data_def (__aio_requests_mutex)
-librt_hidden_def (__aio_enqueue_request)
-librt_hidden_def (__aio_find_req)
-librt_hidden_def (__aio_find_req_fd)
-librt_hidden_def (__aio_free_request)
-librt_hidden_def (__aio_remove_request)
 weak_alias (__aio_init, aio_init)
 #endif /* !PTHREAD_IN_LIBC */
diff --git a/rt/aio_notify.c b/rt/aio_notify.c
index 432000e34b..0fa84f203c 100644
--- a/rt/aio_notify.c
+++ b/rt/aio_notify.c
@@ -160,11 +160,3 @@  __aio_notify (struct requestlist *req)
       waitlist = next;
     }
 }
-
-#if PTHREAD_IN_LIBC
-libc_hidden_def (__aio_notify)
-libc_hidden_def (__aio_notify_only)
-#else
-librt_hidden_def (__aio_notify)
-librt_hidden_def (__aio_notify_only)
-#endif
diff --git a/rt/aio_sigqueue.c b/rt/aio_sigqueue.c
index 0ad95ae04c..84848bacd8 100644
--- a/rt/aio_sigqueue.c
+++ b/rt/aio_sigqueue.c
@@ -28,5 +28,4 @@  __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)
   __set_errno (ENOSYS);
   return -1;
 }
-librt_hidden_def (__aio_sigqueue)
 stub_warning (__aio_sigqueue)
diff --git a/sysdeps/generic/aio_misc.h b/sysdeps/generic/aio_misc.h
index d9bff36e50..4d05b8cdd6 100644
--- a/sysdeps/generic/aio_misc.h
+++ b/sysdeps/generic/aio_misc.h
@@ -87,55 +87,36 @@  struct requestlist
 
 
 /* Lock for global I/O list of requests.  */
-extern pthread_mutex_t __aio_requests_mutex;
+extern pthread_mutex_t __aio_requests_mutex attribute_hidden;
 
 
 /* Enqueue request.  */
 extern struct requestlist *__aio_enqueue_request (aiocb_union *aiocbp,
-						  int operation);
+						  int operation)
+  attribute_hidden;
 
 /* Find request entry for given AIO control block.  */
-extern struct requestlist *__aio_find_req (aiocb_union *elem);
+extern struct requestlist *__aio_find_req (aiocb_union *elem) attribute_hidden;
 
 /* Find request entry for given file descriptor.  */
-extern struct requestlist *__aio_find_req_fd (int fildes);
+extern struct requestlist *__aio_find_req_fd (int fildes) attribute_hidden;
 
 /* Remove request from the list.  */
 extern void __aio_remove_request (struct requestlist *last,
-				  struct requestlist *req, int all);
+				  struct requestlist *req, int all)
+  attribute_hidden;
 
 /* Release the entry for the request.  */
-extern void __aio_free_request (struct requestlist *req);
+extern void __aio_free_request (struct requestlist *req) attribute_hidden;
 
 /* Notify initiator of request and tell this everybody listening.  */
-extern void __aio_notify (struct requestlist *req);
+extern void __aio_notify (struct requestlist *req) attribute_hidden;
 
 /* Notify initiator of request.  */
-extern int __aio_notify_only (struct sigevent *sigev);
+extern int __aio_notify_only (struct sigevent *sigev) attribute_hidden;
 
 /* Send the signal.  */
-extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid);
-
-#if PTHREAD_IN_LIBC
-libc_hidden_proto (__aio_enqueue_request)
-libc_hidden_proto (__aio_find_req)
-libc_hidden_proto (__aio_find_req_fd)
-libc_hidden_proto (__aio_free_request)
-libc_hidden_proto (__aio_notify)
-libc_hidden_proto (__aio_notify_only)
-libc_hidden_proto (__aio_remove_request)
-libc_hidden_proto (__aio_requests_mutex)
-libc_hidden_proto (__aio_sigqueue)
-#else
-librt_hidden_proto (__aio_enqueue_request)
-librt_hidden_proto (__aio_find_req)
-librt_hidden_proto (__aio_find_req_fd)
-librt_hidden_proto (__aio_free_request)
-librt_hidden_proto (__aio_notify)
-librt_hidden_proto (__aio_notify_only)
-librt_hidden_proto (__aio_remove_request)
-librt_hidden_proto (__aio_requests_mutex)
-librt_hidden_proto (__aio_sigqueue)
-#endif
+extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)
+  attribute_hidden;
 
 #endif /* aio_misc.h */
diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile
index 9e6ed3c6f7..cca0d4da0d 100644
--- a/sysdeps/pthread/Makefile
+++ b/sysdeps/pthread/Makefile
@@ -18,11 +18,13 @@ 
 
 ifeq ($(subdir),rt)
 
+ifneq ($(pthread-in-libc),yes)
 ifeq (yes,$(build-shared))
 $(objpfx)tst-timer: $(objpfx)librt.so $(shared-thread-library)
 else
 $(objpfx)tst-timer: $(objpfx)librt.a $(static-thread-library)
 endif
+endif # !$(pthread-in-libc)
 
 endif
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 578d55e7fd..29ed24591d 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -291,12 +291,6 @@  libc {
     __pread64_nocancel;
     __close_nocancel;
     __sigtimedwait;
-    __timer_active_sigev_thread;
-    __timer_active_sigev_thread_lock;
-    __timer_compat_list;
-    __timer_helper_once;
-    __timer_helper_tid;
-    __timer_start_helper_thread;
     # functions used by nscd
     __netlink_assert_response;
   }
diff --git a/sysdeps/unix/sysv/linux/aio_sigqueue.c b/sysdeps/unix/sysv/linux/aio_sigqueue.c
index bd0da6e763..0b0f347197 100644
--- a/sysdeps/unix/sysv/linux/aio_sigqueue.c
+++ b/sysdeps/unix/sysv/linux/aio_sigqueue.c
@@ -44,4 +44,3 @@  __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)
 
   return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, sig, &info);
 }
-libc_hidden_def (__aio_sigqueue)
diff --git a/sysdeps/unix/sysv/linux/kernel-posix-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
index a976b028e0..0f7eff1794 100644
--- a/sysdeps/unix/sysv/linux/kernel-posix-timers.h
+++ b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
@@ -26,27 +26,23 @@ 
 extern int __no_posix_timers attribute_hidden;
 
 /* Callback to start helper thread.  */
-extern void __timer_start_helper_thread (void);
-libc_hidden_proto (__timer_start_helper_thread)
+extern void __timer_start_helper_thread (void) attribute_hidden;
 
 /* Control variable for helper thread creation.  */
-extern pthread_once_t __timer_helper_once;
-libc_hidden_proto (__timer_helper_once)
+extern pthread_once_t __timer_helper_once attribute_hidden;
 
 /* Called from fork so that the new subprocess re-creates the
    notification thread if necessary.  */
 void __timer_fork_subprocess (void) attribute_hidden;
 
 /* TID of the helper thread.  */
-extern pid_t __timer_helper_tid;
-libc_hidden_proto (__timer_helper_tid)
+extern pid_t __timer_helper_tid attribute_hidden;
 
 /* List of active SIGEV_THREAD timers.  */
-extern struct timer *__timer_active_sigev_thread;
-libc_hidden_proto (__timer_active_sigev_thread)
+extern struct timer *__timer_active_sigev_thread attribute_hidden;
+
 /* Lock for __timer_active_sigev_thread.  */
-extern pthread_mutex_t __timer_active_sigev_thread_lock;
-libc_hidden_proto (__timer_active_sigev_thread_lock)
+extern pthread_mutex_t __timer_active_sigev_thread_lock attribute_hidden;
 
 extern __typeof (timer_create) __timer_create;
 libc_hidden_proto (__timer_create)
@@ -117,5 +113,4 @@  timerid_to_kernel_timer (timer_t timerid)
 
 /* Used if an override sets TIMER_T_WAS_INT_COMPAT to 1.  */
 #define OLD_TIMER_MAX 256
-extern timer_t __timer_compat_list[OLD_TIMER_MAX];
-libc_hidden_proto (__timer_compat_list)
+extern timer_t __timer_compat_list[OLD_TIMER_MAX] attribute_hidden;
diff --git a/sysdeps/unix/sysv/linux/timer_create.c b/sysdeps/unix/sysv/linux/timer_create.c
index 9861177cf2..230bc45083 100644
--- a/sysdeps/unix/sysv/linux/timer_create.c
+++ b/sysdeps/unix/sysv/linux/timer_create.c
@@ -146,8 +146,7 @@  compat_symbol (librt, ___timer_create, timer_create, GLIBC_2_3_3);
 # endif
 
 # if OTHER_SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3)
-timer_t __timer_compat_list[OLD_TIMER_MAX] __attribute__ ((nocommon));
-libc_hidden_data_def (__timer_compat_list)
+timer_t __timer_compat_list[OLD_TIMER_MAX];
 
 int
 __timer_create_old (clockid_t clock_id, struct sigevent *evp, int *timerid)
diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c
index fc3aa894ab..3a509d8ace 100644
--- a/sysdeps/unix/sysv/linux/timer_routines.c
+++ b/sysdeps/unix/sysv/linux/timer_routines.c
@@ -26,13 +26,10 @@ 
 
 
 /* List of active SIGEV_THREAD timers.  */
-struct timer *__timer_active_sigev_thread __attribute__ ((nocommon));
-libc_hidden_data_def (__timer_active_sigev_thread)
+struct timer *__timer_active_sigev_thread;
 
 /* Lock for _timer_active_sigev_thread.  */
-pthread_mutex_t __timer_active_sigev_thread_lock __attribute__ ((nocommon))
-  = PTHREAD_MUTEX_INITIALIZER;
-libc_hidden_data_def (__timer_active_sigev_thread_lock)
+pthread_mutex_t __timer_active_sigev_thread_lock = PTHREAD_MUTEX_INITIALIZER;
 
 struct thread_start_data
 {
@@ -112,12 +109,10 @@  timer_helper_thread (void *arg)
 /* Control variable for helper thread creation.  */
 pthread_once_t __timer_helper_once __attribute__ ((nocommon))
   = PTHREAD_ONCE_INIT;
-libc_hidden_data_def (__timer_helper_once)
 
 
 /* TID of the helper thread.  */
 pid_t __timer_helper_tid __attribute__ ((nocommon));
-libc_hidden_data_def (__timer_helper_tid)
 
 
 /* Reset variables so that after a fork a new helper thread gets started.  */
@@ -159,4 +154,3 @@  __timer_start_helper_thread (void)
   /* No need for the attribute anymore.  */
   (void) __pthread_attr_destroy (&attr);
 }
-libc_hidden_def (__timer_start_helper_thread)