From 613037d45c35b631adc058e2953874a3b7ec1c5c Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Sun, 4 Jan 2004 01:29:01 +0000 Subject: My mistake. We do need some weak pthread_* funcs. But we were previously missing one in the glibc abi, and including a number of extras (which I left in commented). Unfortunately, this brings back the perl pthread bug. Fixing the incorrect weaks in libpthread wasn't sufficient to escape the shared loader bug. :-( --- libc/misc/pthread/weaks.c | 89 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 2 deletions(-) diff --git a/libc/misc/pthread/weaks.c b/libc/misc/pthread/weaks.c index a08b00984..1320433f3 100644 --- a/libc/misc/pthread/weaks.c +++ b/libc/misc/pthread/weaks.c @@ -22,22 +22,107 @@ #include extern int __pthread_return_0 __P ((void)); +extern int __pthread_return_1 __P ((void)); extern void __pthread_return_void __P ((void)); -weak_alias (__pthread_return_0, __pthread_once) -weak_alias (__pthread_return_void, __pthread_initialize_minimal) +/**********************************************************************/ +/* Weaks for application/library use. + * + * Verified by comparing to glibc's linuxthreads/forward.c and defined + * only those that are in the glibc abi. + * The commented aliases are ones that were previously defined in uClibc + * and which I left in for documentation. + */ + +weak_alias (__pthread_return_0, pthread_attr_destroy) +weak_alias (__pthread_return_0, pthread_attr_getdetachstate) +weak_alias (__pthread_return_0, pthread_attr_getinheritsched) +weak_alias (__pthread_return_0, pthread_attr_getschedparam) +weak_alias (__pthread_return_0, pthread_attr_getschedpolicy) +weak_alias (__pthread_return_0, pthread_attr_getscope) +/* weak_alias (__pthread_return_0, pthread_attr_getstackaddr) */ +/* weak_alias (__pthread_return_0, pthread_attr_getstacksize) */ +weak_alias (__pthread_return_0, pthread_attr_init) +weak_alias (__pthread_return_0, pthread_attr_setdetachstate) +weak_alias (__pthread_return_0, pthread_attr_setinheritsched) +weak_alias (__pthread_return_0, pthread_attr_setschedparam) +weak_alias (__pthread_return_0, pthread_attr_setschedpolicy) +weak_alias (__pthread_return_0, pthread_attr_setscope) +/* weak_alias (__pthread_return_0, pthread_attr_setstackaddr) */ +/* weak_alias (__pthread_return_0, pthread_attr_setstacksize) */ +weak_alias (__pthread_return_0, pthread_cond_broadcast) +weak_alias (__pthread_return_0, pthread_cond_destroy) +weak_alias (__pthread_return_0, pthread_cond_init) +weak_alias (__pthread_return_0, pthread_cond_signal) +weak_alias (__pthread_return_0, pthread_cond_timedwait) +weak_alias (__pthread_return_0, pthread_cond_wait) +weak_alias (__pthread_return_0, pthread_condattr_destroy) +weak_alias (__pthread_return_0, pthread_condattr_init) +weak_alias (__pthread_return_0, pthread_getschedparam) +/* weak_alias (__pthread_return_0, pthread_getcancelstate) */ +/* weak_alias (__pthread_return_0, pthread_getconcurrency) */ +/* weak_alias (__pthread_return_0, pthread_getschedparam) */ +weak_alias (__pthread_return_0, pthread_mutex_destroy) +weak_alias (__pthread_return_0, pthread_mutex_init) +weak_alias (__pthread_return_0, pthread_mutex_lock) +/* weak_alias (__pthread_return_0, pthread_mutex_trylock) */ +weak_alias (__pthread_return_0, pthread_mutex_unlock) +/* weak_alias (__pthread_return_0, pthread_mutexattr_destroy) */ +/* weak_alias (__pthread_return_0, pthread_mutexattr_gettype) */ +/* weak_alias (__pthread_return_0, pthread_mutexattr_init) */ +/* weak_alias (__pthread_return_0, pthread_mutexattr_settype) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_destroy) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_init) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_rdlock) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_tryrdlock) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_trywrlock) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_unlock) */ +/* weak_alias (__pthread_return_0, pthread_rwlock_wrlock) */ +/* weak_alias (__pthread_return_0, pthread_rwlockattr_destroy) */ +/* weak_alias (__pthread_return_0, pthread_rwlockattr_getpshared) */ +/* weak_alias (__pthread_return_0, pthread_rwlockattr_init) */ +/* weak_alias (__pthread_return_0, pthread_rwlockattr_setpshared) */ +weak_alias (__pthread_return_0, pthread_self) +weak_alias (__pthread_return_0, pthread_setcancelstate) +weak_alias (__pthread_return_0, pthread_setcanceltype) +/* weak_alias (__pthread_return_0, pthread_setconcurrency) */ +weak_alias (__pthread_return_0, pthread_setschedparam) + +/* Those are pthread functions which return 1 if successful. */ +weak_alias (__pthread_return_1, pthread_equal) +/* pthread_exit () is a special case. */ +void weak_function +pthread_exit (void *retval) +{ + exit (EXIT_SUCCESS); +} + +/**********************************************************************/ +/* Weaks used internally by the C library. */ weak_alias (__pthread_return_0, __pthread_mutex_init) weak_alias (__pthread_return_0, __pthread_mutex_lock) weak_alias (__pthread_return_0, __pthread_mutex_trylock) weak_alias (__pthread_return_0, __pthread_mutex_unlock) +/* Weaks used internally by the C library rpc code only. */ +weak_alias (__pthread_return_0, __pthread_once) +weak_alias (__pthread_return_void, __pthread_initialize_minimal) + +/**********************************************************************/ + int __pthread_return_0 (void) { return 0; } +int +__pthread_return_1 (void) +{ + return 1; +} + void __pthread_return_void (void) { -- cgit v1.2.3