public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] ArmVirtPkg/ArmVirtPrePiUniCoreRelocatable: revert to PIE linking
@ 2019-09-04 23:04 Ard Biesheuvel
  2019-09-05 14:19 ` Leif Lindholm
  2019-09-05 19:33 ` [edk2-devel] " Laszlo Ersek
  0 siblings, 2 replies; 10+ messages in thread
From: Ard Biesheuvel @ 2019-09-04 23:04 UTC (permalink / raw)
  To: devel; +Cc: leif.lindholm, lersek, Ard Biesheuvel

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 <ard.biesheuvel@linaro.org>
---
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


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-09-06 22:47 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-09-04 23:04 [PATCH] ArmVirtPkg/ArmVirtPrePiUniCoreRelocatable: revert to PIE linking Ard Biesheuvel
2019-09-05 14:19 ` Leif Lindholm
2019-09-05 14:25   ` Ard Biesheuvel
2019-09-05 15:55     ` Leif Lindholm
2019-09-05 17:06       ` Ard Biesheuvel
2019-09-05 17:16         ` Leif Lindholm
2019-09-05 17:19           ` Ard Biesheuvel
2019-09-05 14:27   ` Ard Biesheuvel
2019-09-05 19:33 ` [edk2-devel] " Laszlo Ersek
2019-09-06 22:47   ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox