This is version 2 of the ROP support patch, addressing comments by Will Schmidt and Segher Boessenkool. I've attempted to implement all of your excellent suggestions; otherwise the series is unchanged. I decided to repost the whole series rather than just the patches needing further approval, since all have changed.
Add POWER10 support for hashst[p] and hashchk[p] operations. When the -mrop-protect option is selected, any function that loads the link register from memory before returning must have protection in the prologue and epilogue to ensure the link register save location has not been compromised. If -mprivileged is also specified, the protection instructions generated require supervisor privilege. The patches are broken up into logical chunks: - Option handling - Instruction generation - Predefined macro handling - Test cases Bootstrapped and tested on a POWER10 system with no regressions. Tests on a kernel that enables user-space ROP mitigation were successful. Is this series ok for trunk? I would also like to later backport these patches to GCC for the 11.2 release. Thanks! Bill Bill Schmidt (4): rs6000: Add -mrop-protect and -mprivileged flags rs6000: Emit ROP-mitigation instructions in prologue and epilogue rs6000: Conditionally define __ROP_PROTECT__ rs6000: Add ROP tests gcc/config/rs6000/rs6000-c.c | 3 + gcc/config/rs6000/rs6000-internal.h | 2 + gcc/config/rs6000/rs6000-logue.c | 74 +++++++++++++++++++++--- gcc/config/rs6000/rs6000.c | 4 ++ gcc/config/rs6000/rs6000.md | 47 +++++++++++++++ gcc/config/rs6000/rs6000.opt | 8 +++ gcc/doc/invoke.texi | 20 ++++++- gcc/testsuite/gcc.target/powerpc/rop-1.c | 17 ++++++ gcc/testsuite/gcc.target/powerpc/rop-2.c | 17 ++++++ gcc/testsuite/gcc.target/powerpc/rop-3.c | 18 ++++++ gcc/testsuite/gcc.target/powerpc/rop-4.c | 15 +++++ gcc/testsuite/gcc.target/powerpc/rop-5.c | 13 +++++ 12 files changed, 229 insertions(+), 9 deletions(-) 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 -- 2.27.0