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.
This commit is contained in:
Richard Earnshaw
2025-01-27 13:52:05 +00:00
committed by Ian Lance Taylor
parent 1db85642e3
commit 5da31b9952
2 changed files with 33 additions and 0 deletions

23
configure vendored
View File

@@ -12209,6 +12209,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

View File

@@ -189,6 +189,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