mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 06:20:06 +00:00
aarch64: ensure objects are BTI compatible
When glibc is built with branch protection (i.e. with a gcc configured with --enable-standard-branch-protection), all glibc binaries should be BTI compatible and marked as such. It is easy to link BTI incompatible objects by accident and this is silent currently which is usually not the expectation, so this is changed into a link error. (There is no linker flag for failing on BTI incompatible inputs so all warnings are turned into fatal errors outside the test system when building glibc with branch protection.) Unfortunately, outlined atomic functions are not BTI compatible in libgcc (PR libgcc/96001), so to build glibc with current gcc use 'CC=gcc -mno-outline-atomics', this should be fixed in libgcc soon and then glibc can be built and tested without such workarounds. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
605338745b
commit
de9301c02e
@ -1,5 +1,13 @@
|
|||||||
long-double-fcts = yes
|
long-double-fcts = yes
|
||||||
|
|
||||||
|
ifeq (yes,$(aarch64-bti))
|
||||||
|
# Mark linker output BTI compatible, it warns on non-BTI inputs.
|
||||||
|
sysdep-LDFLAGS += -Wl,-z,force-bti
|
||||||
|
# Make warnings fatal outside the test system.
|
||||||
|
LDFLAGS-lib.so += -Wl,--fatal-warnings
|
||||||
|
LDFLAGS-rtld += -Wl,-z,force-bti,--fatal-warnings
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(subdir),elf)
|
ifeq ($(subdir),elf)
|
||||||
sysdep-dl-routines += dl-bti
|
sysdep-dl-routines += dl-bti
|
||||||
endif
|
endif
|
||||||
|
2
sysdeps/aarch64/configure
vendored
2
sysdeps/aarch64/configure
vendored
@ -210,6 +210,8 @@ EOF
|
|||||||
fi
|
fi
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_bti" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_bti" >&5
|
||||||
$as_echo "$libc_cv_aarch64_bti" >&6; }
|
$as_echo "$libc_cv_aarch64_bti" >&6; }
|
||||||
|
config_vars="$config_vars
|
||||||
|
aarch64-bti = $libc_cv_aarch64_bti"
|
||||||
if test $libc_cv_aarch64_bti = yes; then
|
if test $libc_cv_aarch64_bti = yes; then
|
||||||
$as_echo "#define HAVE_AARCH64_BTI 1" >>confdefs.h
|
$as_echo "#define HAVE_AARCH64_BTI 1" >>confdefs.h
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ EOF
|
|||||||
libc_cv_aarch64_bti=yes
|
libc_cv_aarch64_bti=yes
|
||||||
fi
|
fi
|
||||||
rm -rf conftest.*])
|
rm -rf conftest.*])
|
||||||
|
LIBC_CONFIG_VAR([aarch64-bti], [$libc_cv_aarch64_bti])
|
||||||
if test $libc_cv_aarch64_bti = yes; then
|
if test $libc_cv_aarch64_bti = yes; then
|
||||||
AC_DEFINE(HAVE_AARCH64_BTI)
|
AC_DEFINE(HAVE_AARCH64_BTI)
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user