text: #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
  