Date
1 - 5 of 5
[PATCH 2/3] BaseTools/Conf/tools_def: Fix CLANGDWARF_IA32_X64
Patrick Rudolph
Drop the "-z max-page-size=3D0x40" option as it causes the ELF
header to overflow into the .text section, causing undefined behaviour. With high optimization level it corrupts essential code and the binary would crash. It might work with low optimization level though. As the default is to use Oz and LTO, it always crashes. Test: The ELF generated by 'python UefiPayloadPkg/UniversalPayloadBuild.py -a IA32' boots. Signed-off-by: Patrick Rudolph <patrick.rudolph@...> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4357 --- 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.t= emplate index 9b59bd75c3..0c584ab390 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -2866,7 +2866,7 @@ DEFINE CLANGDWARF_X64_PREFIX =3D ENV(CLANG_BIN) =0D # LLVM/CLANG doesn't support -n link option. So, it can't share the same I= A32_X64_DLINK_COMMON flag.=0D # LLVM/CLANG doesn't support common page size. So, it can't share the same= GccBase.lds script.=0D -DEFINE CLANGDWARF_IA32_X64_DLINK_COMMON =3D -nostdlib -Wl,-q,--gc-sectio= ns -z max-page-size=3D0x40=0D +DEFINE CLANGDWARF_IA32_X64_DLINK_COMMON =3D -nostdlib -Wl,-q,--gc-sectio= ns=0D DEFINE CLANGDWARF_DLINK2_FLAGS_COMMON =3D -Wl,--script=3D$(EDK_TOOLS_P= ATH)/Scripts/ClangBase.lds=0D DEFINE CLANGDWARF_IA32_X64_ASLDLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_DLIN= K_COMMON) -Wl,--defsym=3DPECOFF_HEADER_SIZE=3D0 DEF(CLANGDWARF_DLINK2_FLAGS= _COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable=0D DEFINE CLANGDWARF_IA32_X64_DLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_DLIN= K_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map= ,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive=0D --=20 2.39.1 |
|
Sheng Lean Tan
Can someone also help to review this please? Thanks. On Fri, 17 Mar 2023 at 15:06, Patrick Rudolph <patrick.rudolph@...> wrote: Drop the "-z max-page-size=0x40" option as it causes the ELF |
|
Sheng Lean Tan
On Sun, 26 Mar 2023 at 21:39, Sheng Lean Tan via groups.io <sheng.tan=9elements.com@groups.io> wrote:
|
|
Ni, Ray
Why ELF header overflows into .text section?
toggle quoted message
Show quoted text
-----Original Message----- |
|
Marvin Häuser
That's a good question, isn't it? :) From what I can see, these binaries don't pass post-processing like GenFw or such. GCC (and I think thus CLANGDWARF?) gets an extra objcopy step as part of linking [2], but the arguments are empty [3] and thus should be no-op (I hope?). I suppose potential candidates are: 1) A bug in the LLD linker used by CLANGDWARF for IA32 and X64. That would be very surprising to me, especially as no other platform reported issues and LLD is well-established. But who knows, generally ELFs will have large alignment values compared to the 64 Bytes used by edk2. 2) A bug in llvm-objcopy used by UniversalPayloadBuild.py [1]. I'm honestly unfamiliar with objcopy variants and their quality/reliability. 3) A bug in the llvm-objcopy or CLANGDWARF tools_def commands on the edk2 side of things. Some may disagree, but I would reduce 3) to either 1) or 2). I think even if the commands malformed and this causes the overflow, I believe LLD or objcopy should issue a warning regardless. As I have no way to reproduce the issue, I cannot really help further, sorry. Best regards, Marvin [1] [2] [3]
|
|