about summary refs log tree commit diff
path: root/src/thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread')
-rw-r--r--src/thread/arm/tls.s4
-rw-r--r--src/thread/pthread_create.c2
-rw-r--r--src/thread/pthread_self.c2
3 files changed, 6 insertions, 2 deletions
diff --git a/src/thread/arm/tls.s b/src/thread/arm/tls.s
new file mode 100644
index 00000000..59736ac2
--- /dev/null
+++ b/src/thread/arm/tls.s
@@ -0,0 +1,4 @@
+.global __aeabi_read_tp
+.type __aeabi_read_tp,%function
+__aeabi_read_tp:
+	ldr pc,=0xffff0fe0
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 627ff5fb..e67616e7 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -147,7 +147,7 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attr,
 	new->canary = self->canary;
 
 	a_inc(&libc.threads_minus_1);
-	ret = __clone(start, stack, flags, new, &new->tid, new, &new->tid);
+	ret = __clone(start, stack, flags, new, &new->tid, TP_ADJ(new), &new->tid);
 
 	__release_ptc();
 
diff --git a/src/thread/pthread_self.c b/src/thread/pthread_self.c
index a93d8129..23dbaa5e 100644
--- a/src/thread/pthread_self.c
+++ b/src/thread/pthread_self.c
@@ -10,7 +10,7 @@ static int init_main_thread()
 {
 	__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
 		SIGPT_SET, 0, __SYSCALL_SSLEN);
-	if (__set_thread_area(main_thread) < 0) return -1;
+	if (__set_thread_area(TP_ADJ(main_thread)) < 0) return -1;
 	main_thread->canceldisable = libc.canceldisable;
 	main_thread->tsd = (void **)__pthread_tsd_main;
 	main_thread->errno_ptr = __errno_location();