diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-06-12 06:23:28 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-06-12 06:34:48 -0700 |
commit | 0221ce2a90be2d40fc90f0b5dcec77a1ec013f53 (patch) | |
tree | fbdeebdceffa155aee874f4840861b4e795b810e /include | |
parent | e826574c985a15a500262f2fbd21c7e9259d3d11 (diff) | |
download | glibc-0221ce2a90be2d40fc90f0b5dcec77a1ec013f53.tar.gz glibc-0221ce2a90be2d40fc90f0b5dcec77a1ec013f53.tar.xz glibc-0221ce2a90be2d40fc90f0b5dcec77a1ec013f53.zip |
i386: Change offset of __private_ss to 0x30 [BZ #23250]
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; The offset of __private_ss is 0x34. But GCC defines /* We steal the last transactional memory word. */ #define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30 and libgcc/config/i386/morestack.S has cmpl %gs:0x30,%eax # See if we have enough space. movl %eax,%gs:0x30 # Save the new stack boundary. movl %eax,%gs:0x30 # Save the new stack boundary. movl %ecx,%gs:0x30 # Save new stack boundary. movl %eax,%gs:0x30 movl %gs:0x30,%eax movl %eax,%gs:0x30 Since update TARGET_THREAD_SPLIT_STACK_OFFSET changes split stack ABI, this patch updates tcbhead_t to match GCC. [BZ #23250] [BZ #10686] * sysdeps/i386/nptl/tls.h (tcbhead_t): Change __private_tm[4] to _private_tm[3] and add __glibc_reserved2. Add _Static_assert of offset of __private_ss == 0x30. * sysdeps/x86_64/nptl/tls.h: Add _Static_assert of offset of __private_ss == 0x40 for ILP32 and == 0x70 for LP64.
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions