1 # SPDX-License-Identifier: GPL-2.0 1 # SPDX-License-Identifier: GPL-2.0 2 # Copyright (C) 2020 ARM Limited 2 # Copyright (C) 2020 ARM Limited 3 3 4 # preserve CC value from top level Makefile 4 # preserve CC value from top level Makefile 5 ifeq ($(CC),cc) 5 ifeq ($(CC),cc) 6 CC := $(CROSS_COMPILE)gcc 6 CC := $(CROSS_COMPILE)gcc 7 endif 7 endif 8 8 9 CFLAGS += -mbranch-protection=pac-ret 9 CFLAGS += -mbranch-protection=pac-ret 10 # check if the compiler supports ARMv8.3 and b 10 # check if the compiler supports ARMv8.3 and branch protection with PAuth 11 pauth_cc_support := $(shell if ($(CC) $(CFLAGS 11 pauth_cc_support := $(shell if ($(CC) $(CFLAGS) -march=armv8.3-a -E -x c /dev/null -o /dev/null 2>&1) then echo "1"; fi) 12 12 13 ifeq ($(pauth_cc_support),1) 13 ifeq ($(pauth_cc_support),1) 14 TEST_GEN_PROGS := pac 14 TEST_GEN_PROGS := pac 15 TEST_GEN_FILES := pac_corruptor.o helper.o 15 TEST_GEN_FILES := pac_corruptor.o helper.o 16 TEST_GEN_PROGS_EXTENDED := exec_target 16 TEST_GEN_PROGS_EXTENDED := exec_target 17 endif 17 endif 18 18 19 include ../../lib.mk 19 include ../../lib.mk 20 20 21 ifeq ($(pauth_cc_support),1) 21 ifeq ($(pauth_cc_support),1) 22 # pac* and aut* instructions are not available 22 # pac* and aut* instructions are not available on architectures berfore 23 # ARMv8.3. Therefore target ARMv8.3 wherever t 23 # ARMv8.3. Therefore target ARMv8.3 wherever they are used directly 24 $(OUTPUT)/pac_corruptor.o: pac_corruptor.S 24 $(OUTPUT)/pac_corruptor.o: pac_corruptor.S 25 $(CC) -c $^ -o $@ $(CFLAGS) -march=arm 25 $(CC) -c $^ -o $@ $(CFLAGS) -march=armv8.3-a 26 26 27 $(OUTPUT)/helper.o: helper.c 27 $(OUTPUT)/helper.o: helper.c 28 $(CC) -c $^ -o $@ $(CFLAGS) -march=arm 28 $(CC) -c $^ -o $@ $(CFLAGS) -march=armv8.3-a 29 29 30 # when -mbranch-protection is enabled and the 30 # when -mbranch-protection is enabled and the target architecture is ARMv8.3 or 31 # greater, gcc emits pac* instructions which a 31 # greater, gcc emits pac* instructions which are not in HINT NOP space, 32 # preventing the tests from occurring at all. 32 # preventing the tests from occurring at all. Compile for ARMv8.2 so tests can 33 # run on earlier targets and print a meaningfu 33 # run on earlier targets and print a meaningful error messages 34 $(OUTPUT)/exec_target: exec_target.c $(OUTPUT) 34 $(OUTPUT)/exec_target: exec_target.c $(OUTPUT)/helper.o 35 $(CC) $^ -o $@ $(CFLAGS) -march=armv8. 35 $(CC) $^ -o $@ $(CFLAGS) -march=armv8.2-a 36 36 37 $(OUTPUT)/pac: pac.c $(OUTPUT)/pac_corruptor.o 37 $(OUTPUT)/pac: pac.c $(OUTPUT)/pac_corruptor.o $(OUTPUT)/helper.o 38 $(CC) $^ -o $@ $(CFLAGS) -march=armv8. 38 $(CC) $^ -o $@ $(CFLAGS) -march=armv8.2-a 39 endif 39 endif
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.