Remove second argument from TLS_INIT_TP macro
diff mbox

Message ID mvmbnv1veku.fsf@hawking.suse.de
State New
Headers show

Commit Message

Andreas Schwab May 13, 2014, 4:16 p.m. UTC
* csu/libc-tls.c (__libc_setup_tls): Remove second argument from
	TLS_INIT_TP macro.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
	* elf/rtld.c (init_tls, dl_main): Likewise.
	* nptl/sysdeps/i386/tls.h (TLS_INIT_TP): Likewise.
	* nptl/sysdeps/powerpc/tls.h (TLS_INIT_TP): Likewise.
	* nptl/sysdeps/s390/tls.h (TLS_INIT_TP): Likewise.
	* nptl/sysdeps/sh/tls.h (TLS_INIT_TP): Likewise.
	* nptl/sysdeps/sparc/tls.h (TLS_INIT_TP): Likewise.
	* nptl/sysdeps/x86_64/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/aarch64/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/alpha/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/arm/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/hppa/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/ia64/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/m68k/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Likewise.
	* sysdeps/microblaze/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/mips/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/tile/nptl/tls.h (TLS_INIT_TP): Likewise.
	* sysdeps/generic/tls.h: Update description.
---
 csu/libc-tls.c                |  4 +--
 elf/dl-load.c                 |  2 +-
 elf/rtld.c                    |  4 +--
 nptl/sysdeps/i386/tls.h       |  7 ++--
 nptl/sysdeps/powerpc/tls.h    |  2 +-
 nptl/sysdeps/s390/tls.h       |  2 +-
 nptl/sysdeps/sh/tls.h         |  2 +-
 nptl/sysdeps/sparc/tls.h      |  2 +-
 nptl/sysdeps/x86_64/tls.h     |  2 +-
 sysdeps/aarch64/nptl/tls.h    |  2 +-
 sysdeps/alpha/nptl/tls.h      |  2 +-
 sysdeps/arm/nptl/tls.h        |  2 +-
 sysdeps/generic/tls.h         |  5 ++-
 sysdeps/hppa/nptl/tls.h       |  2 +-
 sysdeps/ia64/nptl/tls.h       |  2 +-
 sysdeps/m68k/nptl/tls.h       |  2 +-
 sysdeps/mach/hurd/i386/tls.h  | 75 +++++++++++++++----------------------------
 sysdeps/microblaze/nptl/tls.h |  2 +-
 sysdeps/mips/nptl/tls.h       |  2 +-
 sysdeps/tile/nptl/tls.h       |  2 +-
 20 files changed, 49 insertions(+), 76 deletions(-)

Comments

