On Thu, 17 Nov 2016, Christophe Lyon wrote: > On 16 November 2016 at 10:35, Richard Biener <rguent...@suse.de> wrote: > > > > Since GCC 4.6 we aggressively prune bodies of GNU extern inline functions > > which means that instrumenting them via -finstrument-functions doesn't > > work because that takes the address of the function. Fixed by not > > instrumenting those functions (we still instrument regular always-inline > > functions and that works as expected). > > > > In the PR this affects intrinsic header functions but it will also > > affect fortify wrappers and in both cases instrumenting is undesirable > > I think. > > > > Bootstrap / regtest in progress on x86_64-unknown-linux-gnu. > > > > Richard. > > > > 2016-11-16 Richard Biener <rguent...@suse.de> > > > > PR middle-end/78333 > > * gimplify.c (gimplify_function_tree): Do not instrument > > GNU extern inline functions. > > > > * gcc.dg/pr78333.c: New testcase. > > > > Index: gcc/gimplify.c > > =================================================================== > > --- gcc/gimplify.c (revision 242408) > > +++ gcc/gimplify.c (working copy) > > @@ -12547,6 +12559,10 @@ gimplify_function_tree (tree fndecl) > > /* ??? Add some way to ignore exceptions for this TFE. */ > > if (flag_instrument_function_entry_exit > > && !DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (fndecl) > > + /* Do not instrument extern inline functions. */ > > + && !(DECL_DECLARED_INLINE_P (fndecl) > > + && DECL_EXTERNAL (fndecl) > > + && DECL_DISREGARD_INLINE_LIMITS (fndecl)) > > && !flag_instrument_functions_exclude_p (fndecl)) > > { > > tree x; > > Index: gcc/testsuite/gcc.dg/pr78333.c > > =================================================================== > > --- gcc/testsuite/gcc.dg/pr78333.c (revision 0) > > +++ gcc/testsuite/gcc.dg/pr78333.c (working copy) > > @@ -0,0 +1,9 @@ > > +/* { dg-do link } */ > > +/* { dg-options "-finstrument-functions" } */ > > + > > +extern inline __attribute__((gnu_inline, always_inline)) int foo () { } > > +int main() > > +{ > > + foo (); > > + return 0; > > +} > > Hi Richard, > > The new testcase fails to link on bare-metal targets (arm/aarch64): > /cc4ckSGA.o: In function `main': > pr78333.c:(.text+0x1c): undefined reference to `__cyg_profile_func_enter' > pr78333.c:(.text+0x34): undefined reference to `__cyg_profile_func_exit' > collect2: error: ld returned 1 exit status > > I understand that we really want this test to have dg-do link unlike most > of the other tests using -finstrument-functions, so we do not want to > switch to dg-do compile.
Yes, we need a link test (maybe a very carefully crafted scan-assembler test would also work...) > Do we want to skip this test in bare-metal configs, or is it a new bug? Is there some dg- target for "bare metal"? Can we use ! freestanding? Otherwise does abusing sth like { dg-require-profiling "-finstrument-functions" } work? (seems to just test if -pg works) Thanks, Richard.