diff mbox series

[1/4] Clean pthread functions namespaces for C11 threads

Message ID 1497898361-29480-2-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/4] Clean pthread functions namespaces for C11 threads | expand

Commit Message

Adhemerval Zanella Netto June 19, 2017, 6:52 p.m. UTC
This patch adds internal definition (through {libc_}hidden_{proto,def}) and
also change some strong to weak alias for symbols that might be used by C11
threads implementations.

The patchset should not change libc/libpthread functional, although object
changes are expected (since now internal symbols are used instead) and final
exported symbols through GLIBC_PRIVATE is also expanded (to cover libpthread
usage of __mmap{64}, __munmap, __mprotect).

Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).

	* include/sched.h (__sched_get_priority_max): Add libc hidden proto.
	(__sched_get_prioriry_min): Likewise.
	* include/sys/mman.h (__mmap): Likewise.
	(__mmap64): Likewise.
	(__munmap): Likewise.
	(__mprotect): Likewise.
	* include/termios.h (__tcsetattr): Likewise.
	* include/time.h (__nanosleep): Use hidden_proto instead of
	libc_hidden_proto.
	* posix/nanosleep.c (__nanosleep): Likewise.
	* misc/Versions (libc): Export __mmap, __munmap, __mprotect,
	__sched_get_priority_min, and __sched_get_priority_max under
	GLIBC_PRIVATE.
	* nptl/allocatestack.c (__free_stacks): Use internal definition for
	libc symbols.
	(setup_stack_prot): Likewise.
	(change_stack_perm): Likewise.
	(allocate_stack): Likewise.
	* sysdeps/posix/gethostname.c: Likewise.
	* nptl/tpp.c (__init_sched_fifo_prio): Likewise.
	* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/ioctl.c (__ioctl): Likewise.
	* nptl/pthreadP.h (__pthread_mutex_timedlock): Add definition.
	(__pthread_key_delete): Likewise.
	(__pthread_detach): Likewise.
	(__pthread_cancel): Likewise.
	(__pthread_mutex_trylock): Likewise.
	(__pthread_mutexattr_init): Likewise.
	(__pthread_mutexattr_settype): Likewise.
	* nptl/pthread_cancel.c (pthread_cancel): Change to internal name and
	create alias for exported one.
	* nptl/pthread_join.c (pthread_join): Likewise.
	* nptl/pthread_detach.c (pthread_detach): Likewise.
	* nptl/pthread_key_delete.c (pthread_key_delete): Likewise.
	* nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise.
	* nptl/pthread_create.c: Change static requirements for pthread
	symbols.
	* nptl/pthread_equal.c (__pthread_equal): Change strong alias to weak
	for internal definition.
	* nptl/pthread_exit.c (__pthread_exit): Likewise.
	* nptl/pthread_getspecific.c (__pthread_getspecific): Likewise.
	* nptl/pthread_key_create.c (__pthread_key_create): Likewise.
	* nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Likewise.
	* nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise.
	* nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
	* nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Likewise.
	* nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock): Likewise.
	* nptl/pthread_mutexattr_init.c (__pthread_mutexattr_init): Likwise.
	* nptl/pthread_mutexattr_settype.c (__pthread_mutexattr_settype):
	Likewise.
	* nptl/pthread_self.c (__pthread_self): Likewise.
	* nptl/pthread_setspecific.c (__pthread_setspecific): Likewise.
	* sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise.
	* misc/mmap.c (__mmap): Add internal symbol definition.
	* misc/mmap.c (__mmap64): Likewise.
	* sysdeps/unix/sysv/linux/mmap.c (__mmap): Likewise.
	* sysdeps/unix/sysv/linux/mmap64.c (__mmap): Likewise.
	(__mmap64): Likewise.
	* sysdeps/unix/sysv/linux/i386/Versions (libc) [GLIBC_PRIVATE):
	Add __uname.
---
 ChangeLog                               | 64 +++++++++++++++++++++++++++++++++
 include/sched.h                         |  2 ++
 include/sys/mman.h                      |  4 +++
 include/termios.h                       |  2 ++
 include/time.h                          |  2 +-
 misc/Versions                           |  2 ++
 misc/mmap.c                             |  1 +
 misc/mmap64.c                           |  1 +
 nptl/allocatestack.c                    | 32 ++++++++---------
 nptl/pthreadP.h                         |  9 +++++
 nptl/pthread_cancel.c                   |  7 ++--
 nptl/pthread_create.c                   | 18 +++++-----
 nptl/pthread_detach.c                   |  3 +-
 nptl/pthread_equal.c                    |  2 +-
 nptl/pthread_exit.c                     |  4 +--
 nptl/pthread_getspecific.c              |  2 +-
 nptl/pthread_join.c                     |  3 +-
 nptl/pthread_key_create.c               |  2 +-
 nptl/pthread_key_delete.c               |  3 +-
 nptl/pthread_mutex_destroy.c            |  2 +-
 nptl/pthread_mutex_init.c               |  2 +-
 nptl/pthread_mutex_lock.c               |  2 +-
 nptl/pthread_mutex_timedlock.c          |  5 +--
 nptl/pthread_mutex_trylock.c            |  3 +-
 nptl/pthread_mutex_unlock.c             |  2 +-
 nptl/pthread_mutexattr_init.c           |  3 +-
 nptl/pthread_mutexattr_settype.c        |  3 +-
 nptl/pthread_self.c                     |  2 +-
 nptl/pthread_setspecific.c              |  2 +-
 nptl/tpp.c                              |  4 +--
 posix/nanosleep.c                       |  2 +-
 sysdeps/posix/gethostname.c             |  2 +-
 sysdeps/unix/sysv/linux/i386/Versions   |  2 +-
 sysdeps/unix/sysv/linux/i386/smp.h      |  2 +-
 sysdeps/unix/sysv/linux/mmap.c          |  1 +
 sysdeps/unix/sysv/linux/mmap64.c        |  2 ++
 sysdeps/unix/sysv/linux/nanosleep.c     |  2 +-
 sysdeps/unix/sysv/linux/powerpc/ioctl.c |  6 ++--
 sysdeps/unix/sysv/linux/tcsetattr.c     |  3 +-
 39 files changed, 156 insertions(+), 59 deletions(-)

-- 
2.7.4

Comments

Siddhesh Poyarekar June 22, 2017, 7:35 p.m. UTC | #1
On Tuesday 20 June 2017 12:22 AM, Adhemerval Zanella wrote:
> This patch adds internal definition (through {libc_}hidden_{proto,def}) and

> also change some strong to weak alias for symbols that might be used by C11

> threads implementations.

> 

> The patchset should not change libc/libpthread functional, although object

> changes are expected (since now internal symbols are used instead) and final

> exported symbols through GLIBC_PRIVATE is also expanded (to cover libpthread

> usage of __mmap{64}, __munmap, __mprotect).

> 

> Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,

> arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,

> microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,

> powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,

> tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).


Looks OK with one small nit/comment below.

Siddhesh

> 

> 	* include/sched.h (__sched_get_priority_max): Add libc hidden proto.

> 	(__sched_get_prioriry_min): Likewise.

> 	* include/sys/mman.h (__mmap): Likewise.

> 	(__mmap64): Likewise.

> 	(__munmap): Likewise.

> 	(__mprotect): Likewise.

> 	* include/termios.h (__tcsetattr): Likewise.

> 	* include/time.h (__nanosleep): Use hidden_proto instead of

> 	libc_hidden_proto.

> 	* posix/nanosleep.c (__nanosleep): Likewise.

> 	* misc/Versions (libc): Export __mmap, __munmap, __mprotect,

> 	__sched_get_priority_min, and __sched_get_priority_max under

> 	GLIBC_PRIVATE.

> 	* nptl/allocatestack.c (__free_stacks): Use internal definition for

> 	libc symbols.

> 	(setup_stack_prot): Likewise.

> 	(change_stack_perm): Likewise.

> 	(allocate_stack): Likewise.

> 	* sysdeps/posix/gethostname.c: Likewise.

> 	* nptl/tpp.c (__init_sched_fifo_prio): Likewise.

> 	* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.

> 	* sysdeps/unix/sysv/linux/powerpc/ioctl.c (__ioctl): Likewise.

> 	* nptl/pthreadP.h (__pthread_mutex_timedlock): Add definition.

> 	(__pthread_key_delete): Likewise.

> 	(__pthread_detach): Likewise.

> 	(__pthread_cancel): Likewise.

> 	(__pthread_mutex_trylock): Likewise.

> 	(__pthread_mutexattr_init): Likewise.

> 	(__pthread_mutexattr_settype): Likewise.

> 	* nptl/pthread_cancel.c (pthread_cancel): Change to internal name and

> 	create alias for exported one.

> 	* nptl/pthread_join.c (pthread_join): Likewise.

> 	* nptl/pthread_detach.c (pthread_detach): Likewise.

> 	* nptl/pthread_key_delete.c (pthread_key_delete): Likewise.

> 	* nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise.

> 	* nptl/pthread_create.c: Change static requirements for pthread

