mirror of
https://sourceware.org/git/glibc.git
synced 2025-10-12 19:04:54 +03:00
Revert "nptl: More useful padding in struct pthread"
This reverts commit 7c22dcda27
.
The padding is required by Chromium's MaybeUpdateGlibcTidCache
in sandbox/linux/services/namespace_sandbox.cc.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
56
nptl/descr.h
56
nptl/descr.h
@@ -129,32 +129,41 @@ struct priority_protection_data
|
|||||||
/* Thread descriptor data structure. */
|
/* Thread descriptor data structure. */
|
||||||
struct pthread
|
struct pthread
|
||||||
{
|
{
|
||||||
#if !TLS_DTV_AT_TP
|
union
|
||||||
/* This overlaps the TCB as used for TLS without threads (see tls.h). */
|
|
||||||
tcbhead_t header;
|
|
||||||
#else
|
|
||||||
struct
|
|
||||||
{
|
{
|
||||||
/* multiple_threads is enabled either when the process has spawned at
|
#if !TLS_DTV_AT_TP
|
||||||
least one thread or when a single-threaded process cancels itself.
|
/* This overlaps the TCB as used for TLS without threads (see tls.h). */
|
||||||
This enables additional code to introduce locking before doing some
|
tcbhead_t header;
|
||||||
compare_and_exchange operations and also enable cancellation points.
|
#else
|
||||||
The concepts of multiple threads and cancellation points ideally
|
struct
|
||||||
should be separate, since it is not necessary for multiple threads to
|
{
|
||||||
have been created for cancellation points to be enabled, as is the
|
/* multiple_threads is enabled either when the process has spawned at
|
||||||
case is when single-threaded process cancels itself.
|
least one thread or when a single-threaded process cancels itself.
|
||||||
|
This enables additional code to introduce locking before doing some
|
||||||
|
compare_and_exchange operations and also enable cancellation points.
|
||||||
|
The concepts of multiple threads and cancellation points ideally
|
||||||
|
should be separate, since it is not necessary for multiple threads to
|
||||||
|
have been created for cancellation points to be enabled, as is the
|
||||||
|
case is when single-threaded process cancels itself.
|
||||||
|
|
||||||
Since enabling multiple_threads enables additional code in
|
Since enabling multiple_threads enables additional code in
|
||||||
cancellation points and compare_and_exchange operations, there is a
|
cancellation points and compare_and_exchange operations, there is a
|
||||||
potential for an unneeded performance hit when it is enabled in a
|
potential for an unneeded performance hit when it is enabled in a
|
||||||
single-threaded, self-canceling process. This is OK though, since a
|
single-threaded, self-canceling process. This is OK though, since a
|
||||||
single-threaded process will enable async cancellation only when it
|
single-threaded process will enable async cancellation only when it
|
||||||
looks to cancel itself and is hence going to end anyway. */
|
looks to cancel itself and is hence going to end anyway. */
|
||||||
int multiple_threads;
|
int multiple_threads;
|
||||||
int gscope_flag;
|
int gscope_flag;
|
||||||
} 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;
|
||||||
@@ -398,9 +407,6 @@ 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;
|
||||||
|
Reference in New Issue
Block a user