PATCH: Add x32 support to tcbhead_t

H.J. Lu hjl.tools@gmail.com
Tue May 15 04:04:00 GMT 2012


On Mon, May 14, 2012 at 7:37 PM, Roland McGrath <roland@hack.frob.com> wrote:
>> -# if __WORDSIZE == 64
>>    int rtld_must_xmm_save;
>> -# endif
>>    /* Reservation of some values for the TM ABI.  */
>>    void *__private_tm[5];
>> -# if __WORDSIZE == 64
>>    long int __unused2;
>>    /* Have space for the post-AVX register size.  */
>> -  __m128 rtld_savespace_sse[8][4];
>> +  __m128 rtld_savespace_sse[8][4] __attribute__((aligned(32)));
>
> Space between 'aligned' and paren.
>
>>    void *__padding[8];
>
> With the space nit this change is OK.

I checked it in with space change.

> But while we're here, does anyone know why we have __private_tm, __unused2,
> and __padding fields here at all??
>
> This is a private internal structure, not part of the real ABI.  (Unless
> I'm confused, it's only part of the GLIBC_PRIVATE ABI between libc and
> libpthread.)  Only the first word is part of the TLS ABI, so why do we have
> all these apparent attempts at future-proofing in the rest of the
> structure?
>

GCC i386.h has

/* We steal the last transactional memory word.  */
#define TARGET_CAN_SPLIT_STACK
#define TARGET_THREAD_SPLIT_STACK_OFFSET \
  (TARGET_64BIT ? (TARGET_X32 ? 0x40 : 0x70) : 0x30)
#endif

So we can't change __private_tm.  I believe __unused2 is used
to pad rtld_savespace_sse to 32 byte offset.


-- 
H.J.



More information about the Libc-alpha mailing list