> 	symbols.

> 	* nptl/pthread_equal.c (__pthread_equal): Change strong alias to weak

> 	for internal definition.

> 	* nptl/pthread_exit.c (__pthread_exit): Likewise.

> 	* nptl/pthread_getspecific.c (__pthread_getspecific): Likewise.

> 	* nptl/pthread_key_create.c (__pthread_key_create): Likewise.

> 	* nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Likewise.

> 	* nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise.

> 	* nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.

> 	* nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Likewise.

> 	* nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock): Likewise.

> 	* nptl/pthread_mutexattr_init.c (__pthread_mutexattr_init): Likwise.

> 	* nptl/pthread_mutexattr_settype.c (__pthread_mutexattr_settype):

> 	Likewise.

> 	* nptl/pthread_self.c (__pthread_self): Likewise.

> 	* nptl/pthread_setspecific.c (__pthread_setspecific): Likewise.

> 	* sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise.

> 	* misc/mmap.c (__mmap): Add internal symbol definition.

> 	* misc/mmap.c (__mmap64): Likewise.

> 	* sysdeps/unix/sysv/linux/mmap.c (__mmap): Likewise.

> 	* sysdeps/unix/sysv/linux/mmap64.c (__mmap): Likewise.

> 	(__mmap64): Likewise.

> 	* sysdeps/unix/sysv/linux/i386/Versions (libc) [GLIBC_PRIVATE):

> 	Add __uname.

> ---

>  ChangeLog                               | 64 +++++++++++++++++++++++++++++++++

>  include/sched.h                         |  2 ++

>  include/sys/mman.h                      |  4 +++

>  include/termios.h                       |  2 ++

>  include/time.h                          |  2 +-

>  misc/Versions                           |  2 ++

>  misc/mmap.c                             |  1 +

>  misc/mmap64.c                           |  1 +

>  nptl/allocatestack.c                    | 32 ++++++++---------

>  nptl/pthreadP.h                         |  9 +++++

>  nptl/pthread_cancel.c                   |  7 ++--

>  nptl/pthread_create.c                   | 18 +++++-----

>  nptl/pthread_detach.c                   |  3 +-

>  nptl/pthread_equal.c                    |  2 +-

>  nptl/pthread_exit.c                     |  4 +--

>  nptl/pthread_getspecific.c              |  2 +-

>  nptl/pthread_join.c                     |  3 +-

>  nptl/pthread_key_create.c               |  2 +-

>  nptl/pthread_key_delete.c               |  3 +-

>  nptl/pthread_mutex_destroy.c            |  2 +-

>  nptl/pthread_mutex_init.c               |  2 +-

>  nptl/pthread_mutex_lock.c               |  2 +-

>  nptl/pthread_mutex_timedlock.c          |  5 +--

>  nptl/pthread_mutex_trylock.c            |  3 +-

>  nptl/pthread_mutex_unlock.c             |  2 +-

>  nptl/pthread_mutexattr_init.c           |  3 +-

>  nptl/pthread_mutexattr_settype.c        |  3 +-

>  nptl/pthread_self.c                     |  2 +-

>  nptl/pthread_setspecific.c              |  2 +-

>  nptl/tpp.c                              |  4 +--

>  posix/nanosleep.c                       |  2 +-

>  sysdeps/posix/gethostname.c             |  2 +-

>  sysdeps/unix/sysv/linux/i386/Versions   |  2 +-

>  sysdeps/unix/sysv/linux/i386/smp.h      |  2 +-

>  sysdeps/unix/sysv/linux/mmap.c          |  1 +

>  sysdeps/unix/sysv/linux/mmap64.c        |  2 ++

>  sysdeps/unix/sysv/linux/nanosleep.c     |  2 +-

>  sysdeps/unix/sysv/linux/powerpc/ioctl.c |  6 ++--

>  sysdeps/unix/sysv/linux/tcsetattr.c     |  3 +-

>  39 files changed, 156 insertions(+), 59 deletions(-)

> 

> diff --git a/include/sched.h b/include/sched.h

> index b4d7406..f75faed 100644

> --- a/include/sched.h

> +++ b/include/sched.h

> @@ -13,7 +13,9 @@ extern int __sched_getscheduler (__pid_t __pid);

>  extern int __sched_yield (void);

>  libc_hidden_proto (__sched_yield)

>  extern int __sched_get_priority_max (int __algorithm);

> +libc_hidden_proto (__sched_get_priority_max)

>  extern int __sched_get_priority_min (int __algorithm);

> +libc_hidden_proto (__sched_get_priority_min)

>  extern int __sched_rr_get_interval (__pid_t __pid, struct timespec *__t);

>  

>  /* These are Linux specific.  */

> diff --git a/include/sys/mman.h b/include/sys/mman.h

> index 7026f69..8b996fc 100644

> --- a/include/sys/mman.h

> +++ b/include/sys/mman.h

> @@ -5,10 +5,14 @@

>  /* Now define the internal interfaces.  */

>  extern void *__mmap (void *__addr, size_t __len, int __prot,

>  		     int __flags, int __fd, __off_t __offset);

> +libc_hidden_proto (__mmap)

>  extern void *__mmap64 (void *__addr, size_t __len, int __prot,

>  		       int __flags, int __fd, __off64_t __offset);

> +libc_hidden_proto (__mmap64)

>  extern int __munmap (void *__addr, size_t __len);

> +libc_hidden_proto (__munmap)

>  extern int __mprotect (void *__addr, size_t __len, int __prot);

> +libc_hidden_proto (__mprotect)

>  

>  extern int __madvise (void *__addr, size_t __len, int __advice);

>  libc_hidden_proto (__madvise)

> diff --git a/include/termios.h b/include/termios.h

> index fad51f8..1a36e22 100644

> --- a/include/termios.h

> +++ b/include/termios.h

> @@ -4,6 +4,8 @@

>  #ifndef _ISOMAC

>  /* Now define the internal interfaces.  */

>  extern int __tcgetattr (int __fd, struct termios *__termios_p);

> +extern int __tcsetattr (int __fd, int __optional_actions,

> +			const struct termios *__termios_p);

>  

>  extern int __libc_tcdrain (int __fd);

>  

> diff --git a/include/time.h b/include/time.h

> index 3a828e0..b72a3a3 100644

> --- a/include/time.h

> +++ b/include/time.h

> @@ -78,7 +78,7 @@ extern struct tm *__tz_convert (const time_t *timer, int use_localtime, struct t

>  

>  extern int __nanosleep (const struct timespec *__requested_time,

>  			struct timespec *__remaining);

> -libc_hidden_proto (__nanosleep)

> +hidden_proto (__nanosleep)


Wouldn't it be more correct to define libc_hidden_* for IS_IN(libc) as
well as IS_IN(pthread) in libc-symbols.h?  Basically just enable usage
of all of the libc_* macros there for libc as well as libpthread.

>  extern int __nanosleep_nocancel (const struct timespec *__requested_time,

>  				 struct timespec *__remaining)

>    attribute_hidden;

> diff --git a/misc/Versions b/misc/Versions

> index bafda78..bfbda50 100644

> --- a/misc/Versions

> +++ b/misc/Versions

> @@ -163,5 +163,7 @@ libc {

>      __mktemp;

>      __libc_ifunc_impl_list;

>      __tdelete; __tfind; __tsearch; __twalk;

> +    __mmap; __munmap; __mprotect;

> +    __sched_get_priority_min; __sched_get_priority_max;

>    }

>  }

> diff --git a/misc/mmap.c b/misc/mmap.c

> index 576d66a..4172d76 100644

> --- a/misc/mmap.c

> +++ b/misc/mmap.c

> @@ -37,3 +37,4 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)

>  

>  stub_warning (mmap)

>  weak_alias (__mmap, mmap)

> +libc_hidden_def (__mmap)

> diff --git a/misc/mmap64.c b/misc/mmap64.c

> index 6b1ac41..845b847 100644

> --- a/misc/mmap64.c

> +++ b/misc/mmap64.c

> @@ -45,3 +45,4 @@ __mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd,

>  }

>  

>  weak_alias (__mmap64, mmap64)

> +libc_hidden_def (__mmap64)

> diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c

> index 8364406..ec7d42e 100644

> --- a/nptl/allocatestack.c

> +++ b/nptl/allocatestack.c

> @@ -278,7 +278,7 @@ __free_stacks (size_t limit)

>  

>  	  /* Remove this block.  This should never fail.  If it does

>  	     something is really wrong.  */

> -	  if (munmap (curr->stackblock, curr->stackblock_size) != 0)

> +	  if (__munmap (curr->stackblock, curr->stackblock_size) != 0)

>  	    abort ();

>  

>  	  /* Maybe we have freed enough.  */

> @@ -328,7 +328,7 @@ change_stack_perm (struct pthread *pd

>  #else

>  # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"

>  #endif

> -  if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)

> +  if (__mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)

>      return errno;

>  

>    return 0;

