On Sun, 2021-04-25 at 20:50 -0500, Bill Schmidt via Gcc-patches wrote: > 2021-03-25 Bill Schmidt <wschm...@linux.ibm.com> > > gcc/testsuite/ > * gcc.target/powerpc/rop-1.c: New. > * gcc.target/powerpc/rop-2.c: New. > * gcc.target/powerpc/rop-3.c: New. > * gcc.target/powerpc/rop-4.c: New. > * gcc.target/powerpc/rop-5.c: New.
ok > --- > gcc/testsuite/gcc.target/powerpc/rop-1.c | 16 ++++++++++++++++ > gcc/testsuite/gcc.target/powerpc/rop-2.c | 16 ++++++++++++++++ > gcc/testsuite/gcc.target/powerpc/rop-3.c | 19 +++++++++++++++++++ > gcc/testsuite/gcc.target/powerpc/rop-4.c | 14 ++++++++++++++ > gcc/testsuite/gcc.target/powerpc/rop-5.c | 17 +++++++++++++++++ > 5 files changed, 82 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/powerpc/rop-1.c > create mode 100644 gcc/testsuite/gcc.target/powerpc/rop-2.c > create mode 100644 gcc/testsuite/gcc.target/powerpc/rop-3.c > create mode 100644 gcc/testsuite/gcc.target/powerpc/rop-4.c > create mode 100644 gcc/testsuite/gcc.target/powerpc/rop-5.c > > diff --git a/gcc/testsuite/gcc.target/powerpc/rop-1.c > b/gcc/testsuite/gcc.target/powerpc/rop-1.c > new file mode 100644 > index 00000000000..cf8e2b01dda > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/rop-1.c > @@ -0,0 +1,16 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect" } */ > + > +/* Verify that ROP-protect instructions are inserted when a > + call is present. */ > + > +extern void foo (void); > + > +int bar () > +{ > + foo (); > + return 5; > +} > + > +/* { dg-final { scan-assembler {\mhashst\M} } } */ > +/* { dg-final { scan-assembler {\mhashchk\M} } } */ ok > diff --git a/gcc/testsuite/gcc.target/powerpc/rop-2.c > b/gcc/testsuite/gcc.target/powerpc/rop-2.c > new file mode 100644 > index 00000000000..dde403b0ef5 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/rop-2.c > @@ -0,0 +1,16 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect -mprivileged" } */ > + > +/* Verify that privileged ROP-protect instructions are inserted when a > + call is present. */ > + > +extern void foo (void); > + > +int bar () > +{ > + foo (); > + return 5; > +} > + > +/* { dg-final { scan-assembler {\mhashstp\M} } } */ > +/* { dg-final { scan-assembler {\mhashchkp\M} } } */ ok > diff --git a/gcc/testsuite/gcc.target/powerpc/rop-3.c > b/gcc/testsuite/gcc.target/powerpc/rop-3.c > new file mode 100644 > index 00000000000..054f94fda99 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/rop-3.c > @@ -0,0 +1,19 @@ > +/* { dg-do run { target { power10_hw } } } */ > +/* { dg-require-effective-target power10_ok } */ > +/* { dg-require-effective-target powerpc_elfv2 } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect" } */ > + > +/* Verify that ROP-protect instructions execute correctly when a > + call is present. */ > + > +void __attribute__((noinline)) foo () > +{ > + asm (""); > +} > + > +int main () > +{ > + foo (); > + return 0; > +} > + ok > diff --git a/gcc/testsuite/gcc.target/powerpc/rop-4.c > b/gcc/testsuite/gcc.target/powerpc/rop-4.c > new file mode 100644 > index 00000000000..e2be8b2c035 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/rop-4.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect" } */ > + > +/* Verify that no ROP-protect instructions are inserted when no > + call is present. */ > + > + > +int bar () > +{ > + return 5; > +} > + > +/* { dg-final { scan-assembler-not {\mhashst\M} } } */ > +/* { dg-final { scan-assembler-not {\mhashchk\M} } } */ ok > diff --git a/gcc/testsuite/gcc.target/powerpc/rop-5.c > b/gcc/testsuite/gcc.target/powerpc/rop-5.c > new file mode 100644 > index 00000000000..b759fa59979 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/rop-5.c > @@ -0,0 +1,17 @@ > +/* { dg-do run { target { power10_hw } } } */ > +/* { dg-require-effective-target power10_ok } */ > +/* { dg-require-effective-target powerpc_elfv2 } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect" } */ > + > +/* Verify that __ROP_PROTECT__ is predefined for -mrop-protect. */ > + > +extern void abort (void); > + > +int main () > +{ > +#ifndef __ROP_PROTECT__ > + abort (); > +#endif > + return 0; > +} > + ok. Does there need to be another test to verify if -mrop-protect is on by default without specifying -mrop-protect? (or is it?) Question on 0/4. with that noted, lgtm, thanks, -will