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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to