mirror of git://sourceware.org/git/glibc.git
nptl: More useful padding in struct pthread
The previous use of padding within a union made it impossible to re-use the padding for GLIBC_PRIVATE ABI preservation because tcbhead_t could use up all of the padding (as was historically the case on x86-64). Allocating padding unconditionally addresses this issue. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
5e249192ca
commit
7c22dcda27
12
nptl/descr.h
12
nptl/descr.h
|
|
@ -128,8 +128,6 @@ struct priority_protection_data
|
||||||
|
|
||||||
/* Thread descriptor data structure. */
|
/* Thread descriptor data structure. */
|
||||||
struct pthread
|
struct pthread
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
{
|
||||||
#if !TLS_DTV_AT_TP
|
#if !TLS_DTV_AT_TP
|
||||||
/* This overlaps the TCB as used for TLS without threads (see tls.h). */
|
/* This overlaps the TCB as used for TLS without threads (see tls.h). */
|
||||||
|
|
@ -157,13 +155,6 @@ struct pthread
|
||||||
} header;
|
} header;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This extra padding has no special purpose, and this structure layout
|
|
||||||
is private and subject to change without affecting the official ABI.
|
|
||||||
We just have it here in case it might be convenient for some
|
|
||||||
implementation-specific instrumentation hack or suchlike. */
|
|
||||||
void *__padding[24];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This descriptor's link on the GL (dl_stack_used) or
|
/* This descriptor's link on the GL (dl_stack_used) or
|
||||||
GL (dl_stack_user) list. */
|
GL (dl_stack_user) list. */
|
||||||
list_t list;
|
list_t list;
|
||||||
|
|
@ -407,6 +398,9 @@ struct pthread
|
||||||
/* getrandom vDSO per-thread opaque state. */
|
/* getrandom vDSO per-thread opaque state. */
|
||||||
void *getrandom_buf;
|
void *getrandom_buf;
|
||||||
|
|
||||||
|
/* Can be used for backports preserving internal TCB layout. */
|
||||||
|
void *padding[8];
|
||||||
|
|
||||||
/* rseq area registered with the kernel. Use a custom definition
|
/* rseq area registered with the kernel. Use a custom definition
|
||||||
here to isolate from kernel struct rseq changes. The
|
here to isolate from kernel struct rseq changes. The
|
||||||
implementation of sched_getcpu needs acccess to the cpu_id field;
|
implementation of sched_getcpu needs acccess to the cpu_id field;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue