mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
aarch64: configure test for BTI support
Check BTI support in the compiler and linker. The check also requires READELF that understands the BTI GNU property note. It is expected to succeed with gcc >=gcc-9 configured with --enable-standard-branch-protection and binutils >=binutils-2.33. Note: passing -mbranch-protection=bti in CFLAGS when building glibc may not be enough to get a glibc that supports BTI because crtbegin* and crtend* provided by the compiler needs to be BTI compatible too. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
dbfefbdc3a
commit
1b0a4f58f5
@ -109,6 +109,9 @@
|
||||
/* AArch64 big endian ABI */
|
||||
#undef HAVE_AARCH64_BE
|
||||
|
||||
/* AArch64 BTI support enabled. */
|
||||
#define HAVE_AARCH64_BTI 0
|
||||
|
||||
/* C-SKY ABI version. */
|
||||
#undef CSKYABI
|
||||
|
||||
|
42
sysdeps/aarch64/configure
vendored
42
sysdeps/aarch64/configure
vendored
@ -172,3 +172,45 @@ else
|
||||
config_vars="$config_vars
|
||||
default-abi = lp64"
|
||||
fi
|
||||
|
||||
# Only consider BTI supported if -mbranch-protection=bti is
|
||||
# on by default in the compiler and the linker produces
|
||||
# binaries with GNU property notes in PT_GNU_PROPERTY segment.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BTI support" >&5
|
||||
$as_echo_n "checking for BTI support... " >&6; }
|
||||
if ${libc_cv_aarch64_bti+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
void foo (void) { }
|
||||
EOF
|
||||
libc_cv_aarch64_bti=no
|
||||
if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles $no_ssp -shared -fPIC -o conftest.so conftest.c'
|
||||
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; } \
|
||||
&& { ac_try='$READELF -lW conftest.so | grep -q GNU_PROPERTY'
|
||||
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; } \
|
||||
&& { ac_try='$READELF -nW conftest.so | grep -q "NT_GNU_PROPERTY_TYPE_0.*AArch64 feature:.* BTI"'
|
||||
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; }
|
||||
then
|
||||
libc_cv_aarch64_bti=yes
|
||||
fi
|
||||
rm -rf conftest.*
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_bti" >&5
|
||||
$as_echo "$libc_cv_aarch64_bti" >&6; }
|
||||
if test $libc_cv_aarch64_bti = yes; then
|
||||
$as_echo "#define HAVE_AARCH64_BTI 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
@ -20,3 +20,22 @@ if test $libc_cv_aarch64_be = yes; then
|
||||
else
|
||||
LIBC_CONFIG_VAR([default-abi], [lp64])
|
||||
fi
|
||||
|
||||
# Only consider BTI supported if -mbranch-protection=bti is
|
||||
# on by default in the compiler and the linker produces
|
||||
# binaries with GNU property notes in PT_GNU_PROPERTY segment.
|
||||
AC_CACHE_CHECK([for BTI support], [libc_cv_aarch64_bti], [dnl
|
||||
cat > conftest.c <<EOF
|
||||
void foo (void) { }
|
||||
EOF
|
||||
libc_cv_aarch64_bti=no
|
||||
if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles $no_ssp -shared -fPIC -o conftest.so conftest.c]) \
|
||||
&& AC_TRY_COMMAND([$READELF -lW conftest.so | grep -q GNU_PROPERTY]) \
|
||||
&& AC_TRY_COMMAND([$READELF -nW conftest.so | grep -q "NT_GNU_PROPERTY_TYPE_0.*AArch64 feature:.* BTI"])
|
||||
then
|
||||
libc_cv_aarch64_bti=yes
|
||||
fi
|
||||
rm -rf conftest.*])
|
||||
if test $libc_cv_aarch64_bti = yes; then
|
||||
AC_DEFINE(HAVE_AARCH64_BTI)
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user