Richard Earnshaw via Gcc-patches <gcc-patches@gcc.gnu.org> writes: > On 28/10/2021 12:43, Tejas Belagod via Gcc-patches wrote: >> >>> -----Original Message----- >>> From: Gcc-patches <gcc-patches- >>> bounces+belagod=gcc.gnu....@gcc.gnu.org> On Behalf Of Tejas Belagod via >>> Gcc-patches >>> Sent: Friday, October 8, 2021 1:19 PM >>> To: gcc-patches@gcc.gnu.org >>> Subject: [Patch 6/7, Arm, GCC] Emit build attributes for PACBTI target >>> feature. >>> >>> Hi, >>> >>> This patch emits assembler directives for PACBTI build attributes as defined >>> by the ABI. (https://github.com/ARM-software/abi- >>> aa/releases/download/2021Q1/addenda32.pdf) >>> >>> Tested on arm-none-eabi. >>> >>> 2021-10-04 Tejas Belagod <tbela...@arm.com> >>> >>> gcc/ChangeLog: >>> >>> * config/arm/arm.c (arm_file_start): Emit EABI attributes for >>> Tag_PAC_extension, Tag_BTI_extension, TAG_BTI_use, >>> TAG_PACRET_use. >>> >>> gcc/testsuite/ChangeLog: >>> >>> * gcc.target/arm/acle/pacbti-m-predef-1.c: New test. >>> * gcc.target/arm/acle/pacbti-m-predef-3: New test. >>> * gcc.target/arm/acle/pacbti-m-predef-6.c: New test. >> This patch emits assembler directives for PACBTI build attributes >> as defined by the ABI. >> https://github.com/ARM-software/abi-aa/releases/download/2021Q1/addenda32.pdf >> 2021-10-25 Tejas Belagod <tbela...@arm.com> >> gcc/ChangeLog: >> * config/arm/arm.c (arm_file_start): Emit EABI attributes for >> Tag_PAC_extension, Tag_BTI_extension, TAG_BTI_use, TAG_PACRET_use. >> gcc/testsuite/ChangeLog: >> * gcc.target/arm/acle/pacbti-m-predef-1.c: New test. >> * gcc.target/arm/acle/pacbti-m-predef-3: New test. >> * gcc.target/arm/acle/pacbti-m-predef-6.c: New test. > > I'm not sure what the value of making these executable tests is. It > means that they can only be used when the test model has PAC/BTI > available. But they don't really test the PAC/BTI generation, so that > seems rather pointless. > > Better, IMO to make them simple compile/scan-assembler tests that > check the build attributes are correct. > > R.
Hi Richard, agreed. Please find attached the updated version of the patch. Thanks for reviewing Andrea
>From 6e54ecc3e20a3af8f72a38e55f086a33490353a0 Mon Sep 17 00:00:00 2001 From: Andrea Corallo <andrea.cora...@arm.com> Date: Mon, 6 Dec 2021 11:42:24 +0100 Subject: [PATCH] Emit build attributes for PACBTI target feature. gcc/ChangeLog: * config/arm/arm.c (arm_file_start): Emit EABI attributes for Tag_PAC_extension, Tag_BTI_extension, TAG_BTI_use, TAG_PACRET_use. gcc/testsuite/ChangeLog: * gcc.target/arm/acle/pacbti-m-predef-1.c: New test. * gcc.target/arm/acle/pacbti-m-predef-3: Likewise. * gcc.target/arm/acle/pacbti-m-predef-6.c: Likewise. * gcc.target/arm/acle/pacbti-m-predef-7.c: Likewise. Co-Authored-By: Tejas Belagod <tbela...@arm.com> --- gcc/config/arm/arm.c | 20 +++++++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-1.c | 16 +++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-3.c | 16 +++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-6.c | 15 ++++++++++++++ .../gcc.target/arm/acle/pacbti-m-predef-7.c | 16 +++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-1.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-3.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-6.c create mode 100644 gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index ee22acddee5..a493523fe30 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -28221,6 +28221,8 @@ static void arm_file_start (void) { int val; + bool pac = (aarch_ra_sign_scope != AARCH_FUNCTION_NONE); + bool bti = (aarch_enable_bti == 1); arm_print_asm_arch_directives (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); @@ -28291,6 +28293,24 @@ arm_file_start (void) arm_emit_eabi_attribute ("Tag_ABI_FP_16bit_format", 38, (int) arm_fp16_format); + if (TARGET_HAVE_PACBTI) + { + arm_emit_eabi_attribute ("Tag_PAC_extension", 50, 2); + arm_emit_eabi_attribute ("Tag_BTI_extension", 52, 2); + arm_emit_eabi_attribute ("TAG_BTI_use", 74, bti); + arm_emit_eabi_attribute ("TAG_PACRET_use", 76, pac); + } + else + { + if (pac || bti) + { + arm_emit_eabi_attribute ("Tag_PAC_extension", 50, 1); + arm_emit_eabi_attribute ("Tag_BTI_extension", 52, 1); + arm_emit_eabi_attribute ("TAG_BTI_use", 74, bti); + arm_emit_eabi_attribute ("TAG_PACRET_use", 76, pac); + } + } + if (arm_lang_output_object_attributes_hook) arm_lang_output_object_attributes_hook(); } diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-1.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-1.c new file mode 100644 index 00000000000..75d3e00ef64 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=pac-ret+bti --save-temps" } */ + +#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 + +/* { dg-final { scan-assembler-not "\.arch_extension pacbti" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 50, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 52, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 74, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 76, 1" } } */ diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-3.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-3.c new file mode 100644 index 00000000000..54fd42f16a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-3.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=pac-ret+leaf --save-temps" } */ + +#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 + +/* { dg-final { scan-assembler-not "\.arch_extension pacbti" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 50, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 52, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 74, 0" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 76, 1" } } */ diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-6.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-6.c new file mode 100644 index 00000000000..309910f7c55 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-6.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-additional-options " -mbranch-protection=bti --save-temps" } */ + +#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 undefined." +#endif +/* { dg-final { scan-assembler-not "\.arch_extension pacbti" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 50, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 52, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 74, 1" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 76, 0" } } */ diff --git a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c new file mode 100644 index 00000000000..bdf9131c142 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.1-m.main+pacbti --save-temps" } */ + +#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 undefined." +#endif + +/* { dg-final { scan-assembler "\.arch_extension pacbti" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 50, 2" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 52, 2" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 74, 0" } } */ +/* { dg-final { scan-assembler "\.eabi_attribute 76, 0" } } */ -- 2.20.1