combine arch ABI's DTP_OFFSET into DTV pointers
[musl] / src / env / __reset_tls.c
index 677e57f..15685bc 100644 (file)
@@ -6,11 +6,10 @@ void __reset_tls()
 {
        pthread_t self = __pthread_self();
        struct tls_module *p;
-       size_t i, n = (size_t)self->dtv[0];
+       size_t i, n = self->dtv[0];
        if (n) for (p=libc.tls_head, i=1; i<=n; i++, p=p->next) {
-               if (!self->dtv[i]) continue;
-               memcpy(self->dtv[i], p->image, p->len);
-               memset((char *)self->dtv[i]+p->len, 0,
-                       p->size - p->len);
+               char *mem = (char *)(self->dtv[i] - DTP_OFFSET);
+               memcpy(mem, p->image, p->len);
+               memset(mem+p->len, 0, p->size - p->len);
        }
 }