From 09ad811ec4661b99a67b87f28c93177367ae911e Mon Sep 17 00:00:00 2001 From: Jessica Clarke Date: Sun, 11 Jul 2021 03:28:22 +0100 Subject: [PATCH] firmware: Only default FW_PIC to y if supported 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 overridden, to ensure the build fails rather than silently producing a position-dependent binary. Signed-off-by: Jessica Clarke Reviewed-by: Bin Meng Tested-by: Bin Meng Reviewed-by: Anup Patel --- 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 83f98ad..a1704c4 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.7.4