Reviewed-by: Michael D Kinney
Mike
> -Original Message-
> From: devel@edk2.groups.io On Behalf Of Pedro Falcato
> Sent: Friday, December 16, 2022 11:50 AM
> To: devel@edk2.groups.io
> Cc: Pedro Falcato ; Marvin Häuser
> ; Feng, Bob C ; Gao,
> Liming ; Chen, Christine
> Subject: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for
> CLANG toolchains
>
> Currently, UINT64 is not 8-byte aligned for CLANG* toolchains on IA32,
> which causes ABI differences between IA32 and X64 in such simple examples as:
>
> struct S {UINT32 A; UINT64 B;};
>
> Pass -malign-double to align it to 8 bytes, as is done for GCC already.
>
> Signed-off-by: Pedro Falcato
> Cc: Marvin Häuser
> Cc: Bob Feng
> Cc: Liming Gao
> Cc: Yuwei Chen
> ---
> BaseTools/Conf/tools_def.template | 18 +-
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/BaseTools/Conf/tools_def.template
> b/BaseTools/Conf/tools_def.template
> index c4e4c7ded0af..2c66a11ae31f 100755
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -2618,15 +2618,15 @@ DEFINE CLANG38_ALL_CC_FLAGS =
> DEF(GCC48_ALL_CC_FLAGS) DEF(CLANG38_WARNIN
> *_CLANG38_IA32_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS)
> DEF(CLANG38_IA32_TARGET)
> *_CLANG38_IA32_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS)
> DEF(CLANG38_IA32_TARGET)
>
> -DEBUG_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANG38_IA32_TARGET) -g
> +DEBUG_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANG38_IA32_TARGET) -g -
> malign-double
> DEBUG_CLANG38_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto
> -Wl,-Oz -Wl,-melf_i386 -Wl,--oformat=elf32-
> i386
> DEBUG_CLANG38_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) -O3
>
> -RELEASE_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANG38_IA32_TARGET)
> +RELEASE_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANG38_IA32_TARGET) -
> malign-double
> RELEASE_CLANG38_IA32_DLINK_FLAGS= DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto
> -Wl,-Oz -Wl,-melf_i386 -Wl,--oformat=elf32-
> i386
> RELEASE_CLANG38_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) -O3
>
> -NOOPT_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -O0
> -march=i586 DEF(CLANG38_IA32_TARGET) -g
> +NOOPT_CLANG38_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -O0
> -march=i586 DEF(CLANG38_IA32_TARGET) -g -malign-
> double
> NOOPT_CLANG38_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -Wl,-O0
> -Wl,-melf_i386 -Wl,--oformat=elf32-i386
> NOOPT_CLANG38_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) -O0
>
> @@ -2806,15 +2806,15 @@ DEFINE CLANGPDB_ALL_CC_FLAGS =
> DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARN
> *_CLANGPDB_IA32_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS)
> DEF(CLANGPDB_IA32_TARGET)
> *_CLANGPDB_IA32_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS)
> DEF(CLANGPDB_IA32_TARGET)
>
> -DEBUG_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANGPDB_IA32_TARGET) -
> gcodeview
> +DEBUG_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANGPDB_IA32_TARGET) -
> gcodeview -malign-double
> DEBUG_CLANGPDB_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001
> /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /DLL
> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> /SAFESEH:NO /BASE:0 /DEBUG:GHASH /MLLVM:-exception-model=wineh /lldmap
> DEBUG_CLANGPDB_IA32_DLINK2_FLAGS =
>
> -RELEASE_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANGPDB_IA32_TARGET)
> +RELEASE_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -Oz
> -flto -march=i586 DEF(CLANGPDB_IA32_TARGET) -
> malign-double
> RELEASE_CLANGPDB_IA32_DLINK_FLAGS= /NOLOGO /NODEFAULTLIB /IGNORE:4001
> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /ALIGN:32
> /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /DLL
> /ENTRY:$(IMAGE_ENTRY_POINT)
> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /MERGE:.rdata=.data
> /MLLVM:-exception-model=wineh /lldmap
> RELEASE_CLANGPDB_IA32_DLINK2_FLAGS =
>
> -NOOPT_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -O0
> -march=i586 DEF(CLANGPDB_IA32_TARGET) -
> gcodeview
> +NOOPT_CLANGPDB_IA32_CC_FLAGS = DEF(CLANGPDB_ALL_CC_FLAGS) -m32 -O0
> -march=i586 DEF(CLANGPDB_IA32_TARGET) -
> gcodeview -malign-double
> NOOPT_CLANGPDB_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001
> /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /DLL
> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> /SAFESEH:NO /BASE:0 /DEBUG:GHASH /MLLVM:-exception-model=wineh /lldmap
>