drop direct use of stat syscalls in fchmodat
[musl] / src / env / __init_tls.c
index f1874f2..a93141e 100644 (file)
@@ -1,3 +1,4 @@
+#define SYSCALL_NO_TLS 1
 #include <elf.h>
 #include <limits.h>
 #include <sys/mman.h>
@@ -21,6 +22,7 @@ int __init_tp(void *p)
        td->tid = __syscall(SYS_set_tid_address, &__thread_list_lock);
        td->locale = &libc.global_locale;
        td->robust_list.head = &td->robust_list.head;
+       td->sysinfo = __sysinfo;
        td->next = td->prev = td;
        return 0;
 }
@@ -65,7 +67,7 @@ void *__copy_tls(unsigned char *mem)
        }
 #endif
        dtv[0] = libc.tls_cnt;
-       td->dtv = td->dtv_copy = dtv;
+       td->dtv = dtv;
        return td;
 }
 
@@ -113,7 +115,8 @@ static void static_init_tls(size_t *aux)
                & (main_tls.align-1);
 #ifdef TLS_ABOVE_TP
        main_tls.offset = GAP_ABOVE_TP;
-       main_tls.offset += -GAP_ABOVE_TP & (main_tls.align-1);
+       main_tls.offset += (-GAP_ABOVE_TP + (uintptr_t)main_tls.image)
+               & (main_tls.align-1);
 #else
        main_tls.offset = main_tls.size;
 #endif