firmware: Explicitly pass -pie to the linker, not just the driver
authorJessica Clarke <jrtc27@jrtc27.com>
Sun, 11 Jul 2021 02:28:21 +0000 (03:28 +0100)
committerAnup Patel <anup@brainfault.org>
Sun, 11 Jul 2021 14:31:56 +0000 (20:01 +0530)
When using Clang with a bare-metal triple, -pie does not get passed to
the linker as it's not normally a thing that makes sense, unlike GCC
which will unconditionally forward it on and potentially result in a
linker error. However, LLD does support it, and manually forwarding it
on works as desired, so do so to fully support FW_PIC with Clang and
LLD.

Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
firmware/objects.mk

index ce91c2f..83f98ad 100644 (file)
@@ -21,7 +21,7 @@ ifeq ($(FW_PIC),y)
 firmware-genflags-y += -DFW_PIC
 firmware-asflags-y  += -fpic
 firmware-cflags-y   += -fPIE -pie
-firmware-ldflags-y  +=  -Wl,--no-dynamic-linker
+firmware-ldflags-y  += -Wl,--no-dynamic-linker -Wl,-pie
 endif
 
 ifdef FW_TEXT_START