| #include <stdint.h> |
| #include <stdlib.h> |
| #include <tls.h> |
| |
| #if USE_TLS && HAVE___THREAD |
| |
| 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); \ |
| } |
| |
| #endif |