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