document pthread structure ABI constraints in comments

in the original submission of the patch that became commit
7c709f2d4f, 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.
This commit is contained in:
Rich Felker 2018-02-05 11:45:52 -05:00
parent e53296f889
commit cc7c300d1a
1 changed files with 7 additions and 0 deletions

View File

@ -13,11 +13,15 @@
#define pthread __pthread #define pthread __pthread
struct pthread { struct pthread {
/* Part 1 -- these fields may be external or
* internal (accessed via asm) ABI. Do not change. */
struct pthread *self; struct pthread *self;
void **dtv, *unused1, *unused2; void **dtv, *unused1, *unused2;
uintptr_t sysinfo; uintptr_t sysinfo;
uintptr_t canary, canary2; uintptr_t canary, canary2;
pid_t tid, pid; pid_t tid, pid;
/* Part 2 -- implementation details, non-ABI. */
int tsd_used, errno_val; int tsd_used, errno_val;
volatile int cancel, canceldisable, cancelasync; volatile int cancel, canceldisable, cancelasync;
int detached; int detached;
@ -47,6 +51,9 @@ struct pthread {
int dlerror_flag; int dlerror_flag;
void *stdio_locks; void *stdio_locks;
size_t guard_size; 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; uintptr_t canary_at_end;
void **dtv_copy; void **dtv_copy;
}; };