about summary refs log tree commit diff
path: root/src/internal
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2020-08-24 22:45:51 -0400
committerRich Felker <dalias@aerifal.cx>2020-08-27 18:36:45 -0400
commit57f6e85c9de417fef5eece2a5b00c1104321f543 (patch)
treea975b7e5a36294837ccc19c17c5b8c9a71fa2346 /src/internal
parent3a5b9ae7cf656648c80fe155a5239d9b4fb4c485 (diff)
downloadmusl-57f6e85c9de417fef5eece2a5b00c1104321f543.tar.gz
musl-57f6e85c9de417fef5eece2a5b00c1104321f543.tar.xz
musl-57f6e85c9de417fef5eece2a5b00c1104321f543.zip
remove redundant pthread struct members repeated for layout purposes
dtv_copy, canary2, and canary_at_end existed solely to match multiple
ABI and asm-accessed layouts simultaneously. now that pthread_arch.h
can be included before struct __pthread is defined, the struct layout
can depend on macros defined by pthread_arch.h.
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/pthread_impl.h23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 58e06136..4d709bbc 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -11,16 +11,25 @@
 #include "atomic.h"
 #include "futex.h"
 
+#include "pthread_arch.h"
+
 #define pthread __pthread
 
 struct pthread {
 	/* Part 1 -- these fields may be external or
 	 * internal (accessed via asm) ABI. Do not change. */
 	struct pthread *self;
+#ifndef TLS_ABOVE_TP
 	uintptr_t *dtv;
+#endif
 	struct pthread *prev, *next; /* non-ABI */
 	uintptr_t sysinfo;
-	uintptr_t canary, canary2;
+#ifndef TLS_ABOVE_TP
+#ifdef CANARY_PAD
+	uintptr_t canary_pad;
+#endif
+	uintptr_t canary;
+#endif
 
 	/* Part 2 -- implementation details, non-ABI. */
 	int tid;
@@ -52,8 +61,10 @@ struct pthread {
 
 	/* 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 *dtv_copy;
+#ifdef TLS_ABOVE_TP
+	uintptr_t canary;
+	uintptr_t *dtv;
+#endif
 };
 
 enum {
@@ -99,12 +110,6 @@ struct __timer {
 #define _b_waiters2 __u.__vi[4]
 #define _b_inst __u.__p[3]
 
-#include "pthread_arch.h"
-
-#ifndef CANARY
-#define CANARY canary
-#endif
-
 #ifndef TP_OFFSET
 #define TP_OFFSET 0
 #endif