These tests were inspired by corresponding arm ones. They already pass. Tested on aarch64-linux-gnu and aarch64_be-elf, pushed to master.
Richard gcc/testsuite/ * gcc.target/aarch64/stack-protector-3.c: New test. * gcc.target/aarch64/stack-protector-4.c: Likewise. --- .../gcc.target/aarch64/stack-protector-3.c | 45 +++++++++++++++++++ .../gcc.target/aarch64/stack-protector-4.c | 6 +++ 2 files changed, 51 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-4.c diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-3.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-3.c new file mode 100644 index 00000000000..909e26c4c0a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-3.c @@ -0,0 +1,45 @@ +/* { dg-do run } */ +/* { dg-require-effective-target fstack_protector } */ +/* { dg-options "-fstack-protector-all -O2" } */ + +extern volatile long *stack_chk_guard_ptr; + +void __attribute__ ((noipa)) +f (void) +{ + volatile int x; + /* Munging the contents of __stack_chk_guard should trigger a + stack-smashing failure for this function. */ + *stack_chk_guard_ptr += 1; +} + +#define CHECK(REG) "\tcmp\tx0, " #REG "\n\tbeq\t1f\n" + +asm ( +" .pushsection .data\n" +" .align 3\n" +"stack_chk_guard_ptr:\n" +#if __ILP32__ +" .word __stack_chk_guard\n" +#else +" .xword __stack_chk_guard\n" +#endif +" .weak __stack_chk_guard\n" +"__stack_chk_guard:\n" +" .word 0xdead4321\n" +" .word 0xbeef8765\n" +" .text\n" +" .type __stack_chk_fail, %function\n" +"__stack_chk_fail:\n" +" mov x0, #0\n" +" b exit\n" +" .size __stack_chk_fail, .-__stack_chk_fail\n" +" .popsection" +); + +int +main (void) +{ + f (); + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-4.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-4.c new file mode 100644 index 00000000000..6334dd00908 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-4.c @@ -0,0 +1,6 @@ +/* { dg-do run } */ +/* { dg-require-effective-target fstack_protector } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-fstack-protector-all -O2 -fpic" } */ + +#include "stack-protector-3.c"