Re: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for CLANG toolchains

2022-12-19 Thread Marvin Häuser
Revised version of last year’s https://edk2.groups.io/g/devel/message/79670
Initially caught by last year‘s https://edk2.groups.io/g/devel/message/79318
But now caught *yet again*, independently, via bugs during development.

Cc stewards so this issue finally gets some attention. Might need validation of 
already shipped code, who knows.

Best regards,
Marvin

> On 16. Dec 2022, at 20:54, Pedro Falcato  wrote:
> 
> 
> PS: it's worth noting that at this moment in time, due to this, the CLANG 
> toolchains are very broken as they break the UEFI spec and are silently 
> incompatible with modules compiled in both GCC and MSVC.
> 
> Fixing this should be top priority.
> 
> Pedro


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#97586): https://edk2.groups.io/g/devel/message/97586
Mute This Topic: https://groups.io/mt/95717275/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for CLANG toolchains

2022-12-16 Thread Michael D Kinney
Thank you for highlighting the issue.  Makes a lot of sense with same flag used 
for GCC IA32.

Mike

From: Marvin Häuser 
Sent: Friday, December 16, 2022 12:08 PM
To: Pedro Falcato 
Cc: devel@edk2.groups.io; Feng, Bob C ; Gao, Liming 
; Chen, Christine ; Kinney, 
Michael D ; Leif Lindholm 
; Andrew Fish 
Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for 
CLANG toolchains

Revised version of last year’s https://edk2.groups.io/g/devel/message/79670
Initially caught by last year‘s https://edk2.groups.io/g/devel/message/79318
But now caught *yet again*, independently, via bugs during development.

Cc stewards so this issue finally gets some attention. Might need validation of 
already shipped code, who knows.

Best regards,
Marvin


On 16. Dec 2022, at 20:54, Pedro Falcato 
mailto:pedro.falc...@gmail.com>> wrote:

PS: it's worth noting that at this moment in time, due to this, the CLANG 
toolchains are very broken as they break the UEFI spec and are silently 
incompatible with modules compiled in both GCC and MSVC.

Fixing this should be top priority.

Pedro


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#97516): https://edk2.groups.io/g/devel/message/97516
Mute This Topic: https://groups.io/mt/95717275/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




Re: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for CLANG toolchains

2022-12-16 Thread Michael D Kinney
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
&

Re: [edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for CLANG toolchains

2022-12-16 Thread Pedro Falcato
PS: it's worth noting that at this moment in time, due to this, the CLANG
toolchains are very broken as they break the UEFI spec and are silently
incompatible with modules compiled in both GCC and MSVC.

Fixing this should be top priority.

Pedro


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#97513): https://edk2.groups.io/g/devel/message/97513
Mute This Topic: https://groups.io/mt/95717275/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-




[edk2-devel] [PATCH 1/1] BaseTools: Fix IA32 UINT64 alignment for CLANG toolchains

2022-12-16 Thread Pedro Falcato
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
 NOOPT_CLANGPDB_IA32_DLINK2_FLAGS =
 
@@ -2907,15 +2907,15 @@ DEFINE CLANGDWARF_X64_DLINK2_FLAGS= 
-Wl,--defsym=PECOFF_HEADER_SIZE=0x22
 *_CLANGDWARF_IA32_ASLPP_FLAGS  = DEF(GCC_ASLPP_FLAGS) 
DEF(CLANG38_IA32_TARGET)
 *_CLANGDWARF_IA32_VFRPP_FLAGS  = DEF(GCC_VFRPP_FLAGS) 
DEF(CLANG38_IA32_TARGET)
 
-DEBUG_CLANGDWARF_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz 
-flto -march=i586 DEF(CLANG38_IA32_TARGET) -g
+DEBUG_CLANGDWARF_IA32_CC_FLAGS = DEF(CLANG38_ALL_CC_FLAGS) -m32 -Oz 
-flto -march=i586 DEF(CLANG38_IA32_TARGET) -g -malign