aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2022-04-08 16:27:01 +0100
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2022-10-27 14:46:49 +0100
commitfa2eae72ccc562228e912d17cd2ac59e50a9bc1f (patch)
tree527d6c172a283eebdcfeccb6c12344e8b2d248b5
parent6b468c97cb5c04844a1787a2b229c122b291601b (diff)
downloadglibc-fa2eae72ccc562228e912d17cd2ac59e50a9bc1f.tar
glibc-fa2eae72ccc562228e912d17cd2ac59e50a9bc1f.tar.gz
glibc-fa2eae72ccc562228e912d17cd2ac59e50a9bc1f.tar.bz2
glibc-fa2eae72ccc562228e912d17cd2ac59e50a9bc1f.zip
aarch64: morello: configure change for purecap abi
Detect default-abi and add aarch64-purecap make variable. Purecap abi sets HIDDEN_VAR_NEEDS_DYNAMIC_RELOC and unsets SUPPORT_STATIC_PIE.
-rwxr-xr-x[-rw-r--r--]sysdeps/aarch64/configure52
-rw-r--r--sysdeps/aarch64/configure.ac28
2 files changed, 67 insertions, 13 deletions
diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
index bf972122b1..9b2264be19 100644..100755
--- a/sysdeps/aarch64/configure
+++ b/sysdeps/aarch64/configure
@@ -1,10 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/aarch64.
-# Static PIE is supported.
-$as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
-
-
# We check to see if the compiler and flags are
# selecting the big endian ABI and if they are then
# we set libc_cv_aarch64_be to yes which causes
@@ -167,15 +163,55 @@ rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5
$as_echo "$libc_cv_aarch64_be" >&6; }
+# Check for purecap ABI too, an alternative name is l64pc128.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for purecap ABI" >&5
+$as_echo_n "checking for purecap ABI... " >&6; }
+if ${libc_cv_aarch64_purecap+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __CHERI_PURE_CAPABILITY__
+ yes
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ libc_cv_aarch64_purecap=yes
+else
+ libc_cv_aarch64_purecap=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_purecap" >&5
+$as_echo "$libc_cv_aarch64_purecap" >&6; }
+config_vars="$config_vars
+aarch64-purecap = $libc_cv_aarch64_purecap"
+
+libc_aarch64_be=""
if test $libc_cv_aarch64_be = yes; then
$as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h
- config_vars="$config_vars
-default-abi = lp64_be"
+ libc_aarch64_be="_be"
+fi
+
+libc_aarch64_abi="lp64"
+if test $libc_cv_aarch64_purecap = yes; then
+ libc_aarch64_abi="purecap"
+ # The purecap abi requires relocations because objects may not be
+ # within bounds for PCC. This means static-pie is not supported.
+ $as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
+
else
- config_vars="$config_vars
-default-abi = lp64"
+ # Static PIE is supported. Hidden variables only need relocations
+ # in PIE with -mcmodel=large, but that's unsupported.
+ $as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
+
fi
+config_vars="$config_vars
+default-abi = $libc_aarch64_abi$libc_aarch64_be"
# Only consider BTI supported if -mbranch-protection=bti is
# on by default in the compiler and the linker produces
diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
index 51253d9802..aa6064c0e5 100644
--- a/sysdeps/aarch64/configure.ac
+++ b/sysdeps/aarch64/configure.ac
@@ -1,9 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/aarch64.
-# Static PIE is supported.
-AC_DEFINE(SUPPORT_STATIC_PIE)
-
# We check to see if the compiler and flags are
# selecting the big endian ABI and if they are then
# we set libc_cv_aarch64_be to yes which causes
@@ -17,12 +14,33 @@ AC_CACHE_CHECK([for big endian],
yes
#endif
], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)])
+# Check for purecap ABI too, an alternative name is l64pc128.
+AC_CACHE_CHECK([for purecap ABI],
+ [libc_cv_aarch64_purecap],
+ [AC_EGREP_CPP(yes,[#ifdef __CHERI_PURE_CAPABILITY__
+ yes
+ #endif
+ ], libc_cv_aarch64_purecap=yes, libc_cv_aarch64_purecap=no)])
+LIBC_CONFIG_VAR([aarch64-purecap], [$libc_cv_aarch64_purecap])
+
+libc_aarch64_be=""
if test $libc_cv_aarch64_be = yes; then
AC_DEFINE(HAVE_AARCH64_BE)
- LIBC_CONFIG_VAR([default-abi], [lp64_be])
+ libc_aarch64_be="_be"
+fi
+
+libc_aarch64_abi="lp64"
+if test $libc_cv_aarch64_purecap = yes; then
+ libc_aarch64_abi="purecap"
+ # The purecap abi requires relocations because objects may not be
+ # within bounds for PCC. This means static-pie is not supported.
+ AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
else
- LIBC_CONFIG_VAR([default-abi], [lp64])
+ # Static PIE is supported. Hidden variables only need relocations
+ # in PIE with -mcmodel=large, but that's unsupported.
+ AC_DEFINE(SUPPORT_STATIC_PIE)
fi
+LIBC_CONFIG_VAR([default-abi], [$libc_aarch64_abi$libc_aarch64_be])
# Only consider BTI supported if -mbranch-protection=bti is
# on by default in the compiler and the linker produces