]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgcc: aarch64: Configure check for __getauxval
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Mon, 4 Dec 2023 10:52:52 +0000 (10:52 +0000)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Fri, 8 Dec 2023 11:29:06 +0000 (11:29 +0000)
Add configure check for the __getauxval ABI symbol, which is always
available on aarch64 glibc, and may be available on other linux C
runtimes. For now only enabled on glibc, others have to override it

  target_configargs=libgcc_cv_have___getauxval=yes

This is deliberately obscure as it should be auto detected, ideally
via a feature test macro in unistd.h (link time detection is not
possible since the libc may not be installed at libgcc build time),
but currently there is no such feature test mechanism.

Without __getauxval, libgcc cannot do runtime CPU feature detection
and has to assume only the build time known features are available.

libgcc/ChangeLog:

* config.in: Undef HAVE___GETAUXVAL.
* configure: Regenerate.
* configure.ac: Check for __getauxval.

libgcc/config.in
libgcc/configure
libgcc/configure.ac

index 5dd96cdf648ccc6f563fe33d5fca3a90d665f99d..441d4d39b95b0ef645622c10ac23f5f10aecd509 100644 (file)
@@ -16,6 +16,9 @@
 /* Define to 1 if the assembler supports .variant_pcs. */
 #undef HAVE_AS_VARIANT_PCS
 
+/* Define to 1 if __getauxval is available. */
+#undef HAVE___GETAUXVAL
+
 /* Define to 1 if the target assembler supports thread-local storage. */
 #undef HAVE_CC_TLS
 
index 82c8558a13dcfd14fd7cbc84dc7ffff330435ab6..3671d9b1a1aacfabd1bf784a8afb6d5dda81f0a8 100755 (executable)
@@ -5658,6 +5658,32 @@ $as_echo "#define HAVE_AS_VARIANT_PCS 1" >>confdefs.h
   ;;
 esac
 
+# Check __getauxval ABI symbol for CPU feature detection.
+case ${target} in
+aarch64*-linux-*)
+  # No link check because the libc may not be present.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __getauxval" >&5
+$as_echo_n "checking for __getauxval... " >&6; }
+if ${libgcc_cv_have___getauxval+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case ${target} in
+                 *-linux-gnu*)
+                   libgcc_cv_have___getauxval=yes
+                   ;;
+                 *)
+                   libgcc_cv_have___getauxval=no
+                 esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_have___getauxval" >&5
+$as_echo "$libgcc_cv_have___getauxval" >&6; }
+  if test x$libgcc_cv_have___getauxval = xyes; then
+
+$as_echo "#define HAVE___GETAUXVAL 1" >>confdefs.h
+
+  fi
+esac
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for init priority support" >&5
 $as_echo_n "checking for init priority support... " >&6; }
 if ${libgcc_cv_init_priority+:} false; then :
index fd0934c9ad0d7463108dad8b9aed9203e83e857f..467f5e63ef26ade4cafe423517cdddbd0eb489fa 100644 (file)
@@ -665,6 +665,25 @@ aarch64*-*-*)
 esac])
 LIBGCC_CHECK_AS_VARIANT_PCS
 
+# Check __getauxval ABI symbol for CPU feature detection.
+case ${target} in
+aarch64*-linux-*)
+  # No link check because the libc may not be present.
+  AC_CACHE_CHECK([for __getauxval],
+                [libgcc_cv_have___getauxval],
+                [case ${target} in
+                 *-linux-gnu*)
+                   libgcc_cv_have___getauxval=yes
+                   ;;
+                 *)
+                   libgcc_cv_have___getauxval=no
+                 esac])
+  if test x$libgcc_cv_have___getauxval = xyes; then
+    AC_DEFINE(HAVE___GETAUXVAL, 1,
+             [Define to 1 if __getauxval is available.])
+  fi
+esac
+
 dnl Check if as supports RTM instructions.
 AC_CACHE_CHECK(for init priority support, libgcc_cv_init_priority, [
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,