In some cases, the CLANG38 toolchain profile in LTO mode emits GOT based relocations in spite of our attempts to avoid this, by using hidden visibility, -Bsymbolic etc.
On AARCH64, we managed to work around this by processing the GOT based relocations in GenFw. As it turns out, the same issue exists on 32-bit ARM, but unfortunately, we cannot use a similar trick to get rid of the GOT entry, and the relocation metadata is insufficient to locate the GOT entry in the binary. A bit of trial and error reveals that switching the linker options from -pie to -shared in commit e07092edca8442db4a941dbeea0cd196c7bf8ec9 was not the best approach, and instead, we can pass -pie to the linker directly (using -Wl,xxx) rather than to the compiler directly, which turns out to massage the linker in the right way, and prevents if from emitting GOT based relocations. Your mileage may vary ... Signed-off-by: Ard Biesheuvel <[email protected]> --- Let's test this on a couple of different Clang versions. If it still produces problems, the only other way I see is to disable the builds of platforms that incorporate this module for ARM/CLANG38 [which is not the end of the world] ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf b/ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf index 683397b7afd1..9e58e56fce09 100755 --- a/ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf +++ b/ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf @@ -97,4 +97,4 @@ gArmTokenSpaceGuid.PcdFvBaseAddress [BuildOptions] - GCC:*_*_*_DLINK_FLAGS = -shared -Wl,-Bsymbolic -Wl,-T,$(MODULE_DIR)/Scripts/PrePi-PIE.lds + GCC:*_*_*_DLINK_FLAGS = -Wl,-Bsymbolic,-pie,-T,$(MODULE_DIR)/Scripts/PrePi-PIE.lds -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#46835): https://edk2.groups.io/g/devel/message/46835 Mute This Topic: https://groups.io/mt/33144570/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
