AArch32: Force compiler to align memory accesses
authorSandrine Bailleux <sandrine.bailleux@arm.com>
Tue, 3 Jul 2018 07:14:45 +0000 (09:14 +0200)
committerSandrine Bailleux <sandrine.bailleux@arm.com>
Tue, 3 Jul 2018 15:35:08 +0000 (17:35 +0200)
Alignment fault checking is always enabled in TF (by setting the
SCTLR.A bit). Thus, all instructions that load or store one or more
registers have an alignment check that the address being accessed is
aligned to the size of the data element(s) being accessed. If this
check fails it causes an Alignment fault, which is taken as a Data
Abort exception.

The compiler needs to be aware that it must not emit load and store
instructions resulting in unaligned accesses. It already is for
AArch64 builds (see commit fa1d37122c "Add -mstrict-align to the gcc
options"), this patch does the same for AArch32 builds.

Change-Id: Ic885796bc6ed0ff392aae2d49f3a13f517e0169f
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Makefile

index f230f4af3aab90e845de76051be4733090dc182e..180c5584208deff7f2361a027bb3cd03f7d38c38 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -151,6 +151,7 @@ TF_CFLAGS_aarch32   =       $(march32-directive)
 TF_CFLAGS_aarch64      =       -march=armv8-a
 endif
 
+TF_CFLAGS_aarch32      +=      -mno-unaligned-access
 TF_CFLAGS_aarch64      +=      -mgeneral-regs-only -mstrict-align
 
 ASFLAGS_aarch32                =       $(march32-directive)