diff options
author | Khem Raj <raj.khem@gmail.com> | 2010-02-17 23:42:28 -0800 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2010-02-17 23:42:28 -0800 |
commit | ed0915ba70d0ff6ed0a78f45d46822763a580737 (patch) | |
tree | c0495c812a983ac354a3c304335d89a4c653b1bc | |
parent | f14c584876271f474025fc06b3dc66ce798bcacb (diff) |
Get new nptl building on SH4
Signed-off-by: Khem Raj <raj.khem@gmail.com>
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) |