On Thu, May 23, 2019 at 1:09 AM Iain Sandoe <i...@sandoe.co.uk> wrote: > > Although this is a Darwin-specific change, I need to touch > target-supports.exp and several tests in i386.exp. > > tested on x86_64-darwin and x86_64-linux-gnu > doc change tested with “make pdf”, > > OK for trunk? > backports? (where the tests fail). > > gcc/ > > * config/i386/darwin.h: Reject -mfentry*. > * doc/sourcebuild.texi: Document mfentry target support. > > gcc/testsuite/ > > * lib/target-supports.exp (check_effective_target_mfentry): New.
This procedure is written in a wrong way. You should either fix it as suggested below, or write it in a way, similar to e.g. check_effective_target_cet. Uros. > * gcc.target/i386/fentry-override.c: Require effective target mfentry, > * gcc/testsuite/gcc.target/i386/fentry.c: Likewise > * gcc.target/i386/fentryname1.c: Likewise > * gcc.target/i386/fentryname2.c: Likewise > * gcc.target/i386/fentryname3.c: Likewise > * gcc.target/i386/nop-mcount.c: Likewise > * gcc.target/i386/pr82699-2.c: Likewise > * gcc.target/i386/pr82699-4.c: Likewise > * gcc.target/i386/pr82699-5.c: Likewise > * gcc.target/i386/pr82699-6.c: Likewise > * gcc.target/i386/returninst1.c: Likewise > * gcc.target/i386/returninst2.c: Likewise > * gcc.target/i386/returninst3.c : Likewise > > diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h > index fe11ec9..1128428 100644 > --- a/gcc/config/i386/darwin.h > +++ b/gcc/config/i386/darwin.h > @@ -132,7 +132,8 @@ extern int darwin_emit_branch_islands; > #define CC1_SPEC "%(cc1_cpu) \ > %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \ > %{g: %{!fno-eliminate-unused-debug-symbols: > -feliminate-unused-debug-symbols }} \ > - %{mx32:%eDarwin is not an mx32 platform}" \ > + %{mx32:%eDarwin is not an mx32 platform} \ > + %{mfentry*:%eDarwin does not support -mfentry or associated options}" \ > DARWIN_CC1_SPEC > > #undef ASM_SPEC > diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi > index cf12d74..546af7f 100644 > --- a/gcc/doc/sourcebuild.texi > +++ b/gcc/doc/sourcebuild.texi > @@ -2382,6 +2382,10 @@ Target supports compiling @code{aes} instructions. > @item fma4 > Target supports compiling @code{fma4} instructions. > > +@item mfentry > +Target supports the @code{-mfentry} option that alters the > +position of profiling calls such that they precede the prologue. > + > @item ms_hook_prologue > Target supports attribute @code{ms_hook_prologue}. > > diff --git a/gcc/testsuite/gcc.target/i386/fentry-override.c > b/gcc/testsuite/gcc.target/i386/fentry-override.c > index 7bc5fc4..efba1bf 100644 > --- a/gcc/testsuite/gcc.target/i386/fentry-override.c > +++ b/gcc/testsuite/gcc.target/i386/fentry-override.c > @@ -1,5 +1,6 @@ > /* Test -mfentry override */ > /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-mfentry" } */ > /* { dg-final { scan-assembler-not "__fentry__" } } */ > /* Origin: Andi Kleen */ > diff --git a/gcc/testsuite/gcc.target/i386/fentry.c > b/gcc/testsuite/gcc.target/i386/fentry.c > index 2449e75..28edd10 100644 > --- a/gcc/testsuite/gcc.target/i386/fentry.c > +++ b/gcc/testsuite/gcc.target/i386/fentry.c > @@ -1,5 +1,6 @@ > /* Test -mfentry */ > /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-fprofile -mfentry" } */ > /* { dg-final { scan-assembler "__fentry__" } } */ > /* Origin: Andi Kleen */ > diff --git a/gcc/testsuite/gcc.target/i386/fentryname1.c > b/gcc/testsuite/gcc.target/i386/fentryname1.c > index 6d2e76d..1265342 100644 > --- a/gcc/testsuite/gcc.target/i386/fentryname1.c > +++ b/gcc/testsuite/gcc.target/i386/fentryname1.c > @@ -1,4 +1,5 @@ > /* { dg-do compile } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -mfentry-name=foo" } */ > /* { dg-final { scan-assembler "call.*foo" } } */ > /* { dg-final { scan-assembler "call.*bar" } } */ > diff --git a/gcc/testsuite/gcc.target/i386/fentryname2.c > b/gcc/testsuite/gcc.target/i386/fentryname2.c > index 7d102bf..c51c5d1 100644 > --- a/gcc/testsuite/gcc.target/i386/fentryname2.c > +++ b/gcc/testsuite/gcc.target/i386/fentryname2.c > @@ -1,4 +1,5 @@ > /* { dg-do compile } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -mrecord-mcount -mfentry-section=foo" } */ > /* { dg-final { scan-assembler "section.*foo" } } */ > /* { dg-final { scan-assembler "section.*bar" } } */ > diff --git a/gcc/testsuite/gcc.target/i386/fentryname3.c > b/gcc/testsuite/gcc.target/i386/fentryname3.c > index 777f4e4..5688109 100644 > --- a/gcc/testsuite/gcc.target/i386/fentryname3.c > +++ b/gcc/testsuite/gcc.target/i386/fentryname3.c > @@ -1,4 +1,5 @@ > /* { dg-do compile } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry" } */ > /* { dg-final { scan-assembler "section.*__entry_loc" } } */ > /* { dg-final { scan-assembler "0x0f, 0x1f, 0x44, 0x00, 0x00" } } */ > diff --git a/gcc/testsuite/gcc.target/i386/nop-mcount.c > b/gcc/testsuite/gcc.target/i386/nop-mcount.c > index a8e14bc..a5f8d27 100644 > --- a/gcc/testsuite/gcc.target/i386/nop-mcount.c > +++ b/gcc/testsuite/gcc.target/i386/nop-mcount.c > @@ -1,5 +1,6 @@ > /* Test -mnop-mcount */ > /* { dg-do compile { target { *-*-linux* && nonpic } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -mrecord-mcount -mnop-mcount" } */ > /* { dg-final { scan-assembler-not "__fentry__" } } */ > /* Origin: Andi Kleen */ > diff --git a/gcc/testsuite/gcc.target/i386/pr82699-2.c > b/gcc/testsuite/gcc.target/i386/pr82699-2.c > index 07a4ccb..c43cf44 100644 > --- a/gcc/testsuite/gcc.target/i386/pr82699-2.c > +++ b/gcc/testsuite/gcc.target/i386/pr82699-2.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target *-*-linux* } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-O2 -fno-pic -fcf-protection -pg -mfentry > -fasynchronous-unwind-tables" } */ > /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */ > > diff --git a/gcc/testsuite/gcc.target/i386/pr82699-4.c > b/gcc/testsuite/gcc.target/i386/pr82699-4.c > index 3cc03db..719566b 100644 > --- a/gcc/testsuite/gcc.target/i386/pr82699-4.c > +++ b/gcc/testsuite/gcc.target/i386/pr82699-4.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-O2 -fpic -fcf-protection -pg -mfentry > -fasynchronous-unwind-tables" } */ > /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */ > > diff --git a/gcc/testsuite/gcc.target/i386/pr82699-5.c > b/gcc/testsuite/gcc.target/i386/pr82699-5.c > index 0c547e2..ac3c1ae 100644 > --- a/gcc/testsuite/gcc.target/i386/pr82699-5.c > +++ b/gcc/testsuite/gcc.target/i386/pr82699-5.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target *-*-linux* } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-O2 -fcf-protection -mfentry -fasynchronous-unwind-tables" > } */ > /* { dg-additional-options "-fno-pic" { target ia32 } } */ > /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */ > diff --git a/gcc/testsuite/gcc.target/i386/pr82699-6.c > b/gcc/testsuite/gcc.target/i386/pr82699-6.c > index ff6bae7..0b595f4 100644 > --- a/gcc/testsuite/gcc.target/i386/pr82699-6.c > +++ b/gcc/testsuite/gcc.target/i386/pr82699-6.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target *-*-linux* } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-fno-pic -O2 -fcf-protection -pg -mfentry -mrecord-mcount > -mnop-mcount -fasynchronous-unwind-tables" } */ > /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */ > > diff --git a/gcc/testsuite/gcc.target/i386/returninst1.c > b/gcc/testsuite/gcc.target/i386/returninst1.c > index d7ecc41..133fdee 100644 > --- a/gcc/testsuite/gcc.target/i386/returninst1.c > +++ b/gcc/testsuite/gcc.target/i386/returninst1.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target { ! ia32 } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -minstrument-return=call -mrecord-return" } */ > /* { dg-final { scan-assembler "call.*__return__" } } */ > /* { dg-final { scan-assembler "section.*return_loc" } } */ > diff --git a/gcc/testsuite/gcc.target/i386/returninst2.c > b/gcc/testsuite/gcc.target/i386/returninst2.c > index 4724b40..3629310 100644 > --- a/gcc/testsuite/gcc.target/i386/returninst2.c > +++ b/gcc/testsuite/gcc.target/i386/returninst2.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target { ! ia32 } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -minstrument-return=nop5 -mrecord-return" } */ > /* { dg-final { scan-assembler-times "0x0f, 0x1f, 0x44, 0x00, 0x00" 3 } } */ > /* { dg-final { scan-assembler "section.*return_loc" } } */ > diff --git a/gcc/testsuite/gcc.target/i386/returninst3.c > b/gcc/testsuite/gcc.target/i386/returninst3.c > index 14b4445..b84cc77 100644 > --- a/gcc/testsuite/gcc.target/i386/returninst3.c > +++ b/gcc/testsuite/gcc.target/i386/returninst3.c > @@ -1,4 +1,5 @@ > /* { dg-do compile { target { ! ia32 } } } */ > +/* { dg-require-effective-target mfentry } */ > /* { dg-options "-pg -mfentry -minstrument-return=call" } */ > /* { dg-final { scan-assembler-not "call.*__return__" } } */ > > diff --git a/gcc/testsuite/lib/target-supports.exp > b/gcc/testsuite/lib/target-supports.exp > index 3bd6e81..a153366 100644 > --- a/gcc/testsuite/lib/target-supports.exp > +++ b/gcc/testsuite/lib/target-supports.exp > @@ -9359,3 +9359,17 @@ proc check_effective_target_llvm_binutils { } { > expr { [istarget amdgcn*-*-*] > || [check_effective_target_offload_gcn] }}] > } > + > +# Return 1 if the compiler supports '-mfentry'. > + > +proc check_effective_target_mfentry { } { > + return [check_cached_effective_target mentry_available { > + if { !([istarget i?86-*-*] || [istarget x86_64-*-*]) } { > + return 0 expr 0 > + } else { > + return [check_no_compiler_messages mfentry object { no "return" here. > + void foo (void) { } > + } "-mfentry"] > + } > + }] > +} >