testsuite, i386: Only check for cfi directives if supported [PR112729]

gcc.target/i386/apx-interrupt-1.c and two more tests FAIL on Solaris/x86
with the native assembler.  Like Darwin as, it doesn't support cfi
directives.  Instead of adding more and more targets in every affected
test, this patch introduces a cfi effective-target keyword to check for
the prerequisite.

Tested on i386-pc-solaris2.11 (as and gas), x86_64-pc-linux-gnu, and
x86_64-apple-darwin23.1.0.

2023-11-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/testsuite:
	PR testsuite/112729
	* lib/target-supports.exp (check_effective_target_cfi): New proc.
	* gcc.target/i386/apx-interrupt-1.c: Require cfi instead of
	skipping on *-*-darwin*.
	* gcc.target/i386/apx-push2pop2_force_drap-1.c: Likewise.
	* gcc.target/i386/apx-push2pop2-1.c: Likewise.

	gcc:
	PR testsuite/112729
	* doc/sourcebuild.texi (Effective-Target Keywords, Environment
	attributes): Document cfi.
This commit is contained in:
Rainer Orth 2023-11-29 14:52:04 +01:00
parent 58baac57d6
commit 8ee480441e
5 changed files with 18 additions and 6 deletions

View file

@ -2671,6 +2671,9 @@ The language for the compiler under test is C++.
@item c99_runtime
Target provides a full C99 runtime.
@item cfi
Target supports DWARF CFI directives.
@item correct_iso_cpp_string_wchar_protos
Target @code{string.h} and @code{wchar.h} headers provide C++ required
overloads for @code{strchr} etc. functions.

View file

@ -1,6 +1,5 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-do compile { target { { ! ia32 } && cfi } } } */
/* { dg-options "-mapx-features=egpr -m64 -O2 -mgeneral-regs-only -mno-cld -mno-push-args -maccumulate-outgoing-args -fomit-frame-pointer" } */
/* { dg-skip-if "does not emit .cfi_xxx" "*-*-darwin*" } */
extern void foo (void *) __attribute__ ((interrupt));
extern int bar (int);

View file

@ -1,6 +1,5 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-do compile { target { { ! ia32 } && cfi } } } */
/* { dg-options "-O2 -mapx-features=push2pop2 -fomit-frame-pointer" } */
/* { dg-skip-if "does not emit .cfi_xxx" "*-*-darwin*" } */
extern int bar (int);

View file

@ -1,6 +1,5 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-do compile { target { { ! ia32 } && cfi } } } */
/* { dg-options "-O2 -mapx-features=push2pop2 -fomit-frame-pointer -mforce-drap" } */
/* { dg-skip-if "does not emit .cfi_xxx" "*-*-darwin*" } */
#include "apx-push2pop2-1.c"

View file

@ -10082,6 +10082,18 @@ proc check_effective_target_c99_runtime { } {
}]
}
# Return 1 if the target supports DWARF CFI directives.
proc check_effective_target_cfi { } {
return [check_no_compiler_messages cfi assembly {
#ifdef __GCC_HAVE_DWARF2_CFI_ASM
/* ok */
#else
#error unsupported
#endif
} ""]
}
# Return 1 if the target provides the D runtime.
proc check_effective_target_d_runtime { } {