public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/arm-12-m-pacbti)] arm: Implement arm Function target attribute 'branch-protection'
@ 2023-03-10 16:21 Andrea Corallo
  0 siblings, 0 replies; only message in thread
From: Andrea Corallo @ 2023-03-10 16:21 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:8b7f28f2e81ea09bd4f1a5cfb4f7ba285bfcca9a

commit 8b7f28f2e81ea09bd4f1a5cfb4f7ba285bfcca9a
Author: Andrea Corallo <andrea.corallo@arm.com>
Date:   Mon Jan 23 17:38:03 2023 +0100

    arm: Implement arm Function target attribute 'branch-protection'
    
    gcc/
    
            * config/arm/arm.cc (arm_valid_target_attribute_rec): Add ARM function
            attribute 'branch-protection' and parse its options.
            * doc/extend.texi: Document ARM Function attribute 'branch-protection'.
    
    gcc/testsuite/
    
            * gcc.target/arm/acle/pacbti-m-predef-13.c: New test.
    
    Co-Authored-By: Tejas Belagod  <tbelagod@arm.com>

Diff:
---
 gcc/config/arm/arm.cc                              | 16 +++++++++
 gcc/doc/extend.texi                                |  7 ++++
 .../gcc.target/arm/acle/pacbti-m-predef-13.c       | 41 ++++++++++++++++++++++
 3 files changed, 64 insertions(+)

diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 5fcf8a10ba8..7fbfdc30d39 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -33397,6 +33397,22 @@ arm_valid_target_attribute_rec (tree args, struct gcc_options *opts)
 
 	  opts->x_arm_arch_string = xstrndup (arch, strlen (arch));
 	}
+      else if (startswith (q, "branch-protection="))
+	{
+	  char *bp_str = q + strlen ("branch-protection=");
+
+	  opts->x_arm_branch_protection_string
+	    = xstrndup (bp_str, strlen (bp_str));
+
+	  /* Capture values from target attribute.  */
+	  aarch_validate_mbranch_protection
+	    (opts->x_arm_branch_protection_string);
+
+	  /* Init function target attr values.  */
+	  opts->x_aarch_ra_sign_scope = aarch_ra_sign_scope;
+	  opts->x_aarch_enable_bti = aarch_enable_bti;
+
+	}
       else if (q[0] == '+')
 	{
 	  opts->x_arm_arch_string
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 33a776a7978..519d6c350a6 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -4457,6 +4457,13 @@ Enable or disable calls to out-of-line helpers to implement atomic operations.
 This corresponds to the behavior of the command line options
 @option{-moutline-atomics} and @option{-mno-outline-atomics}.
 
+@item branch-protection=
+@cindex @code{branch-protection=} function attribute, arm
+Select the function scope on which branch protection will be applied.
+The behavior and permissible arguments are the same as for the
+command-line option @option{-mbranch-protection=}.  The default value
+is @code{none}.
+
 @end table
 
 The above target attributes can be specified as follows:
diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-13.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-13.c
new file mode 100644
index 00000000000..b6d2df53072
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-13.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target mbranch_protection_ok } */
+/* { dg-options "-march=armv8.1-m.main+fp -mbranch-protection=pac-ret+leaf -mfloat-abi=hard --save-temps" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#if defined (__ARM_FEATURE_BTI_DEFAULT)
+#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be undefined."
+#endif
+
+#if !defined (__ARM_FEATURE_PAC_DEFAULT)
+#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined."
+#endif
+
+/*
+**foo:
+**	bti
+**	...
+*/
+__attribute__((target("branch-protection=pac-ret+bti"), noinline))
+int foo ()
+{
+  return 3;
+}
+
+/*
+**main:
+**	pac	ip, lr, sp
+**	...
+**	aut	ip, lr, sp
+**	bx	lr
+*/
+int
+main()
+{
+  return 1 + foo ();
+}
+
+/* { dg-final { scan-assembler "\.eabi_attribute 50, 1" } } */
+/* { dg-final { scan-assembler "\.eabi_attribute 52, 1" } } */
+/* { dg-final { scan-assembler-not "\.eabi_attribute 74" } } */
+/* { dg-final { scan-assembler "\.eabi_attribute 76, 1" } } */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-10 16:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-10 16:21 [gcc(refs/vendors/ARM/heads/arm-12-m-pacbti)] arm: Implement arm Function target attribute 'branch-protection' Andrea Corallo

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).