diff options
author | Timo Teras <timo.teras@iki.fi> | 2010-04-16 16:29:46 +0300 |
---|---|---|
committer | Austin Foxley <austinf@cetoncorp.com> | 2010-04-16 10:13:14 -0700 |
commit | 0eadd98d30c51d26fde4062e6b8c48f3c9b5148d (patch) | |
tree | abbb3367ac54b35b8d7198af729996fe1531dd95 /libc/misc | |
parent | 837e8425ce9a0c1ad1c58a00cf3b9e949e7b17cd (diff) |
libc: remove libc weak __pthreads_* wrappers
It is not possible to override for libpthread to override
the weak libc definitions. This has never worked in uclibc, and
does no longer work in glibc either (unless you use LD_DYNAMIC_WEAK).
The proper thing to do is have weak prototypes in libc, and
definitions in libpthread only. This way libc runs even if
those functions are not defined, but just needs to protect
against the NULL values (done by implementing __uclibc_maybe_call).
This fix the problems if libc is linked before libpthread or
if libpthread is pulled by a dependency library.
Signed-off-by: Timo Teras <timo.teras@iki.fi>
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Diffstat (limited to 'libc/misc')
-rw-r--r-- | libc/misc/dirent/opendir.c | 2 | ||||
-rw-r--r-- | libc/misc/pthread/Makefile.in | 2 | ||||
-rw-r--r-- | libc/misc/pthread/unlock.c | 27 | ||||
-rw-r--r-- | libc/misc/pthread/weaks.c | 44 |
4 files changed, 1 insertions, 74 deletions
diff --git a/libc/misc/dirent/opendir.c b/libc/misc/dirent/opendir.c index 4a23ab061..66a5cc9e9 100644 --- a/libc/misc/dirent/opendir.c +++ b/libc/misc/dirent/opendir.c @@ -35,7 +35,7 @@ static DIR *fd_to_DIR(int fd, __blksize_t size) free(ptr); return NULL; } - __pthread_mutex_init(&ptr->dd_lock, NULL); + __UCLIBC_MUTEX_INIT_VAR(ptr->dd_lock); return ptr; } diff --git a/libc/misc/pthread/Makefile.in b/libc/misc/pthread/Makefile.in index 504aa254e..2f436ac1c 100644 --- a/libc/misc/pthread/Makefile.in +++ b/libc/misc/pthread/Makefile.in @@ -11,8 +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-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/unlock.o -libc-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/weaks.o objclean-y += CLEAN_libc/misc/pthread diff --git a/libc/misc/pthread/unlock.c b/libc/misc/pthread/unlock.c deleted file mode 100644 index 04de0df58..000000000 --- a/libc/misc/pthread/unlock.c +++ /dev/null @@ -1,27 +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 <pthread.h> -#include <bits/uClibc_mutex.h> - -void attribute_hidden __uclibc_mutex_unlock (void *arg) -{ - pthread_mutex_t *__mutex = (pthread_mutex_t *)arg; - __pthread_mutex_unlock(__mutex); -} diff --git a/libc/misc/pthread/weaks.c b/libc/misc/pthread/weaks.c deleted file mode 100644 index 580c3eb07..000000000 --- a/libc/misc/pthread/weaks.c +++ /dev/null @@ -1,44 +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) -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -weak_alias (__pthread_return_0, __pthread_mutexattr_init) -weak_alias (__pthread_return_0, __pthread_mutexattr_destroy) -weak_alias (__pthread_return_0, __pthread_mutexattr_settype) -#endif |