diff options
-rw-r--r-- | libc/misc/internals/__uClibc_main.c | 35 | ||||
-rw-r--r-- | libc/misc/pthread/Makefile.in | 1 | ||||
-rw-r--r-- | libc/misc/pthread/weaks.c | 40 |
3 files changed, 35 insertions, 41 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 */ /* diff --git a/libc/misc/pthread/Makefile.in b/libc/misc/pthread/Makefile.in index 69cdf104a..2f436ac1c 100644 --- a/libc/misc/pthread/Makefile.in +++ b/libc/misc/pthread/Makefile.in @@ -11,7 +11,6 @@ MISC_PTHREAD_DIR := $(top_srcdir)libc/misc/pthread MISC_PTHREAD_OUT := $(top_builddir)libc/misc/pthread libc-shared-$(UCLIBC_HAS_TLS) += $(MISC_PTHREAD_OUT)/tsd.os -libc-static-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/weaks.o objclean-y += CLEAN_libc/misc/pthread diff --git a/libc/misc/pthread/weaks.c b/libc/misc/pthread/weaks.c deleted file mode 100644 index fb1d85fd7..000000000 --- a/libc/misc/pthread/weaks.c +++ /dev/null @@ -1,40 +0,0 @@ -/* The weak pthread functions for Linux. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include <libc-internal.h> - -/* Weaks for internal library use only. - * - * We need to define weaks here to cover all the pthread functions that - * libc itself will use so that we aren't forced to link libc against - * libpthread. This file is only used in libc.a and since we have - * weaks here, they will be automatically overridden by libpthread.a - * if it gets linked in. - */ - -static int __pthread_return_0 (void) { return 0; } -static void __pthread_return_void (void) { return; } - -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_void, _pthread_cleanup_push_defer) -weak_alias (__pthread_return_void, _pthread_cleanup_pop_restore) - |