public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Andrea Corallo <akrl@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/ARM/heads/arm-12-m-pacbti)] arm: Implement arm Function target attribute 'branch-protection' Date: Fri, 10 Mar 2023 16:21:43 +0000 (GMT) [thread overview] Message-ID: <20230310162143.BF7303858423@sourceware.org> (raw) 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" } } */
reply other threads:[~2023-03-10 16:21 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230310162143.BF7303858423@sourceware.org \ --to=akrl@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).