aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish V Badarkhe <Manish.Badarkhe@arm.com>2020-03-22 05:06:38 +0000
committerSandrine Bailleux <sandrine.bailleux@arm.com>2020-04-01 16:40:16 +0200
commit7ff088d1f0d17e6afed236f979ffc5adf005d8b0 (patch)
tree1eae524386fd25a77c974672778da2cf5094bdfc
parent0a43db84af8cafaf35155d0e96e679b79a775272 (diff)
downloadplatform_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--Makefile28
-rw-r--r--docs/getting_started/build-options.rst5
-rw-r--r--make_helpers/defaults.mk5
3 files changed, 38 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index ac461a50a..e455635b6 100644
--- a/Makefile
+++ b/Makefile
@@ -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