1 #include <stdint.h> 2 #include <stdlib.h> 3 #include <tls.h> 4 5 #if USE_TLS && HAVE___THREAD 6 7 struct tls_obj 8 { 9 const char *name; 10 uintptr_t addr; 11 size_t size; 12 size_t align; 13 }; 14 extern struct tls_obj tls_registry[]; 15 16 #define TLS_REGISTER(x) \ 17 static void __attribute__((constructor)) \ 18 tls_register_##x (void) \ 19 { \ 20 size_t i; \ 21 for (i = 0; tls_registry[i].name; ++i); \ 22 tls_registry[i].name = #x; \ 23 tls_registry[i].addr = (uintptr_t) &x; \ 24 tls_registry[i].size = sizeof (x); \ 25 tls_registry[i].align = __alignof__ (x); \ 26 } 27 28 #endif 29