aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-21 08:13:51 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-21 08:13:51 +0000
commit9f07eae2988388ffd0c652a4ec6d740df5795cab (patch)
treed9b1014adb210e32b9f92170b59fe7dffdf8efb6
parent5a3ab2fc180056cb14eaeae0f571421be81e371b (diff)
downloadglibc-9f07eae2988388ffd0c652a4ec6d740df5795cab.tar
glibc-9f07eae2988388ffd0c652a4ec6d740df5795cab.tar.gz
glibc-9f07eae2988388ffd0c652a4ec6d740df5795cab.tar.bz2
glibc-9f07eae2988388ffd0c652a4ec6d740df5795cab.zip
Update.
2003-03-20 Ulrich Drepper <drepper@redhat.com> * include/atomic.h: Define atomic_compare_and_exchange_val_acq, atomic_compare_and_exchange_val_rel, atomic_compare_and_exchange_bool_acq, and atomic_compare_and_exchange_bool_rel instead of atomic_compare_and_exchange_acq and atomic_compare_and_exchange_rel. * sysdeps/i386/i486/bits/atomic.h: Define __arch_compare_and_exchange_val_*_acq instead of __arch_compare_and_exchange_*_acq. * sysdeps/x86_64/bits/atomic.h: Likewise. * sysdeps/ia64/bits/atomic.h: Define __arch_compare_and_exchange_bool_*_acq instead of __arch_compare_and_exchange_*_acq. * sysdeps/powerpc/bits/atomic.h: Likewise. * sysdeps/s390/bits/atomic.h: Likewise. * gmon/mcount.c: Adjust for new form of compare&exchange macros. * malloc/set-freeres.c: Likewise. * nscd/cache.c: Likewise. * stdlib/cxa_finalize.c: Likewise. * sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
-rw-r--r--ChangeLog22
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c3
4 files changed, 32 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4e291fba72..c8d77623b5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2003-03-20 Ulrich Drepper <drepper@redhat.com>
+
+ * include/atomic.h: Define atomic_compare_and_exchange_val_acq,
+ atomic_compare_and_exchange_val_rel,
+ atomic_compare_and_exchange_bool_acq, and
+ atomic_compare_and_exchange_bool_rel instead of
+ atomic_compare_and_exchange_acq and atomic_compare_and_exchange_rel.
+ * sysdeps/i386/i486/bits/atomic.h: Define
+ __arch_compare_and_exchange_val_*_acq instead of
+ __arch_compare_and_exchange_*_acq.
+ * sysdeps/x86_64/bits/atomic.h: Likewise.
+ * sysdeps/ia64/bits/atomic.h: Define
+ __arch_compare_and_exchange_bool_*_acq instead of
+ __arch_compare_and_exchange_*_acq.
+ * sysdeps/powerpc/bits/atomic.h: Likewise.
+ * sysdeps/s390/bits/atomic.h: Likewise.
+ * gmon/mcount.c: Adjust for new form of compare&exchange macros.
+ * malloc/set-freeres.c: Likewise.
+ * nscd/cache.c: Likewise.
+ * stdlib/cxa_finalize.c: Likewise.
+ * sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
+
2003-03-20 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/mips/bits/setjmp.h: n32 has only 6 call-saved fpregs.
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 3029aaf6f9..111e6493d5 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,12 @@
2003-03-21 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/ia64/lowlevellock.h
+ (__lll_mutex_trylock): Use atomic_compare_and_exchange_val_acq
+ instead of __lll_compare_and_swap.
+ * sysdeps/unix/sysv/linux/ia64/pthread_once.c (__pthread_once):
+ Likewise.
+ Removed definition if __lll_compare_and_swap.
+
* cancellation.c: Adjust for new form of compare&exchange macros.
* cleanup_defer.c: Likewise.
* init.c: Likewise.
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
index 6f999221c5..8fa96ed6a2 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
@@ -87,14 +87,11 @@
__r10 == -1 ? -__r8 : __r8; \
})
-#define __lll_compare_and_swap(futex, oldval, newval) \
- __sync_val_compare_and_swap_si ((futex), (oldval), (newval))
-
static inline int
__attribute__ ((always_inline))
__lll_mutex_trylock (int *futex)
{
- return __lll_compare_and_swap (futex, 0, 1) != 0;
+ return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0;
}
#define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex))
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
index c9e6be16b8..16f1279f8d 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
@@ -52,7 +52,8 @@ __pthread_once (once_control, init_routine)
oldval = val;
newval = (oldval & 3) | __fork_generation | 1;
- val = __lll_compare_and_swap (once_control, oldval, newval);
+ val = atomic_compare_and_exchange_val_acq (once_control, newval,
+ oldval);
}
while (__builtin_expect (val != oldval, 0));