From d1897ca2db828d214a6591ab34f29cf42ebd2fb6 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Mon, 6 Dec 2021 11:39:59 +0100 Subject: [PATCH] [PATCH 5/12] arm: Implement target feature macros for PACBTI This patch implements target feature macros when PACBTI is enabled through the -march option or -mbranch-protection. The target feature macros __ARM_FEATURE_PAC_DEFAULT and __ARM_FEATURE_BTI_DEFAULT are specified in ARM ACLE __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI are specified in the pull-request . Approved here . gcc/ChangeLog: * config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_BTI_DEFAULT, __ARM_FEATURE_PAC_DEFAULT, __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI. gcc/testsuite/ChangeLog: * gcc.target/arm/acle/pacbti-m-predef-2.c: New test. * gcc.target/arm/acle/pacbti-m-predef-4.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-5.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-8.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-9.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-10.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-11.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-12.c: Likewise. Co-Authored-By: Tejas Belagod --- gcc/config/arm/arm-c.cc | 18 ++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-10.c | 10 ++++++++ .../gcc.target/arm/acle/pacbti-m-predef-11.c | 10 ++++++++ .../gcc.target/arm/acle/pacbti-m-predef-12.c | 10 ++++++++ .../gcc.target/arm/acle/pacbti-m-predef-2.c | 24 +++++++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-4.c | 21 ++++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-5.c | 24 +++++++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-8.c | 11 +++++++++ .../gcc.target/arm/acle/pacbti-m-predef-9.c | 10 ++++++++ 9 files changed, 138 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-10.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-2.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-4.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-5.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-8.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-9.c diff --git a/gcc/config/arm/arm-c.cc b/gcc/config/arm/arm-c.cc index a8697b8c62f..190099b2c37 100644 --- a/gcc/config/arm/arm-c.cc +++ b/gcc/config/arm/arm-c.cc @@ -212,6 +212,24 @@ arm_cpu_builtins (struct cpp_reader* pfile) def_or_undef_macro (pfile, "__ARM_FEATURE_COMPLEX", TARGET_COMPLEX); def_or_undef_macro (pfile, "__ARM_32BIT_STATE", TARGET_32BIT); + def_or_undef_macro (pfile, "__ARM_FEATURE_PAUTH", TARGET_HAVE_PACBTI); + def_or_undef_macro (pfile, "__ARM_FEATURE_BTI", TARGET_HAVE_PACBTI); + def_or_undef_macro (pfile, "__ARM_FEATURE_BTI_DEFAULT", + aarch_enable_bti == 1); + + cpp_undef (pfile, "__ARM_FEATURE_PAC_DEFAULT"); + if (aarch_ra_sign_scope != AARCH_FUNCTION_NONE) + { + unsigned int pac = 1; + + gcc_assert (aarch_ra_sign_key == AARCH_KEY_A); + + if (aarch_ra_sign_scope == AARCH_FUNCTION_ALL) + pac |= 0x4; + + builtin_define_with_int_value ("__ARM_FEATURE_PAC_DEFAULT", pac); + } + cpp_undef (pfile, "__ARM_FEATURE_MVE"); if (TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT) { diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-10.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-10.c new file mode 100644 index 00000000000..311cf572dd9 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-10.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=bti+pac-ret" } */ + +#if (__ARM_FEATURE_BTI_DEFAULT != 1) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined to 1." +#endif + +#if !defined (__ARM_FEATURE_PAC_DEFAULT) +#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined." +#endif diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c new file mode 100644 index 00000000000..2663551e18a --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=armv8.1-m.main+pacbti" } */ + +#if (__ARM_FEATURE_BTI != 1) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined to 1." +#endif + +#if (__ARM_FEATURE_PAUTH != 1) +#error "Feature test macro __ARM_FEATURE__PAUTH should be defined to 1." +#endif diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c new file mode 100644 index 00000000000..01a53c0b536 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=armv8.1-m.main" } */ + +#if defined (__ARM_FEATURE_BTI) +#error "Feature test macro __ARM_FEATURE_BTI should not be defined." +#endif + +#if defined (__ARM_FEATURE_PAUTH) +#error "Feature test macro __ARM_FEATURE_PAUTH should not be defined." +#endif diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-2.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-2.c new file mode 100644 index 00000000000..4394fd147d7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-2.c @@ -0,0 +1,24 @@ + +/* { dg-do run } */ +/* { dg-require-effective-target arm_pacbti_hw } */ +/* { dg-additional-options " -mbranch-protection=bti+pac-ret+leaf" } */ + +#if !defined (__ARM_FEATURE_BTI_DEFAULT) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined." +#endif + +#if !defined (__ARM_FEATURE_PAC_DEFAULT) +#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined." +#endif + +int +main() +{ + if (__ARM_FEATURE_BTI_DEFAULT != 1) + __builtin_abort (); + + if (__ARM_FEATURE_PAC_DEFAULT != 5) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-4.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-4.c new file mode 100644 index 00000000000..90f0c724b9e --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-4.c @@ -0,0 +1,21 @@ + +/* { dg-do run } */ +/* { dg-require-effective-target arm_pacbti_hw } */ +/* { dg-additional-options " -mbranch-protection=pac-ret" } */ + +#if !defined (__ARM_FEATURE_PAC_DEFAULT) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined." +#endif + +#if defined (__ARM_FEATURE_BTI_DEFAULT) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be undefined." +#endif + +int +main() +{ + if (__ARM_FEATURE_PAC_DEFAULT != 1) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-5.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-5.c new file mode 100644 index 00000000000..c865809b8b0 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-5.c @@ -0,0 +1,24 @@ + +/* { dg-do run } */ +/* { dg-require-effective-target arm_pacbti_hw } */ +/* { dg-additional-options " -mbranch-protection=bti+pac-ret" } */ + +#if !defined (__ARM_FEATURE_BTI_DEFAULT) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined." +#endif + +#if !defined (__ARM_FEATURE_PAC_DEFAULT) +#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined." +#endif + +int +main() +{ + if (__ARM_FEATURE_BTI_DEFAULT != 1) + __builtin_abort (); + + if (__ARM_FEATURE_PAC_DEFAULT != 1) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-8.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-8.c new file mode 100644 index 00000000000..d5d069cbc89 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-8.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=bti+pac-ret+leaf" } */ + +#if (__ARM_FEATURE_BTI_DEFAULT != 1) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined to 1." +#endif + +#if (__ARM_FEATURE_PAC_DEFAULT != 5) +#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined to 5." +#endif + diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-9.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-9.c new file mode 100644 index 00000000000..f301beba0c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-9.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=pac-ret" } */ + +#if (__ARM_FEATURE_PAC_DEFAULT != 1) +#error "Feature test macro __ARM_FEATURE_PAC_DEFAULT should be defined to 1." +#endif + +#if defined (__ARM_FEATURE_BTI_DEFAULT) +#error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be undefined." +#endif -- 2.25.1