Merge "Move Bionic slots to the end of pthread_internal_t" am: 2bfe37afc8
am: 2c2fa54afd
Change-Id: Id41043434cbcd0c783075b719b6b116150f01031
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 65ec5ff..b68cb94 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -112,10 +112,6 @@
thread_local_dtor* thread_local_dtors;
- void* tls[BIONIC_TLS_SLOTS];
-
- pthread_key_data_t key_data[BIONIC_PTHREAD_KEY_COUNT];
-
/*
* The dynamic linker implements dlerror(3), which makes it hard for us to implement this
* per-thread buffer by simply using malloc(3) and free(3).
@@ -124,6 +120,12 @@
char dlerror_buffer[__BIONIC_DLERROR_BUFFER_SIZE];
bionic_tls* bionic_tls;
+
+ pthread_key_data_t key_data[BIONIC_PTHREAD_KEY_COUNT];
+
+ // The thread pointer (__get_tls()) points at this field. This field must come last so that
+ // an executable's TLS segment can be allocated at a fixed offset after the thread pointer.
+ void* tls[BIONIC_TLS_SLOTS];
};
__LIBC_HIDDEN__ int __init_thread(pthread_internal_t* thread);