> @@ -359,14 +359,14 @@ setup_stack_prot (char *mem, size_t size, char *guard, size_t guardsize,

>  #if _STACK_GROWS_DOWN

>    /* As defined at guard_position, for architectures with downward stack

>       the guard page is always at start of the allocated area.  */

> -  if (mprotect (guardend, size - guardsize, prot) != 0)

> +  if (__mprotect (guardend, size - guardsize, prot) != 0)

>      return errno;

>  #else

>    size_t mprots1 = (uintptr_t) guard - (uintptr_t) mem;

> -  if (mprotect (mem, mprots1, prot) != 0)

> +  if (__mprotect (mem, mprots1, prot) != 0)

>      return errno;

>    size_t mprots2 = ((uintptr_t) mem + size) - (uintptr_t) guardend;

> -  if (mprotect (guardend, mprots2, prot) != 0)

> +  if (__mprotect (guardend, mprots2, prot) != 0)

>      return errno;

>  #endif

>    return 0;

> @@ -530,8 +530,8 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  	  /* If a guard page is required, avoid committing memory by first

>  	     allocate with PROT_NONE and then reserve with required permission

>  	     excluding the guard page.  */

> -	  mem = mmap (NULL, size, (guardsize == 0) ? prot : PROT_NONE,

> -		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);

> +	  mem = __mmap (NULL, size, (guardsize == 0) ? prot : PROT_NONE,

> +			MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);

>  

>  	  if (__glibc_unlikely (mem == MAP_FAILED))

>  	    return errno;

> @@ -557,7 +557,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  					    pagesize_m1);

>  	      if (setup_stack_prot (mem, size, guard, guardsize, prot) != 0)

>  		{

> -		  munmap (mem, size);

> +		  __munmap (mem, size);

>  		  return errno;

>  		}

>  	    }

> @@ -600,7 +600,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  	      assert (errno == ENOMEM);

>  

>  	      /* Free the stack memory we just allocated.  */

> -	      (void) munmap (mem, size);

> +	      (void) __munmap (mem, size);

>  

>  	      return errno;

>  	    }

> @@ -630,7 +630,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  	      if (err != 0)

>  		{

>  		  /* Free the stack memory we just allocated.  */

> -		  (void) munmap (mem, size);

> +		  (void) __munmap (mem, size);

>  

>  		  return err;

>  		}

> @@ -650,7 +650,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  	{

>  	  char *guard = guard_position (mem, size, guardsize, pd,

>  					pagesize_m1);

> -	  if (mprotect (guard, guardsize, PROT_NONE) != 0)

> +	  if (__mprotect (guard, guardsize, PROT_NONE) != 0)

>  	    {

>  	    mprot_error:

>  	      lll_lock (stack_cache_lock, LLL_PRIVATE);

> @@ -668,7 +668,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  		 of memory caused problems we better do not use it

>  		 anymore.  Uh, and we ignore possible errors.  There

>  		 is nothing we could do.  */

> -	      (void) munmap (mem, size);

> +	      (void) __munmap (mem, size);

>  

>  	      return errno;

>  	    }

> @@ -685,19 +685,19 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,

>  	  char *oldguard = mem + (((size - pd->guardsize) / 2) & ~pagesize_m1);

>  

>  	  if (oldguard < guard

> -	      && mprotect (oldguard, guard - oldguard, prot) != 0)

> +	      && __mprotect (oldguard, guard - oldguard, prot) != 0)

>  	    goto mprot_error;

>  

> -	  if (mprotect (guard + guardsize,

> +	  if (__mprotect (guard + guardsize,

>  			oldguard + pd->guardsize - guard - guardsize,

>  			prot) != 0)

>  	    goto mprot_error;

>  #elif _STACK_GROWS_DOWN

> -	  if (mprotect ((char *) mem + guardsize, pd->guardsize - guardsize,

> +	  if (__mprotect ((char *) mem + guardsize, pd->guardsize - guardsize,

>  			prot) != 0)

>  	    goto mprot_error;

>  #elif _STACK_GROWS_UP

> -	  if (mprotect ((char *) pd - pd->guardsize,

> +	  if (__mprotect ((char *) pd - pd->guardsize,

>  			pd->guardsize - guardsize, prot) != 0)

>  	    goto mprot_error;

>  #endif

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h

> index 7fc1e50..6e7d6ff 100644

> --- a/nptl/pthreadP.h

> +++ b/nptl/pthreadP.h

> @@ -428,6 +428,8 @@ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,

>  extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);

>  extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex);

>  extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);

> +extern int __pthread_mutex_timedlock (pthread_mutex_t *__mutex,

> +     const struct timespec *__abstime);

>  extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)

>       attribute_hidden internal_function;

>  extern void __pthread_mutex_cond_lock_adjust (pthread_mutex_t *__mutex)

> @@ -491,6 +493,7 @@ extern int __pthread_cond_timedwait (pthread_cond_t *cond,

>  extern int __pthread_condattr_destroy (pthread_condattr_t *attr);

>  extern int __pthread_condattr_init (pthread_condattr_t *attr);

>  extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));

> +extern int __pthread_key_delete (pthread_key_t key);

>  extern void *__pthread_getspecific (pthread_key_t key);

>  extern int __pthread_setspecific (pthread_key_t key, const void *value);

>  extern int __pthread_once (pthread_once_t *once_control,

> @@ -499,8 +502,11 @@ extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),

>  			     void (*child) (void));

>  extern pthread_t __pthread_self (void);

>  extern int __pthread_equal (pthread_t thread1, pthread_t thread2);

> +extern int __pthread_detach (pthread_t th);

> +extern int __pthread_cancel (pthread_t th);

>  extern int __pthread_kill (pthread_t threadid, int signo);

>  extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));

> +extern int __pthread_join (pthread_t threadid, void **thread_return);

>  extern int __pthread_setcanceltype (int type, int *oldtype);

>  extern int __pthread_enable_asynccancel (void) attribute_hidden;

>  extern void __pthread_disable_asynccancel (int oldtype)

> @@ -511,6 +517,7 @@ extern void __pthread_testcancel (void);

>  hidden_proto (__pthread_mutex_init)

>  hidden_proto (__pthread_mutex_destroy)

>  hidden_proto (__pthread_mutex_lock)

> +hidden_proto (__pthread_mutex_trylock)

>  hidden_proto (__pthread_mutex_unlock)

>  hidden_proto (__pthread_rwlock_rdlock)

>  hidden_proto (__pthread_rwlock_wrlock)

> @@ -521,6 +528,8 @@ hidden_proto (__pthread_setspecific)

>  hidden_proto (__pthread_once)

>  hidden_proto (__pthread_setcancelstate)

>  hidden_proto (__pthread_testcancel)

> +hidden_proto (__pthread_mutexattr_init)

> +hidden_proto (__pthread_mutexattr_settype)

>  #endif

>  

>  extern int __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond);

> diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c

> index 231a58d..742dfe6 100644

> --- a/nptl/pthread_cancel.c

> +++ b/nptl/pthread_cancel.c

> @@ -25,7 +25,7 @@

>  #include <unistd.h>

>  

>  int

> -pthread_cancel (pthread_t th)

> +__pthread_cancel (pthread_t th)

>  {

>    volatile struct pthread *pd = (volatile struct pthread *) th;

>  

> @@ -66,7 +66,7 @@ pthread_cancel (pthread_t th)

>  #ifdef SIGCANCEL

>  	  /* The cancellation handler will take care of marking the

>  	     thread as canceled.  */

> -	  pid_t pid = getpid ();

> +	  pid_t pid = __getpid ();

>  

>  	  INTERNAL_SYSCALL_DECL (err);

>  	  int val = INTERNAL_SYSCALL_CALL (tgkill, err, pid, pd->tid,

> @@ -99,5 +99,6 @@ pthread_cancel (pthread_t th)

>  

>    return result;

>  }

> +weak_alias (__pthread_cancel, pthread_cancel)

>  

> -PTHREAD_STATIC_FN_REQUIRE (pthread_create)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_create)

> diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c

> index c7d1b8f..7a970ff 100644

> --- a/nptl/pthread_create.c

> +++ b/nptl/pthread_create.c

> @@ -920,14 +920,14 @@ compat_symbol (libpthread, __pthread_create_2_0, pthread_create,

>  

>  /* If pthread_create is present, libgcc_eh.a and libsupc++.a expects some other POSIX thread

>     functions to be present as well.  */

> -PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_lock)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_trylock)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_unlock)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_lock)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_trylock)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_unlock)

>  

> -PTHREAD_STATIC_FN_REQUIRE (pthread_once)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_cancel)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_once)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_cancel)

>  

> -PTHREAD_STATIC_FN_REQUIRE (pthread_key_create)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_key_delete)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_setspecific)

> -PTHREAD_STATIC_FN_REQUIRE (pthread_getspecific)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_key_create)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_key_delete)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_setspecific)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_getspecific)

> diff --git a/nptl/pthread_detach.c b/nptl/pthread_detach.c

> index 8a2e943..5c4c8f7 100644

> --- a/nptl/pthread_detach.c

> +++ b/nptl/pthread_detach.c

