+ pthread_t td;
+ if (!image) return mem;
+ void **dtv = (void *)mem;
+ dtv[0] = (void *)1;
+#ifdef TLS_ABOVE_TP
+ mem += sizeof(void *) * 2;
+ mem += -((uintptr_t)mem + sizeof(struct pthread)) & (align-1);
+ td = (pthread_t)mem;
+ mem += sizeof(struct pthread);
+#else
+ mem += __libc.tls_size - sizeof(struct pthread);
+ mem -= (uintptr_t)mem & (align-1);
+ td = (pthread_t)mem;
+ td->dtv = dtv;
+ mem -= size;
+#endif
+ dtv[1] = mem;