From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1035) id E68C73858423; Tue, 24 Aug 2021 13:33:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E68C73858423 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Earnshaw To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-8901] arm: testsuite: improve detection of CMSE hardware. X-Act-Checkin: gcc X-Git-Author: Richard Earnshaw X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 931d1c208a697b06aae9a7ba55e7a78981dcbccf X-Git-Newrev: e5b56e805835b3052f67a03c0379db0adc1300a3 Message-Id: <20210824133302.E68C73858423@sourceware.org> Date: Tue, 24 Aug 2021 13:33:02 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Aug 2021 13:33:03 -0000 https://gcc.gnu.org/g:e5b56e805835b3052f67a03c0379db0adc1300a3 commit r11-8901-ge5b56e805835b3052f67a03c0379db0adc1300a3 Author: Richard Earnshaw Date: Fri Jun 18 17:13:04 2021 +0100 arm: testsuite: improve detection of CMSE hardware. The test for CMSE support being available in hardware currently relies on the compiler not optimizing away a secure gateway operation. But even that is suspect, because the SG instruction is just a NOP on armv8-m implementations that do not support the security extension. Replace the existing test with a new one that reads and checks the appropriate hardware feature register (memory mapped). This has to be run from secure mode, but that shouldn't matter, because if we can't do that we can't really test the CMSE extensions anyway. We retain the SG instruction to ensure the test can't pass accidentally if run on pre-armv8-m devices. gcc/testsuite: * lib/target-supports.exp (check_effective_target_arm_cmse_hw): New function. (cherry picked from commit 79fb2700bdbab4212346d907be6063c5a32d3836) Diff: --- gcc/testsuite/lib/target-supports.exp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 411e559f508..8aebd2e9a91 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4861,6 +4861,23 @@ proc check_effective_target_arm_cmse_ok {} { } "-mcmse"]; } +# Return 1 if the target supports executing CMSE instructions, 0 +# otherwise. Cache the result. + +proc check_effective_target_arm_cmse_hw { } { + return [check_runtime arm_cmse_hw_available { + int main (void) + { + unsigned id_pfr1; + asm ("ldr\t%0, =0xe000ed44\n" \ + "ldr\t%0, [%0]\n" \ + "sg" : "=l" (id_pfr1)); + /* Exit with code 0 iff security extension is available. */ + return !(id_pfr1 & 0xf0); + } + } "-mcmse"] +} + # Return 1 if the target supports executing MVE instructions, 0 # otherwise.