> @@ -22,7 +22,7 @@

>  

>  

>  int

> -pthread_detach (pthread_t th)

> +__pthread_detach (pthread_t th)

>  {

>    struct pthread *pd = (struct pthread *) th;

>  

> @@ -53,3 +53,4 @@ pthread_detach (pthread_t th)

>  

>    return result;

>  }

> +weak_alias (__pthread_detach, pthread_detach)

> diff --git a/nptl/pthread_equal.c b/nptl/pthread_equal.c

> index e304add..b5244ee 100644

> --- a/nptl/pthread_equal.c

> +++ b/nptl/pthread_equal.c

> @@ -24,4 +24,4 @@ __pthread_equal (pthread_t thread1, pthread_t thread2)

>  {

>    return thread1 == thread2;

>  }

> -strong_alias (__pthread_equal, pthread_equal)

> +weak_alias (__pthread_equal, pthread_equal)

> diff --git a/nptl/pthread_exit.c b/nptl/pthread_exit.c

> index dffab09..7209769 100644

> --- a/nptl/pthread_exit.c

> +++ b/nptl/pthread_exit.c

> @@ -27,8 +27,8 @@ __pthread_exit (void *value)

>  

>    __do_cancel ();

>  }

> -strong_alias (__pthread_exit, pthread_exit)

> +weak_alias (__pthread_exit, pthread_exit)

>  

>  /* After a thread terminates, __libc_start_main decrements

>     __nptl_nthreads defined in pthread_create.c.  */

> -PTHREAD_STATIC_FN_REQUIRE (pthread_create)

> +PTHREAD_STATIC_FN_REQUIRE (__pthread_create)

> diff --git a/nptl/pthread_getspecific.c b/nptl/pthread_getspecific.c

> index ddedcf2..114d6da 100644

> --- a/nptl/pthread_getspecific.c

> +++ b/nptl/pthread_getspecific.c

> @@ -63,5 +63,5 @@ __pthread_getspecific (pthread_key_t key)

>  

>    return result;

>  }

> -strong_alias (__pthread_getspecific, pthread_getspecific)

> +weak_alias (__pthread_getspecific, pthread_getspecific)

>  hidden_def (__pthread_getspecific)

> diff --git a/nptl/pthread_join.c b/nptl/pthread_join.c

> index 0192f69..afc8c37 100644

> --- a/nptl/pthread_join.c

> +++ b/nptl/pthread_join.c

> @@ -37,7 +37,7 @@ cleanup (void *arg)

>  

>  

>  int

> -pthread_join (pthread_t threadid, void **thread_return)

> +__pthread_join (pthread_t threadid, void **thread_return)

>  {

>    struct pthread *pd = (struct pthread *) threadid;

>  

> @@ -115,3 +115,4 @@ pthread_join (pthread_t threadid, void **thread_return)

>  

>    return result;

>  }

> +weak_alias (__pthread_join, pthread_join)

> diff --git a/nptl/pthread_key_create.c b/nptl/pthread_key_create.c

> index 4f51c76..70c0e12 100644

> --- a/nptl/pthread_key_create.c

> +++ b/nptl/pthread_key_create.c

> @@ -47,5 +47,5 @@ __pthread_key_create (pthread_key_t *key, void (*destr) (void *))

>  

>    return EAGAIN;

>  }

> -strong_alias (__pthread_key_create, pthread_key_create)

> +weak_alias (__pthread_key_create, pthread_key_create)

>  hidden_def (__pthread_key_create)

> diff --git a/nptl/pthread_key_delete.c b/nptl/pthread_key_delete.c

> index 605f93b..426163d 100644

> --- a/nptl/pthread_key_delete.c

> +++ b/nptl/pthread_key_delete.c

> @@ -22,7 +22,7 @@

>  

>  

>  int

> -pthread_key_delete (pthread_key_t key)

> +__pthread_key_delete (pthread_key_t key)

>  {

>    int result = EINVAL;

>  

> @@ -39,3 +39,4 @@ pthread_key_delete (pthread_key_t key)

>  

>    return result;

>  }

> +weak_alias (__pthread_key_delete, pthread_key_delete)

> diff --git a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c

> index a300832..ed3b63f 100644

> --- a/nptl/pthread_mutex_destroy.c

> +++ b/nptl/pthread_mutex_destroy.c

> @@ -36,5 +36,5 @@ __pthread_mutex_destroy (pthread_mutex_t *mutex)

>  

>    return 0;

>  }

> -strong_alias (__pthread_mutex_destroy, pthread_mutex_destroy)

> +weak_alias (__pthread_mutex_destroy, pthread_mutex_destroy)

>  hidden_def (__pthread_mutex_destroy)

> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c

> index 138e144..6f2fc80 100644

> --- a/nptl/pthread_mutex_init.c

> +++ b/nptl/pthread_mutex_init.c

> @@ -144,5 +144,5 @@ __pthread_mutex_init (pthread_mutex_t *mutex,

>  

>    return 0;

>  }

> -strong_alias (__pthread_mutex_init, pthread_mutex_init)

> +weak_alias (__pthread_mutex_init, pthread_mutex_init)

>  hidden_def (__pthread_mutex_init)

> diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c

> index dc9ca4c..b76475b 100644

> --- a/nptl/pthread_mutex_lock.c

> +++ b/nptl/pthread_mutex_lock.c

> @@ -597,7 +597,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)

>    return 0;

>  }

>  #ifndef __pthread_mutex_lock

> -strong_alias (__pthread_mutex_lock, pthread_mutex_lock)

> +weak_alias (__pthread_mutex_lock, pthread_mutex_lock)

>  hidden_def (__pthread_mutex_lock)

>  #endif

>  

> diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c

> index a4beb7b..be53381 100644

> --- a/nptl/pthread_mutex_timedlock.c

> +++ b/nptl/pthread_mutex_timedlock.c

> @@ -41,8 +41,8 @@

>  #endif

>  

>  int

> -pthread_mutex_timedlock (pthread_mutex_t *mutex,

> -			 const struct timespec *abstime)

> +__pthread_mutex_timedlock (pthread_mutex_t *mutex,

> +			   const struct timespec *abstime)

>  {

>    int oldval;

>    pid_t id = THREAD_GETMEM (THREAD_SELF, tid);

> @@ -634,3 +634,4 @@ pthread_mutex_timedlock (pthread_mutex_t *mutex,

>   out:

>    return result;

>  }

> +weak_alias (__pthread_mutex_timedlock, pthread_mutex_timedlock)

> diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c

> index e514997..ec7da61 100644

> --- a/nptl/pthread_mutex_trylock.c

> +++ b/nptl/pthread_mutex_trylock.c

> @@ -403,6 +403,7 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)

>  

>  #ifndef __pthread_mutex_trylock

>  #ifndef pthread_mutex_trylock

> -strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock)

> +weak_alias (__pthread_mutex_trylock, pthread_mutex_trylock)

> +hidden_def (__pthread_mutex_trylock)

>  #endif

>  #endif

> diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c

> index f701d4e..e1a8a5c 100644

> --- a/nptl/pthread_mutex_unlock.c

> +++ b/nptl/pthread_mutex_unlock.c

> @@ -346,5 +346,5 @@ __pthread_mutex_unlock (pthread_mutex_t *mutex)

>  {

>    return __pthread_mutex_unlock_usercnt (mutex, 1);

>  }

> -strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock)

> +weak_alias (__pthread_mutex_unlock, pthread_mutex_unlock)

>  hidden_def (__pthread_mutex_unlock)

> diff --git a/nptl/pthread_mutexattr_init.c b/nptl/pthread_mutexattr_init.c

> index 210d490..dcad522 100644

> --- a/nptl/pthread_mutexattr_init.c

> +++ b/nptl/pthread_mutexattr_init.c

> @@ -33,4 +33,5 @@ __pthread_mutexattr_init (pthread_mutexattr_t *attr)

>  

>    return 0;

>  }

> -strong_alias (__pthread_mutexattr_init, pthread_mutexattr_init)

> +weak_alias (__pthread_mutexattr_init, pthread_mutexattr_init)

> +hidden_def (__pthread_mutexattr_init)

> diff --git a/nptl/pthread_mutexattr_settype.c b/nptl/pthread_mutexattr_settype.c

> index 8c4d11f..988793b 100644

> --- a/nptl/pthread_mutexattr_settype.c

> +++ b/nptl/pthread_mutexattr_settype.c

> @@ -40,4 +40,5 @@ __pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind)

>    return 0;

>  }

>  weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_setkind_np)

> -strong_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype)

> +weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype)

> +hidden_def (__pthread_mutexattr_settype)

> diff --git a/nptl/pthread_self.c b/nptl/pthread_self.c

> index 4c978e1..8e21775 100644

> --- a/nptl/pthread_self.c

> +++ b/nptl/pthread_self.c

> @@ -25,4 +25,4 @@ __pthread_self (void)

>  {

>    return (pthread_t) THREAD_SELF;

>  }

> -strong_alias (__pthread_self, pthread_self)

> +weak_alias (__pthread_self, pthread_self)

