From 676177182056adb6424757ae8fd4d099d394795b Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Wed, 24 May 2023 10:17:30 +0200
Subject: [PATCH] asyncsafe-spin, simple-atomic: Don't use -mcpu-v9 on
 NetBSD/sparc.

Reported by Brandon Applegate in
<https://lists.gnu.org/archive/html/bug-gettext/2023-05/msg00042.html>.

* lib/asyncsafe-spin.c: Limit the SPARC workaround to Solaris.
* lib/simple-atomic.c: Likewise.
* m4/sparcv8+.m4 (gl_SPARC_V8PLUS): Likewise.
---
 ChangeLog            | 9 +++++++++
 lib/asyncsafe-spin.c | 6 +++---
 lib/simple-atomic.c  | 6 +++---
 m4/sparcv8+.m4       | 6 +++---
 4 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d4f6d173ac..01944021be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2023-05-24  Bruno Haible  <bruno@clisp.org>
+
+	asyncsafe-spin, simple-atomic: Don't use -mcpu-v9 on NetBSD/sparc.
+	Reported by Brandon Applegate in
+	<https://lists.gnu.org/archive/html/bug-gettext/2023-05/msg00042.html>.
+	* lib/asyncsafe-spin.c: Limit the SPARC workaround to Solaris.
+	* lib/simple-atomic.c: Likewise.
+	* m4/sparcv8+.m4 (gl_SPARC_V8PLUS): Likewise.
+
 2023-05-23  Paul Eggert  <eggert@cs.ucla.edu>
 
 	nstrftime: wmemmove → __wmemmove in glibc part
diff --git a/lib/asyncsafe-spin.c b/lib/asyncsafe-spin.c
index 9964473828..c4e7d711a1 100644
--- a/lib/asyncsafe-spin.c
+++ b/lib/asyncsafe-spin.c
@@ -134,11 +134,11 @@ do_unlock (asyncsafe_spinlock_t *lock)
 #   endif
 
 #  elif (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
-          && !defined __sparc__ && !defined __ANDROID__) \
+          && !(defined __sun && defined __sparc__) && !defined __ANDROID__) \
          || __clang_major__ >= 3) \
         && !defined __ibmxl__
-/* Use GCC built-ins (available in GCC >= 4.1, except on SPARC, and
-   clang >= 3.0).
+/* Use GCC built-ins (available in GCC >= 4.1, except on Solaris/SPARC and
+   Android, and clang >= 3.0).
    Documentation:
    <https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html>  */
 
diff --git a/lib/simple-atomic.c b/lib/simple-atomic.c
index eab87a3ec2..1f43bd771c 100644
--- a/lib/simple-atomic.c
+++ b/lib/simple-atomic.c
@@ -67,11 +67,11 @@ atomic_compare_and_swap_ptr (uintptr_t volatile *vp,
    require to link with -latomic.  */
 
 # if (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
-       && !defined __sparc__ && !defined __ANDROID__) \
+       && !(defined __sun && defined __sparc__) && !defined __ANDROID__) \
       || __clang_major__ >= 3) \
      && !defined __ibmxl__
-/* Use GCC built-ins (available in GCC >= 4.1, except on SPARC, and
-   clang >= 3.0).
+/* Use GCC built-ins (available in GCC >= 4.1, except on Solaris/SPARC and
+   Android, and clang >= 3.0).
    Documentation:
    <https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html>  */
 
diff --git a/m4/sparcv8+.m4 b/m4/sparcv8+.m4
index 584c39d3ba..efe5bcdf86 100644
--- a/m4/sparcv8+.m4
+++ b/m4/sparcv8+.m4
@@ -1,4 +1,4 @@
-# sparcv8+.m4 serial 1
+# sparcv8+.m4 serial 2
 dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -18,8 +18,8 @@ AC_DEFUN([gl_SPARC_V8PLUS],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])
 
-  case "$host_cpu" in
-    sparc*)
+  case "$host" in
+    sparc*-*-solaris*)
       if test -n "$GCC"; then
         AC_CACHE_CHECK([whether SPARC v8+ instructions are supported],
           [gl_cv_sparc_v8plus],
-- 
2.39.5