about summary refs log tree commit diff
path: root/sysdeps/sparc/sparc32/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/sparc/sparc32/configure.ac')
-rw-r--r--sysdeps/sparc/sparc32/configure.ac24
1 files changed, 24 insertions, 0 deletions
diff --git a/sysdeps/sparc/sparc32/configure.ac b/sysdeps/sparc/sparc32/configure.ac
index 2e336f5c16..462a423a2e 100644
--- a/sysdeps/sparc/sparc32/configure.ac
+++ b/sysdeps/sparc/sparc32/configure.ac
@@ -11,3 +11,27 @@ AC_CACHE_CHECK([for at least sparcv8 support],
 if test $libc_cv_sparcv8 = no; then
   AC_MSG_ERROR([no support for pre-v8 sparc])
 fi
+
+# Test if compiler generates external calls to libatomic for CAS operation.
+# It is suffice to check for int only and the test is similar of C11
+# atomic_compare_exchange_strong using GCC builtins.
+AC_CACHE_CHECK(for external libatomic calls,
+	       libc_cv_cas_uses_libatomic,
+	       [cat > conftest.c <<EOF
+	       _Bool foo (int *ptr, int *expected, int desired)
+	       {
+		 return __atomic_compare_exchange_n (ptr, expected, desired, 0,
+						     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
+	       }
+EOF
+	       libc_cv_cas_uses_libatomic=no
+	       if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
+		 if grep '__atomic_compare_exchange_4' conftest.s >/dev/null; then
+		   libc_cv_cas_uses_libatomic=yes
+		 fi
+	       fi
+	       rm -f conftest.c conftest.s
+	       ])
+if test $libc_cv_cas_uses_libatomic = yes; then
+  AC_MSG_ERROR([external dependency of libatomic is not supported])
+fi