> diff --git a/nptl/pthread_setspecific.c b/nptl/pthread_setspecific.c

> index c5416a5..214af3b 100644

> --- a/nptl/pthread_setspecific.c

> +++ b/nptl/pthread_setspecific.c

> @@ -89,5 +89,5 @@ __pthread_setspecific (pthread_key_t key, const void *value)

>  

>    return 0;

>  }

> -strong_alias (__pthread_setspecific, pthread_setspecific)

> +weak_alias (__pthread_setspecific, pthread_setspecific)

>  hidden_def (__pthread_setspecific)

> diff --git a/nptl/tpp.c b/nptl/tpp.c

> index 57eb026..7eb2b96 100644

> --- a/nptl/tpp.c

> +++ b/nptl/tpp.c

> @@ -43,9 +43,9 @@ void

>  __init_sched_fifo_prio (void)

>  {

>    atomic_store_relaxed (&__sched_fifo_max_prio,

> -			sched_get_priority_max (SCHED_FIFO));

> +			__sched_get_priority_max (SCHED_FIFO));

>    atomic_store_relaxed (&__sched_fifo_min_prio,

> -			sched_get_priority_min (SCHED_FIFO));

> +			__sched_get_priority_min (SCHED_FIFO));

>  }

>  

>  int

> diff --git a/posix/nanosleep.c b/posix/nanosleep.c

> index 60a93ca..dbda103 100644

> --- a/posix/nanosleep.c

> +++ b/posix/nanosleep.c

> @@ -29,5 +29,5 @@ __nanosleep (const struct timespec *requested_time,

>  }

>  stub_warning (nanosleep)

>  

> -libc_hidden_def (__nanosleep)

> +hidden_def (__nanosleep)

>  weak_alias (__nanosleep, nanosleep)

> diff --git a/sysdeps/posix/gethostname.c b/sysdeps/posix/gethostname.c

> index 03a5d3f..a132482 100644

> --- a/sysdeps/posix/gethostname.c

> +++ b/sysdeps/posix/gethostname.c

> @@ -29,7 +29,7 @@ __gethostname (char *name, size_t len)

>    struct utsname buf;

>    size_t node_len;

>  

> -  if (uname (&buf))

> +  if (__uname (&buf))

>      return -1;

>  

>    node_len = strlen (buf.nodename) + 1;

> diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions

> index f3544ac..b59ace4 100644

> --- a/sysdeps/unix/sysv/linux/i386/Versions

> +++ b/sysdeps/unix/sysv/linux/i386/Versions

> @@ -46,6 +46,6 @@ libc {

>      fallocate64;

>    }

>    GLIBC_PRIVATE {

> -    __modify_ldt;

> +    __modify_ldt; __uname;

>    }

>  }

> diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h

> index 7d1a7f2..3109ea9 100644

> --- a/sysdeps/unix/sysv/linux/i386/smp.h

> +++ b/sysdeps/unix/sysv/linux/i386/smp.h

> @@ -36,7 +36,7 @@ is_smp_system (void)

>    char *cp;

>  

>    /* Try reading the number using `sysctl' first.  */

> -  if (uname (&u.uts) == 0)

> +  if (__uname (&u.uts) == 0)

>      cp = u.uts.version;

>    else

>      {

> diff --git a/sysdeps/unix/sysv/linux/mmap.c b/sysdeps/unix/sysv/linux/mmap.c

> index b1f229f..98c2f88 100644

> --- a/sysdeps/unix/sysv/linux/mmap.c

> +++ b/sysdeps/unix/sysv/linux/mmap.c

> @@ -47,5 +47,6 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)

>  #endif

>  }

>  weak_alias (__mmap, mmap)

> +libc_hidden_def (__mmap)

>  

>  #endif /* __OFF_T_MATCHES_OFF64_T  */

> diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c

> index d3ea279..e8d519b 100644

> --- a/sysdeps/unix/sysv/linux/mmap64.c

> +++ b/sysdeps/unix/sysv/linux/mmap64.c

> @@ -53,8 +53,10 @@ __mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset)

>  #endif

>  }

>  weak_alias (__mmap64, mmap64)

> +libc_hidden_def (__mmap64)

>  

>  #ifdef __OFF_T_MATCHES_OFF64_T

>  weak_alias (__mmap64, mmap)

>  weak_alias (__mmap64, __mmap)

> +libc_hidden_def (__mmap)

>  #endif

> diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c

> index b352f84..2d15328 100644

> --- a/sysdeps/unix/sysv/linux/nanosleep.c

> +++ b/sysdeps/unix/sysv/linux/nanosleep.c

> @@ -26,5 +26,5 @@ __nanosleep (const struct timespec *requested_time,

>  {

>    return SYSCALL_CANCEL (nanosleep, requested_time, remaining);

>  }

> -libc_hidden_def (__nanosleep)

> +hidden_def (__nanosleep)

>  weak_alias (__nanosleep, nanosleep)

> diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c b/sysdeps/unix/sysv/linux/powerpc/ioctl.c

> index e2e3d33..1437d1d 100644

> --- a/sysdeps/unix/sysv/linux/powerpc/ioctl.c

> +++ b/sysdeps/unix/sysv/linux/powerpc/ioctl.c

> @@ -41,15 +41,15 @@ __ioctl (int fd, unsigned long int request, ...)

>        break;

>  

>      case TCSETS:

> -      result = tcsetattr (fd, TCSANOW, (struct termios *) arg);

> +      result = __tcsetattr (fd, TCSANOW, (struct termios *) arg);

>        break;

>  

>      case TCSETSW:

> -      result = tcsetattr (fd, TCSADRAIN, (struct termios *) arg);

> +      result = __tcsetattr (fd, TCSADRAIN, (struct termios *) arg);

>        break;

>  

>      case TCSETSF:

> -      result = tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);

> +      result = __tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);

>        break;

>  

>      default:

> diff --git a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c

> index c7d1d65..49acd16 100644

> --- a/sysdeps/unix/sysv/linux/tcsetattr.c

> +++ b/sysdeps/unix/sysv/linux/tcsetattr.c

> @@ -41,7 +41,7 @@

>  

>  /* Set the state of FD to *TERMIOS_P.  */

>  int

> -tcsetattr (int fd, int optional_actions, const struct termios *termios_p)

> +__tcsetattr (int fd, int optional_actions, const struct termios *termios_p)

>  {

>    struct __kernel_termios k_termios;

>    unsigned long int cmd;

> @@ -77,4 +77,5 @@ tcsetattr (int fd, int optional_actions, const struct termios *termios_p)

>  

>    return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);

>  }

> +weak_alias (__tcsetattr, tcsetattr)

>  libc_hidden_def (tcsetattr)

>
Adhemerval Zanella Netto June 23, 2017, 7:20 p.m. UTC | #2
On 22/06/2017 16:35, Siddhesh Poyarekar wrote:
> On Tuesday 20 June 2017 12:22 AM, Adhemerval Zanella wrote:

>> This patch adds internal definition (through {libc_}hidden_{proto,def}) and

>> also change some strong to weak alias for symbols that might be used by C11

>> threads implementations.

>>

>> The patchset should not change libc/libpthread functional, although object

>> changes are expected (since now internal symbols are used instead) and final

>> exported symbols through GLIBC_PRIVATE is also expanded (to cover libpthread

>> usage of __mmap{64}, __munmap, __mprotect).

>>

>> Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,

>> arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,

>> microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,

>> powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,

>> tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).

> 

> Looks OK with one small nit/comment below.


Thanks, I will push it upstream and split the C11 patch in small parts.

>> diff --git a/include/termios.h b/include/termios.h

>> index fad51f8..1a36e22 100644

>> --- a/include/termios.h

>> +++ b/include/termios.h

>> @@ -4,6 +4,8 @@

>>  #ifndef _ISOMAC

>>  /* Now define the internal interfaces.  */

>>  extern int __tcgetattr (int __fd, struct termios *__termios_p);

>> +extern int __tcsetattr (int __fd, int __optional_actions,

>> +			const struct termios *__termios_p);

>>  

>>  extern int __libc_tcdrain (int __fd);

>>  

>> diff --git a/include/time.h b/include/time.h

>> index 3a828e0..b72a3a3 100644

>> --- a/include/time.h

>> +++ b/include/time.h

