1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
From 66d4035958e1dee2d16f9290004921674eb492b3 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Mon, 4 Dec 2023 10:52:52 +0000
Subject: [PATCH 118/157] [Backport][SME] libgcc: aarch64: Configure check for
__getauxval
Reference: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=dbbfb52b0e9c66ee9d05b8fd17c4f44655e48463
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 | 3 +++
libgcc/configure | 26 ++++++++++++++++++++++++++
libgcc/configure.ac | 19 +++++++++++++++++++
3 files changed, 48 insertions(+)
diff --git a/libgcc/config.in b/libgcc/config.in
index 5dd96cdf6..441d4d39b 100644
--- a/libgcc/config.in
+++ b/libgcc/config.in
@@ -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
diff --git a/libgcc/configure b/libgcc/configure
index afe02b303..a874ef57e 100755
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -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 :
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index abc398c91..64b45ae14 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -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(,
--
2.33.0
|