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;
__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;
#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) \
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)
/* 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,
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 */
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