Index: fusl/src/env/__reset_tls.c |
diff --git a/fusl/src/env/__reset_tls.c b/fusl/src/env/__reset_tls.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..677e57f58b45c6db27c9d1f0ceda3f1b72b08c95 |
--- /dev/null |
+++ b/fusl/src/env/__reset_tls.c |
@@ -0,0 +1,16 @@ |
+#include <string.h> |
+#include "pthread_impl.h" |
+#include "libc.h" |
+ |
+void __reset_tls() |
+{ |
+ pthread_t self = __pthread_self(); |
+ struct tls_module *p; |
+ size_t i, n = (size_t)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); |
+ } |
+} |