Roland McGrath May 13, 2014, 5:01 p.m. UTC | #1
> --- a/nptl/sysdeps/i386/tls.h
> +++ b/nptl/sysdeps/i386/tls.h
> @@ -195,7 +195,7 @@ union user_desc_init
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(thrdescr, secondcall) \
> +# define TLS_INIT_TP(thrdescr) \
>    ({ void *_thrdescr = (thrdescr);					      \
>       tcbhead_t *_head = _thrdescr;					      \
>       union user_desc_init _segdescr;					      \
> @@ -208,10 +208,7 @@ union user_desc_init
>       INIT_SYSINFO;							      \
>  									      \
>       /* The 'entry_number' field.  Let the kernel pick a value.  */	      \
> -     if (secondcall)							      \
> -       _segdescr.vals[0] = TLS_GET_GS () >> 3;				      \
> -     else								      \
> -       _segdescr.vals[0] = -1;						      \
> +     _segdescr.vals[0] = -1;						      \

Please leave a comment behind explaining what -1 means here.

> --- a/sysdeps/generic/tls.h
> +++ b/sysdeps/generic/tls.h
> @@ -59,12 +59,11 @@
>       use the value.
>  
>  
> -     TLS_INIT_TP(tcb, firstcall)
> +     TLS_INIT_TP(tcb)
>  
>       This macro must initialize the thread pointer to enable normal TLS
>       operation.  The first parameter is a pointer to the thread control
> -     block.  The second parameter specifies whether this is the first
> -     call for the TCB.  ld.so calls this macro more than once.
> +     block.

Amend the comment to say that the macro can be used at most once in a
process.

> --- a/sysdeps/mach/hurd/i386/tls.h
> +++ b/sysdeps/mach/hurd/i386/tls.h

Looks OK to me but tschwinge should approve it too.

If the Hurd bit is OK, then the whole patch is OK with the comment changes
I requested above.


Thanks,
Roland
Andreas Schwab May 14, 2014, 7:26 a.m. UTC | #2
Roland McGrath <roland@hack.frob.com> writes:

>> --- a/nptl/sysdeps/i386/tls.h
>> +++ b/nptl/sysdeps/i386/tls.h
>> @@ -195,7 +195,7 @@ union user_desc_init
>>  /* Code to initially initialize the thread pointer.  This might need
>>     special attention since 'errno' is not yet available and if the
>>     operation can cause a failure 'errno' must not be touched.  */
>> -# define TLS_INIT_TP(thrdescr, secondcall) \
>> +# define TLS_INIT_TP(thrdescr) \
>>    ({ void *_thrdescr = (thrdescr);					      \
>>       tcbhead_t *_head = _thrdescr;					      \
>>       union user_desc_init _segdescr;					      \
>> @@ -208,10 +208,7 @@ union user_desc_init
>>       INIT_SYSINFO;							      \
>>  									      \
>>       /* The 'entry_number' field.  Let the kernel pick a value.  */	      \
>> -     if (secondcall)							      \
>> -       _segdescr.vals[0] = TLS_GET_GS () >> 3;				      \
>> -     else								      \
>> -       _segdescr.vals[0] = -1;						      \
>> +     _segdescr.vals[0] = -1;						      \
>
> Please leave a comment behind explaining what -1 means here.

??? I didn't remove the comment.

Andreas.
Roland McGrath May 14, 2014, 4:25 p.m. UTC | #3
> Roland McGrath <roland@hack.frob.com> writes:
> 
> >> --- a/nptl/sysdeps/i386/tls.h
> >> +++ b/nptl/sysdeps/i386/tls.h
> >> @@ -195,7 +195,7 @@ union user_desc_init
> >>  /* Code to initially initialize the thread pointer.  This might need
> >>     special attention since 'errno' is not yet available and if the
> >>     operation can cause a failure 'errno' must not be touched.  */
> >> -# define TLS_INIT_TP(thrdescr, secondcall) \
> >> +# define TLS_INIT_TP(thrdescr) \
> >>    ({ void *_thrdescr = (thrdescr);					      \
> >>       tcbhead_t *_head = _thrdescr;					      \
> >>       union user_desc_init _segdescr;					      \
> >> @@ -208,10 +208,7 @@ union user_desc_init
> >>       INIT_SYSINFO;							      \
> >>  									      \
> >>       /* The 'entry_number' field.  Let the kernel pick a value.  */	      \
> >> -     if (secondcall)							      \
> >> -       _segdescr.vals[0] = TLS_GET_GS () >> 3;				      \
> >> -     else								      \
> >> -       _segdescr.vals[0] = -1;						      \
> >> +     _segdescr.vals[0] = -1;						      \
> >
> > Please leave a comment behind explaining what -1 means here.
> 
> ??? I didn't remove the comment.

OK.
Ondřej Bílka May 26, 2014, 11:37 a.m. UTC | #4
Roland McGrath <roland@hack.frob.com> writes:

> Looks OK to me but tschwinge should approve it too.
> 
> If the Hurd bit is OK, then the whole patch is OK with the comment
> changes I requested above.

Thomas, could you comment it?

On Tue, May 13, 2014 at 06:16:49PM +0200, Andreas Schwab wrote:
> * csu/libc-tls.c (__libc_setup_tls): Remove second argument from
> 	TLS_INIT_TP macro.
> 	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
> 	* elf/rtld.c (init_tls, dl_main): Likewise.
> 	* nptl/sysdeps/i386/tls.h (TLS_INIT_TP): Likewise.
> 	* nptl/sysdeps/powerpc/tls.h (TLS_INIT_TP): Likewise.
> 	* nptl/sysdeps/s390/tls.h (TLS_INIT_TP): Likewise.
> 	* nptl/sysdeps/sh/tls.h (TLS_INIT_TP): Likewise.
> 	* nptl/sysdeps/sparc/tls.h (TLS_INIT_TP): Likewise.
> 	* nptl/sysdeps/x86_64/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/aarch64/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/alpha/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/arm/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/hppa/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/ia64/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/m68k/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Likewise.
> 	* sysdeps/microblaze/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/mips/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/tile/nptl/tls.h (TLS_INIT_TP): Likewise.
> 	* sysdeps/generic/tls.h: Update description.
> 
> ---
> csu/libc-tls.c                |  4 +--
>  elf/dl-load.c                 |  2 +-
>  elf/rtld.c                    |  4 +--
>  nptl/sysdeps/i386/tls.h       |  7 ++--
>  nptl/sysdeps/powerpc/tls.h    |  2 +-
>  nptl/sysdeps/s390/tls.h       |  2 +-
>  nptl/sysdeps/sh/tls.h         |  2 +-
>  nptl/sysdeps/sparc/tls.h      |  2 +-
>  nptl/sysdeps/x86_64/tls.h     |  2 +-
>  sysdeps/aarch64/nptl/tls.h    |  2 +-
>  sysdeps/alpha/nptl/tls.h      |  2 +-
>  sysdeps/arm/nptl/tls.h        |  2 +-
>  sysdeps/generic/tls.h         |  5 ++-
>  sysdeps/hppa/nptl/tls.h       |  2 +-
>  sysdeps/ia64/nptl/tls.h       |  2 +-
>  sysdeps/m68k/nptl/tls.h       |  2 +-
>  sysdeps/mach/hurd/i386/tls.h  | 75 +++++++++++++++----------------------------
>  sysdeps/microblaze/nptl/tls.h |  2 +-
>  sysdeps/mips/nptl/tls.h       |  2 +-
>  sysdeps/tile/nptl/tls.h       |  2 +-
>  20 files changed, 49 insertions(+), 76 deletions(-)
> 
> diff --git a/csu/libc-tls.c b/csu/libc-tls.c
> index c18b888..dcb607c 100644
> --- a/csu/libc-tls.c
> +++ b/csu/libc-tls.c
> @@ -182,10 +182,10 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
>  #if TLS_TCB_AT_TP
>    INSTALL_DTV ((char *) tlsblock + tcb_offset, _dl_static_dtv);
>  
> -  const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0);
> +  const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset);
>  #elif TLS_DTV_AT_TP
>    INSTALL_DTV (tlsblock, _dl_static_dtv);
> -  const char *lossage = TLS_INIT_TP (tlsblock, 0);
> +  const char *lossage = TLS_INIT_TP (tlsblock);
>  #else
>  # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
>  #endif
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index cfa7f25..016a99c 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1176,7 +1176,7 @@ cannot allocate TLS data structures for initial thread");
>  		}
>  
>  	      /* Now we install the TCB in the thread register.  */
> -	      errstring = TLS_INIT_TP (tcb, 0);
> +	      errstring = TLS_INIT_TP (tcb);
>  	      if (__glibc_likely (errstring == NULL))
>  		{
>  		  /* Now we are all good.  */
> diff --git a/elf/rtld.c b/elf/rtld.c
> index 87c5ffa..71cc0db 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -641,7 +641,7 @@ cannot allocate TLS data structures for initial thread");
>    GL(dl_initial_dtv) = GET_DTV (tcbp);
>  
>    /* And finally install it for the main thread.  */
> -  const char *lossage = TLS_INIT_TP (tcbp, 0);
> +  const char *lossage = TLS_INIT_TP (tcbp);
>    if (__glibc_unlikely (lossage != NULL))
>      _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
>    tls_init_tp_called = true;
> @@ -2114,7 +2114,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
>    /* And finally install it for the main thread.  */
>    if (! tls_init_tp_called)
>      {
> -      const char *lossage = TLS_INIT_TP (tcbp, 0);
> +      const char *lossage = TLS_INIT_TP (tcbp);
>        if (__glibc_unlikely (lossage != NULL))
>  	_dl_fatal_printf ("cannot set up thread-local storage: %s\n",
>  			  lossage);
> diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
> index 4183ee8..2f8d11d 100644
> --- a/nptl/sysdeps/i386/tls.h
> +++ b/nptl/sysdeps/i386/tls.h
> @@ -195,7 +195,7 @@ union user_desc_init
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(thrdescr, secondcall) \
> +# define TLS_INIT_TP(thrdescr) \
>    ({ void *_thrdescr = (thrdescr);					      \
>       tcbhead_t *_head = _thrdescr;					      \
>       union user_desc_init _segdescr;					      \
> @@ -208,10 +208,7 @@ union user_desc_init
>       INIT_SYSINFO;							      \
>  									      \
>       /* The 'entry_number' field.  Let the kernel pick a value.  */	      \
> -     if (secondcall)							      \
> -       _segdescr.vals[0] = TLS_GET_GS () >> 3;				      \
> -     else								      \
> -       _segdescr.vals[0] = -1;						      \
> +     _segdescr.vals[0] = -1;						      \
>       /* The 'base_addr' field.  Pointer to the TCB.  */			      \
>       _segdescr.vals[1] = (unsigned long int) _thrdescr;			      \
>       /* The 'limit' field.  We use 4GB which is 0xfffff pages.  */	      \
> diff --git a/nptl/sysdeps/powerpc/tls.h b/nptl/sysdeps/powerpc/tls.h
> index 556c8d5..91cc6f3 100644
> --- a/nptl/sysdeps/powerpc/tls.h
> +++ b/nptl/sysdeps/powerpc/tls.h
> @@ -129,7 +129,7 @@ register void *__thread_register __asm__ ("r13");
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>      (__thread_register = (void *) (tcbp) + TLS_TCB_OFFSET, NULL)
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/nptl/sysdeps/s390/tls.h b/nptl/sysdeps/s390/tls.h
> index 2019882..bb7c339 100644
> --- a/nptl/sysdeps/s390/tls.h
> +++ b/nptl/sysdeps/s390/tls.h
> @@ -119,7 +119,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(thrdescr, secondcall) \
> +# define TLS_INIT_TP(thrdescr) \
>    ({ void *_thrdescr = (thrdescr);					      \
>       tcbhead_t *_head = _thrdescr;					      \
>  									      \
> diff --git a/nptl/sysdeps/sh/tls.h b/nptl/sysdeps/sh/tls.h
> index 84e464c..a0660d2 100644
> --- a/nptl/sysdeps/sh/tls.h
> +++ b/nptl/sysdeps/sh/tls.h
> @@ -99,7 +99,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ __asm __volatile ("ldc %0,gbr" : : "r" (tcbp)); 0; })
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/nptl/sysdeps/sparc/tls.h b/nptl/sysdeps/sparc/tls.h
> index 755bc23..4a1dce7 100644
> --- a/nptl/sysdeps/sparc/tls.h
> +++ b/nptl/sysdeps/sparc/tls.h
> @@ -107,7 +107,7 @@ register struct pthread *__thread_self __asm__("%g7");
>    (((tcbhead_t *) (descr))->dtv)
>  
>  /* Code to initially initialize the thread pointer.  */
> -# define TLS_INIT_TP(descr, secondcall) \
> +# define TLS_INIT_TP(descr) \
>    (__thread_self = (__typeof (__thread_self)) (descr), NULL)
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/nptl/sysdeps/x86_64/tls.h b/nptl/sysdeps/x86_64/tls.h
> index 30bd449..fb671f4 100644
> --- a/nptl/sysdeps/x86_64/tls.h
> +++ b/nptl/sysdeps/x86_64/tls.h
> @@ -144,7 +144,7 @@ typedef struct
>  
>     We have to make the syscall for both uses of the macro since the
>     address might be (and probably is) different.  */
> -# define TLS_INIT_TP(thrdescr, secondcall) \
> +# define TLS_INIT_TP(thrdescr) \
>    ({ void *_thrdescr = (thrdescr);					      \
>       tcbhead_t *_head = _thrdescr;					      \
>       int _result;							      \
> diff --git a/sysdeps/aarch64/nptl/tls.h b/sysdeps/aarch64/nptl/tls.h
> index ae2e6c4..64cbdab 100644
> --- a/sysdeps/aarch64/nptl/tls.h
> +++ b/sysdeps/aarch64/nptl/tls.h
> @@ -90,7 +90,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; })
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/sysdeps/alpha/nptl/tls.h b/sysdeps/alpha/nptl/tls.h
> index b2e082d..fbc579a 100644
> --- a/sysdeps/alpha/nptl/tls.h
> +++ b/sysdeps/alpha/nptl/tls.h
> @@ -84,7 +84,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    (__builtin_set_thread_pointer ((void *)(tcbp)), NULL)
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/sysdeps/arm/nptl/tls.h b/sysdeps/arm/nptl/tls.h
> index 1a2d606..fc828d2 100644
> --- a/sysdeps/arm/nptl/tls.h
> +++ b/sysdeps/arm/nptl/tls.h
> @@ -91,7 +91,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ INTERNAL_SYSCALL_DECL (err);					\
>       long result_var;							\
>       result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp));	\
> diff --git a/sysdeps/generic/tls.h b/sysdeps/generic/tls.h
> index fb3d965..b950aa8 100644
> --- a/sysdeps/generic/tls.h
> +++ b/sysdeps/generic/tls.h
> @@ -59,12 +59,11 @@
>       use the value.
>  
>  
> -     TLS_INIT_TP(tcb, firstcall)
> +     TLS_INIT_TP(tcb)
>  
>       This macro must initialize the thread pointer to enable normal TLS
>       operation.  The first parameter is a pointer to the thread control
> -     block.  The second parameter specifies whether this is the first
> -     call for the TCB.  ld.so calls this macro more than once.
> +     block.
>  
>  
>       THREAD_DTV()
> diff --git a/sysdeps/hppa/nptl/tls.h b/sysdeps/hppa/nptl/tls.h
> index e4dc197..6c721e0 100644
> --- a/sysdeps/hppa/nptl/tls.h
> +++ b/sysdeps/hppa/nptl/tls.h
> @@ -95,7 +95,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ __set_cr27(tcbp); NULL; })
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/sysdeps/ia64/nptl/tls.h b/sysdeps/ia64/nptl/tls.h
> index 3f9225a..3eca4e6 100644
> --- a/sysdeps/ia64/nptl/tls.h
> +++ b/sysdeps/ia64/nptl/tls.h
> @@ -118,7 +118,7 @@ register struct pthread *__thread_self __asm__("r13");
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(thrdescr, secondcall) \
> +# define TLS_INIT_TP(thrdescr) \
>    (__thread_self = (thrdescr), INIT_SYSINFO, NULL)
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/sysdeps/m68k/nptl/tls.h b/sysdeps/m68k/nptl/tls.h
> index 471775a..c1df875 100644
> --- a/sysdeps/m68k/nptl/tls.h
> +++ b/sysdeps/m68k/nptl/tls.h
> @@ -103,7 +103,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall)					\
> +# define TLS_INIT_TP(tcbp)						\
>    ({									\
>      INTERNAL_SYSCALL_DECL (err);					\
>      int _sys_result;							\
> diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
> index 03741cd..5b7abd0 100644
> --- a/sysdeps/mach/hurd/i386/tls.h
> +++ b/sysdeps/mach/hurd/i386/tls.h
> @@ -90,69 +90,46 @@ typedef struct
>  
>  
>  static inline const char * __attribute__ ((unused))
> -_hurd_tls_init (tcbhead_t *tcb, int secondcall)
> +_hurd_tls_init (tcbhead_t *tcb)
>  {
>    HURD_TLS_DESC_DECL (desc, tcb);
>  
> -  if (!secondcall)
> +  /* This field is used by TLS accesses to get our "thread pointer"
> +     from the TLS point of view.  */
> +  tcb->tcb = tcb;
> +
> +  /* Cache our thread port.  */
> +  tcb->self = __mach_thread_self ();
> +
> +  /* Get the first available selector.  */
> +  int sel = -1;
> +  error_t err = __i386_set_gdt (tcb->self, &sel, desc);
> +  if (err == MIG_BAD_ID)
>      {
> -      /* This field is used by TLS accesses to get our "thread pointer"
> -	 from the TLS point of view.  */
> -      tcb->tcb = tcb;
> -
> -      /* Cache our thread port.  */
> -      tcb->self = __mach_thread_self ();
> -
> -      /* Get the first available selector.  */
> -      int sel = -1;
> -      error_t err = __i386_set_gdt (tcb->self, &sel, desc);
> -      if (err == MIG_BAD_ID)
> -	{
> -	  /* Old kernel, use a per-thread LDT.  */
> -	  sel = 0x27;
> -	  err = __i386_set_ldt (tcb->self, sel, &desc, 1);
> -	  assert_perror (err);
> -	  if (err)
> -	    return "i386_set_ldt failed";
> -	}
> -      else if (err)
> -	{
> -	  assert_perror (err); /* Separate from above with different line #. */
> -	  return "i386_set_gdt failed";
> -	}
> -
> -      /* Now install the new selector.  */
> -      asm volatile ("mov %w0, %%gs" :: "q" (sel));
> +      /* Old kernel, use a per-thread LDT.  */
> +      sel = 0x27;
> +      err = __i386_set_ldt (tcb->self, sel, &desc, 1);
> +      assert_perror (err);
> +      if (err)
> +	return "i386_set_ldt failed";
>      }
> -  else
> +  else if (err)
>      {
> -      /* Fetch the selector set by the first call.  */
> -      int sel;
> -      asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0));
> -      if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */
> -	{
> -	  error_t err = __i386_set_ldt (tcb->self, sel, &desc, 1);
> -	  assert_perror (err);
> -	  if (err)
> -	    return "i386_set_ldt failed";
> -	}
> -      else
> -	{
> -	  error_t err = __i386_set_gdt (tcb->self, &sel, desc);
> -	  assert_perror (err);
> -	  if (err)
> -	    return "i386_set_gdt failed";
> -	}
> +      assert_perror (err); /* Separate from above with different line #. */
> +      return "i386_set_gdt failed";
>      }
>  
> +  /* Now install the new selector.  */
> +  asm volatile ("mov %w0, %%gs" :: "q" (sel));
> +
>    return 0;
>  }
>  
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(descr, secondcall) \
> -    _hurd_tls_init ((tcbhead_t *) (descr), (secondcall))
> +# define TLS_INIT_TP(descr) \
> +    _hurd_tls_init ((tcbhead_t *) (descr))
>  
>  /* Return the TCB address of the current thread.  */
>  # define THREAD_SELF							      \
> diff --git a/sysdeps/microblaze/nptl/tls.h b/sysdeps/microblaze/nptl/tls.h
> index 71f1dd9..e75a30c 100644
> --- a/sysdeps/microblaze/nptl/tls.h
> +++ b/sysdeps/microblaze/nptl/tls.h
> @@ -98,7 +98,7 @@ static inline void *__microblaze_get_thread_area (void)
>  
>  /* Code to initially initialize the thread pointer.
>     r21 is reserved for thread pointer.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
>  
>  /* Return the address of the dtv for the current thread.  */
> diff --git a/sysdeps/mips/nptl/tls.h b/sysdeps/mips/nptl/tls.h
> index 754d4e4..d6fd83d 100644
> --- a/sysdeps/mips/nptl/tls.h
> +++ b/sysdeps/mips/nptl/tls.h
> @@ -118,7 +118,7 @@ typedef struct
>  /* Code to initially initialize the thread pointer.  This might need
>     special attention since 'errno' is not yet available and if the
>     operation can cause a failure 'errno' must not be touched.  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>    ({ INTERNAL_SYSCALL_DECL (err);					\
>       long result_var;							\
>       result_var = INTERNAL_SYSCALL (set_thread_area, err, 1,		\
> diff --git a/sysdeps/tile/nptl/tls.h b/sysdeps/tile/nptl/tls.h
> index 2a9bbc1..c93e8a8 100644
> --- a/sysdeps/tile/nptl/tls.h
> +++ b/sysdeps/tile/nptl/tls.h
> @@ -106,7 +106,7 @@ register void *__thread_pointer asm ("tp");
>  # define GET_DTV(tcbp)	(((tcbhead_t *) (tcbp))[-1].dtv)
>  
>  /* Code to initially initialize the thread pointer (tp).  */
> -# define TLS_INIT_TP(tcbp, secondcall) \
> +# define TLS_INIT_TP(tcbp) \
>      (__thread_pointer = (char *)(tcbp) + TLS_TCB_OFFSET, NULL)
>  
>  /* Return the address of the dtv for the current thread.  */
Thomas Schwinge May 27, 2014, 5:45 a.m. UTC | #5
Hi!

On Tue, 13 May 2014 10:01:57 -0700 (PDT), Roland McGrath <roland@hack.frob.com> wrote:
> > --- a/sysdeps/mach/hurd/i386/tls.h
> > +++ b/sysdeps/mach/hurd/i386/tls.h
> 
> Looks OK to me but tschwinge should approve it too.

OK.  I had wondered about the firstcall/secondcall argument before,
<http://news.gmane.org/find-root.php?message_id=%3C871uumj8z7.fsf%40kepler.schwinge.homeip.net%3E>.

> If the Hurd bit is OK, then the whole patch is OK with the comment changes
> I requested above.


Grüße,
 Thomas

Patch
diff mbox

diff --git a/csu/libc-tls.c b/csu/libc-tls.c
index c18b888..dcb607c 100644
--- a/csu/libc-tls.c
+++ b/csu/libc-tls.c
@@ -182,10 +182,10 @@  __libc_setup_tls (size_t tcbsize, size_t tcbalign)
 #if TLS_TCB_AT_TP
   INSTALL_DTV ((char *) tlsblock + tcb_offset, _dl_static_dtv);
 
-  const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0);
+  const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset);
 #elif TLS_DTV_AT_TP
   INSTALL_DTV (tlsblock, _dl_static_dtv);