>> @@ -78,7 +78,7 @@ extern struct tm *__tz_convert (const time_t *timer, int use_localtime, struct t

>>  

>>  extern int __nanosleep (const struct timespec *__requested_time,

>>  			struct timespec *__remaining);

>> -libc_hidden_proto (__nanosleep)

>> +hidden_proto (__nanosleep)

> 

> Wouldn't it be more correct to define libc_hidden_* for IS_IN(libc) as

> well as IS_IN(pthread) in libc-symbols.h?  Basically just enable usage

> of all of the libc_* macros there for libc as well as libpthread.


It could be case, but then I think the 'libc_' will be misleading. I would
rather to just change to hidden_{proto,def} to symbol built on both
libc and libpthread.
diff mbox series

Patch

diff --git a/include/sched.h b/include/sched.h
index b4d7406..f75faed 100644
--- a/include/sched.h
+++ b/include/sched.h
@@ -13,7 +13,9 @@  extern int __sched_getscheduler (__pid_t __pid);
 extern int __sched_yield (void);
 libc_hidden_proto (__sched_yield)
 extern int __sched_get_priority_max (int __algorithm);
+libc_hidden_proto (__sched_get_priority_max)
 extern int __sched_get_priority_min (int __algorithm);
+libc_hidden_proto (__sched_get_priority_min)
 extern int __sched_rr_get_interval (__pid_t __pid, struct timespec *__t);
 
 /* These are Linux specific.  */
diff --git a/include/sys/mman.h b/include/sys/mman.h
index 7026f69..8b996fc 100644
--- a/include/sys/mman.h
+++ b/include/sys/mman.h
@@ -5,10 +5,14 @@ 
 /* Now define the internal interfaces.  */
 extern void *__mmap (void *__addr, size_t __len, int __prot,
 		     int __flags, int __fd, __off_t __offset);
+libc_hidden_proto (__mmap)
 extern void *__mmap64 (void *__addr, size_t __len, int __prot,
 		       int __flags, int __fd, __off64_t __offset);
+libc_hidden_proto (__mmap64)
 extern int __munmap (void *__addr, size_t __len);
+libc_hidden_proto (__munmap)
 extern int __mprotect (void *__addr, size_t __len, int __prot);
+libc_hidden_proto (__mprotect)
 
 extern int __madvise (void *__addr, size_t __len, int __advice);
 libc_hidden_proto (__madvise)
diff --git a/include/termios.h b/include/termios.h
index fad51f8..1a36e22 100644
--- a/include/termios.h
+++ b/include/termios.h
@@ -4,6 +4,8 @@ 
 #ifndef _ISOMAC
 /* Now define the internal interfaces.  */
 extern int __tcgetattr (int __fd, struct termios *__termios_p);
+extern int __tcsetattr (int __fd, int __optional_actions,
+			const struct termios *__termios_p);
 
 extern int __libc_tcdrain (int __fd);
 
diff --git a/include/time.h b/include/time.h
index 3a828e0..b72a3a3 100644
--- a/include/time.h
+++ b/include/time.h
@@ -78,7 +78,7 @@  extern struct tm *__tz_convert (const time_t *timer, int use_localtime, struct t
 
 extern int __nanosleep (const struct timespec *__requested_time,
 			struct timespec *__remaining);
-libc_hidden_proto (__nanosleep)
+hidden_proto (__nanosleep)
 extern int __nanosleep_nocancel (const struct timespec *__requested_time,
 				 struct timespec *__remaining)
   attribute_hidden;
diff --git a/misc/Versions b/misc/Versions
index bafda78..bfbda50 100644
--- a/misc/Versions
+++ b/misc/Versions
@@ -163,5 +163,7 @@  libc {
     __mktemp;
     __libc_ifunc_impl_list;
     __tdelete; __tfind; __tsearch; __twalk;
+    __mmap; __munmap; __mprotect;
+    __sched_get_priority_min; __sched_get_priority_max;
   }
 }
diff --git a/misc/mmap.c b/misc/mmap.c
index 576d66a..4172d76 100644
--- a/misc/mmap.c
+++ b/misc/mmap.c
@@ -37,3 +37,4 @@  __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
 
 stub_warning (mmap)
 weak_alias (__mmap, mmap)
+libc_hidden_def (__mmap)
diff --git a/misc/mmap64.c b/misc/mmap64.c
index 6b1ac41..845b847 100644
--- a/misc/mmap64.c
+++ b/misc/mmap64.c
@@ -45,3 +45,4 @@  __mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd,
 }
 
 weak_alias (__mmap64, mmap64)
+libc_hidden_def (__mmap64)
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 8364406..ec7d42e 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -278,7 +278,7 @@  __free_stacks (size_t limit)
 
 	  /* Remove this block.  This should never fail.  If it does
 	     something is really wrong.  */
-	  if (munmap (curr->stackblock, curr->stackblock_size) != 0)
+	  if (__munmap (curr->stackblock, curr->stackblock_size) != 0)
 	    abort ();
 
 	  /* Maybe we have freed enough.  */
@@ -328,7 +328,7 @@  change_stack_perm (struct pthread *pd
 #else
 # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
 #endif
-  if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
+  if (__mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
     return errno;
 
   return 0;
@@ -359,14 +359,14 @@  setup_stack_prot (char *mem, size_t size, char *guard, size_t guardsize,
 #if _STACK_GROWS_DOWN
   /* As defined at guard_position, for architectures with downward stack
      the guard page is always at start of the allocated area.  */
-  if (mprotect (guardend, size - guardsize, prot) != 0)
+  if (__mprotect (guardend, size - guardsize, prot) != 0)
     return errno;
 #else
   size_t mprots1 = (uintptr_t) guard - (uintptr_t) mem;
-  if (mprotect (mem, mprots1, prot) != 0)
+  if (__mprotect (mem, mprots1, prot) != 0)
     return errno;
   size_t mprots2 = ((uintptr_t) mem + size) - (uintptr_t) guardend;
-  if (mprotect (guardend, mprots2, prot) != 0)
+  if (__mprotect (guardend, mprots2, prot) != 0)
     return errno;
 #endif
   return 0;
@@ -530,8 +530,8 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	  /* If a guard page is required, avoid committing memory by first
 	     allocate with PROT_NONE and then reserve with required permission
 	     excluding the guard page.  */
-	  mem = mmap (NULL, size, (guardsize == 0) ? prot : PROT_NONE,
-		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
+	  mem = __mmap (NULL, size, (guardsize == 0) ? prot : PROT_NONE,
+			MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
 
 	  if (__glibc_unlikely (mem == MAP_FAILED))
 	    return errno;
@@ -557,7 +557,7 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 					    pagesize_m1);
 	      if (setup_stack_prot (mem, size, guard, guardsize, prot) != 0)
 		{
-		  munmap (mem, size);
+		  __munmap (mem, size);
 		  return errno;
 		}
 	    }
@@ -600,7 +600,7 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	      assert (errno == ENOMEM);
 
 	      /* Free the stack memory we just allocated.  */
-	      (void) munmap (mem, size);
+	      (void) __munmap (mem, size);
 
 	      return errno;
 	    }
@@ -630,7 +630,7 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	      if (err != 0)
 		{
 		  /* Free the stack memory we just allocated.  */
-		  (void) munmap (mem, size);
+		  (void) __munmap (mem, size);
 
 		  return err;
 		}
@@ -650,7 +650,7 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	{
 	  char *guard = guard_position (mem, size, guardsize, pd,
 					pagesize_m1);
-	  if (mprotect (guard, guardsize, PROT_NONE) != 0)
+	  if (__mprotect (guard, guardsize, PROT_NONE) != 0)
 	    {
 	    mprot_error:
 	      lll_lock (stack_cache_lock, LLL_PRIVATE);
@@ -668,7 +668,7 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 		 of memory caused problems we better do not use it
 		 anymore.  Uh, and we ignore possible errors.  There
 		 is nothing we could do.  */
-	      (void) munmap (mem, size);
+	      (void) __munmap (mem, size);
 
 	      return errno;
 	    }
@@ -685,19 +685,19 @@  allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	  char *oldguard = mem + (((size - pd->guardsize) / 2) & ~pagesize_m1);
 
 	  if (oldguard < guard
-	      && mprotect (oldguard, guard - oldguard, prot) != 0)
+	      && __mprotect (oldguard, guard - oldguard, prot) != 0)
 	    goto mprot_error;
 
-	  if (mprotect (guard + guardsize,
+	  if (__mprotect (guard + guardsize,
 			oldguard + pd->guardsize - guard - guardsize,
 			prot) != 0)
 	    goto mprot_error;
 #elif _STACK_GROWS_DOWN
-	  if (mprotect ((char *) mem + guardsize, pd->guardsize - guardsize,
+	  if (__mprotect ((char *) mem + guardsize, pd->guardsize - guardsize,
 			prot) != 0)
 	    goto mprot_error;
 #elif _STACK_GROWS_UP
-	  if (mprotect ((char *) pd - pd->guardsize,
+	  if (__mprotect ((char *) pd - pd->guardsize,
 			pd->guardsize - guardsize, prot) != 0)
 	    goto mprot_error;
 #endif
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 7fc1e50..6e7d6ff 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -428,6 +428,8 @@  extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
 extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
 extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex);
 extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
+extern int __pthread_mutex_timedlock (pthread_mutex_t *__mutex,
+     const struct timespec *__abstime);
 extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
      attribute_hidden internal_function;
 extern void __pthread_mutex_cond_lock_adjust (pthread_mutex_t *__mutex)
@@ -491,6 +493,7 @@  extern int __pthread_cond_timedwait (pthread_cond_t *cond,
 extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
 extern int __pthread_condattr_init (pthread_condattr_t *attr);
 extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
+extern int __pthread_key_delete (pthread_key_t key);
 extern void *__pthread_getspecific (pthread_key_t key);
 extern int __pthread_setspecific (pthread_key_t key, const void *value);
 extern int __pthread_once (pthread_once_t *once_control,
@@ -499,8 +502,11 @@  extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
 			     void (*child) (void));
 extern pthread_t __pthread_self (void);
 extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
+extern int __pthread_detach (pthread_t th);
+extern int __pthread_cancel (pthread_t th);
 extern int __pthread_kill (pthread_t threadid, int signo);
 extern void __pthread_exit (void *value) __attribute__ ((__noreturn__));
+extern int __pthread_join (pthread_t threadid, void **thread_return);
 extern int __pthread_setcanceltype (int type, int *oldtype);
 extern int __pthread_enable_asynccancel (void) attribute_hidden;
 extern void __pthread_disable_asynccancel (int oldtype)
@@ -511,6 +517,7 @@  extern void __pthread_testcancel (void);
 hidden_proto (__pthread_mutex_init)
 hidden_proto (__pthread_mutex_destroy)
 hidden_proto (__pthread_mutex_lock)
+hidden_proto (__pthread_mutex_trylock)
 hidden_proto (__pthread_mutex_unlock)
 hidden_proto (__pthread_rwlock_rdlock)
 hidden_proto (__pthread_rwlock_wrlock)
@@ -521,6 +528,8 @@  hidden_proto (__pthread_setspecific)
 hidden_proto (__pthread_once)
 hidden_proto (__pthread_setcancelstate)
 hidden_proto (__pthread_testcancel)
+hidden_proto (__pthread_mutexattr_init)
+hidden_proto (__pthread_mutexattr_settype)
 #endif
 
 extern int __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond);
diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c
index 231a58d..742dfe6 100644
--- a/nptl/pthread_cancel.c
+++ b/nptl/pthread_cancel.c
@@ -25,7 +25,7 @@ 
 #include <unistd.h>
 
 int
-pthread_cancel (pthread_t th)
+__pthread_cancel (pthread_t th)
 {
   volatile struct pthread *pd = (volatile struct pthread *) th;
 
@@ -66,7 +66,7 @@  pthread_cancel (pthread_t th)
 #ifdef SIGCANCEL
 	  /* The cancellation handler will take care of marking the
 	     thread as canceled.  */
-	  pid_t pid = getpid ();
+	  pid_t pid = __getpid ();
 
 	  INTERNAL_SYSCALL_DECL (err);
 	  int val = INTERNAL_SYSCALL_CALL (tgkill, err, pid, pd->tid,
@@ -99,5 +99,6 @@  pthread_cancel (pthread_t th)
 
   return result;
 }
+weak_alias (__pthread_cancel, pthread_cancel)
 
-PTHREAD_STATIC_FN_REQUIRE (pthread_create)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_create)
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index c7d1b8f..7a970ff 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -920,14 +920,14 @@  compat_symbol (libpthread, __pthread_create_2_0, pthread_create,
 
 /* If pthread_create is present, libgcc_eh.a and libsupc++.a expects some other POSIX thread
    functions to be present as well.  */
-PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_lock)
-PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_trylock)
-PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_unlock)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_lock)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_trylock)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_mutex_unlock)
 
-PTHREAD_STATIC_FN_REQUIRE (pthread_once)
-PTHREAD_STATIC_FN_REQUIRE (pthread_cancel)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_once)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_cancel)
 
