-void *__mmap(void *, size_t, int, int, int, off_t);
+ for (i=1, p=libc.tls_head; p; i++, p=p->next) {
+ dtv[i] = mem + p->offset;
+ memcpy(dtv[i], p->image, p->len);
+ }
+#else
+ dtv = (void **)mem;
+
+ mem += libc.tls_size - sizeof(struct pthread);
+ mem -= (uintptr_t)mem & (libc.tls_align-1);
+ td = (pthread_t)mem;
+
+ for (i=1, p=libc.tls_head; p; i++, p=p->next) {
+ dtv[i] = mem - p->offset;
+ memcpy(dtv[i], p->image, p->len);
+ }
+#endif
+ dtv[0] = (void *)libc.tls_cnt;
+ td->dtv = td->dtv_copy = dtv;
+ return td;
+}