-  const char *lossage = TLS_INIT_TP (tlsblock, 0);
+  const char *lossage = TLS_INIT_TP (tlsblock);
 #else
 # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
 #endif
diff --git a/elf/dl-load.c b/elf/dl-load.c
index cfa7f25..016a99c 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1176,7 +1176,7 @@  cannot allocate TLS data structures for initial thread");
 		}
 
 	      /* Now we install the TCB in the thread register.  */
-	      errstring = TLS_INIT_TP (tcb, 0);
+	      errstring = TLS_INIT_TP (tcb);
 	      if (__glibc_likely (errstring == NULL))
 		{
 		  /* Now we are all good.  */
diff --git a/elf/rtld.c b/elf/rtld.c
index 87c5ffa..71cc0db 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -641,7 +641,7 @@  cannot allocate TLS data structures for initial thread");
   GL(dl_initial_dtv) = GET_DTV (tcbp);
 
   /* And finally install it for the main thread.  */
-  const char *lossage = TLS_INIT_TP (tcbp, 0);
+  const char *lossage = TLS_INIT_TP (tcbp);
   if (__glibc_unlikely (lossage != NULL))
     _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
   tls_init_tp_called = true;
@@ -2114,7 +2114,7 @@  ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
   /* And finally install it for the main thread.  */
   if (! tls_init_tp_called)
     {
-      const char *lossage = TLS_INIT_TP (tcbp, 0);
+      const char *lossage = TLS_INIT_TP (tcbp);
       if (__glibc_unlikely (lossage != NULL))
 	_dl_fatal_printf ("cannot set up thread-local storage: %s\n",
 			  lossage);
diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
index 4183ee8..2f8d11d 100644
--- a/nptl/sysdeps/i386/tls.h
+++ b/nptl/sysdeps/i386/tls.h
@@ -195,7 +195,7 @@  union user_desc_init
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(thrdescr, secondcall) \
+# define TLS_INIT_TP(thrdescr) \
   ({ void *_thrdescr = (thrdescr);					      \
      tcbhead_t *_head = _thrdescr;					      \
      union user_desc_init _segdescr;					      \
@@ -208,10 +208,7 @@  union user_desc_init
      INIT_SYSINFO;							      \
 									      \
      /* The 'entry_number' field.  Let the kernel pick a value.  */	      \
-     if (secondcall)							      \
-       _segdescr.vals[0] = TLS_GET_GS () >> 3;				      \
-     else								      \
-       _segdescr.vals[0] = -1;						      \
+     _segdescr.vals[0] = -1;						      \
      /* The 'base_addr' field.  Pointer to the TCB.  */			      \
      _segdescr.vals[1] = (unsigned long int) _thrdescr;			      \
      /* The 'limit' field.  We use 4GB which is 0xfffff pages.  */	      \
diff --git a/nptl/sysdeps/powerpc/tls.h b/nptl/sysdeps/powerpc/tls.h
index 556c8d5..91cc6f3 100644
--- a/nptl/sysdeps/powerpc/tls.h
+++ b/nptl/sysdeps/powerpc/tls.h
@@ -129,7 +129,7 @@  register void *__thread_register __asm__ ("r13");
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
     (__thread_register = (void *) (tcbp) + TLS_TCB_OFFSET, NULL)
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/nptl/sysdeps/s390/tls.h b/nptl/sysdeps/s390/tls.h
index 2019882..bb7c339 100644
--- a/nptl/sysdeps/s390/tls.h
+++ b/nptl/sysdeps/s390/tls.h
@@ -119,7 +119,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(thrdescr, secondcall) \
+# define TLS_INIT_TP(thrdescr) \
   ({ void *_thrdescr = (thrdescr);					      \
      tcbhead_t *_head = _thrdescr;					      \
 									      \
diff --git a/nptl/sysdeps/sh/tls.h b/nptl/sysdeps/sh/tls.h
index 84e464c..a0660d2 100644
--- a/nptl/sysdeps/sh/tls.h
+++ b/nptl/sysdeps/sh/tls.h
@@ -99,7 +99,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ __asm __volatile ("ldc %0,gbr" : : "r" (tcbp)); 0; })
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/nptl/sysdeps/sparc/tls.h b/nptl/sysdeps/sparc/tls.h
index 755bc23..4a1dce7 100644
--- a/nptl/sysdeps/sparc/tls.h
+++ b/nptl/sysdeps/sparc/tls.h
@@ -107,7 +107,7 @@  register struct pthread *__thread_self __asm__("%g7");
   (((tcbhead_t *) (descr))->dtv)
 
 /* Code to initially initialize the thread pointer.  */
-# define TLS_INIT_TP(descr, secondcall) \
+# define TLS_INIT_TP(descr) \
   (__thread_self = (__typeof (__thread_self)) (descr), NULL)
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/nptl/sysdeps/x86_64/tls.h b/nptl/sysdeps/x86_64/tls.h
index 30bd449..fb671f4 100644
--- a/nptl/sysdeps/x86_64/tls.h
+++ b/nptl/sysdeps/x86_64/tls.h
@@ -144,7 +144,7 @@  typedef struct
 
    We have to make the syscall for both uses of the macro since the
    address might be (and probably is) different.  */
-# define TLS_INIT_TP(thrdescr, secondcall) \
+# define TLS_INIT_TP(thrdescr) \
   ({ void *_thrdescr = (thrdescr);					      \
      tcbhead_t *_head = _thrdescr;					      \
      int _result;							      \
diff --git a/sysdeps/aarch64/nptl/tls.h b/sysdeps/aarch64/nptl/tls.h
index ae2e6c4..64cbdab 100644
--- a/sysdeps/aarch64/nptl/tls.h
+++ b/sysdeps/aarch64/nptl/tls.h
@@ -90,7 +90,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; })
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/sysdeps/alpha/nptl/tls.h b/sysdeps/alpha/nptl/tls.h
index b2e082d..fbc579a 100644
--- a/sysdeps/alpha/nptl/tls.h
+++ b/sysdeps/alpha/nptl/tls.h
@@ -84,7 +84,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   (__builtin_set_thread_pointer ((void *)(tcbp)), NULL)
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/sysdeps/arm/nptl/tls.h b/sysdeps/arm/nptl/tls.h
index 1a2d606..fc828d2 100644
--- a/sysdeps/arm/nptl/tls.h
+++ b/sysdeps/arm/nptl/tls.h
@@ -91,7 +91,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ INTERNAL_SYSCALL_DECL (err);					\
      long result_var;							\
      result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp));	\
diff --git a/sysdeps/generic/tls.h b/sysdeps/generic/tls.h
index fb3d965..b950aa8 100644
--- a/sysdeps/generic/tls.h
+++ b/sysdeps/generic/tls.h
@@ -59,12 +59,11 @@ 
      use the value.
 
 
-     TLS_INIT_TP(tcb, firstcall)
+     TLS_INIT_TP(tcb)
 
      This macro must initialize the thread pointer to enable normal TLS
      operation.  The first parameter is a pointer to the thread control
-     block.  The second parameter specifies whether this is the first
-     call for the TCB.  ld.so calls this macro more than once.
+     block.
 
 
      THREAD_DTV()
diff --git a/sysdeps/hppa/nptl/tls.h b/sysdeps/hppa/nptl/tls.h
index e4dc197..6c721e0 100644
--- a/sysdeps/hppa/nptl/tls.h
+++ b/sysdeps/hppa/nptl/tls.h
@@ -95,7 +95,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ __set_cr27(tcbp); NULL; })
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/sysdeps/ia64/nptl/tls.h b/sysdeps/ia64/nptl/tls.h
index 3f9225a..3eca4e6 100644
--- a/sysdeps/ia64/nptl/tls.h
+++ b/sysdeps/ia64/nptl/tls.h
@@ -118,7 +118,7 @@  register struct pthread *__thread_self __asm__("r13");
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(thrdescr, secondcall) \
+# define TLS_INIT_TP(thrdescr) \
   (__thread_self = (thrdescr), INIT_SYSINFO, NULL)
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/sysdeps/m68k/nptl/tls.h b/sysdeps/m68k/nptl/tls.h
index 471775a..c1df875 100644
--- a/sysdeps/m68k/nptl/tls.h
+++ b/sysdeps/m68k/nptl/tls.h
@@ -103,7 +103,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall)					\
+# define TLS_INIT_TP(tcbp)						\
   ({									\
     INTERNAL_SYSCALL_DECL (err);					\
     int _sys_result;							\
diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
index 03741cd..5b7abd0 100644
--- a/sysdeps/mach/hurd/i386/tls.h
+++ b/sysdeps/mach/hurd/i386/tls.h
@@ -90,69 +90,46 @@  typedef struct
 
 
 static inline const char * __attribute__ ((unused))
-_hurd_tls_init (tcbhead_t *tcb, int secondcall)
+_hurd_tls_init (tcbhead_t *tcb)
 {
   HURD_TLS_DESC_DECL (desc, tcb);
 
-  if (!secondcall)
+  /* This field is used by TLS accesses to get our "thread pointer"
+     from the TLS point of view.  */
+  tcb->tcb = tcb;
+
+  /* Cache our thread port.  */
+  tcb->self = __mach_thread_self ();
+
+  /* Get the first available selector.  */
+  int sel = -1;
+  error_t err = __i386_set_gdt (tcb->self, &sel, desc);
+  if (err == MIG_BAD_ID)
     {
-      /* This field is used by TLS accesses to get our "thread pointer"
-	 from the TLS point of view.  */
-      tcb->tcb = tcb;
-
-      /* Cache our thread port.  */
-      tcb->self = __mach_thread_self ();
-
-      /* Get the first available selector.  */
-      int sel = -1;
-      error_t err = __i386_set_gdt (tcb->self, &sel, desc);
-      if (err == MIG_BAD_ID)
-	{
-	  /* Old kernel, use a per-thread LDT.  */
-	  sel = 0x27;
-	  err = __i386_set_ldt (tcb->self, sel, &desc, 1);
-	  assert_perror (err);
-	  if (err)
-	    return "i386_set_ldt failed";
-	}
-      else if (err)
-	{
-	  assert_perror (err); /* Separate from above with different line #. */
-	  return "i386_set_gdt failed";
-	}
-
-      /* Now install the new selector.  */
-      asm volatile ("mov %w0, %%gs" :: "q" (sel));
+      /* Old kernel, use a per-thread LDT.  */
+      sel = 0x27;
+      err = __i386_set_ldt (tcb->self, sel, &desc, 1);
+      assert_perror (err);
+      if (err)
+	return "i386_set_ldt failed";
     }
-  else
+  else if (err)
     {
-      /* Fetch the selector set by the first call.  */
-      int sel;
-      asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0));
-      if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */
-	{
-	  error_t err = __i386_set_ldt (tcb->self, sel, &desc, 1);
-	  assert_perror (err);
-	  if (err)
-	    return "i386_set_ldt failed";
-	}
-      else
-	{
-	  error_t err = __i386_set_gdt (tcb->self, &sel, desc);
-	  assert_perror (err);
-	  if (err)
-	    return "i386_set_gdt failed";
-	}
+      assert_perror (err); /* Separate from above with different line #. */
+      return "i386_set_gdt failed";
     }
 
+  /* Now install the new selector.  */
+  asm volatile ("mov %w0, %%gs" :: "q" (sel));
+
   return 0;
 }
 
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(descr, secondcall) \
-    _hurd_tls_init ((tcbhead_t *) (descr), (secondcall))
+# define TLS_INIT_TP(descr) \
+    _hurd_tls_init ((tcbhead_t *) (descr))
 
 /* Return the TCB address of the current thread.  */
 # define THREAD_SELF							      \
