libpthread_version
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Mon, 16 Jul 2018 20:23:13 +0000 (21:23 +0100)
committerAurelien Jarno <aurel32@debian.org>
Mon, 16 Jul 2018 20:23:13 +0000 (21:23 +0100)
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

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

index 67c6032e30f0632594a2ce101a404568fa8316e4..9c55bcb256c36f7426fa4976d8f53a2d2e3ad338 100644 (file)
@@ -1,5 +1,5 @@
 libc {
-  GLIBC_2.13 {
+  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;
@@ -20,6 +20,24 @@ libc {
   GLIBC_2.22 {
     __register_atfork;
   }
+  GLIBC_2.21 {
+    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_PRIVATE {
     __libc_alloca_cutoff;
     __libc_pthread_init;
@@ -136,7 +154,13 @@ libpthread {
     __pthread_spin_lock; __pthread_spin_trylock; __pthread_spin_unlock;
     _pthread_spin_lock;
   }
-  GLIBC_2.17 {
+  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 0ee84a0ffeac4e22ffdea5a0f6dc09193ec5d1a1..bfc06d54cd46e8135958f9436f52f22ccaaae7b8 100644 (file)
 #include <pthread-functions.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) \
 rettype                                                                              \
 name decl                                                                    \
+{                                                                            \
+  if (!__libc_pthread_functions_init)                        \
+    defaction;                                                               \
+                                                                             \
+  PTHFCT_CALL (ptr_##name, params);                          \
+} \
+rettype                                                                              \
+name##_2_13 decl                                                                     \
 {                                                                            \
   if (!__libc_pthread_functions_init)                        \
     defaction;                                                               \
@@ -51,7 +81,11 @@ name decl                                                                  \
 }
 
 # 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)
 
@@ -108,7 +142,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,
@@ -131,16 +168,21 @@ 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), (state, 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 3d1fe531a1909da1b37d8e09f1882018c50efb90..80819b13cf3c7d46f599cdb9eaea46d49e30c8e0 100644 (file)
@@ -23,6 +23,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 *abstime);
@@ -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 5e7c0075e54168d85821c044e14479b5a2d9bb88..87d2265d51de357fef5a4d9701858cbb5e991d96 100644 (file)
@@ -23,6 +23,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,
@@ -37,5 +39,17 @@ __pthread_hurd_cond_wait_np (pthread_cond_t *cond,
   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 e8224f0bf8ac2343c58fcd49bdebbeb963ca436d..4136c04f8834e4a8652ea7fd0813f86b7c44cf92 100644 (file)
@@ -38,6 +38,39 @@ 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 GLIBC_2.13_DEBIAN_31 A
+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 GLIBC_2.14 A
 GLIBC_2.14 syncfs F
 GLIBC_2.15 GLIBC_2.15 A
index e11569f176da3ce3e079f852a5a97c23d2ac1c52..e18818d523146af047afba46da07b40b44fdd4cd 100644 (file)
@@ -142,6 +142,10 @@ 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 GLIBC_2.13_DEBIAN_38 A
+GLIBC_2.13_DEBIAN_38 pthread_hurd_cond_wait_np F
+GLIBC_2.13_DEBIAN_39 GLIBC_2.13_DEBIAN_39 A
+GLIBC_2.13_DEBIAN_39 pthread_hurd_cond_timedwait_np F
 GLIBC_2.2.6 GLIBC_2.2.6 A
 GLIBC_2.2.6 _IO_flockfile F
 GLIBC_2.2.6 _IO_ftrylockfile F