mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
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>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
41
gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-13.c
Normal file
41
gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-13.c
Normal file
@@ -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" } } */
|
||||
Reference in New Issue
Block a user