https://gcc.gnu.org/g:a235c45354de9a89ba2f6f12d3aac42efc18f311

commit r15-7251-ga235c45354de9a89ba2f6f12d3aac42efc18f311
Author: Richard Earnshaw <rearn...@arm.com>
Date:   Mon Jan 27 13:52:05 2025 +0000

    arm: libbacktrace: Check if the compiler supports __sync atomics
    
    Older versions of the Arm architecture lack support for __sync
    operations directly in hardware and require calls into appropriate
    operating-system hooks.  But such hooks obviously don't exist in a
    freestanding environment.
    
    Consquently, it is incorrect to assume during configure that such
    functions will exist and we need a configure-time check to determine
    whether or not these routines will work.
    
    libbacktrace:
    
            * configure.ac: Always check if the compiler supports __sync
            operations.
            * configure: Regenerated.

Diff:
---
 libbacktrace/configure    | 23 +++++++++++++++++++++++
 libbacktrace/configure.ac | 10 ++++++++++
 2 files changed, 33 insertions(+)

diff --git a/libbacktrace/configure b/libbacktrace/configure
index db491a782349..0ecdd3ec0a3d 100755
--- a/libbacktrace/configure
+++ b/libbacktrace/configure
@@ -12760,6 +12760,29 @@ else
   if test -n "${with_target_subdir}"; then
    case "${host}" in
    hppa*-*-hpux*) libbacktrace_cv_sys_sync=no ;;
+   arm*-*-eabi*)
+     # Older versions of the Arm architecture lack the necessary instructions
+     # for these constructs, so check whether we can use them.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int i;
+int
+main ()
+{
+__sync_bool_compare_and_swap (&i, i, i);
+                         __sync_lock_test_and_set (&i, 1);
+                         __sync_lock_release (&i);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  libbacktrace_cv_sys_sync=yes
+else
+  libbacktrace_cv_sys_sync=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext;;
    *) libbacktrace_cv_sys_sync=yes ;;
    esac
  else
diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac
index b700bf9d4f94..75b3a7536f1e 100644
--- a/libbacktrace/configure.ac
+++ b/libbacktrace/configure.ac
@@ -199,6 +199,16 @@ AC_CACHE_CHECK([__sync extensions],
 [if test -n "${with_target_subdir}"; then
    case "${host}" in
    hppa*-*-hpux*) libbacktrace_cv_sys_sync=no ;;
+   arm*-*-eabi*)
+     # Older versions of the Arm architecture lack the necessary instructions
+     # for these constructs, so check whether we can use them.
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([int i;],
+                        [__sync_bool_compare_and_swap (&i, i, i);
+                         __sync_lock_test_and_set (&i, 1);
+                         __sync_lock_release (&i);])],
+       [libbacktrace_cv_sys_sync=yes],
+       [libbacktrace_cv_sys_sync=no]);;
    *) libbacktrace_cv_sys_sync=yes ;;
    esac
  else

Reply via email to