Hi, I've tried the patch & it turns out that options provided with DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align -mgeneral-regs-only aren't picked when building library code with SIMD load/store instructions still being generated. Please see the attached assembly generated file for edk2\MdePkg\Library\UefiLib\UefiLibPrint.c. Should -mstrict-align -mgeneral-regs-only option go into DEFINE GCC_AARCH64_CC_FLAGS instead? Alexei. ________________________________ From: Leif Lindholm Sent: 13 July 2017 15:11:47 To: Ard Biesheuvel Cc: edk2-devel@lists.01.org; liming.gao@intel.com; yonghong.zhu@intel.com; Alexei Fedorov; Evan Lloyd Subject: Re: [PATCH 2/2] BaseTools/tools_def AARCH64: avoid SIMD register in XIP code On Thu, Jul 13, 2017 at 01:48:44PM +0100, Ard Biesheuvel wrote: > XIP code may execute with the MMU off, in which case all memory accesses > should be strictly aligned to their size. Some versions of GCC violate > this restriction even when -mstrict-align is passed, when performing > loads and stores that involve SIMD registers. This is clearly a bug in > the compiler, but we can easily work around it by avoiding SIMD registers > altogether when building code that may execute in such a context. So add > -mgeneral-regs-only to the AARCH64 XIP CC flags. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm > --- > BaseTools/Conf/tools_def.template | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template > index 128da5131d01..cdc9df44d97d 100755 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -4342,7 +4342,7 @@ DEFINE GCC_IPF_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-m > DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -Wno-address -mthumb -mfloat-abi=soft -fno-pic -fno-pie > DEFINE GCC_ARM_CC_XIPFLAGS = -mno-unaligned-access > DEFINE GCC_AARCH64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char -ffunction-sections -fdata-sections -Wno-address -fno-asynchronous-unwind-tables -fno-pic -fno-pie -ffixed-x18 > -DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align > +DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align -mgeneral-regs-only > DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib --pie > DEFINE GCC_DLINK2_FLAGS_COMMON = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds > DEFINE GCC_IA32_X64_DLINK_COMMON = DEF(GCC_DLINK_FLAGS_COMMON) --gc-sections > -- > 2.9.3 > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.