libpthread_version
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Wed, 5 Dec 2018 18:50:21 +0000 (18:50 +0000)
committerAurelien Jarno <aurel32@debian.org>
Wed, 5 Dec 2018 18:50:21 +0000 (18:50 +0000)
This dates when libpthread was moved to glibc and some features were added.

2.13-31/38/39 dates when the global signal disposition call was added.
TODO: _DEBIAN_ in versions however pose problem. Remove the _DEBIAN_ version
once packages are rebuilt against 2.21.

Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name libpthread_version.diff

htl/Versions
htl/forward.c
sysdeps/mach/hurd/htl/pt-hurd-cond-timedwait.c
sysdeps/mach/hurd/htl/pt-hurd-cond-wait.c
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/mach/hurd/i386/libpthread.abilist

index c5a616da10d69b99d450e83f6901c820fb6203e2..967b17a0c96d34c776376b1b943570317061d5ff 100644 (file)
@@ -1,4 +1,22 @@
 libc {
+  GLIBC_2.13_DEBIAN_31 {
+    pthread_attr_destroy; pthread_attr_getdetachstate;
+    pthread_attr_getinheritsched; pthread_attr_getschedparam;
+    pthread_attr_getschedpolicy; pthread_attr_getscope; pthread_attr_init;
+    pthread_attr_setdetachstate; pthread_attr_setinheritsched;
+    pthread_attr_setschedparam; pthread_attr_setschedpolicy;
+    pthread_attr_setscope;
+    pthread_condattr_destroy; pthread_condattr_init;
+    pthread_cond_broadcast; pthread_cond_destroy;
+    pthread_cond_init; pthread_cond_signal; pthread_cond_wait;
+    pthread_cond_timedwait;
+    pthread_equal;
+    pthread_exit; pthread_getschedparam; pthread_setschedparam;
+    pthread_mutex_destroy; pthread_mutex_init;
+    pthread_mutex_lock; pthread_mutex_trylock; pthread_mutex_unlock;
+    pthread_self; pthread_setcancelstate; pthread_setcanceltype;
+    __pthread_get_cleanup_stack;
+  }
   GLIBC_2.21 {
     pthread_attr_destroy; pthread_attr_getdetachstate;
     pthread_attr_getinheritsched; pthread_attr_getschedparam;
@@ -137,6 +155,12 @@ libpthread {
     __pthread_spin_lock; __pthread_spin_trylock; __pthread_spin_unlock;
     _pthread_spin_lock;
   }
+  GLIBC_2.13_DEBIAN_38 {
+    pthread_hurd_cond_wait_np;
+  }
+  GLIBC_2.13_DEBIAN_39 {
+    pthread_hurd_cond_timedwait_np;
+  }
   GLIBC_2.21 {
     pthread_hurd_cond_wait_np;
     pthread_hurd_cond_timedwait_np;
index cb36ae2cb73a083616b2ba31e175dad339c015c4..f76204a7a46c16db0f6aa8f5829c7bb77fbbd249 100644 (file)
 #include <libc-lock.h>
 #include <fork.h>
 
+#include <shlib-compat.h>
+
 /* Pointers to the libc functions.  */
 struct pthread_functions __libc_pthread_functions attribute_hidden;
 int __libc_pthread_functions_init attribute_hidden;
 
+#define FORWARD2_NOVERSION(name, rettype, decl, params, defaction) \
+rettype                                                                              \
+__##name decl                                                                \
+{                                                                            \
+  if (!__libc_pthread_functions_init)                        \
+    defaction;                                                               \
+                                                                             \
+  return PTHFCT_CALL (ptr_##name, params);                           \
+} \
 
 #define FORWARD2(name, rettype, decl, params, defaction) \
+       FORWARD2_NOVERSION(name, rettype, decl, params, defaction) \
+versioned_symbol (libc, __##name, name, GLIBC_2_21); \
+
+#if SHLIB_COMPAT (libc, GLIBC_2_13, GLIBC_2_21)
+# define FORWARD2_NOCOMPAT(name, rettype, decl, params, defaction) \
 rettype                                                                              \
-name decl                                                                    \
+__##name##_2_13 decl                                                         \
 {                                                                            \
   if (!__libc_pthread_functions_init)                                        \
     defaction;                                                               \
                                                                              \
   return PTHFCT_CALL (ptr_##name, params);                                   \
 }
+# define FORWARD2_COMPAT(name, rettype, decl, params, defaction) \
+       FORWARD2_NOCOMPAT(name, rettype, decl, params, defaction) \
+compat_symbol (libc, __##name##_2_13, name, GLIBC_2_13_DEBIAN_31);
+#else
+# define FORWARD2_COMPAT(name, rettype, decl, params, defaction)
+#endif
 
 /* Same as FORWARD2, only without return.  */
 #define FORWARD_NORETURN(name, rettype, decl, params, defaction) \
@@ -48,10 +70,22 @@ name decl                                                                 \
     defaction;                                                               \
                                                                              \
   PTHFCT_CALL (ptr_##name, params);                                          \
+} \
+rettype                                                                              \
+name##_2_13 decl                                                                     \
+{                                                                            \
+  if (!__libc_pthread_functions_init)                        \
+    defaction;                                                               \
+                                                                             \
+  PTHFCT_CALL (ptr_##name, params);                          \
 }
 
 #define FORWARD(name, decl, params, defretval) \
-  FORWARD2 (name, int, decl, params, return defretval)
+  FORWARD2 (name, int, decl, params, return defretval) \
+  FORWARD2_COMPAT (name, int, decl, params, return defretval)
+#define FORWARD_NOVERSION(name, decl, params, defretval) \
+  FORWARD2_NOVERSION (name, int, decl, params, return defretval) \
+  FORWARD2_NOCOMPAT (name, int, decl, params, return defretval)
 
 FORWARD (pthread_attr_destroy, (pthread_attr_t *attr), (attr), 0)
 
@@ -109,7 +143,10 @@ FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),
 /* Use an alias to avoid warning, as pthread_exit is declared noreturn.  */
 FORWARD_NORETURN (__pthread_exit, void, (void *retval), (retval),
                  exit (EXIT_SUCCESS))
-strong_alias (__pthread_exit, pthread_exit);
+versioned_symbol (libc, __pthread_exit, pthread_exit, GLIBC_2_21);
+#if SHLIB_COMPAT (libc, GLIBC_2_13, GLIBC_2_21)
+compat_symbol (libc, __pthread_exit_2_13, pthread_exit, GLIBC_2_13_DEBIAN_31);
+#endif
 
 
 FORWARD (pthread_getschedparam,
@@ -132,17 +169,23 @@ FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
 
 
 FORWARD2 (pthread_self, pthread_t, (void), (), return 0)
+FORWARD2_COMPAT (pthread_self, pthread_t, (void), (), return 0)
 
 
-FORWARD (__pthread_setcancelstate, (int state, int *oldstate),
+FORWARD_NOVERSION (__pthread_setcancelstate, (int state, int *oldstate),
         (state, oldstate), 0)
-strong_alias (__pthread_setcancelstate, pthread_setcancelstate);
+versioned_symbol (libc, ____pthread_setcancelstate, pthread_setcancelstate, GLIBC_2_21);
+#if SHLIB_COMPAT (libc, GLIBC_2_13, GLIBC_2_21)
+compat_symbol (libc, ____pthread_setcancelstate_2_13, pthread_setcancelstate, GLIBC_2_13_DEBIAN_31);
+#endif
 
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
 
 struct __pthread_cancelation_handler *dummy_list;
 FORWARD2 (__pthread_get_cleanup_stack, struct __pthread_cancelation_handler **,
          (void), (), return &dummy_list);
+FORWARD2_COMPAT (__pthread_get_cleanup_stack, struct __pthread_cancelation_handler **,
+         (void), (), return &dummy_list);
 
 \f
 /* Fork interaction */
index 263d3bfd27deb8a05920bed7584639a9dde03032..ba8b3efb4403ca6fbb1b949cffec0034d34a4d99 100644 (file)
@@ -22,6 +22,8 @@
 
 #include <pt-internal.h>
 
+#include <shlib-compat.h>
+
 extern int __pthread_hurd_cond_timedwait_internal (pthread_cond_t *cond,
                                                   pthread_mutex_t *mutex,
                                                   const struct timespec
@@ -34,8 +36,18 @@ __pthread_hurd_cond_timedwait_np (pthread_cond_t *cond,
 {
   return __pthread_hurd_cond_timedwait_internal (cond, mutex, abstime);
 }
+versioned_symbol (libpthread, __pthread_hurd_cond_timedwait_np, pthread_hurd_cond_timedwait_np, GLIBC_2_21);
 
-strong_alias (__pthread_hurd_cond_timedwait_np, pthread_hurd_cond_timedwait_np);
+#if SHLIB_COMPAT (libpthread, GLIBC_2_13, GLIBC_2_21)
+int
+__pthread_hurd_cond_timedwait_np_2_13 (pthread_cond_t *cond,
+                                 pthread_mutex_t *mutex,
+                                 const struct timespec *abstime)
+{
+  return __pthread_hurd_cond_timedwait_internal (cond, mutex, abstime);
+}
+compat_symbol (libpthread, __pthread_hurd_cond_timedwait_np_2_13, pthread_hurd_cond_timedwait_np, GLIBC_2_13_DEBIAN_39);
+#endif
 
 int
 __pthread_hurd_cond_timedwait_internal (pthread_cond_t *cond,
index 067bd667e7a909f70015ef6ec6950b1d9a3e9ea5..37611e9a6d4fb282a0307f885a97ed217e291fb6 100644 (file)
@@ -22,6 +22,8 @@
 
 #include <pt-internal.h>
 
+#include <shlib-compat.h>
+
 /* Implemented in pt-hurd-cond-timedwait.c.  */
 extern int __pthread_hurd_cond_timedwait_internal (pthread_cond_t *cond,
                                                   pthread_mutex_t *mutex,
@@ -36,5 +38,17 @@ __pthread_hurd_cond_wait_np (pthread_cond_t *cond, pthread_mutex_t *mutex)
   err = __pthread_hurd_cond_timedwait_internal (cond, mutex, NULL);
   return err == EINTR;
 }
+versioned_symbol (libpthread, __pthread_hurd_cond_wait_np, pthread_hurd_cond_wait_np, GLIBC_2_21);
 
-strong_alias (__pthread_hurd_cond_wait_np, pthread_hurd_cond_wait_np);
+#if SHLIB_COMPAT (libpthread, GLIBC_2_13, GLIBC_2_21)
+int
+__pthread_hurd_cond_wait_np_2_13 (pthread_cond_t *cond,
+                            pthread_mutex_t *mutex)
+{
+  error_t err;
+
+  err = __pthread_hurd_cond_timedwait_internal (cond, mutex, NULL);
+  return (err == EINTR);
+}
+compat_symbol (libpthread, __pthread_hurd_cond_wait_np_2_13, pthread_hurd_cond_wait_np, GLIBC_2_13_DEBIAN_38);
+#endif
index bdd35a2dae0a576033a2f27548d041df8eac59b4..aed53d839e4aad93f3132b4a9eaf06f2dbb6c920 100644 (file)
@@ -34,6 +34,38 @@ GLIBC_2.13_DEBIAN_19 _hurd_sigstate_lock F
 GLIBC_2.13_DEBIAN_19 _hurd_sigstate_pending F
 GLIBC_2.13_DEBIAN_19 _hurd_sigstate_set_global_rcv F
 GLIBC_2.13_DEBIAN_19 _hurd_sigstate_unlock F
+GLIBC_2.13_DEBIAN_31 __pthread_get_cleanup_stack F
+GLIBC_2.13_DEBIAN_31 pthread_attr_destroy F
+GLIBC_2.13_DEBIAN_31 pthread_attr_getdetachstate F
+GLIBC_2.13_DEBIAN_31 pthread_attr_getinheritsched F
+GLIBC_2.13_DEBIAN_31 pthread_attr_getschedparam F
+GLIBC_2.13_DEBIAN_31 pthread_attr_getschedpolicy F
+GLIBC_2.13_DEBIAN_31 pthread_attr_getscope F
+GLIBC_2.13_DEBIAN_31 pthread_attr_init F
+GLIBC_2.13_DEBIAN_31 pthread_attr_setdetachstate F
+GLIBC_2.13_DEBIAN_31 pthread_attr_setinheritsched F
+GLIBC_2.13_DEBIAN_31 pthread_attr_setschedparam F
+GLIBC_2.13_DEBIAN_31 pthread_attr_setschedpolicy F
+GLIBC_2.13_DEBIAN_31 pthread_attr_setscope F
+GLIBC_2.13_DEBIAN_31 pthread_cond_broadcast F
+GLIBC_2.13_DEBIAN_31 pthread_cond_destroy F
+GLIBC_2.13_DEBIAN_31 pthread_cond_init F
+GLIBC_2.13_DEBIAN_31 pthread_cond_signal F
+GLIBC_2.13_DEBIAN_31 pthread_cond_timedwait F
+GLIBC_2.13_DEBIAN_31 pthread_cond_wait F
+GLIBC_2.13_DEBIAN_31 pthread_condattr_destroy F
+GLIBC_2.13_DEBIAN_31 pthread_condattr_init F
+GLIBC_2.13_DEBIAN_31 pthread_equal F
+GLIBC_2.13_DEBIAN_31 pthread_exit F
+GLIBC_2.13_DEBIAN_31 pthread_getschedparam F
+GLIBC_2.13_DEBIAN_31 pthread_mutex_destroy F
+GLIBC_2.13_DEBIAN_31 pthread_mutex_init F
+GLIBC_2.13_DEBIAN_31 pthread_mutex_lock F
+GLIBC_2.13_DEBIAN_31 pthread_mutex_unlock F
+GLIBC_2.13_DEBIAN_31 pthread_self F
+GLIBC_2.13_DEBIAN_31 pthread_setcancelstate F
+GLIBC_2.13_DEBIAN_31 pthread_setcanceltype F
+GLIBC_2.13_DEBIAN_31 pthread_setschedparam F
 GLIBC_2.14 syncfs F
 GLIBC_2.15 __fdelt_chk F
 GLIBC_2.15 __fdelt_warn F
index 4c7d06d0739849c60cc0ab8822cb374e0dd10c64..db9729b64351fa355cfcadb9987225c75571ee99 100644 (file)
@@ -142,6 +142,8 @@ GLIBC_2.12 sem_timedwait F
 GLIBC_2.12 sem_trywait F
 GLIBC_2.12 sem_unlink F
 GLIBC_2.12 sem_wait F
+GLIBC_2.13_DEBIAN_38 pthread_hurd_cond_wait_np F
+GLIBC_2.13_DEBIAN_39 pthread_hurd_cond_timedwait_np F
 GLIBC_2.2.6 _IO_flockfile F
 GLIBC_2.2.6 _IO_ftrylockfile F
 GLIBC_2.2.6 _IO_funlockfile F