diff options
author | Manish V Badarkhe <Manish.Badarkhe@arm.com> | 2020-03-22 05:06:38 +0000 |
---|---|---|
committer | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2020-04-01 16:40:16 +0200 |
commit | 7ff088d1f0d17e6afed236f979ffc5adf005d8b0 (patch) | |
tree | 1eae524386fd25a77c974672778da2cf5094bdfc | |
parent | 0a43db84af8cafaf35155d0e96e679b79a775272 (diff) | |
download | platform_external_arm-trusted-firmware-7ff088d1f0d17e6afed236f979ffc5adf005d8b0.tar.gz platform_external_arm-trusted-firmware-7ff088d1f0d17e6afed236f979ffc5adf005d8b0.tar.bz2 platform_external_arm-trusted-firmware-7ff088d1f0d17e6afed236f979ffc5adf005d8b0.zip |
Enable MTE support
Enable MTE support by adding memory tag option in Makefile
This option is available only when ARMv8.5-MemTag is implemented
MTE options are added in latest clang and armclang compiler which
support below options:
for clang <version 11.0.0>
1. -march=arm8.5-a+memtag
2. -fsanitize=memtag
for armclang <version 6.12>
1. -march=arm8.5-a+memtag
2. -mmemtag-stack
Set the option SUPPORT_STACK_MEMTAG=yes to enable memory stack tagging.
Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
Change-Id: I4e0bbde4e9769ce03ead6f550158e22f32c1c413
-rw-r--r-- | Makefile | 28 | ||||
-rw-r--r-- | docs/getting_started/build-options.rst | 5 | ||||
-rw-r--r-- | make_helpers/defaults.mk | 5 |
3 files changed, 38 insertions, 0 deletions
@@ -187,6 +187,34 @@ march64-directive = -march=armv8.${ARM_ARCH_MINOR}-a endif endif +# Memory tagging is supported in architecture Armv8.5-A AArch64 and onwards +ifeq ($(ARCH), aarch64) +ifeq ($(shell test $(ARM_ARCH_MAJOR) -gt 8; echo $$?),0) +mem_tag_arch_support = yes +else ifeq ($(shell test $(ARM_ARCH_MAJOR) -eq 8 -a $(ARM_ARCH_MINOR) -ge 5; \ + echo $$?),0) +mem_tag_arch_support = yes +endif +endif + +# Enabled required option for memory stack tagging. Currently, these options are +# enabled only for clang and armclang compiler. +ifeq (${SUPPORT_STACK_MEMTAG},yes) +ifdef mem_tag_arch_support +ifneq ( ,$(filter $(notdir $(CC)),armclang clang)) +march64-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a+memtag +ifeq ($(notdir $(CC)),armclang) +TF_CFLAGS += -mmemtag-stack +else ifeq ($(notdir $(CC)),clang) +TF_CFLAGS += -fsanitize=memtag +endif +endif +else +$(error "Error: stack memory tagging is not supported for architecture \ + ${ARCH},armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a") +endif +endif + ifneq ($(findstring armclang,$(notdir $(CC))),) TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive) TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive) diff --git a/docs/getting_started/build-options.rst b/docs/getting_started/build-options.rst index 69e103d38..e1c6c8f80 100644 --- a/docs/getting_started/build-options.rst +++ b/docs/getting_started/build-options.rst @@ -667,6 +667,11 @@ Common build options cluster platforms). If this option is enabled, then warm boot path enables D-caches immediately after enabling MMU. This option defaults to 0. +- ``SUPPORT_STACK_MEMTAG``: This flag determines whether to enable memory + tagging for stack or not. It accepts 2 values: ``yes`` and ``no``. The + default value of this flag is ``no``. Note this option must be enabled only + for ARM architecture greater than Armv8.5-A. + GICv3 driver options -------------------- diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index 4e968e2d3..590a800a6 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -288,3 +288,8 @@ ENABLE_LTO := 0 # S-EL2 firmware entry/exit. This flag is to be used with SPD=spmd option. # Default is 0. CTX_INCLUDE_EL2_REGS := 0 + +# Enable Memory tag extension which is supported for architecture greater +# than Armv8.5-A +# By default it is set to "no" +SUPPORT_STACK_MEMTAG := no |