On Wed, 23 Sep 2020 at 20:33, Richard Sandiford
<[email protected]> wrote:
>
> These tests were inspired by the corresponding aarch64 ones that I just
> committed. They already pass.
>
> Tested on arm-linux-gnueabi, arm-linux-gnueabihf and armeb-eabi.
> OK for trunk?
>
> Richard
>
>
> gcc/testsuite/
> * gcc.target/arm/stack-protector-5.c: New test.
> * gcc.target/arm/stack-protector-6.c: Likewise.
> ---
Hi Richard,
These new tests fail when compiling for cortex-a15 and cortex-a57...
There are 2 "str" instructions generated, the code is much longer than
for cortex-a9 for instance.
They pass with cortex-a9, cortex-a5 and arm10tdmi.
Christophe
> .../gcc.target/arm/stack-protector-5.c | 21 +++++++++++++++++++
> .../gcc.target/arm/stack-protector-6.c | 8 +++++++
> 2 files changed, 29 insertions(+)
> create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-5.c
> create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-6.c
>
> diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-5.c
> b/gcc/testsuite/gcc.target/arm/stack-protector-5.c
> new file mode 100644
> index 00000000000..b808b11aa3d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arm/stack-protector-5.c
> @@ -0,0 +1,21 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fstack-protector-all -O2" } */
> +
> +void __attribute__ ((noipa))
> +f (void)
> +{
> + volatile int x;
> + asm volatile ("" :::
> + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
> + "r8", "r9", "r10", "r11", "r12", "r14");
> +}
> +
> +/* The register clobbers above should not generate any single LDRs or STRs;
> + all registers should be pushed and popped using register lists. The only
> + STRs should therefore be those associated with the stack protector tests
> + themselves.
> +
> + Make sure the address of the canary is not spilled and reloaded,
> + since that would give the attacker an opportunity to change the
> + canary value. */
> +/* { dg-final { scan-assembler-times {\tstr\t} 1 } } */
> diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-6.c
> b/gcc/testsuite/gcc.target/arm/stack-protector-6.c
> new file mode 100644
> index 00000000000..f8eec878bd6
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arm/stack-protector-6.c
> @@ -0,0 +1,8 @@
> +/* { dg-do compile } */
> +/* { dg-require-effective-target fpic } */
> +/* { dg-options "-fstack-protector-all -O2 -fpic" } */
> +
> +#include "stack-protector-5.c"
> +
> +/* See the comment in stack-protector-5.c. */
> +/* { dg-final { scan-assembler-times {\tstr\t} 1 } } */