Hi all, This patch adds an effective target check to the pointer authentication B key execution tests. These were failing with an assembler error when run with a non-recent version of binutils, and this change will instead make them unsupported in such cases.
Tested with a recent version of binutils where it passes, and with a non-recent version where it is unsupported. OK for trunk? Sam gcc/testsuite 2019-08-02 Sam Tebbs<sam.te...@arm.com> * lib/target-supports.exp (check_effective_target_arm_v8_4a_bkey_directive): New proc. * g++.target/aarch64/return_address_sign_b_exception.C, return_address_sign_ab_exception.C: Add dg-require-effective-target checks.
diff --git a/gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C b/gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C index 520cd18..ead11de 100644 --- a/gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C +++ b/gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C @@ -1,5 +1,6 @@ /* { dg-do run } */ /* { dg-options "--save-temps" } */ +/* { dg-require-effective-target arm_v8_3a_bkey_directive } */ __attribute__((target("branch-protection=pac-ret+leaf"))) int foo_a () { diff --git a/gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C b/gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C index eab2869..2f82731 100644 --- a/gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C +++ b/gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C @@ -1,5 +1,6 @@ /* { dg-do run } */ /* { dg-options "-mbranch-protection=pac-ret+leaf+b-key --save-temps" } */ +/* { dg-require-effective-target arm_v8_3a_bkey_directive } */ int foo () { throw 22; diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 815e837..3c50b89 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -9463,6 +9463,16 @@ proc check_effective_target_arm_v8_3a_complex_neon_hw { } { } [add_options_for_arm_v8_3a_complex_neon ""]] } +# Return 1 if the assembler supports assembling the Armv8.3 pointer authentication B key directive +proc check_effective_target_arm_v8_3a_bkey_directive { } { + return [check_no_compiler_messages cet object { + int main(void) { + asm (".cfi_b_key_frame"); + return 0; + } + }] +} + # Returns 1 if the target is using glibc, 0 otherwise. proc check_effective_target_glibc { } {