[PATCH, GCC/ARM] Fix PR85203: cmse_nonsecure_caller returns wrong result
Thomas Preudhomme
thomas.preudhomme@foss.arm.com
Wed Apr 4 17:07:00 GMT 2018
Oops, forgot the link.
On 04/04/18 18:03, Thomas Preudhomme wrote:
> Hi,
>
> __builtin_cmse_nonsecure_caller implementation returns true in almost
> all cases due to 2 separate bugs:
>
> * gen_addsi is used instead of gen_andsi to retrieve the lsb
> * the lsb boolean value is not negated but the specification [1] says
> Â the intrinsic should return true for a nonsecure caller and a
> Â nonsecure caller is characterized with LR's lsb being 0
[1]
https://static.docs.arm.com/ecm0359818/10/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf
Best regards,
Thomas
>
> This was not caught due to (1) lack of runtime test and (2) the existing
> RTL scan not taking into account that '.' matches newline in Tcl regular
> expressions.
>
> This patch fixes the implementation issues and improves testing of
> cmse_nonsecure_caller by (1) adding a runtime test for the secure caller
> case and (2) looking for an SET insn of an AND expression in the right
> function. This leaves the nonsecure caller case only partly tested
> since the exact value being AND and the negation are not covered by the
> scan and the existing test infrastructure does not allow 2 separate
> compilation and link to be performed. It is enough though to catch the
> current incorrect behavior.
>
> The patch also reorganize the scan directives in cmse-1.c to more easily
> identify what function they are intended to test in the file.
>
> ChangeLog entry is as follows:
>
> *** gcc/ChangeLog ***
>
> 2018-04-04 Thomas Preud'homme <thomas.preudhomme@arm.com>
>
> Â Â Â Â PR target/85203
> Â Â Â Â * config/arm/arm-builtins.c (arm_expand_builtin): Change
> Â Â Â Â expansion to perform a bitwise AND of the argument followed by a
> Â Â Â Â boolean negation of the result.
>
> *** gcc/testsuite/ChangeLog ***
>
> 2018-04-04 Thomas Preud'homme <thomas.preudhomme@arm.com>
>
> Â Â Â Â PR target/85203
> Â Â Â Â * gcc.target/arm/cmse/cmse-1.c: Tighten cmse_nonsecure_caller RTL scan
>     to match a single insn of the baz function. Move scan directives at
> Â Â Â Â the end of the file below the functions they are trying to test for
> Â Â Â Â better readability.
> Â Â Â Â * gcc.target/arm/cmse/cmse-16.c: New testcase.
>
> Testing: No bootstrap since only M profile builtin code has been changed
> but regression testing for arm-none-eabi targeting Arm Cortex-M23 and
> Cortex-M33 shows no regression.
>
> Is this ok for stage4?
>
> Best regards,
>
> Thomas
More information about the Gcc-patches
mailing list