diff --git a/sysdeps/microblaze/nptl/tls.h b/sysdeps/microblaze/nptl/tls.h
index 71f1dd9..e75a30c 100644
--- a/sysdeps/microblaze/nptl/tls.h
+++ b/sysdeps/microblaze/nptl/tls.h
@@ -98,7 +98,7 @@  static inline void *__microblaze_get_thread_area (void)
 
 /* Code to initially initialize the thread pointer.
    r21 is reserved for thread pointer.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
 
 /* Return the address of the dtv for the current thread.  */
diff --git a/sysdeps/mips/nptl/tls.h b/sysdeps/mips/nptl/tls.h
index 754d4e4..d6fd83d 100644
--- a/sysdeps/mips/nptl/tls.h
+++ b/sysdeps/mips/nptl/tls.h
@@ -118,7 +118,7 @@  typedef struct
 /* Code to initially initialize the thread pointer.  This might need
    special attention since 'errno' is not yet available and if the
    operation can cause a failure 'errno' must not be touched.  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
   ({ INTERNAL_SYSCALL_DECL (err);					\
      long result_var;							\
      result_var = INTERNAL_SYSCALL (set_thread_area, err, 1,		\
diff --git a/sysdeps/tile/nptl/tls.h b/sysdeps/tile/nptl/tls.h
index 2a9bbc1..c93e8a8 100644
--- a/sysdeps/tile/nptl/tls.h
+++ b/sysdeps/tile/nptl/tls.h
@@ -106,7 +106,7 @@  register void *__thread_pointer asm ("tp");
 # define GET_DTV(tcbp)	(((tcbhead_t *) (tcbp))[-1].dtv)
 
 /* Code to initially initialize the thread pointer (tp).  */
-# define TLS_INIT_TP(tcbp, secondcall) \
+# define TLS_INIT_TP(tcbp) \
     (__thread_pointer = (char *)(tcbp) + TLS_TCB_OFFSET, NULL)
 
 /* Return the address of the dtv for the current thread.  */