[PATCH] firmware: Detect whether the toolchain supports pie and automatically disable the FW_PIC option

Xiang W wxjstz at 126.com
Sat Jul 10 12:46:04 PDT 2021


Signed-off-by: Xiang W <wxjstz at 126.com>
---
 firmware/objects.mk         |  4 +++-
 scripts/toolchain-check-pie | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)
 create mode 100755 scripts/toolchain-check-pie

diff --git a/firmware/objects.mk b/firmware/objects.mk
index ce91c2f..020e1a9 100644
--- a/firmware/objects.mk
+++ b/firmware/objects.mk
@@ -16,7 +16,9 @@ firmware-ldflags-y +=
 ifndef FW_PIC
 FW_PIC := y
 endif
-
+ifeq ($(FW_PIC),y)
+FW_PIC := $(shell scripts/toolchain-check-pie $(CC))
+endif
 ifeq ($(FW_PIC),y)
 firmware-genflags-y +=	-DFW_PIC
 firmware-asflags-y  +=	-fpic
diff --git a/scripts/toolchain-check-pie b/scripts/toolchain-check-pie
new file mode 100755
index 0000000..b5c44df
--- /dev/null
+++ b/scripts/toolchain-check-pie
@@ -0,0 +1,22 @@
+#! /bin/bash
+
+CC=$1
+f=$(mktemp)
+mv ${f} ${f}.S
+f=${f}.S
+
+cat << EOF >${f}
+	.section .entry, "ax", %progbits
+	.align 3
+	.globl _start
+_start:
+	j	_start
+EOF
+
+if ${CC} --version | head -n 1 | grep clang 2>&1 >/dev/null; then
+	${CC} --target=riscv64 -fuse-ld=lld -mno-relax -nostdlib -fPIE -Wl,-pie ${f} -o /dev/null 2>/dev/null && echo y || echo n
+else
+	${CC} -nostdlib -fPIE -Wl,-pie ${f} -o /dev/null 2>/dev/null && echo y || echo n
+fi
+
+rm ${f}
-- 
2.30.2




More information about the opensbi mailing list