-PTHREAD_STATIC_FN_REQUIRE (pthread_key_create)
-PTHREAD_STATIC_FN_REQUIRE (pthread_key_delete)
-PTHREAD_STATIC_FN_REQUIRE (pthread_setspecific)
-PTHREAD_STATIC_FN_REQUIRE (pthread_getspecific)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_key_create)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_key_delete)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_setspecific)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_getspecific)
diff --git a/nptl/pthread_detach.c b/nptl/pthread_detach.c
index 8a2e943..5c4c8f7 100644
--- a/nptl/pthread_detach.c
+++ b/nptl/pthread_detach.c
@@ -22,7 +22,7 @@ 
 
 
 int
-pthread_detach (pthread_t th)
+__pthread_detach (pthread_t th)
 {
   struct pthread *pd = (struct pthread *) th;
 
@@ -53,3 +53,4 @@  pthread_detach (pthread_t th)
 
   return result;
 }
+weak_alias (__pthread_detach, pthread_detach)
diff --git a/nptl/pthread_equal.c b/nptl/pthread_equal.c
index e304add..b5244ee 100644
--- a/nptl/pthread_equal.c
+++ b/nptl/pthread_equal.c
@@ -24,4 +24,4 @@  __pthread_equal (pthread_t thread1, pthread_t thread2)
 {
   return thread1 == thread2;
 }
-strong_alias (__pthread_equal, pthread_equal)
+weak_alias (__pthread_equal, pthread_equal)
diff --git a/nptl/pthread_exit.c b/nptl/pthread_exit.c
index dffab09..7209769 100644
--- a/nptl/pthread_exit.c
+++ b/nptl/pthread_exit.c
@@ -27,8 +27,8 @@  __pthread_exit (void *value)
 
   __do_cancel ();
 }
-strong_alias (__pthread_exit, pthread_exit)
+weak_alias (__pthread_exit, pthread_exit)
 
 /* After a thread terminates, __libc_start_main decrements
    __nptl_nthreads defined in pthread_create.c.  */
-PTHREAD_STATIC_FN_REQUIRE (pthread_create)
+PTHREAD_STATIC_FN_REQUIRE (__pthread_create)
diff --git a/nptl/pthread_getspecific.c b/nptl/pthread_getspecific.c
index ddedcf2..114d6da 100644
--- a/nptl/pthread_getspecific.c
+++ b/nptl/pthread_getspecific.c
@@ -63,5 +63,5 @@  __pthread_getspecific (pthread_key_t key)
 
   return result;
 }
-strong_alias (__pthread_getspecific, pthread_getspecific)
+weak_alias (__pthread_getspecific, pthread_getspecific)
 hidden_def (__pthread_getspecific)
diff --git a/nptl/pthread_join.c b/nptl/pthread_join.c
index 0192f69..afc8c37 100644
--- a/nptl/pthread_join.c
+++ b/nptl/pthread_join.c
@@ -37,7 +37,7 @@  cleanup (void *arg)
 
 
 int
-pthread_join (pthread_t threadid, void **thread_return)
+__pthread_join (pthread_t threadid, void **thread_return)
 {
   struct pthread *pd = (struct pthread *) threadid;
 
@@ -115,3 +115,4 @@  pthread_join (pthread_t threadid, void **thread_return)
 
   return result;
 }
+weak_alias (__pthread_join, pthread_join)
diff --git a/nptl/pthread_key_create.c b/nptl/pthread_key_create.c
index 4f51c76..70c0e12 100644
--- a/nptl/pthread_key_create.c
+++ b/nptl/pthread_key_create.c
@@ -47,5 +47,5 @@  __pthread_key_create (pthread_key_t *key, void (*destr) (void *))
 
   return EAGAIN;
 }
-strong_alias (__pthread_key_create, pthread_key_create)
+weak_alias (__pthread_key_create, pthread_key_create)
 hidden_def (__pthread_key_create)
diff --git a/nptl/pthread_key_delete.c b/nptl/pthread_key_delete.c
index 605f93b..426163d 100644
--- a/nptl/pthread_key_delete.c
+++ b/nptl/pthread_key_delete.c
@@ -22,7 +22,7 @@ 
 
 
 int
-pthread_key_delete (pthread_key_t key)
+__pthread_key_delete (pthread_key_t key)
 {
   int result = EINVAL;
 
@@ -39,3 +39,4 @@  pthread_key_delete (pthread_key_t key)
 
   return result;
 }
+weak_alias (__pthread_key_delete, pthread_key_delete)
diff --git a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c
index a300832..ed3b63f 100644
--- a/nptl/pthread_mutex_destroy.c
+++ b/nptl/pthread_mutex_destroy.c
@@ -36,5 +36,5 @@  __pthread_mutex_destroy (pthread_mutex_t *mutex)
 
   return 0;
 }
-strong_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
+weak_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
 hidden_def (__pthread_mutex_destroy)
diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
index 138e144..6f2fc80 100644
--- a/nptl/pthread_mutex_init.c
+++ b/nptl/pthread_mutex_init.c
@@ -144,5 +144,5 @@  __pthread_mutex_init (pthread_mutex_t *mutex,
 
   return 0;
 }
-strong_alias (__pthread_mutex_init, pthread_mutex_init)
+weak_alias (__pthread_mutex_init, pthread_mutex_init)
 hidden_def (__pthread_mutex_init)
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index dc9ca4c..b76475b 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -597,7 +597,7 @@  __pthread_mutex_lock_full (pthread_mutex_t *mutex)
   return 0;
 }
 #ifndef __pthread_mutex_lock
