The 11/26/2023 14:37, Richard Sandiford wrote: > Szabolcs Nagy <szabolcs.n...@arm.com> writes: > > +++ b/gcc/testsuite/gcc.target/aarch64/eh_return-3.c > > @@ -0,0 +1,30 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-O2 -mbranch-protection=pac-ret+leaf" } */ > > Probably best to add -fno-schedule-insns -fno-schedule-insns2, so that the > instructions in the check-function-bodies are in a more predictable order. > > > +/* { dg-final { check-function-bodies "**" "" "" } } */ > > + > > +/* > > +**foo: > > +** hint 25 // paciasp > > +** stp x0, x1, .* > > +** stp x2, x3, .* > > +** cbz w2, .* > > +** mov x4, 0 > > +** ldp x2, x3, .* > > +** ldp x0, x1, .* > > +** cbz x4, .* > > +** add sp, sp, x5 > > +** br x6 > > +** hint 29 // autiasp > > +** ret > > +** mov x5, x0 > > +** mov x6, x1 > > +** mov x4, 1 > > +** b .* > > +*/ > > What's the significance of x3 here? It looks from the function definition > like it should be undefined. And what are the stps and ldps doing? > > If those aren't an important part of the test, it might be better > to stub them out with "...", e.g.: > > /* > **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 x6, x1 > ** mov x4, 1 > ** b .* > */ > > LGTM otherwise.
committed as >From cad7e1e3e0dea1922f89290bbbc27b4c44f53bf5 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy <szabolcs.n...@arm.com> Date: Fri, 2 Jun 2023 14:17:02 +0100 Subject: [PATCH] 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. --- .../gcc.target/aarch64/eh_return-2.c | 9 ++++++ .../gcc.target/aarch64/eh_return-3.c | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/eh_return-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/eh_return-3.c 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 00000000000..4a9d124e891 --- /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 00000000000..a17baa86501 --- /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); +} -- 2.25.1