summaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2003-03-19 08:27:55 +0000
committerRoland McGrath <roland@gnu.org>2003-03-19 08:27:55 +0000
commit9465949559fde25c36ce7116e92c8f256b08ad53 (patch)
treeeeed3393ca2d8bb8a043f5ee8da405cbaa1b8cf3 /nptl
parent043ad426e7927a49a872e915c3cde88b682aea71 (diff)
downloadglibc-9465949559fde25c36ce7116e92c8f256b08ad53.tar.gz
* abilist: New directory of libfoo.abilist files maintained using
scripts/merge-abilist.awk and "make update-abi" rules. * Makefile (distribute): Add abilist/*.abilist. * Makerules [$(build-shared) = yes] [$(subdir)] (tests): Depend on check-abi.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog11
-rw-r--r--nptl/sysdeps/powerpc/tls.h6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h19
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h4
4 files changed, 23 insertions, 17 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 3c9693abd0..1cfa93e1c1 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,16 @@
2003-03-18 Roland McGrath <roland@redhat.com>
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h (__lll_test_and_set):
+ Add __lll_rel_instr first. Add memory clobber.
+ (lll_mutex_unlock): Use __lll_test_and_set.
+ From Paul Mackerras <paulus@samba.org>.
+
+ * sysdeps/powerpc/tls.h (TLS_MULTIPLE_THREADS_IN_TCB): Define
+ unconditionally.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+ (SINGLE_THREAD_P): Add `header.' prefix.
+ From Paul Mackerras <paulus@samba.org>.
+
* Versions (libpthread: GLIBC_2.3.2): Move pthread_tryjoin_np and
pthread_timedjoin_np to ...
(libpthread: GLIBC_2.3.3): ... here.
diff --git a/nptl/sysdeps/powerpc/tls.h b/nptl/sysdeps/powerpc/tls.h
index 04d76a6e6e..0ef5655b8d 100644
--- a/nptl/sysdeps/powerpc/tls.h
+++ b/nptl/sysdeps/powerpc/tls.h
@@ -54,10 +54,8 @@ typedef union dtv
/* The TP points to the start of the thread blocks. */
# define TLS_DTV_AT_TP 1
-/* For 32-bit, we use the multiple_threads field in the pthread struct */
-#ifndef __powerpc64__
-# define TLS_MULTIPLE_THREADS_IN_TCB 1
-#endif
+/* We use the multiple_threads field in the pthread struct */
+#define TLS_MULTIPLE_THREADS_IN_TCB 1
/* Get the thread descriptor definition. */
# include <nptl/descr.h>
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index 2b58d2e63a..4ffbf8deb7 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -102,12 +102,13 @@
/* Atomically store newval and return the old value. */
#define __lll_test_and_set(futex, newval) \
({ int __val; \
- __asm __volatile ("1: lwarx %0,0,%3\n" \
+ __asm __volatile (__lll_rel_instr "\n" \
+ "1: lwarx %0,0,%3\n" \
" stwcx. %2,0,%3\n" \
" bne- 1b" \
: "=&r" (__val), "=m" (*futex) \
: "r" (futex), "r" (newval), "1" (*futex) \
- : "cr0"); \
+ : "cr0", "memory"); \
__val; })
@@ -135,16 +136,12 @@ extern int __lll_timedlock_wait
})
#define lll_mutex_unlock(lock) \
- (void) ({ \
+ ((void) ({ \
int *__futex = &(lock); \
- __asm __volatile (__lll_rel_instr ::: "memory"); \
- int __val = __lll_add (__futex, -1); \
- if (__builtin_expect (__val != 1, 0)) \
- { \
- *__futex = 0; \
- lll_futex_wake (__futex, 1); \
- } \
- })
+ int __val = __lll_test_and_set (__futex, 0); \
+ if (__builtin_expect (__val > 1, 0)) \
+ lll_futex_wake (__futex, 1); \
+ }))
#define lll_mutex_islocked(futex) \
(futex != 0)
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
index 4a6cbf03da..7c9147e3cc 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
@@ -86,8 +86,8 @@
# ifndef __ASSEMBLER__
# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, multiple_threads) \
- == 0, 1)
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
# else
# define SINGLE_THREAD_P \
lwz 10,MULTIPLE_THREADS_OFFSET(13); \