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 /libpthread/linuxthreads/sysdeps/pthread | |
| 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 'libpthread/linuxthreads/sysdeps/pthread')
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h | 66 | ||||
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h | 113 | 
2 files changed, 2 insertions, 177 deletions
| diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h index a7c0249cf..c00d60bf0 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h @@ -105,13 +105,8 @@ typedef pthread_key_t __libc_key_t;    (FUNC != NULL ? FUNC ARGS : ELSE)  # endif  #endif -#if defined _LIBC && !defined NOT_IN_libc && defined SHARED -# define __libc_maybe_call2(FUNC, ARGS, ELSE) \ -  ({__builtin_expect (__libc_pthread_functions.ptr_##FUNC != NULL, 0) \ -    ? __libc_pthread_functions.ptr_##FUNC ARGS : ELSE; }) -#else -# define __libc_maybe_call2(FUNC, ARGS, ELSE) __libc_maybe_call (__##FUNC, ARGS, ELSE) -#endif + +#define __libc_maybe_call2(FUNC, ARGS, ELSE) __libc_maybe_call (__##FUNC, ARGS, ELSE)  /* Initialize the named lock variable, leaving it in a consistent, unlocked     state.  */ @@ -351,63 +346,6 @@ extern int __pthread_atfork (void (*__prepare) (void),  			     void (*__child) (void)); - -/* Make the pthread functions weak so that we can elide them from -   single-threaded processes.  */ -#ifndef __NO_WEAK_PTHREAD_ALIASES -# ifdef weak_extern -#   define BP_SYM(sym) sym -weak_extern (BP_SYM (__pthread_mutex_init)) -weak_extern (BP_SYM (__pthread_mutex_destroy)) -weak_extern (BP_SYM (__pthread_mutex_lock)) -weak_extern (BP_SYM (__pthread_mutex_trylock)) -weak_extern (BP_SYM (__pthread_mutex_unlock)) -weak_extern (BP_SYM (__pthread_mutexattr_init)) -weak_extern (BP_SYM (__pthread_mutexattr_destroy)) -weak_extern (BP_SYM (__pthread_mutexattr_settype)) -weak_extern (BP_SYM (__pthread_rwlock_init)) -weak_extern (BP_SYM (__pthread_rwlock_destroy)) -weak_extern (BP_SYM (__pthread_rwlock_rdlock)) -weak_extern (BP_SYM (__pthread_rwlock_tryrdlock)) -weak_extern (BP_SYM (__pthread_rwlock_wrlock)) -weak_extern (BP_SYM (__pthread_rwlock_trywrlock)) -weak_extern (BP_SYM (__pthread_rwlock_unlock)) -weak_extern (BP_SYM (__pthread_key_create)) -weak_extern (BP_SYM (__pthread_setspecific)) -weak_extern (BP_SYM (__pthread_getspecific)) -weak_extern (BP_SYM (__pthread_once)) -weak_extern (__pthread_atfork) -weak_extern (BP_SYM (_pthread_cleanup_push)) -weak_extern (BP_SYM (_pthread_cleanup_pop)) -weak_extern (BP_SYM (_pthread_cleanup_push_defer)) -weak_extern (BP_SYM (_pthread_cleanup_pop_restore)) -# else -#  pragma weak __pthread_mutex_init -#  pragma weak __pthread_mutex_destroy -#  pragma weak __pthread_mutex_lock -#  pragma weak __pthread_mutex_trylock -#  pragma weak __pthread_mutex_unlock -#  pragma weak __pthread_mutexattr_init -#  pragma weak __pthread_mutexattr_destroy -#  pragma weak __pthread_mutexattr_settype -#  pragma weak __pthread_rwlock_destroy -#  pragma weak __pthread_rwlock_rdlock -#  pragma weak __pthread_rwlock_tryrdlock -#  pragma weak __pthread_rwlock_wrlock -#  pragma weak __pthread_rwlock_trywrlock -#  pragma weak __pthread_rwlock_unlock -#  pragma weak __pthread_key_create -#  pragma weak __pthread_setspecific -#  pragma weak __pthread_getspecific -#  pragma weak __pthread_once -#  pragma weak __pthread_atfork -#  pragma weak _pthread_cleanup_push_defer -#  pragma weak _pthread_cleanup_pop_restore -#  pragma weak _pthread_cleanup_push -#  pragma weak _pthread_cleanup_pop -# endif -#endif -  /* We need portable names for some functions.  E.g., when they are     used as argument to __libc_cleanup_region_start.  */  #define __libc_mutex_unlock __pthread_mutex_unlock diff --git a/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h b/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h deleted file mode 100644 index 119953df0..000000000 --- a/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 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 -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, see -   <http://www.gnu.org/licenses/>.  */ - -#ifndef _PTHREAD_FUNCTIONS_H -#define _PTHREAD_FUNCTIONS_H	1 - -#include <pthread.h> -#if 0 -#include <setjmp.h> -#include <linuxthreads/internals.h> - -struct fork_block; -#endif - -/* Data type shared with libc.  The libc uses it to pass on calls to -   the thread functions.  Wine pokes directly into this structure, -   so if possible avoid breaking it and append new hooks to the end.  */ -struct pthread_functions -{ -#if 0 -  pid_t (*ptr_pthread_fork) (struct fork_block *); -#endif -  int (*ptr_pthread_attr_destroy) (pthread_attr_t *); -  int (*ptr_pthread_attr_init) (pthread_attr_t *); -  int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *); -  int (*ptr_pthread_attr_setdetachstate) (pthread_attr_t *, int); -  int (*ptr_pthread_attr_getinheritsched) (const pthread_attr_t *, int *); -  int (*ptr_pthread_attr_setinheritsched) (pthread_attr_t *, int); -  int (*ptr_pthread_attr_getschedparam) (const pthread_attr_t *, -					 struct sched_param *); -  int (*ptr_pthread_attr_setschedparam) (pthread_attr_t *, -					 const struct sched_param *); -  int (*ptr_pthread_attr_getschedpolicy) (const pthread_attr_t *, int *); -  int (*ptr_pthread_attr_setschedpolicy) (pthread_attr_t *, int); -  int (*ptr_pthread_attr_getscope) (const pthread_attr_t *, int *); -  int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int); -  int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *); -  int (*ptr_pthread_condattr_init) (pthread_condattr_t *); -  int (*ptr_pthread_cond_broadcast) (pthread_cond_t *); -  int (*ptr_pthread_cond_destroy) (pthread_cond_t *); -  int (*ptr_pthread_cond_init) (pthread_cond_t *, -				  const pthread_condattr_t *); -  int (*ptr_pthread_cond_signal) (pthread_cond_t *); -  int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *); -  int (*ptr_pthread_equal) (pthread_t, pthread_t); -  void (*ptr___pthread_exit) (void *); -  int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *); -  int (*ptr_pthread_setschedparam) (pthread_t, int, -				    const struct sched_param *); -  int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *); -  int (*ptr_pthread_mutex_init) (pthread_mutex_t *, -				 const pthread_mutexattr_t *); -  int (*ptr_pthread_mutex_lock) (pthread_mutex_t *); -  int (*ptr_pthread_mutex_trylock) (pthread_mutex_t *); -  int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *); -  pthread_t (*ptr_pthread_self) (void); -  int (*ptr_pthread_setcancelstate) (int, int *); -  int (*ptr_pthread_setcanceltype) (int, int *); -#if 0 -  void (*ptr_pthread_do_exit) (void *retval, char *currentframe); -  void (*ptr_pthread_cleanup_upto) (__jmp_buf target, -				    char *targetframe); -  pthread_descr (*ptr_pthread_thread_self) (void); -#endif -#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__ -  int (*ptr_pthread_internal_tsd_set) (int key, const void *pointer); -  void * (*ptr_pthread_internal_tsd_get) (int key); -  void ** __attribute__ ((__const__)) -    (*ptr_pthread_internal_tsd_address) (int key); -#endif -#if 0 -  int (*ptr_pthread_sigaction) (int sig, const struct sigaction * act, -				struct sigaction *oact); -  int (*ptr_pthread_sigwait) (const sigset_t *set, int *sig); -  int (*ptr_pthread_raise) (int sig); -#endif -  int (*ptr_pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *, -				       const struct timespec *); -#if 0 -  void (*ptr__pthread_cleanup_push) (struct _pthread_cleanup_buffer * buffer, -				     void (*routine)(void *), void * arg); -#endif -  void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer * buffer, -					   void (*routine)(void *), void * arg); -#if 0 -  void (*ptr__pthread_cleanup_pop) (struct _pthread_cleanup_buffer * buffer, -				    int execute); -#endif -  void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer * buffer, -					    int execute); -}; - -/* Variable in libc.so.  */ -extern struct pthread_functions __libc_pthread_functions attribute_hidden; - -extern int * __libc_pthread_init (const struct pthread_functions *functions); - -#endif	/* pthread-functions.h */ | 
