[PATCH] hurd/i386: Remove stale __GNUC_PREREQ (6, 0) test from tls.h

Samuel Thibault samuel.thibault@gnu.org
Thu Dec 18 08:39:11 GMT 2025


Uros Bizjak, le jeu. 18 déc. 2025 09:27:38 +0100, a ecrit:
> GCC 12 is currently the minimum supported compiler version.
> Remove no longer needed __GNUC_PREREQ (6, 0) test and corresponding
> dead code from tls.h.
> 
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Thomas Schwinge <tschwinge@gnu.org>
> Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

thanks!

> ---
>  sysdeps/mach/hurd/i386/tls.h | 127 ++---------------------------------
>  1 file changed, 5 insertions(+), 122 deletions(-)
> 
> diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
> index dc35792a8b..912ce616e7 100644
> --- a/sysdeps/mach/hurd/i386/tls.h
> +++ b/sysdeps/mach/hurd/i386/tls.h
> @@ -194,137 +194,20 @@ out:
>  # define __LIBC_NO_TLS() 0
>  #endif
>  
> -# if __GNUC_PREREQ (6, 0)
>  
> -#  define THREAD_SELF							      \
> +# define THREAD_SELF					\
>    (*(tcbhead_t * __seg_gs *) offsetof (tcbhead_t, tcb))
> -#  define THREAD_GETMEM(descr, member)					      \
> +# define THREAD_GETMEM(descr, member)					      \
>    (*(__typeof (descr->member) __seg_gs *) offsetof (tcbhead_t, member))
> -#  define THREAD_GETMEM_NC(descr, member, idx)				      \
> +# define THREAD_GETMEM_NC(descr, member, idx)				      \
>    (*(__typeof (descr->member[0]) __seg_gs *)				      \
>     (offsetof (tcbhead_t, member) + (idx) * sizeof (descr->member[0])))
> -#  define THREAD_SETMEM(descr, member, value)				      \
> +# define THREAD_SETMEM(descr, member, value)				      \
>    (*(__typeof (descr->member) __seg_gs *) offsetof (tcbhead_t, member) = value)
> -#  define THREAD_SETMEM_NC(descr, member, index, value)			      \
> +# define THREAD_SETMEM_NC(descr, member, index, value)			      \
>    (*(__typeof (descr->member[0]) __seg_gs *)				      \
>     (offsetof (tcbhead_t, member) + (idx) * sizeof (descr->member[0])))
>  
> -# else
> -
> -/* Return the TCB address of the current thread.  */
> -#  define THREAD_SELF							      \
> -  ({ tcbhead_t *__tcb;							      \
> -     __asm__ ("movl %%gs:%c1,%0" : "=r" (__tcb)				      \
> -	      : "i" (offsetof (tcbhead_t, tcb)));			      \
> -     __tcb;})
> -
> -/* Read member of the thread descriptor directly.  */
> -# define THREAD_GETMEM(descr, member) \
> -  ({ __typeof (descr->member) __value;					      \
> -     _Static_assert (sizeof (__value) == 1				      \
> -		     || sizeof (__value) == 4				      \
> -		     || sizeof (__value) == 8,				      \
> -		     "size of per-thread data");			      \
> -     if (sizeof (__value) == 1)						      \
> -       asm volatile ("movb %%gs:%P2,%b0"				      \
> -		     : "=q" (__value)					      \
> -		     : "0" (0), "i" (offsetof (tcbhead_t, member)));	      \
> -     else if (sizeof (__value) == 4)					      \
> -       asm volatile ("movl %%gs:%P1,%0"					      \
> -		     : "=r" (__value)					      \
> -		     : "i" (offsetof (tcbhead_t, member)));		      \
> -     else /* 8 */							      \
> -       {								      \
> -	 asm volatile ("movl %%gs:%P1,%%eax\n\t"			      \
> -		       "movl %%gs:%P2,%%edx"				      \
> -		       : "=A" (__value)					      \
> -		       : "i" (offsetof (tcbhead_t, member)),		      \
> -			 "i" (offsetof (tcbhead_t, member) + 4));	      \
> -       }								      \
> -     __value; })
> -
> -
> -/* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
> -#  define THREAD_GETMEM_NC(descr, member, idx) \
> -  ({ __typeof (descr->member[0]) __value;				      \
> -     _Static_assert (sizeof (__value) == 1				      \
> -		     || sizeof (__value) == 4				      \
> -		     || sizeof (__value) == 8,				      \
> -		     "size of per-thread data");			      \
> -     if (sizeof (__value) == 1)						      \
> -       asm volatile ("movb %%gs:%P2(%3),%b0"				      \
> -		     : "=q" (__value)					      \
> -		     : "0" (0), "i" (offsetof (tcbhead_t, member[0])),	      \
> -		     "r" (idx));					      \
> -     else if (sizeof (__value) == 4)					      \
> -       asm volatile ("movl %%gs:%P1(,%2,4),%0"				      \
> -		     : "=r" (__value)					      \
> -		     : "i" (offsetof (tcbhead_t, member[0])),		      \
> -		       "r" (idx));					      \
> -     else /* 8 */							      \
> -       {								      \
> -	 asm volatile  ("movl %%gs:%P1(,%2,8),%%eax\n\t"		      \
> -			"movl %%gs:4+%P1(,%2,8),%%edx"			      \
> -			: "=&A" (__value)				      \
> -			: "i" (offsetof (tcbhead_t, member[0])),	      \
> -			  "r" (idx));					      \
> -       }								      \
> -     __value; })
> -
> -
> -
> -/* Set member of the thread descriptor directly.  */
> -#  define THREAD_SETMEM(descr, member, value) \
> -  ({									      \
> -     _Static_assert (sizeof (descr->member) == 1			      \
> -		     || sizeof (descr->member) == 4			      \
> -		     || sizeof (descr->member) == 8,			      \
> -		     "size of per-thread data");			      \
> -     if (sizeof (descr->member) == 1)					      \
> -       asm volatile ("movb %b0,%%gs:%P1" :				      \
> -		     : "iq" (value),					      \
> -		       "i" (offsetof (tcbhead_t, member)));		      \
> -     else if (sizeof (descr->member) == 4)				      \
> -       asm volatile ("movl %0,%%gs:%P1" :				      \
> -		     : "ir" (value),					      \
> -		       "i" (offsetof (tcbhead_t, member)));		      \
> -     else /* 8 */							      \
> -       {								      \
> -	 asm volatile ("movl %%eax,%%gs:%P1\n\t"			      \
> -		       "movl %%edx,%%gs:%P2" :				      \
> -		       : "A" ((uint64_t) cast_to_integer (value)),	      \
> -			 "i" (offsetof (tcbhead_t, member)),		      \
> -			 "i" (offsetof (tcbhead_t, member) + 4));	      \
> -       }})
> -
> -
> -/* Same as THREAD_SETMEM, but the member offset can be non-constant.  */
> -#  define THREAD_SETMEM_NC(descr, member, idx, value) \
> -  ({									      \
> -     _Static_assert (sizeof (descr->member[0]) == 1			      \
> -		     || sizeof (descr->member[0]) == 4			      \
> -		     || sizeof (descr->member[0]) == 8,			      \
> -		     "size of per-thread data");			      \
> -     if (sizeof (descr->member[0]) == 1)				      \
> -       asm volatile ("movb %b0,%%gs:%P1(%2)" :				      \
> -		     : "iq" (value),					      \
> -		       "i" (offsetof (tcbhead_t, member)),		      \
> -		       "r" (idx));					      \
> -     else if (sizeof (descr->member[0]) == 4)				      \
> -       asm volatile ("movl %0,%%gs:%P1(,%2,4)" :			      \
> -		     : "ir" (value),					      \
> -		       "i" (offsetof (tcbhead_t, member)),		      \
> -		       "r" (idx));					      \
> -     else /* 8 */							      \
> -       {								      \
> -	 asm volatile ("movl %%eax,%%gs:%P1(,%2,8)\n\t"			      \
> -		       "movl %%edx,%%gs:4+%P1(,%2,8)" :			      \
> -		       : "A" ((uint64_t) cast_to_integer (value)),	      \
> -			 "i" (offsetof (tcbhead_t, member)),		      \
> -			 "r" (idx));					      \
> -       }})
> -
> -# endif /* __GNUC_PREREQ (6, 0) */
>  
>  /* Return the TCB address of a thread given its state.
>     Note: this is expensive.  */
> -- 
> 2.52.0
> 

-- 
Samuel
 Yep. Moi j'ai un clavier à une touche. 
 Par contre, ma souris a 102 boutons, c'est pas toujours pratique.
 -+- OG in: Guide du Cabaliste Usenet - Le mulot contre attaque -+-


More information about the Libc-alpha mailing list