From: Szabolcs Nagy Date: Fri, 8 Apr 2022 15:27:01 +0000 (+0100) Subject: aarch64: morello: configure change for purecap abi X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18fb0250708bff99abb0ca3b0fefdb7b563e8dbb;p=thirdparty%2Fglibc.git 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. --- diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure old mode 100644 new mode 100755 index bf972122b19..9b2264be19f --- 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 51253d98025..aa6064c0e58 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