[PATCH v5 4/6] firmware: Only default FW_PIC to y if supported
Jessica Clarke
jrtc27 at jrtc27.com
Sat Jul 10 19:28:22 PDT 2021
Bare-metal GNU ld does not support PIE, so if using it this will result
in a failure to build. Instead, default to FW_PIC=n if not supported.
Note that an explicit FW_PIC=y is not overriden, to ensure the build
fails rather than silently producing a position-dependent binary.
Signed-off-by: Jessica Clarke <jrtc27 at jrtc27.com>
---
Makefile | 3 +++
firmware/objects.mk | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 6b64205..ba06313 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,9 @@ ifndef PLATFORM_RISCV_XLEN
endif
endif
+# Check whether the linker supports creating PIEs
+OPENSBI_LD_PIE := $(shell $(CC) -fPIE -nostdlib -Wl,-pie -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n)
+
# Setup list of objects.mk files
ifdef PLATFORM
platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi)
diff --git a/firmware/objects.mk b/firmware/objects.mk
index 3bc83cd..8da7ca3 100644
--- a/firmware/objects.mk
+++ b/firmware/objects.mk
@@ -14,7 +14,7 @@ firmware-asflags-y +=
firmware-ldflags-y +=
ifndef FW_PIC
-FW_PIC := y
+FW_PIC := $(OPENSBI_LD_PIE)
endif
ifeq ($(FW_PIC),y)
--
2.31.0
More information about the opensbi
mailing list