diff options
author | Roland McGrath <roland@gnu.org> | 2003-03-19 08:27:55 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2003-03-19 08:27:55 +0000 |
commit | 9465949559fde25c36ce7116e92c8f256b08ad53 (patch) | |
tree | eeed3393ca2d8bb8a043f5ee8da405cbaa1b8cf3 /nptl | |
parent | 043ad426e7927a49a872e915c3cde88b682aea71 (diff) | |
download | glibc-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/ChangeLog | 11 | ||||
-rw-r--r-- | nptl/sysdeps/powerpc/tls.h | 6 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h | 19 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 4 |
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); \ |