On 16/04/2024 04:48, Alexandre Oliva wrote: > > arm pac and bti tests that use -march=armv8.1-m.main get an implicit > -mthumb, that is incompatible with vxworks kernel mode. Declaring the > requirement for a 8.1-m.main-compatible toolchain is enough to avoid > those fails, because the toolchain feature test fails in kernel mode. > > Regstrapped on x86_64-linux-gnu. Also tested with gcc-13 on arm-, > aarch64-, x86- and x86_64-vxworks7r2. Ok to install? > > > for gcc/testsuite/ChangeLog > > * g++.target/arm/pac-1.C: Require arm_arch_v8_1m_main. > * gcc.target/arm/acle/pacbti-m-predef-11.c: Likewise. > * gcc.target/arm/acle/pacbti-m-predef-12.c: Likewise. > * gcc.target/arm/acle/pacbti-m-predef-7.c: Likewise. > * gcc.target/arm/bti-1.c: Likewise. > * gcc.target/arm/bti-2.c: Likewise. > --- > gcc/testsuite/g++.target/arm/pac-1.C | 1 + > .../gcc.target/arm/acle/pacbti-m-predef-11.c | 1 + > .../gcc.target/arm/acle/pacbti-m-predef-12.c | 1 + > .../gcc.target/arm/acle/pacbti-m-predef-7.c | 1 + > gcc/testsuite/gcc.target/arm/bti-1.c | 1 + > gcc/testsuite/gcc.target/arm/bti-2.c | 1 + > 6 files changed, 6 insertions(+) > > diff --git a/gcc/testsuite/g++.target/arm/pac-1.C > b/gcc/testsuite/g++.target/arm/pac-1.C > index f671a27b048c6..f48ad6cc5cb65 100644 > --- a/gcc/testsuite/g++.target/arm/pac-1.C > +++ b/gcc/testsuite/g++.target/arm/pac-1.C > @@ -2,6 +2,7 @@ > /* { dg-do compile } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" } } */ > /* { dg-options "-march=armv8.1-m.main+mve+pacbti > -mbranch-protection=pac-ret -mthumb -mfloat-abi=hard -g -O0" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */
The require-effective-target flags test whether a specific set of flags will make the compilation work, so they need to be used in conjunction with the corresponding dg-add-options flags that then apply those options. It isn't safe to just add a different architecture flag instead. So if you're going to use this effective target, you should use it along with "dg-add-options arm_arch_v8_1m_main" (ie the effective-target name minus the trailing '_ok'), and then replace dg-options with dg-additional-options adding the remaining flags. You can then remove the dg-skip-if as well because that's what the require-effective-target flag is doing. So something like dg-do compile dg-require-effective-target arm_arch_v8_1m_main_ok dg-add-options arm_arch_v8_1m_main dg-additional-options "-mbranch-protection=pac-ret -g -O0" But this test is also adding pacbti to the architecture flags, so it would probably be better to use v8_1m_main_pacbti_ok as the effective target. It's not identical to the options above, but it's probably sufficient for this test. Each test below will need checking for the exact flags that are needed for the test in question. > > __attribute__((noinline)) void > fn1 (int a, int b, int c) > 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 > index 6a5ae92c567f3..dba4f491cfea7 100644 > --- a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c > +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-11.c > @@ -1,6 +1,7 @@ > /* { dg-do compile } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" "-mfloat-abi=*" } } */ > /* { dg-options "-march=armv8.1-m.main+fp+pacbti" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ > > #if (__ARM_FEATURE_BTI != 1) > #error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be defined to 1." > 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 > index db40b17c3b030..308a41eb4ba4c 100644 > --- a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c > +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-12.c > @@ -1,6 +1,7 @@ > /* { dg-do compile } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" } } */ > /* { dg-options "-march=armv8-m.main+fp -mfloat-abi=softfp" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ > > #if defined (__ARM_FEATURE_BTI) > #error "Feature test macro __ARM_FEATURE_BTI should not be defined." > 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 > index 1b25907635e24..10836a84bde56 100644 > --- a/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c > +++ b/gcc/testsuite/gcc.target/arm/acle/pacbti-m-predef-7.c > @@ -1,6 +1,7 @@ > /* { dg-do compile } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" } } */ > /* { dg-additional-options "-march=armv8.1-m.main+pacbti+fp --save-temps > -mfloat-abi=hard" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ > > #if defined (__ARM_FEATURE_BTI_DEFAULT) > #error "Feature test macro __ARM_FEATURE_BTI_DEFAULT should be undefined." > diff --git a/gcc/testsuite/gcc.target/arm/bti-1.c > b/gcc/testsuite/gcc.target/arm/bti-1.c > index 79dd8010d2dab..34655387b55f5 100644 > --- a/gcc/testsuite/gcc.target/arm/bti-1.c > +++ b/gcc/testsuite/gcc.target/arm/bti-1.c > @@ -2,6 +2,7 @@ > /* { dg-do compile } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" } } */ > /* { dg-options "-march=armv8.1-m.main -mthumb -mfloat-abi=softfp > -mbranch-protection=bti --save-temps" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ > > int > main (void) > diff --git a/gcc/testsuite/gcc.target/arm/bti-2.c > b/gcc/testsuite/gcc.target/arm/bti-2.c > index 33910563849a4..3284aba3020cc 100644 > --- a/gcc/testsuite/gcc.target/arm/bti-2.c > +++ b/gcc/testsuite/gcc.target/arm/bti-2.c > @@ -3,6 +3,7 @@ > /* { dg-options "-Os" } */ > /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" > "-mcpu=*" } } */ > /* { dg-options "-march=armv8.1-m.main -mthumb -mfloat-abi=softfp > -mbranch-protection=bti --save-temps" } */ > +/* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ > > extern int f1 (void); > extern int f2 (void); > R.