1
0
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:
Florian Weimer
2025-01-07 08:34:13 +01:00
parent 2d196c2e10
commit c4ed6a380e

View File

@@ -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;