-void *__mmap(void *, size_t, int, int, int, off_t);
+#define T __static_tls
+
+void *__copy_tls(unsigned char *mem)
+{
+ pthread_t td;
+ if (!T.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)) & (T.align-1);
+ td = (pthread_t)mem;
+ mem += sizeof(struct pthread);
+#else
+ mem += libc.tls_size - sizeof(struct pthread);
+ mem -= (uintptr_t)mem & (T.align-1);
+ td = (pthread_t)mem;
+ mem -= T.size;
+#endif
+ td->dtv = td->dtv_copy = dtv;
+ dtv[1] = mem;
+ memcpy(mem, T.image, T.len);
+ return td;
+}