public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] rs6000: Compute rop_hash_save_offset for non-Altivec compiles [PR115389]
@ 2024-06-08  4:06 Peter Bergner
  2024-06-13  2:14 ` [PING][PATCH] " Peter Bergner
  2024-06-13  5:35 ` [PATCH] " Kewen.Lin
  0 siblings, 2 replies; 12+ messages in thread
From: Peter Bergner @ 2024-06-08  4:06 UTC (permalink / raw)
  To: Segher Boessenkool, Kewen.Lin; +Cc: GCC Patches

We currently only compute the offset for the ROP hash save location in
the stack frame for Altivec compiles.  For non-Altivec compiles when we
emit ROP mitigation instructions, we use a default offset of zero which
corresponds to the backchain save location which will get clobbered on
any call.  The fix is to compute the ROP hash save location for all
compiles.

This passed bootstrap and regtesting on powerpc64le-linux.
Ok for trunk and backports after some burn-in time?

Peter


gcc/
	PR target/115389
	* config/rs6000/rs6000-logue.cc (rs6000_stack_info): Compute
	rop_hash_save_offset for non-Altivec compiles.

gcc/testsuite/
	PR target/115389
	* gcc.target/powerpc/pr115389.c: New test.

diff --git a/gcc/config/rs6000/rs6000-logue.cc b/gcc/config/rs6000/rs6000-logue.cc
index d61a25a5126..cfa8a67a5f3 100644
--- a/gcc/config/rs6000/rs6000-logue.cc
+++ b/gcc/config/rs6000/rs6000-logue.cc
@@ -826,7 +826,14 @@ rs6000_stack_info (void)
 	  info->ehrd_offset -= info->rop_hash_size;
 	}
       else
-	info->ehrd_offset = info->gp_save_offset - ehrd_size;
+	{
+	  info->ehrd_offset = info->gp_save_offset - ehrd_size;
+
+	  /* Adjust for ROP protection.  */
+	  info->rop_hash_save_offset
+	    = info->gp_save_offset - info->rop_hash_size;
+	  info->ehrd_offset -= info->rop_hash_size;
+	}
 
       info->ehcr_offset = info->ehrd_offset - ehcr_size;
       info->cr_save_offset = reg_size; /* first word when 64-bit.  */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr115389.c b/gcc/testsuite/gcc.target/powerpc/pr115389.c
new file mode 100644
index 00000000000..a091ee8a1be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr115389.c
@@ -0,0 +1,17 @@
+/* PR target/115389 */
+/* { dg-do assemble } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect -mno-vsx -mno-altivec -mabi=no-altivec -save-temps" } */
+/* { dg-require-effective-target rop_ok } */
+
+/* Verify we do not emit invalid offsets for our ROP insns.  */
+
+extern void foo (void);
+long
+bar (void)
+{
+  foo ();
+  return 0;
+}
+
+/* { dg-final { scan-assembler-times {\mhashst\M} 1 } } */
+/* { dg-final { scan-assembler-times {\mhashchk\M} 1 } } */

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-06-18  2:55 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-08  4:06 [PATCH] rs6000: Compute rop_hash_save_offset for non-Altivec compiles [PR115389] Peter Bergner
2024-06-13  2:14 ` [PING][PATCH] " Peter Bergner
2024-06-13  5:35 ` [PATCH] " Kewen.Lin
2024-06-13 13:24   ` Peter Bergner
2024-06-14  2:26     ` Kewen.Lin
2024-06-14  3:26       ` Peter Bergner
2024-06-14 17:05         ` Peter Bergner
2024-06-17  2:10           ` Kewen.Lin
2024-06-17  2:31             ` Peter Bergner
2024-06-17  2:40               ` Kewen.Lin
2024-06-17 12:57                 ` Peter Bergner
2024-06-18  2:55                   ` Kewen.Lin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).