trap UB from attempts to join a detached thread
[musl] / src / thread / __tls_get_addr.c
index 3633396..3b6c9b1 100644 (file)
@@ -1,16 +1,16 @@
 #include <stddef.h>
 #include "pthread_impl.h"
+#include "libc.h"
 
-void *__tls_get_addr(size_t *v)
+__attribute__((__visibility__("hidden")))
+void *__tls_get_new(tls_mod_off_t *);
+
+void *__tls_get_addr(tls_mod_off_t *v)
 {
        pthread_t self = __pthread_self();
-#ifdef SHARED
-       __attribute__((__visibility__("hidden")))
-       void *__tls_get_new(size_t *);
        if (v[0]<=(size_t)self->dtv[0])
-               return (char *)self->dtv[v[0]]+v[1];
+               return (char *)self->dtv[v[0]]+v[1]+DTP_OFFSET;
        return __tls_get_new(v);
-#else
-       return (char *)self->dtv[1]+v[1];
-#endif
 }
+
+weak_alias(__tls_get_addr, __tls_get_new);