summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/sysdeps/linux/common/pause.c1
-rw-r--r--libc/sysdeps/linux/sh/sysdep.h21
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in6
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S2
12 files changed, 31 insertions, 7 deletions
diff --git a/libc/sysdeps/linux/common/pause.c b/libc/sysdeps/linux/common/pause.c
index cd0ea4a77..132ffa856 100644
--- a/libc/sysdeps/linux/common/pause.c
+++ b/libc/sysdeps/linux/common/pause.c
@@ -37,3 +37,4 @@ weak_alias (__libc_pause, pause)
#ifdef __UCLIBC_HAS_THREADS_NATIVE__
LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */
#endif
+
diff --git a/libc/sysdeps/linux/sh/sysdep.h b/libc/sysdeps/linux/sh/sysdep.h
index 1d490553d..bd6234292 100644
--- a/libc/sysdeps/linux/sh/sysdep.h
+++ b/libc/sysdeps/linux/sh/sysdep.h
@@ -273,5 +273,24 @@
.align 2; \
1: .long SYS_ify (syscall_name); \
2:
-
#endif /* __ASSEMBLER__ */
+
+/* Pointer mangling support. */
+#if defined NOT_IN_libc && defined IS_IN_rtld
+/* We cannot use the thread descriptor because in ld.so we use setjmp
+ earlier than the descriptor is initialized. Using a global variable
+ is too complicated here since we have no PC-relative addressing mode. */
+#else
+# ifdef __ASSEMBLER__
+# define PTR_MANGLE(reg, tmp) \
+ stc gbr,tmp; mov.l @(POINTER_GUARD,tmp),tmp; xor tmp,reg
+# define PTR_MANGLE2(reg, tmp) xor tmp,reg
+# define PTR_DEMANGLE(reg, tmp) PTR_MANGLE (reg, tmp)
+# define PTR_DEMANGLE2(reg, tmp) PTR_MANGLE2 (reg, tmp)
+# else
+# define PTR_MANGLE(var) \
+ (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())
+# define PTR_DEMANGLE(var) PTR_MANGLE (var)
+# endif
+#endif
+
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
index faa8ea5a6..0b3b7718f 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
@@ -12,8 +12,7 @@ libpthread_CSRC = pthread_attr_getaffinity.c \
pthread_yield.c sem_post.c sem_timedwait.c \
pthread_sigqueue.c \
sem_trywait.c sem_wait.c pt-fork.c \
- sigtimedwait.c sigwaitinfo.c sigwait.c pt-sleep.c \
- lowlevelrobustlock.c
+ sigtimedwait.c sigwaitinfo.c sigwait.c pt-sleep.c
libpthread_SSRC = #ptw-close.S ptw-open.S ptw-waitid.S ptw-waidpid.S ptw-write.S
@@ -37,10 +36,11 @@ endif
ifeq ($(TARGET_ARCH),arm)
libc_SSRC := $(filter-out waitpid.S,$(libc_SSRC))
+libpthread_CSRC += lowlevelrobustlock.c
endif
ifeq ($(TARGET_ARCH),mips)
-libpthread_CSRC += lowlevellock.c
+libpthread_CSRC += lowlevellock.c lowlevelrobustlock.c
libc_CSRC += libc-lowlevellock.c
endif
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
index 6d4036496..542804862 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
@@ -21,6 +21,7 @@
#include <pthread-errnos.h>
#include <bits/kernel-features.h>
#include <lowlevellock.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
.text
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
index d7fada991..19ce7fe40 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
@@ -27,7 +27,6 @@
#include <bits/kernel-features.h>
#endif
-#define SYS_futex 240
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
#define FUTEX_CMP_REQUEUE 4
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
index dab1ae4ab..1e05a56c0 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
@@ -22,6 +22,7 @@
#include <lowlevellock.h>
#include <lowlevelrobustlock.h>
#include <bits/kernel-features.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
.text
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h
deleted file mode 100644
index acf1a617e..000000000
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../i386/not-cancel.h"
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
index 382512490..1242fc2cc 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
@@ -22,6 +22,7 @@
#include <bits/kernel-features.h>
#include <pthread-pi-defines.h>
#include <pthread-errnos.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
.text
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
index 914a1bad0..1c3bacbe6 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
@@ -21,6 +21,7 @@
#include <lowlevelcond.h>
#include <bits/kernel-features.h>
#include <pthread-errnos.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
.text
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
index caebb935a..a1477b3ac 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
@@ -20,6 +20,7 @@
#include <sysdep.h>
#include <bits/kernel-features.h>
#include <lowlevellock.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
index 239090b20..bc6c6c233 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
@@ -20,6 +20,7 @@
#include <lowlevellock.h>
#include <lowlevelrwlock.h>
#include <bits/kernel-features.h>
+#include <tcb-offsets.h>
#include "lowlevel-atomic.h"
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S
index 5433eacbe..a45c09fd6 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S
@@ -66,6 +66,6 @@ ENTRY (__vfork)
.word PID - TLS_PRE_TCB_SIZE
.align 2
PSEUDO_END (__vfork)
-libc_hidden_def (__vfork)
+hidden_def (vfork)
weak_alias (__vfork, vfork)