Date
1 - 7 of 7
[PATCH 1/3] BaseTools/Conf/tools_def: Fix linking using CLANGDWARF_IA32
Patrick Rudolph
The clang toolchain might default to fPIE/fPIC, which prevents
lld from linking the objects into a binary. Specify -fno-pie -fno-pic as done on GCC to fix linking. Test: Building the Universal Payload using the command 'python UefiPayloadPkg/UniversalPayloadBuild.py -a IA32' actually works. Signed-off-by: Patrick Rudolph <patrick.rudolph@...> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4356 --- BaseTools/Conf/tools_def.template | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.t= emplate index 471eb67c0c..9b59bd75c3 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -2888,7 +2888,7 @@ DEFINE CLANGDWARF_X64_DLINK2_FLAGS =3D -Wl,--d= efsym=3DPECOFF_HEADER_SIZE=3D0x22 *_CLANGDWARF_IA32_RC_PATH =3D DEF(CLANGDWARF_IA32_PREFIX)llvm= -rc=0D =0D *_CLANGDWARF_IA32_ASLCC_FLAGS =3D DEF(GCC_ASLCC_FLAGS) -m32 -fno-= lto DEF(CLANG38_IA32_TARGET)=0D -*_CLANGDWARF_IA32_ASLDLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_ASLDLIN= K_FLAGS) -Wl,-m,elf_i386 -fuse-ld=3Dlld=0D +*_CLANGDWARF_IA32_ASLDLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_ASLDLIN= K_FLAGS) -Wl,-m,elf_i386 -fuse-ld=3Dlld -no-pie=0D *_CLANGDWARF_IA32_ASM_FLAGS =3D DEF(GCC5_ASM_FLAGS) -m32 -march= =3Di386 DEF(CLANG38_IA32_TARGET)=0D *_CLANGDWARF_IA32_RC_FLAGS =3D DEF(GCC_IA32_RC_FLAGS)=0D *_CLANGDWARF_IA32_OBJCOPY_FLAGS =3D=0D @@ -2897,17 +2897,17 @@ DEFINE CLANGDWARF_X64_DLINK2_FLAGS =3D -Wl,-= -defsym=3DPECOFF_HEADER_SIZE=3D0x22 *_CLANGDWARF_IA32_ASLPP_FLAGS =3D DEF(GCC_ASLPP_FLAGS) DEF(CLANG3= 8_IA32_TARGET)=0D *_CLANGDWARF_IA32_VFRPP_FLAGS =3D DEF(GCC_VFRPP_FLAGS) DEF(CLANG3= 8_IA32_TARGET)=0D =0D -DEBUG_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -m32 = -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) -g -malign-double=0D +DEBUG_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -fno-= pic -fno-pie -m32 -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) -g -mali= gn-double=0D DEBUG_CLANGDWARF_IA32_DLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_DLINK_F= LAGS) -flto -Wl,-O3 -Wl,-melf_i386 -Wl,--oformat,elf32-i386=0D -DEBUG_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O3 -fuse-ld=3Dlld=0D +DEBUG_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O3 -fuse-ld=3Dlld -no-pie=0D =0D -RELEASE_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -m32 = -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) -malign-double=0D +RELEASE_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -fno-= pic -fno-pie -m32 -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) -malign-= double=0D RELEASE_CLANGDWARF_IA32_DLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_DLINK_F= LAGS) -flto -Wl,-O3 -Wl,-melf_i386 -Wl,--oformat,elf32-i386=0D -RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O3 -fuse-ld=3Dlld=0D +RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O3 -fuse-ld=3Dlld -no-pie=0D =0D -NOOPT_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -m32 = -O0 -march=3Di586 DEF(CLANG38_IA32_TARGET) -g -malign-double=0D +NOOPT_CLANGDWARF_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) -fno-= pic -fno-pie -m32 -O0 -march=3Di586 DEF(CLANG38_IA32_TARGET) -g -malign-dou= ble=0D NOOPT_CLANGDWARF_IA32_DLINK_FLAGS =3D DEF(CLANGDWARF_IA32_X64_DLINK_F= LAGS) -Wl,-O0 -Wl,-melf_i386 -Wl,--oformat,elf32-i386=0D -NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O0 -fuse-ld=3Dlld=0D +NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS =3D DEF(CLANGDWARF_IA32_DLINK2_FLAG= S) -O0 -fuse-ld=3Dlld -no-pie=0D =0D ##########################=0D # CLANGDWARF X64 definitions=0D --=20 2.39.1 |
|
Rebecca Cran
I've also seen that error building X64 firmware.
toggle quoted message
Show quoted text
Could you update those flags too, please? -- Rebecca Cran On 3/17/23 8:06 AM, Patrick Rudolph wrote:
The clang toolchain might default to fPIE/fPIC, which prevents |
|
Marvin Häuser
Which error precisely?
toggle quoted message
Show quoted text
X64 PIE *must not* be disabled, as it’s used to enforce RIP-relative addressing where possible and has been for many years. Meanwhile the issues with IA32 is PIE was disabled by default for most toolchains, but some enable it nowadays (and thus it must be disabled explicitly). Best regards, Marvin On 17. Mar 2023, at 18:30, Rebecca Cran <rebecca@...> wrote: |
|
Rebecca Cran
Building with "build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t CLANGDWARF -b RELEASE" on FreeBSD causes the following errors:
ld.lld: error: relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.lib(ExceptionHandlerAsm.obj)defined in /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iiireferenced by /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.libExceptionHandlerAsm.obj:(.text+0x5) in archive ld.lld: error: relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.lib(ExceptionHandlerAsm.obj)defined in /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iiireferenced by /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.libExceptionHandlerAsm.obj:(.text+0x14) in archive ld.lld: error: relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.lib(ExceptionHandlerAsm.obj)defined in /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iiireferenced by /home/bcran/src/uefi/edk2/Build/OvmfX64/RELEASE_CLANGDWARF/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib/OUTPUT/SecPeiCpuExceptionHandlerLib.libExceptionHandlerAsm.obj:(.text+0x23) in archive Thinking about it, it might actually be a problem with the FreeBSD system toolchain. On Linux, I get a different set of errors about redefining uint64_t etc. -- Rebecca Cran On 3/17/23 11:44 AM, Marvin Häuser wrote: Which error precisely? |
|
Rebecca Cran
The linker problems I was seeing were unrelated to those Patrick's patch fixed.
toggle quoted message
Show quoted text
I just applied Patrick's changes on top of my CLANGDWARF patches and OvmfPkgIa32.dsc builds fine. -- Rebecca Cran On 3/17/23 2:35 PM, Rebecca Cran wrote:
Building with "build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t CLANGDWARF -b RELEASE" on FreeBSD causes the following errors: |
|
Sheng Lean Tan
|
|
Sheng Lean Tan
Would anyone mind to spare some time to review this patch? Thanks. |
|