about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-01-28 18:40:35 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-01-28 18:40:35 +0000
commitdf34134284b46cdd8ffd39551b858652d465ca08 (patch)
tree91e7bd10f7499210ccc911381ed82558b4e2dfe8
parentd4d0ecb24474928b9dfcce6c3f09694fab2400b6 (diff)
downloadglibc-df34134284b46cdd8ffd39551b858652d465ca08.tar.gz
glibc-df34134284b46cdd8ffd39551b858652d465ca08.tar.xz
glibc-df34134284b46cdd8ffd39551b858652d465ca08.zip
Disable 64-bit atomics for MIPS n32.
This patch disables use of 64-bit atomics for MIPS n32 to fix the
problems with unaligned semaphores.

Before 64-bit atomics are used for anything for which such alignment
issues do not arise, and before the addition of any new ILP32 ports
with 64-bit semaphores for which the ABI can be set to have the
greater alignment (AARCH64?), a better approach will need to be
established that allows architectures to declare their 64-bit atomics
availability accurately, without doing so causing inappropriate use of
such atomics on unaligned semaphores.

Tested for MIPS n32 that this fixes the nptl/tst-sem3 failure.

	* sysdeps/mips/bits/atomic.h [_MIPS_SIM == _ABIN32]
	(__HAVE_64B_ATOMICS): Define to 0.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/mips/bits/atomic.h2
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 52f8c11867..1a7d519039 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-28  Joseph Myers  <joseph@codesourcery.com>
+
+	* sysdeps/mips/bits/atomic.h [_MIPS_SIM == _ABIN32]
+	(__HAVE_64B_ATOMICS): Define to 0.
+
 2015-01-28  Adhemerval Zanellla  <azanella@linux.vnet.ibm.com>
 
 	[BZ #17885]
diff --git a/sysdeps/mips/bits/atomic.h b/sysdeps/mips/bits/atomic.h
index ddcb0391a6..a39188160b 100644
--- a/sysdeps/mips/bits/atomic.h
+++ b/sysdeps/mips/bits/atomic.h
@@ -44,7 +44,7 @@ typedef uintmax_t uatomic_max_t;
 #define MIPS_PUSH_MIPS2
 #endif
 
-#if _MIPS_SIM == _ABIO32
+#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32
 #define __HAVE_64B_ATOMICS 0
 #else
 #define __HAVE_64B_ATOMICS 1