On Wed, 2018-05-30 at 07:54 -0700, H.J. Lu wrote: > In glibc, sysdeps/i386/nptl/tls.h has > > typedef struct > { > void *tcb; /* Pointer to the TCB. Not necessarily the > thread descriptor used by libpthread. */ > dtv_t *dtv; > void *self; /* Pointer to the thread descriptor. */ > int multiple_threads; > uintptr_t sysinfo; > uintptr_t stack_guard; > uintptr_t pointer_guard; > int gscope_flag; > int __glibc_reserved1; > /* Reservation of some values for the TM ABI. */ > void *__private_tm[4]; > /* GCC split stack support. */ > void *__private_ss; > } tcbhead_t; > > and sysdeps/x86_64/nptl/tls.h has > > typedef struct > { > void *tcb; /* Pointer to the TCB. Not necessarily the > thread descriptor used by libpthread. */ > dtv_t *dtv; > void *self; /* Pointer to the thread descriptor. */ > int multiple_threads; > int gscope_flag; > uintptr_t sysinfo; > uintptr_t stack_guard; > uintptr_t pointer_guard; > unsigned long int vgetcpu_cache[2]; > int __glibc_reserved1; > int __glibc_unused1; > /* Reservation of some values for the TM ABI. */ > void *__private_tm[4]; > /* GCC split stack support. */ > void *__private_ss; > long int __glibc_reserved2; > /* Must be kept even if it is no longer used by glibc since programs, > like AddressSanitizer, depend on the size of tcbhead_t. */ > __128bits __glibc_unused2[8][4] __attribute__ ((aligned (32))); > > void *__padding[8]; > } tcbhead_t; > > The offsets of __private_tm are > > i386: 36 bytes > x32: 48 bytes > x86_64: 80 bytes > > and the offsets of pointer_guard are: > > i386: 24 bytes > x32: 28 bytes > x86_64: 48 bytes > > Update SEG_READ and SEG_WRITE to use the offset of __private_tm as base > and correct the offset of pointer_guard for x32. > > Tested on i686, x86-64 and x32. OK for trunk and release branches?
The patch itself looks okay to me, but the commit message is pretty cryptic. I can't ack for release branches.