diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2023-06-02 14:17:02 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2023-11-27 15:52:48 +0000 |
commit | cad7e1e3e0dea1922f89290bbbc27b4c44f53bf5 (patch) | |
tree | 611838134fc11646af9b9fd0f4279634188d494d | |
parent | aa2ad77a9b3994fb679e5295d9570f6f8696540d (diff) | |
download | gcc-cad7e1e3e0dea1922f89290bbbc27b4c44f53bf5.zip gcc-cad7e1e3e0dea1922f89290bbbc27b4c44f53bf5.tar.gz gcc-cad7e1e3e0dea1922f89290bbbc27b4c44f53bf5.tar.bz2 |
aarch64: Add eh_return compile tests
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/eh_return-2.c: New test.
* gcc.target/aarch64/eh_return-3.c: New test.
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/eh_return-2.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/eh_return-3.c | 28 |
2 files changed, 37 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/eh_return-2.c b/gcc/testsuite/gcc.target/aarch64/eh_return-2.c new file mode 100644 index 0000000..4a9d124 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/eh_return-2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-final { scan-assembler "add\tsp, sp, x5" } } */ +/* { dg-final { scan-assembler "br\tx6" } } */ + +void +foo (unsigned long off, void *handler) +{ + __builtin_eh_return (off, handler); +} diff --git a/gcc/testsuite/gcc.target/aarch64/eh_return-3.c b/gcc/testsuite/gcc.target/aarch64/eh_return-3.c new file mode 100644 index 0000000..a17baa8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/eh_return-3.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mbranch-protection=pac-ret+leaf -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +/* +**foo: +** hint 25 // paciasp +** ... +** cbz w2, .* +** mov x4, 0 +** ... +** cbz x4, .* +** add sp, sp, x5 +** br x6 +** hint 29 // autiasp +** ret +** mov x5, x0 +** mov x4, 1 +** mov x6, x1 +** b .* +*/ +void +foo (unsigned long off, void *handler, int c) +{ + if (c) + return; + __builtin_eh_return (off, handler); +} |