aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h20
-rw-r--r--sysdeps/generic/dl-fptr.c6
4 files changed, 18 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 03647d797b..b58b6fa481 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-12-11 Carlos O'Donell <carlos@baldric.uwo.ca>
+
+ * sysdeps/generic/dl-fptr.c (COMPARE_AND_SWAP): Pass new and old
+ in the right order.
+
2003-12-01 Jes Sorensen <jes@wildopensource.com>
* rt/tst-clock.c (do_test): Print message when skipping
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 296c56f108..ac281b8d35 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+2003-12-04 Steven Munroe <sjmunroe@us.ibm.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+ (SINGLE_THREAD_P): Test using thread local p_multiple_threads field.
+
2003-12-10 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/pt-initfini.c: Update copyright
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
index 17fde9da2c..387229a466 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+++ b/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
@@ -89,22 +89,12 @@
# endif
# ifndef __ASSEMBLER__
-extern int __local_multiple_threads
-# if !defined NOT_IN_libc || defined IS_IN_libpthread
- attribute_hidden;
-# else
- ;
-# endif
-# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, p_multiple_threads) == 0, 1)
# else
-# define SINGLE_THREAD_P \
- .section ".toc","aw"; \
-.LC__local_multiple_threads:; \
- .tc __local_multiple_threads[TC],__local_multiple_threads; \
- .previous; \
- ld 10,.LC__local_multiple_threads@toc(2); \
- ld 10,0(10); \
- cmpdi 10,0
+# define SINGLE_THREAD_P \
+ lwz 10,MULTIPLE_THREADS_OFFSET(13); \
+ cmpwi 10,0
# endif
#elif !defined __ASSEMBLER__
diff --git a/sysdeps/generic/dl-fptr.c b/sysdeps/generic/dl-fptr.c
index 32cf28c0ef..1ed463717d 100644
--- a/sysdeps/generic/dl-fptr.c
+++ b/sysdeps/generic/dl-fptr.c
@@ -31,7 +31,7 @@
#ifndef ELF_MACHINE_BOOT_FPTR_TABLE_LEN
/* ELF_MACHINE_BOOT_FPTR_TABLE_LEN should be greater than the number of
dynamic symbols in ld.so. */
-#define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 256
+# define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 256
#endif
#ifndef ELF_MACHINE_LOAD_ADDRESS
@@ -39,8 +39,8 @@
#endif
#ifndef COMPARE_AND_SWAP
-#define COMPARE_AND_SWAP(ptr,old,new) \
- atomic_compare_and_exchange_bool_acq ((ptr), (old), (new))
+# define COMPARE_AND_SWAP(ptr, old, new) \
+ (atomic_compare_and_exchange_bool_acq (ptr, new, old) == 0)
#endif
ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN];