summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2017-01-13 10:28:46 +0000
committerrofl0r <retnyg@gmx.net>2017-01-13 10:47:08 +0000
commit1f53e7d00c375efb32e2e468f91a42668653d5f0 (patch)
treed349d8718c0819061540cdfd751bb7b7806a30a7 /src
parent27b3fd68f67b674440d21ea7ca5cf918d2e1559f (diff)
downloadmusl-1f53e7d00c375efb32e2e468f91a42668653d5f0.tar.gz
fix crashes in x32 __tls_get_addr
x32 has another gratuitous difference to all other archs: it passes an array of 64bit values to __tls_get_addr(). usually it is an array of size_t.
Diffstat (limited to 'src')
-rw-r--r--src/internal/pthread_impl.h4
-rw-r--r--src/thread/__tls_get_addr.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 757b86ad..ae0ab1c5 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -97,6 +97,10 @@ struct __timer {
#define DTP_OFFSET 0
#endif
+#ifndef tls_mod_off_t
+#define tls_mod_off_t size_t
+#endif
+
#define SIGTIMER 32
#define SIGCANCEL 33
#define SIGSYNCCALL 34
diff --git a/src/thread/__tls_get_addr.c b/src/thread/__tls_get_addr.c
index 6945faa0..3b6c9b1b 100644
--- a/src/thread/__tls_get_addr.c
+++ b/src/thread/__tls_get_addr.c
@@ -3,9 +3,9 @@
#include "libc.h"
__attribute__((__visibility__("hidden")))
-void *__tls_get_new(size_t *);
+void *__tls_get_new(tls_mod_off_t *);
-void *__tls_get_addr(size_t *v)
+void *__tls_get_addr(tls_mod_off_t *v)
{
pthread_t self = __pthread_self();
if (v[0]<=(size_t)self->dtv[0])