[PATCH] linuxthreads: Use hidden definitions when building __pthread_functions.

Will Newton will.newton at gmail.com
Wed Feb 3 16:24:18 UTC 2010


Ping?

I know not many people are using linuxthreads these days, but I think
this is fairly low risk and fixes a quite serious bug.

On Wed, Jan 27, 2010 at 5:25 PM, Will Newton <will.newton at gmail.com> wrote:
> Use hidden definitions of pthread internal functions when building the
> __pthread_functions array of function pointers. This prevents these
> symbols being overridden by definitions in the C library.
>
> Signed-off-by: Will Newton <will.newton at gmail.com>
> ---
>  libpthread/linuxthreads/Makefile.in |    6 +++
>  libpthread/linuxthreads/attr.c      |   24 ++++++++++++++
>  libpthread/linuxthreads/cancel.c    |   13 +++++++
>  libpthread/linuxthreads/condvar.c   |   17 ++++++++++
>  libpthread/linuxthreads/join.c      |    5 +++
>  libpthread/linuxthreads/mutex.c     |   11 ++++++
>  libpthread/linuxthreads/ptcleanup.c |    3 ++
>  libpthread/linuxthreads/ptfork.c    |    3 ++
>  libpthread/linuxthreads/pthread.c   |   61 +++++++++++++++++++++++++++++++++++
>  libpthread/linuxthreads/signals.c   |    7 ++++
>  10 files changed, 150 insertions(+), 0 deletions(-)
>
> diff --git a/libpthread/linuxthreads/Makefile.in
> b/libpthread/linuxthreads/Makefile.in
> index 7ed3ec5..c5ae8e9 100644
> --- a/libpthread/linuxthreads/Makefile.in
> +++ b/libpthread/linuxthreads/Makefile.in
> @@ -17,6 +17,12 @@
> CFLAGS-libpthread/linuxthreads/sysdeps/$(TARGET_ARCH)/ :=
> $(CFLAGS-linuxthreads)
>  CFLAGS-libpthread/linuxthreads/sysdeps/unix/sysv/linux/ :=
> $(CFLAGS-linuxthreads)
>  CFLAGS-libpthread/linuxthreads/sysdeps/pthread/         :=
> $(CFLAGS-linuxthreads)
>
> +CFLAGS-mutex.c += -D__NO_WEAK_PTHREAD_ALIASES
> +CFLAGS-specific.c += -D__NO_WEAK_PTHREAD_ALIASES
> +CFLAGS-pthread.c += -D__NO_WEAK_PTHREAD_ALIASES
> +CFLAGS-ptfork.c += -D__NO_WEAK_PTHREAD_ALIASES
> +CFLAGS-cancel.c += -D__NO_WEAK_PTHREAD_ALIASES
> +
>  # This stuff will not compile without at least -O1
>  # psm: can't handle this here, could maybe search for -O0 in CFLAGS
>  # and append -O1 if found
> diff --git a/libpthread/linuxthreads/attr.c b/libpthread/linuxthreads/attr.c
> index 52e115c..1a93bcb 100644
> --- a/libpthread/linuxthreads/attr.c
> +++ b/libpthread/linuxthreads/attr.c
> @@ -26,6 +26,18 @@
>  #include "pthread.h"
>  #include "internals.h"
>
> +libpthread_hidden_proto(__pthread_attr_destroy)
> +libpthread_hidden_proto(__pthread_attr_init)
> +libpthread_hidden_proto(__pthread_attr_getdetachstate)
> +libpthread_hidden_proto(__pthread_attr_setdetachstate)
> +libpthread_hidden_proto(__pthread_attr_getinheritsched)
> +libpthread_hidden_proto(__pthread_attr_setinheritsched)
> +libpthread_hidden_proto(__pthread_attr_getschedparam)
> +libpthread_hidden_proto(__pthread_attr_setschedparam)
> +libpthread_hidden_proto(__pthread_attr_getschedpolicy)
> +libpthread_hidden_proto(__pthread_attr_setschedpolicy)
> +libpthread_hidden_proto(__pthread_attr_getscope)
> +libpthread_hidden_proto(__pthread_attr_setscope)
>
>  int __pthread_attr_init(pthread_attr_t *attr)
>  {
> @@ -46,12 +58,14 @@ int __pthread_attr_init(pthread_attr_t *attr)
>   attr->__stacksize = STACK_SIZE - ps;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_init)
>  strong_alias (__pthread_attr_init, pthread_attr_init)
>
>  int __pthread_attr_destroy(pthread_attr_t *attr)
>  {
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_destroy)
>  strong_alias (__pthread_attr_destroy, pthread_attr_destroy)
>
>  int __pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
> @@ -62,6 +76,7 @@ int __pthread_attr_setdetachstate(pthread_attr_t
> *attr, int detachstate)
>   attr->__detachstate = detachstate;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_setdetachstate)
>  strong_alias (__pthread_attr_setdetachstate, pthread_attr_setdetachstate)
>
>  int __pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate)
> @@ -69,6 +84,7 @@ int __pthread_attr_getdetachstate(const
> pthread_attr_t *attr, int *detachstate)
>   *detachstate = attr->__detachstate;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_getdetachstate)
>  strong_alias (__pthread_attr_getdetachstate, pthread_attr_getdetachstate)
>
>  int __pthread_attr_setschedparam(pthread_attr_t *attr,
> @@ -82,6 +98,7 @@ int __pthread_attr_setschedparam(pthread_attr_t *attr,
>   memcpy (&attr->__schedparam, param, sizeof (struct sched_param));
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_setschedparam)
>  strong_alias (__pthread_attr_setschedparam, pthread_attr_setschedparam)
>
>  int __pthread_attr_getschedparam(const pthread_attr_t *attr,
> @@ -90,6 +107,7 @@ int __pthread_attr_getschedparam(const pthread_attr_t *attr,
>   memcpy (param, &attr->__schedparam, sizeof (struct sched_param));
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_getschedparam)
>  strong_alias (__pthread_attr_getschedparam, pthread_attr_getschedparam)
>
>  int __pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)
> @@ -99,6 +117,7 @@ int __pthread_attr_setschedpolicy(pthread_attr_t
> *attr, int policy)
>   attr->__schedpolicy = policy;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_setschedpolicy)
>  strong_alias (__pthread_attr_setschedpolicy, pthread_attr_setschedpolicy)
>
>  int __pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy)
> @@ -106,6 +125,7 @@ int __pthread_attr_getschedpolicy(const
> pthread_attr_t *attr, int *policy)
>   *policy = attr->__schedpolicy;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_getschedpolicy)
>  strong_alias (__pthread_attr_getschedpolicy, pthread_attr_getschedpolicy)
>
>  int __pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit)
> @@ -115,6 +135,7 @@ int __pthread_attr_setinheritsched(pthread_attr_t
> *attr, int inherit)
>   attr->__inheritsched = inherit;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_setinheritsched)
>  strong_alias (__pthread_attr_setinheritsched, pthread_attr_setinheritsched)
>
>  int __pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit)
> @@ -122,6 +143,7 @@ int __pthread_attr_getinheritsched(const
> pthread_attr_t *attr, int *inherit)
>   *inherit = attr->__inheritsched;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_getinheritsched)
>  strong_alias (__pthread_attr_getinheritsched, pthread_attr_getinheritsched)
>
>  int __pthread_attr_setscope(pthread_attr_t *attr, int scope)
> @@ -136,6 +158,7 @@ int __pthread_attr_setscope(pthread_attr_t *attr, int scope)
>     return EINVAL;
>   }
>  }
> +libpthread_hidden_def(__pthread_attr_setscope)
>  strong_alias (__pthread_attr_setscope, pthread_attr_setscope)
>
>  int __pthread_attr_getscope(const pthread_attr_t *attr, int *scope)
> @@ -143,6 +166,7 @@ int __pthread_attr_getscope(const pthread_attr_t
> *attr, int *scope)
>   *scope = attr->__scope;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_attr_getscope)
>  strong_alias (__pthread_attr_getscope, pthread_attr_getscope)
>
>  int __pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize)
> diff --git a/libpthread/linuxthreads/cancel.c b/libpthread/linuxthreads/cancel.c
> index 3435680..22c2d3b 100644
> --- a/libpthread/linuxthreads/cancel.c
> +++ b/libpthread/linuxthreads/cancel.c
> @@ -29,6 +29,13 @@
>  # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
>  #endif
>
> +libpthread_hidden_proto(__pthread_setcancelstate)
> +libpthread_hidden_proto(__pthread_setcanceltype)
> +
> +libpthread_hidden_proto(_pthread_cleanup_push)
> +libpthread_hidden_proto(_pthread_cleanup_push_defer)
> +libpthread_hidden_proto(_pthread_cleanup_pop)
> +libpthread_hidden_proto(_pthread_cleanup_pop_restore)
>
>  int __pthread_setcancelstate(int state, int * oldstate)
>  {
> @@ -43,6 +50,7 @@ int __pthread_setcancelstate(int state, int * oldstate)
>     __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME);
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_setcancelstate)
>  strong_alias (__pthread_setcancelstate, pthread_setcancelstate)
>
>  int __pthread_setcanceltype(int type, int * oldtype)
> @@ -58,6 +66,7 @@ int __pthread_setcanceltype(int type, int * oldtype)
>     __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME);
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_setcanceltype)
>  strong_alias (__pthread_setcanceltype, pthread_setcanceltype)
>
>
> @@ -163,6 +172,7 @@ void _pthread_cleanup_push(struct
> _pthread_cleanup_buffer * buffer,
>     buffer->__prev = NULL;
>   THREAD_SETMEM(self, p_cleanup, buffer);
>  }
> +libpthread_hidden_def(_pthread_cleanup_push)
>
>  void _pthread_cleanup_pop(struct _pthread_cleanup_buffer * buffer,
>                          int execute)
> @@ -171,6 +181,7 @@ void _pthread_cleanup_pop(struct
> _pthread_cleanup_buffer * buffer,
>   if (execute) buffer->__routine(buffer->__arg);
>   THREAD_SETMEM(self, p_cleanup, buffer->__prev);
>  }
> +libpthread_hidden_def(_pthread_cleanup_pop)
>
>  void _pthread_cleanup_push_defer(struct _pthread_cleanup_buffer * buffer,
>                                 void (*routine)(void *), void * arg)
> @@ -185,6 +196,7 @@ void _pthread_cleanup_push_defer(struct
> _pthread_cleanup_buffer * buffer,
>   THREAD_SETMEM(self, p_canceltype, PTHREAD_CANCEL_DEFERRED);
>   THREAD_SETMEM(self, p_cleanup, buffer);
>  }
> +libpthread_hidden_def(_pthread_cleanup_push_defer)
>
>  void _pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer * buffer,
>                                  int execute)
> @@ -198,6 +210,7 @@ void _pthread_cleanup_pop_restore(struct
> _pthread_cleanup_buffer * buffer,
>       THREAD_GETMEM(self, p_canceltype) == PTHREAD_CANCEL_ASYNCHRONOUS)
>     __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME);
>  }
> +libpthread_hidden_def(_pthread_cleanup_pop_restore)
>
>  extern void __rpc_thread_destroy(void);
>  void __pthread_perform_cleanup(char *currentframe)
> diff --git a/libpthread/linuxthreads/condvar.c
> b/libpthread/linuxthreads/condvar.c
> index d7b2e98..1483a72 100644
> --- a/libpthread/linuxthreads/condvar.c
> +++ b/libpthread/linuxthreads/condvar.c
> @@ -25,6 +25,15 @@
>  #include "queue.h"
>  #include "restart.h"
>
> +libpthread_hidden_proto(__pthread_condattr_destroy)
> +libpthread_hidden_proto(__pthread_condattr_init)
> +libpthread_hidden_proto(__pthread_cond_broadcast)
> +libpthread_hidden_proto(__pthread_cond_destroy)
> +libpthread_hidden_proto(__pthread_cond_init)
> +libpthread_hidden_proto(__pthread_cond_signal)
> +libpthread_hidden_proto(__pthread_cond_wait)
> +libpthread_hidden_proto(__pthread_cond_timedwait)
> +
>  int __pthread_cond_init(pthread_cond_t *cond,
>                         const pthread_condattr_t *cond_attr)
>  {
> @@ -32,6 +41,7 @@ int __pthread_cond_init(pthread_cond_t *cond,
>   cond->__c_waiting = NULL;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_cond_init)
>  strong_alias (__pthread_cond_init, pthread_cond_init)
>
>  int __pthread_cond_destroy(pthread_cond_t *cond)
> @@ -39,6 +49,7 @@ int __pthread_cond_destroy(pthread_cond_t *cond)
>   if (cond->__c_waiting != NULL) return EBUSY;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_cond_destroy)
>  strong_alias (__pthread_cond_destroy, pthread_cond_destroy)
>
>  /* Function called by pthread_cancel to remove the thread from
> @@ -134,6 +145,7 @@ int __pthread_cond_wait(pthread_cond_t *cond,
> pthread_mutex_t *mutex)
>   pthread_mutex_lock(mutex);
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_cond_wait)
>  strong_alias (__pthread_cond_wait, pthread_cond_wait)
>
>  static int
> @@ -236,6 +248,7 @@ int __pthread_cond_timedwait(pthread_cond_t *cond,
> pthread_mutex_t *mutex,
>   /* Indirect call through pointer! */
>   return pthread_cond_timedwait_relative(cond, mutex, abstime);
>  }
> +libpthread_hidden_def(__pthread_cond_timedwait)
>  strong_alias (__pthread_cond_timedwait, pthread_cond_timedwait)
>
>  int __pthread_cond_signal(pthread_cond_t *cond)
> @@ -252,6 +265,7 @@ int __pthread_cond_signal(pthread_cond_t *cond)
>   }
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_cond_signal)
>  strong_alias (__pthread_cond_signal, pthread_cond_signal)
>
>  int __pthread_cond_broadcast(pthread_cond_t *cond)
> @@ -271,18 +285,21 @@ int __pthread_cond_broadcast(pthread_cond_t *cond)
>   }
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_cond_broadcast)
>  strong_alias (__pthread_cond_broadcast, pthread_cond_broadcast)
>
>  int __pthread_condattr_init(pthread_condattr_t *attr)
>  {
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_condattr_init)
>  strong_alias (__pthread_condattr_init, pthread_condattr_init)
>
>  int __pthread_condattr_destroy(pthread_condattr_t *attr)
>  {
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_condattr_destroy)
>  strong_alias (__pthread_condattr_destroy, pthread_condattr_destroy)
>
>  int pthread_condattr_getpshared (const pthread_condattr_t *attr, int *pshared)
> diff --git a/libpthread/linuxthreads/join.c b/libpthread/linuxthreads/join.c
> index 57ea54e..34e9c50 100644
> --- a/libpthread/linuxthreads/join.c
> +++ b/libpthread/linuxthreads/join.c
> @@ -24,10 +24,14 @@
>  #include "restart.h"
>  #include <not-cancel.h>
>
> +libpthread_hidden_proto(__pthread_exit)
> +libpthread_hidden_proto(__pthread_do_exit)
> +
>  void __pthread_exit(void * retval)
>  {
>   __pthread_do_exit (retval, CURRENT_STACK_FRAME);
>  }
> +libpthread_hidden_def(__pthread_exit)
>  strong_alias (__pthread_exit, pthread_exit)
>
>  void __pthread_do_exit(void *retval, char *currentframe)
> @@ -91,6 +95,7 @@ void __pthread_do_exit(void *retval, char *currentframe)
>      or running atexit functions. */
>   _exit(0);
>  }
> +libpthread_hidden_def(__pthread_do_exit)
>
>  /* Function called by pthread_cancel to remove the thread from
>    waiting on a condition variable queue. */
> diff --git a/libpthread/linuxthreads/mutex.c b/libpthread/linuxthreads/mutex.c
> index 3c97ea7..af9c0eb 100644
> --- a/libpthread/linuxthreads/mutex.c
> +++ b/libpthread/linuxthreads/mutex.c
> @@ -25,6 +25,12 @@
>  #include "queue.h"
>  #include "restart.h"
>
> +libpthread_hidden_proto(__pthread_mutex_destroy)
> +libpthread_hidden_proto(__pthread_mutex_init)
> +libpthread_hidden_proto(__pthread_mutex_lock)
> +libpthread_hidden_proto(__pthread_mutex_trylock)
> +libpthread_hidden_proto(__pthread_mutex_unlock)
> +
>  int __pthread_mutex_init(pthread_mutex_t * mutex,
>                        const pthread_mutexattr_t * mutex_attr)
>  {
> @@ -35,6 +41,7 @@ int __pthread_mutex_init(pthread_mutex_t * mutex,
>   mutex->__m_owner = NULL;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_mutex_init)
>  strong_alias (__pthread_mutex_init, pthread_mutex_init)
>
>  int __pthread_mutex_destroy(pthread_mutex_t * mutex)
> @@ -54,6 +61,7 @@ int __pthread_mutex_destroy(pthread_mutex_t * mutex)
>     return EINVAL;
>   }
>  }
> +libpthread_hidden_def(__pthread_mutex_destroy)
>  strong_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
>
>  int __pthread_mutex_trylock(pthread_mutex_t * mutex)
> @@ -90,6 +98,7 @@ int __pthread_mutex_trylock(pthread_mutex_t * mutex)
>     return EINVAL;
>   }
>  }
> +libpthread_hidden_def(__pthread_mutex_trylock)
>  strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock)
>
>  int __pthread_mutex_lock(pthread_mutex_t * mutex)
> @@ -123,6 +132,7 @@ int __pthread_mutex_lock(pthread_mutex_t * mutex)
>     return EINVAL;
>   }
>  }
> +libpthread_hidden_def(__pthread_mutex_lock)
>  strong_alias (__pthread_mutex_lock, pthread_mutex_lock)
>
>  int __pthread_mutex_timedlock (pthread_mutex_t *mutex,
> @@ -198,6 +208,7 @@ int __pthread_mutex_unlock(pthread_mutex_t * mutex)
>     return EINVAL;
>   }
>  }
> +libpthread_hidden_def(__pthread_mutex_unlock)
>  strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock)
>
>  int __pthread_mutexattr_init(pthread_mutexattr_t *attr)
> diff --git a/libpthread/linuxthreads/ptcleanup.c
> b/libpthread/linuxthreads/ptcleanup.c
> index 6213b56..ccb977c 100644
> --- a/libpthread/linuxthreads/ptcleanup.c
> +++ b/libpthread/linuxthreads/ptcleanup.c
> @@ -40,6 +40,8 @@ demangle_ptr (uintptr_t x)
>  #define demangle_ptr(x) x
>  #endif
>
> +libpthread_hidden_proto(__pthread_cleanup_upto)
> +
>  void __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
>  {
>   pthread_descr self = thread_self();
> @@ -72,3 +74,4 @@ void __pthread_cleanup_upto (__jmp_buf target, char
> *targetframe)
>                         demangle_ptr))
>     THREAD_SETMEM(self, p_in_sighandler, NULL);
>  }
> +libpthread_hidden_def(__pthread_cleanup_upto)
> diff --git a/libpthread/linuxthreads/ptfork.c b/libpthread/linuxthreads/ptfork.c
> index 853aeea..0beb859 100644
> --- a/libpthread/linuxthreads/ptfork.c
> +++ b/libpthread/linuxthreads/ptfork.c
> @@ -25,6 +25,8 @@
>
>  extern int __libc_fork (void);
>
> +libpthread_hidden_proto(__pthread_fork)
> +
>  pid_t __pthread_fork (struct fork_block *b)
>  {
>   pid_t pid;
> @@ -77,6 +79,7 @@ pid_t __pthread_fork (struct fork_block *b)
>
>   return pid;
>  }
> +libpthread_hidden_def(__pthread_fork)
>
>  /* psm: have no idea why these are here, sjhill? */
>  #if 0 /*def SHARED*/
> diff --git a/libpthread/linuxthreads/pthread.c
> b/libpthread/linuxthreads/pthread.c
> index 6ae9a10..959044b 100644
> --- a/libpthread/linuxthreads/pthread.c
> +++ b/libpthread/linuxthreads/pthread.c
> @@ -229,6 +229,62 @@ static void pthread_initialize(void)
> __attribute__((constructor));
>  extern void *__dso_handle __attribute__ ((weak));
>  #endif
>
> +libpthread_hidden_proto(__pthread_fork)
> +
> +libpthread_hidden_proto(__pthread_attr_destroy)
> +libpthread_hidden_proto(__pthread_attr_init)
> +libpthread_hidden_proto(__pthread_attr_getdetachstate)
> +libpthread_hidden_proto(__pthread_attr_setdetachstate)
> +libpthread_hidden_proto(__pthread_attr_getinheritsched)
> +libpthread_hidden_proto(__pthread_attr_setinheritsched)
> +libpthread_hidden_proto(__pthread_attr_getschedparam)
> +libpthread_hidden_proto(__pthread_attr_setschedparam)
> +libpthread_hidden_proto(__pthread_attr_getschedpolicy)
> +libpthread_hidden_proto(__pthread_attr_setschedpolicy)
> +libpthread_hidden_proto(__pthread_attr_getscope)
> +libpthread_hidden_proto(__pthread_attr_setscope)
> +
> +libpthread_hidden_proto(__pthread_condattr_destroy)
> +libpthread_hidden_proto(__pthread_condattr_init)
> +libpthread_hidden_proto(__pthread_cond_broadcast)
> +libpthread_hidden_proto(__pthread_cond_destroy)
> +libpthread_hidden_proto(__pthread_cond_init)
> +libpthread_hidden_proto(__pthread_cond_signal)
> +libpthread_hidden_proto(__pthread_cond_wait)
> +libpthread_hidden_proto(__pthread_cond_timedwait)
> +
> +libpthread_hidden_proto(__pthread_equal)
> +
> +libpthread_hidden_proto(__pthread_exit)
> +
> +libpthread_hidden_proto(__pthread_getschedparam)
> +libpthread_hidden_proto(__pthread_setschedparam)
> +
> +libpthread_hidden_proto(__pthread_mutex_destroy)
> +libpthread_hidden_proto(__pthread_mutex_init)
> +libpthread_hidden_proto(__pthread_mutex_lock)
> +libpthread_hidden_proto(__pthread_mutex_trylock)
> +libpthread_hidden_proto(__pthread_mutex_unlock)
> +
> +libpthread_hidden_proto(__pthread_self)
> +
> +libpthread_hidden_proto(__pthread_setcancelstate)
> +libpthread_hidden_proto(__pthread_setcanceltype)
> +
> +libpthread_hidden_proto(__pthread_do_exit)
> +
> +libpthread_hidden_proto(__pthread_thread_self)
> +
> +libpthread_hidden_proto(__pthread_cleanup_upto)
> +
> +libpthread_hidden_proto(__pthread_sigaction)
> +libpthread_hidden_proto(__pthread_sigwait)
> +libpthread_hidden_proto(__pthread_raise)
> +
> +libpthread_hidden_proto(_pthread_cleanup_push)
> +libpthread_hidden_proto(_pthread_cleanup_push_defer)
> +libpthread_hidden_proto(_pthread_cleanup_pop)
> +libpthread_hidden_proto(_pthread_cleanup_pop_restore)
>
>  #if defined USE_TLS && !defined SHARED
>  extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
> @@ -848,18 +904,21 @@ pthread_descr __pthread_thread_self(void)
>  {
>   return thread_self();
>  }
> +libpthread_hidden_def(__pthread_thread_self)
>
>  pthread_t __pthread_self(void)
>  {
>   pthread_descr self = thread_self();
>   return THREAD_GETMEM(self, p_tid);
>  }
> +libpthread_hidden_def(__pthread_self)
>  strong_alias (__pthread_self, pthread_self)
>
>  int __pthread_equal(pthread_t thread1, pthread_t thread2)
>  {
>   return thread1 == thread2;
>  }
> +libpthread_hidden_def(__pthread_equal)
>  strong_alias (__pthread_equal, pthread_equal)
>
>  /* Helper function for thread_self in the case of user-provided stacks */
> @@ -941,6 +1000,7 @@ int __pthread_setschedparam(pthread_t thread, int policy,
>     __pthread_manager_adjust_prio(th->p_priority);
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_setschedparam)
>  strong_alias (__pthread_setschedparam, pthread_setschedparam)
>
>  int __pthread_getschedparam(pthread_t thread, int *policy,
> @@ -962,6 +1022,7 @@ int __pthread_getschedparam(pthread_t thread, int *policy,
>   *policy = pol;
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_getschedparam)
>  strong_alias (__pthread_getschedparam, pthread_getschedparam)
>
>  /* Process-wide exit() request */
> diff --git a/libpthread/linuxthreads/signals.c
> b/libpthread/linuxthreads/signals.c
> index 02bf1c6..d0153f6 100644
> --- a/libpthread/linuxthreads/signals.c
> +++ b/libpthread/linuxthreads/signals.c
> @@ -24,6 +24,10 @@
>  /* mods for uClibc: __libc_sigaction is not in any standard headers */
>  extern __typeof(sigaction) __libc_sigaction;
>
> +libpthread_hidden_proto(__pthread_sigaction)
> +libpthread_hidden_proto(__pthread_sigwait)
> +libpthread_hidden_proto(__pthread_raise)
> +
>  int pthread_sigmask(int how, const sigset_t * newmask, sigset_t * oldmask)
>  {
>   sigset_t mask;
> @@ -133,6 +137,7 @@ int __pthread_sigaction(int sig, const struct
> sigaction * act,
>     }
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_sigaction)
>  #ifdef SHARED
>  strong_alias(__pthread_sigaction, __sigaction)
>  strong_alias(__pthread_sigaction, sigaction)
> @@ -191,6 +196,7 @@ int __pthread_sigwait(const sigset_t * set, int * sig)
>   *sig = THREAD_GETMEM(self, p_signal);
>   return 0;
>  }
> +libpthread_hidden_def(__pthread_sigwait)
>  #ifdef SHARED
>  strong_alias (__pthread_sigwait, sigwait)
>  #endif
> @@ -207,6 +213,7 @@ int __pthread_raise (int sig)
>     return -1;
>   }
>  }
> +libpthread_hidden_def(__pthread_raise)
>  #ifdef SHARED
>  strong_alias (__pthread_raise, raise)
>  #endif
> --
> 1.5.5.2
>


More information about the uClibc mailing list