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