Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kselftest/arm64: bti: force static linking

The "bti" selftests are built with -nostdlib, which apparently
automatically creates a statically linked binary, which is what we want
and need for BTI (to avoid interactions with the dynamic linker).

However this is not true when building a PIE binary, which some
toolchains (Ubuntu) configure as the default.
When compiling btitest with such a toolchain, it will create a
dynamically linked binary, which will probably fail some tests, as the
dynamic linker might not support BTI:
===================
TAP version 13
1..18
not ok 1 nohint_func/call_using_br_x0
not ok 2 nohint_func/call_using_br_x16
not ok 3 nohint_func/call_using_blr
....
===================

To make sure we create static binaries, add an explicit -static on the
linker command line. This forces static linking even if the toolchain
defaults to PIE builds, and fixes btitest runs on BTI enabled machines.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Mark Brown <broonie@kernel.org>
Fixes: 314bcbf09f14 ("kselftest: arm64: Add BTI tests")
Link: https://lore.kernel.org/r/20220511172129.2078337-1-andre.przywara@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>

authored by

Andre Przywara and committed by
Catalin Marinas
d7a49291 0639e022

+2 -2
+2 -2
tools/testing/selftests/arm64/bti/Makefile
··· 39 39 teststubs-bti.o \ 40 40 trampoline-bti.o 41 41 gen/btitest: $(BTI_OBJS) 42 - $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -o $@ $^ 42 + $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^ 43 43 44 44 NOBTI_OBJS = \ 45 45 test-nobti.o \ ··· 50 50 teststubs-nobti.o \ 51 51 trampoline-nobti.o 52 52 gen/nobtitest: $(NOBTI_OBJS) 53 - $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -o $@ $^ 53 + $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^ 54 54 55 55 # Including KSFT lib.mk here will also mangle the TEST_GEN_PROGS list 56 56 # to account for any OUTPUT target-dirs optionally provided by