From 685a6f283e98657104b71a7d694c99f19e454afa Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Fri, 7 May 2010 17:19:19 +0300 Subject: static build: fix internal locking weaks to get pulled in always Linker is smart and does not pull in weaks.os, ever. This happens because that compilation unit does not get strong references and ld eliminates dead code. We really need the weaks for static build in a compilation unit that is always there, otherwise it won't work. Signed-off-by: Timo Teras Acked-by: Roman I Khimov Signed-off-by: Austin Foxley --- libc/misc/internals/__uClibc_main.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'libc/misc/internals') diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index f7e45c60c..f9e12446b 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -68,6 +68,41 @@ uintptr_t __guard attribute_relro; */ void internal_function _dl_aux_init (ElfW(auxv_t) *av); + +/* + * uClibc internal locking requires that we have weak aliases + * for dummy functions in case libpthread.a is not linked in. + * This needs to be in compilation unit that is pulled always + * in or linker will disregard these weaks. + */ + +static int __pthread_return_0 (pthread_mutex_t *unused) { return 0; } +weak_alias (__pthread_return_0, __pthread_mutex_lock) +weak_alias (__pthread_return_0, __pthread_mutex_trylock) +weak_alias (__pthread_return_0, __pthread_mutex_unlock) + +int weak_function +__pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) +{ + return 0; +} + +void weak_function +_pthread_cleanup_push_defer(struct _pthread_cleanup_buffer *__buffer, + void (*__routine) (void *), void *__arg) +{ + __buffer->__routine = __routine; + __buffer->__arg = __arg; +} + +void weak_function +_pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer *__buffer, + int __execute) +{ + if (__execute) + __buffer->__routine(__buffer->__arg); +} + #endif /* !SHARED */ /* -- cgit v1.2.3