diff options
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/arm/tls.s | 4 | ||||
-rw-r--r-- | src/thread/pthread_create.c | 2 | ||||
-rw-r--r-- | src/thread/pthread_self.c | 2 |
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(); |