summaryrefslogtreecommitdiff
path: root/src/internal/pthread_impl.h
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018-02-05 11:45:52 -0500
committerRich Felker <dalias@aerifal.cx>2018-02-05 11:45:52 -0500
commitcc7c300d1af22641b012268a959ac42f15341ed8 (patch)
tree8dffe10e4f759c00f594372a383d6e4d2c00bded /src/internal/pthread_impl.h
parente53296f88952dcc6a9343dea53a4aa911f9a9c87 (diff)
downloadmusl-cc7c300d1af22641b012268a959ac42f15341ed8.tar.gz
document pthread structure ABI constraints in comments
in the original submission of the patch that became commit 7c709f2d4f9872d1b445f760b0e68da89e256b9e, and in subsequent reading of it by others, it was not clear that the new member had to be inserted before canary_at_end, or that inserting it at that location was safe. add comments to document.
Diffstat (limited to 'src/internal/pthread_impl.h')
-rw-r--r--src/internal/pthread_impl.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 4a0db987..f6a4f2c2 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -13,11 +13,15 @@
#define pthread __pthread
struct pthread {
+ /* Part 1 -- these fields may be external or
+ * internal (accessed via asm) ABI. Do not change. */
struct pthread *self;
void **dtv, *unused1, *unused2;
uintptr_t sysinfo;
uintptr_t canary, canary2;
pid_t tid, pid;
+
+ /* Part 2 -- implementation details, non-ABI. */
int tsd_used, errno_val;
volatile int cancel, canceldisable, cancelasync;
int detached;
@@ -47,6 +51,9 @@ struct pthread {
int dlerror_flag;
void *stdio_locks;
size_t guard_size;
+
+ /* Part 3 -- the positions of these fields relative to
+ * the end of the structure is external and internal ABI. */
uintptr_t canary_at_end;
void **dtv_copy;
};