From patchwork Sat Jul 10 19:46:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiang W X-Patchwork-Id: 1503574 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=s2qokbzV; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.a=rsa-sha256 header.s=s110527 header.b=GHEIPe0t; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMgWY13G0z9sV8 for ; Sun, 11 Jul 2021 05:46:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=DuLIYM1Ep5iiAzi7BzRbv+fZ+g3f8nATM4K1KoIPEYk=; b=s2qokbzV3eismX Px1KBSnamAWF19z+71Quo+vWREvVrk3yXflsV1DcbMoDvp+GzkUNhOuDtlu49iwfFG595l92C0qeM A7aiSED2n2zhHoYpUSYyiJ3yE0GHus1pIkC8uoHlaVwXTHUtOluKb/PlYYQWlR+3xjxPGCgOKD/FB am2WVy+RQP8757CLCtmd123T95E1MK4HPyiWnAPxwqTrZXTI05u1c0as4e0FUWyDAgyb62sRBd4T/ 8EONhmyXhINrIU/KnpO/q4KHWGOmcRvJkIGon06sC3Bcom1zc78VyAr0SMx5SnlnZtufcwzhssp17 //3/BAC+dBNi44JEBAMw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2IvV-0047Ze-7B; Sat, 10 Jul 2021 19:46:13 +0000 Received: from mail-m964.mail.126.com ([123.126.96.4]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2IvS-0047ZK-3B for opensbi@lists.infradead.org; Sat, 10 Jul 2021 19:46:11 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=7iB4h kDurOcDVTTkue4PPg8h+cp2SY8Q4msieHQGEww=; b=GHEIPe0tqtpC6TIup8qtq QABJ9whxBJLhRBc3CcTrDQLB8iPLnh6RsS8UGefcs0xpZnQjR82CDzBqNaOpMEGT 6/POW8fctmFqJzwDMiw8cTrDetxZkH5txZFf2BRcm14M5f9bz9t8U7ASB35F2/7B gPqimetXTWlUEo+2AUydwY= Received: from localhost.localdomain (unknown [210.22.74.176]) by smtp9 (Coremail) with SMTP id NeRpCgCHzXf_+OlgrJz0Yg--.41274S2; Sun, 11 Jul 2021 03:46:08 +0800 (CST) From: Xiang W To: opensbi@lists.infradead.org Cc: anup.patel@wdc.com, Xiang W Subject: [PATCH] firmware: Detect whether the toolchain supports pie and automatically disable the FW_PIC option Date: Sun, 11 Jul 2021 03:46:04 +0800 Message-Id: <20210710194604.175684-1-wxjstz@126.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-CM-TRANSID: NeRpCgCHzXf_+OlgrJz0Yg--.41274S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7KrWfJF4xZF47AryrKr1ftFb_yoW8Jw13pa yIka15JrWfG34Sqr9xGr15ur9Iqr4S9rW8CFZrKFyUAryqvw4kJFy2yrsrJryDWF1qvw47 uFZxZF13KF4fCa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRivtZUUUUU= X-Originating-IP: [210.22.74.176] X-CM-SenderInfo: pz0m23b26rjloofrz/1tbi2QDLOlpEB57HnwAAs3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210710_124610_539407_13482660 X-CRM114-Status: UNSURE ( 7.88 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Signed-off-by: Xiang W --- firmware/objects.mk | 4 +++- scripts/toolchain-check-pie | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100755 scripts/toolchain- [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [123.126.96.4 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [wxjstz[at]126.com] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Signed-off-by: Xiang W --- 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}