From 29ff9055c80efe77a7130767a9fcb3ab8c67e8ce Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 24 Sep 2016 02:55:31 +0200 Subject: 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 --- libc/misc/internals/__uClibc_main.c | 45 ------------------------------------- 1 file changed, 45 deletions(-) (limited to 'libc/misc') 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 #endif #ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include #include #include #include @@ -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. */ -- cgit v1.2.3