about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/Makefile2
-rw-r--r--nptl/Versions3
-rw-r--r--nptl/sem_timedwait.c18
-rw-r--r--nptl/semaphoreP.h2
4 files changed, 17 insertions, 8 deletions
diff --git a/nptl/Makefile b/nptl/Makefile
index 36c0f270b9..9f73cf2434 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -158,6 +158,7 @@ routines = \
   sem_open \
   sem_post \
   sem_routines \
+  sem_timedwait \
   tpp \
   unwind \
 
@@ -209,7 +210,6 @@ libpthread-routines = \
   pthread_sigqueue \
   pthread_timedjoin \
   pthread_tryjoin \
-  sem_timedwait \
   sem_unlink \
   sem_wait \
   vars \
diff --git a/nptl/Versions b/nptl/Versions
index df3967516f..f19c2355f1 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -114,6 +114,7 @@ libc {
     pthread_spin_trylock;
     pthread_spin_unlock;
     pthread_yield;
+    sem_timedwait;
   }
   GLIBC_2.2.3 {
     pthread_getattr_np;
@@ -267,6 +268,7 @@ libc {
     sem_init;
     sem_open;
     sem_post;
+    sem_timedwait;
     thrd_exit;
     tss_create;
     tss_delete;
@@ -371,7 +373,6 @@ libpthread {
     pthread_yield;
     pthread_rwlock_timedrdlock;
     pthread_rwlock_timedwrlock;
-    sem_timedwait;
   }
 
   GLIBC_2.2.3 {
diff --git a/nptl/sem_timedwait.c b/nptl/sem_timedwait.c
index 770020e26c..584546c706 100644
--- a/nptl/sem_timedwait.c
+++ b/nptl/sem_timedwait.c
@@ -24,7 +24,7 @@
 /* This is in a separate file because because sem_timedwait is only provided
    if __USE_XOPEN2K is defined.  */
 int
-__sem_timedwait64 (sem_t *sem, const struct __timespec64 *abstime)
+___sem_timedwait64 (sem_t *sem, const struct __timespec64 *abstime)
 {
   if (! valid_nanoseconds (abstime->tv_nsec))
     {
@@ -42,15 +42,23 @@ __sem_timedwait64 (sem_t *sem, const struct __timespec64 *abstime)
 				  CLOCK_REALTIME, abstime);
 }
 
-#if __TIMESIZE != 64
-libpthread_hidden_def (__sem_timedwait64)
+#if __TIMESIZE == 64
+strong_alias (___sem_timedwait64, ___sem_timedwait)
+#else /* __TIMESPEC64 != 64 */
+libc_hidden_ver (___sem_timedwait64, __sem_timedwait64)
+#ifndef SHARED
+strong_alias (___sem_timedwait64, __sem_timedwait64)
+#endif
 
 int
-__sem_timedwait (sem_t *sem, const struct timespec *abstime)
+___sem_timedwait (sem_t *sem, const struct timespec *abstime)
 {
   struct __timespec64 ts64 = valid_timespec_to_timespec64 (*abstime);
 
   return __sem_timedwait64 (sem, &ts64);
 }
+#endif /* __TIMESPEC64 != 64 */
+versioned_symbol (libc, ___sem_timedwait, sem_timedwait, GLIBC_2_34);
+#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2, GLIBC_2_34)
+compat_symbol (libpthread, ___sem_timedwait, sem_timedwait, GLIBC_2_2);
 #endif
-weak_alias (__sem_timedwait, sem_timedwait)
diff --git a/nptl/semaphoreP.h b/nptl/semaphoreP.h
index f030f0e4de..43ad849761 100644
--- a/nptl/semaphoreP.h
+++ b/nptl/semaphoreP.h
@@ -57,5 +57,5 @@ __sem_clockwait64 (sem_t *sem, clockid_t clockid,
 libc_hidden_proto (__sem_clockwait64)
 extern int
 __sem_timedwait64 (sem_t *sem, const struct __timespec64 *abstime);
-libpthread_hidden_proto (__sem_timedwait64)
+libc_hidden_proto (__sem_timedwait64)
 #endif