-strong_alias (__pthread_mutex_lock, pthread_mutex_lock)
+weak_alias (__pthread_mutex_lock, pthread_mutex_lock)
 hidden_def (__pthread_mutex_lock)
 #endif
 
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
index a4beb7b..be53381 100644
--- a/nptl/pthread_mutex_timedlock.c
+++ b/nptl/pthread_mutex_timedlock.c
@@ -41,8 +41,8 @@ 
 #endif
 
 int
-pthread_mutex_timedlock (pthread_mutex_t *mutex,
-			 const struct timespec *abstime)
+__pthread_mutex_timedlock (pthread_mutex_t *mutex,
+			   const struct timespec *abstime)
 {
   int oldval;
   pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
@@ -634,3 +634,4 @@  pthread_mutex_timedlock (pthread_mutex_t *mutex,
  out:
   return result;
 }
+weak_alias (__pthread_mutex_timedlock, pthread_mutex_timedlock)
diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c
index e514997..ec7da61 100644
--- a/nptl/pthread_mutex_trylock.c
+++ b/nptl/pthread_mutex_trylock.c
@@ -403,6 +403,7 @@  __pthread_mutex_trylock (pthread_mutex_t *mutex)
 
 #ifndef __pthread_mutex_trylock
 #ifndef pthread_mutex_trylock
-strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock)
+weak_alias (__pthread_mutex_trylock, pthread_mutex_trylock)
+hidden_def (__pthread_mutex_trylock)
 #endif
 #endif
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index f701d4e..e1a8a5c 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -346,5 +346,5 @@  __pthread_mutex_unlock (pthread_mutex_t *mutex)
 {
   return __pthread_mutex_unlock_usercnt (mutex, 1);
 }
-strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock)
+weak_alias (__pthread_mutex_unlock, pthread_mutex_unlock)
 hidden_def (__pthread_mutex_unlock)
diff --git a/nptl/pthread_mutexattr_init.c b/nptl/pthread_mutexattr_init.c
index 210d490..dcad522 100644
--- a/nptl/pthread_mutexattr_init.c
+++ b/nptl/pthread_mutexattr_init.c
@@ -33,4 +33,5 @@  __pthread_mutexattr_init (pthread_mutexattr_t *attr)
 
   return 0;
 }
-strong_alias (__pthread_mutexattr_init, pthread_mutexattr_init)
+weak_alias (__pthread_mutexattr_init, pthread_mutexattr_init)
+hidden_def (__pthread_mutexattr_init)
diff --git a/nptl/pthread_mutexattr_settype.c b/nptl/pthread_mutexattr_settype.c
index 8c4d11f..988793b 100644
--- a/nptl/pthread_mutexattr_settype.c
+++ b/nptl/pthread_mutexattr_settype.c
@@ -40,4 +40,5 @@  __pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind)
   return 0;
 }
 weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_setkind_np)
-strong_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype)
+weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype)
+hidden_def (__pthread_mutexattr_settype)
diff --git a/nptl/pthread_self.c b/nptl/pthread_self.c
index 4c978e1..8e21775 100644
--- a/nptl/pthread_self.c
+++ b/nptl/pthread_self.c
@@ -25,4 +25,4 @@  __pthread_self (void)
 {
   return (pthread_t) THREAD_SELF;
 }
-strong_alias (__pthread_self, pthread_self)
+weak_alias (__pthread_self, pthread_self)
diff --git a/nptl/pthread_setspecific.c b/nptl/pthread_setspecific.c
index c5416a5..214af3b 100644
--- a/nptl/pthread_setspecific.c
+++ b/nptl/pthread_setspecific.c
@@ -89,5 +89,5 @@  __pthread_setspecific (pthread_key_t key, const void *value)
 
   return 0;
 }
-strong_alias (__pthread_setspecific, pthread_setspecific)
+weak_alias (__pthread_setspecific, pthread_setspecific)
 hidden_def (__pthread_setspecific)
diff --git a/nptl/tpp.c b/nptl/tpp.c
index 57eb026..7eb2b96 100644
--- a/nptl/tpp.c
+++ b/nptl/tpp.c
@@ -43,9 +43,9 @@  void
 __init_sched_fifo_prio (void)
 {
   atomic_store_relaxed (&__sched_fifo_max_prio,
-			sched_get_priority_max (SCHED_FIFO));
+			__sched_get_priority_max (SCHED_FIFO));
   atomic_store_relaxed (&__sched_fifo_min_prio,
-			sched_get_priority_min (SCHED_FIFO));
+			__sched_get_priority_min (SCHED_FIFO));
 }
 
 int
diff --git a/posix/nanosleep.c b/posix/nanosleep.c
index 60a93ca..dbda103 100644
--- a/posix/nanosleep.c
+++ b/posix/nanosleep.c
@@ -29,5 +29,5 @@  __nanosleep (const struct timespec *requested_time,
 }
 stub_warning (nanosleep)
 
-libc_hidden_def (__nanosleep)
+hidden_def (__nanosleep)
 weak_alias (__nanosleep, nanosleep)
diff --git a/sysdeps/posix/gethostname.c b/sysdeps/posix/gethostname.c
index 03a5d3f..a132482 100644
--- a/sysdeps/posix/gethostname.c
+++ b/sysdeps/posix/gethostname.c
@@ -29,7 +29,7 @@  __gethostname (char *name, size_t len)
   struct utsname buf;
   size_t node_len;
 
-  if (uname (&buf))
+  if (__uname (&buf))
     return -1;
 
   node_len = strlen (buf.nodename) + 1;
diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions
index f3544ac..b59ace4 100644
--- a/sysdeps/unix/sysv/linux/i386/Versions
+++ b/sysdeps/unix/sysv/linux/i386/Versions
@@ -46,6 +46,6 @@  libc {
     fallocate64;
   }
   GLIBC_PRIVATE {
-    __modify_ldt;
+    __modify_ldt; __uname;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
index 7d1a7f2..3109ea9 100644
--- a/sysdeps/unix/sysv/linux/i386/smp.h
+++ b/sysdeps/unix/sysv/linux/i386/smp.h
@@ -36,7 +36,7 @@  is_smp_system (void)
   char *cp;
 
   /* Try reading the number using `sysctl' first.  */
-  if (uname (&u.uts) == 0)
+  if (__uname (&u.uts) == 0)
     cp = u.uts.version;
   else
     {
diff --git a/sysdeps/unix/sysv/linux/mmap.c b/sysdeps/unix/sysv/linux/mmap.c
index b1f229f..98c2f88 100644
--- a/sysdeps/unix/sysv/linux/mmap.c
+++ b/sysdeps/unix/sysv/linux/mmap.c
@@ -47,5 +47,6 @@  __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
 #endif
 }
 weak_alias (__mmap, mmap)
+libc_hidden_def (__mmap)
 
 #endif /* __OFF_T_MATCHES_OFF64_T  */
diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c
index d3ea279..e8d519b 100644
--- a/sysdeps/unix/sysv/linux/mmap64.c
+++ b/sysdeps/unix/sysv/linux/mmap64.c
@@ -53,8 +53,10 @@  __mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset)
 #endif
 }
 weak_alias (__mmap64, mmap64)
+libc_hidden_def (__mmap64)
 
 #ifdef __OFF_T_MATCHES_OFF64_T
 weak_alias (__mmap64, mmap)
 weak_alias (__mmap64, __mmap)
+libc_hidden_def (__mmap)
 #endif
diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c
index b352f84..2d15328 100644
--- a/sysdeps/unix/sysv/linux/nanosleep.c
+++ b/sysdeps/unix/sysv/linux/nanosleep.c
@@ -26,5 +26,5 @@  __nanosleep (const struct timespec *requested_time,
 {
   return SYSCALL_CANCEL (nanosleep, requested_time, remaining);
 }
-libc_hidden_def (__nanosleep)
+hidden_def (__nanosleep)
 weak_alias (__nanosleep, nanosleep)
diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
index e2e3d33..1437d1d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/ioctl.c
+++ b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
@@ -41,15 +41,15 @@  __ioctl (int fd, unsigned long int request, ...)
       break;
 
     case TCSETS:
-      result = tcsetattr (fd, TCSANOW, (struct termios *) arg);
+      result = __tcsetattr (fd, TCSANOW, (struct termios *) arg);
       break;
 
     case TCSETSW:
-      result = tcsetattr (fd, TCSADRAIN, (struct termios *) arg);
+      result = __tcsetattr (fd, TCSADRAIN, (struct termios *) arg);
       break;
 
     case TCSETSF:
-      result = tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);
+      result = __tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);
       break;
 
     default:
diff --git a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c
index c7d1d65..49acd16 100644
--- a/sysdeps/unix/sysv/linux/tcsetattr.c
+++ b/sysdeps/unix/sysv/linux/tcsetattr.c
@@ -41,7 +41,7 @@ 
 
 /* Set the state of FD to *TERMIOS_P.  */
 int
-tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
+__tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
 {
   struct __kernel_termios k_termios;
   unsigned long int cmd;
@@ -77,4 +77,5 @@  tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
 
   return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
 }
+weak_alias (__tcsetattr, tcsetattr)
 libc_hidden_def (tcsetattr)