diff options
author | Timo Teras <timo.teras@iki.fi> | 2010-05-07 17:19:19 +0300 |
---|---|---|
committer | Austin Foxley <austinf@cetoncorp.com> | 2010-05-07 08:27:39 -0700 |
commit | 685a6f283e98657104b71a7d694c99f19e454afa (patch) | |
tree | d6470c0a5407f5d4f5f6fc097d8521ffd7428800 /libc/misc/internals | |
parent | 0b7acfa800444525498442032b47bfd7d066c72b (diff) |
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 <timo.teras@iki.fi>
Acked-by: Roman I Khimov <khimov@altell.ru>
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Diffstat (limited to 'libc/misc/internals')
-rw-r--r-- | libc/misc/internals/__uClibc_main.c | 35 |
1 files changed, 35 insertions, 0 deletions
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 */ /* |