| #include <stdint.h> | |
| #include <stdlib.h> | |
| #include <tls.h> | |
| struct tls_obj | |
| { | |
| const char *name; | |
| uintptr_t addr; | |
| size_t size; | |
| size_t align; | |
| }; | |
| extern struct tls_obj tls_registry[]; | |
| #define TLS_REGISTER(x) \ | |
| static void __attribute__((constructor)) \ | |
| tls_register_##x (void) \ | |
| { \ | |
| size_t i; \ | |
| for (i = 0; tls_registry[i].name; ++i); \ | |
| tls_registry[i].name = #x; \ | |
| tls_registry[i].addr = (uintptr_t) &x; \ | |
| tls_registry[i].size = sizeof (x); \ | |
| tls_registry[i].align = __alignof__ (x); \ | |
| } |