diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-09-24 02:55:31 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-09-26 20:23:24 +0200 |
commit | 29ff9055c80efe77a7130767a9fcb3ab8c67e8ce (patch) | |
tree | b061656c1336d7d73ed5eef59352e3d50d8147a7 /libc/misc | |
parent | b06f85d62c41a4ed108628b1c564203f36c0ab4e (diff) |
use a single libc and deduplicate threading code
Similar to musl libc a single libc has many benefits and solves
some open issues with uClibc-ng.
- no pthread_mutex_* weak symbols exported anymore
- applications no longer failing to link when either
-lrt or -lpthread are missing for dynamic and static linking mode
- smaller C library
- slightly better runtime performance
Diffstat (limited to 'libc/misc')
-rw-r--r-- | libc/misc/internals/__uClibc_main.c | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index 9bb81fc83..46e24d891 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -29,7 +29,6 @@ #include <fcntl.h> #endif #ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include <pthread-functions.h> #include <not-cancel.h> #include <atomic.h> #include <tls.h> @@ -69,42 +68,6 @@ uintptr_t __stack_chk_guard attribute_relro; void internal_function _dl_aux_init (ElfW(auxv_t) *av); -#ifdef __UCLIBC_HAS_THREADS__ -/* - * 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 /* __UCLIBC_HAS_THREADS__ */ - #endif /* !SHARED */ /* Defeat compiler optimization which assumes function addresses are never NULL */ @@ -492,20 +455,12 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc, else { /* Remove the thread-local data. */ -# ifdef SHARED - __libc_pthread_functions.ptr__nptl_deallocate_tsd (); -# else __nptl_deallocate_tsd (); -# endif /* One less thread. Decrement the counter. If it is zero we terminate the entire process. */ result = 0; -# ifdef SHARED - unsigned int *const ptr = __libc_pthread_functions.ptr_nthreads; -# else unsigned int *const ptr = &__nptl_nthreads; -# endif if (! atomic_decrement_and_test (ptr)) /* Not much left to do but to exit the thread, not the process. */ |