Message ID | 20150927090348.3c725ab4@kryten (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Sun, Sep 27, 2015 at 09:03:48AM +1000, Anton Blanchard wrote: > > On Sat, Sep 26, 2015 at 04:30:08PM +0200, Torsten Duwe wrote: > > > kernel. It is mapped to GCC's (4.8, FWIW) > > > __attribute__((no_instrument_function)), which, to my surprise, > > > works for -p and -pg nicely, but does not affect -mprofile-kernel > > > at all! > > This sounds like the issue below, fixed by Pat. > > diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c > index 289b52c..a479219 100644 > --- a/gcc/config/rs6000/rs6000.c > +++ b/gcc/config/rs6000/rs6000.c > @@ -23198,7 +23198,7 @@ rs6000_output_function_prologue (FILE *file, > /* Output -mprofile-kernel code. This needs to be done here instead of > in output_function_profile since it must go after the ELFv2 ABI > local entry point. */ > - if (TARGET_PROFILE_KERNEL) > + if (TARGET_PROFILE_KERNEL && crtl->profile) > { > gcc_assert (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2); > gcc_assert (!TARGET_32BIT); Yes, indeed! I can see the fix in the 4.9 branch, it's in 5.x and 6.x, but _not_ in 4.8.5 :( That's what you get when you use "stable" distributions. Thanks a lot for the pointer! Torsten
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2781bd0..0788036 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-15 Pat Haugen <pthaugen@us.ibm.com> + + * config/rs6000/rs6000.c (rs6000_output_function_prologue): Check if + current procedure should be profiled. + 2014-01-15 Andrew Pinski <apinski@cavium.com> * config/aarch64/aarch64.c (aarch64_register_move_cost): Correct cost diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 289b52c..a479219 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23198,7 +23198,7 @@ rs6000_output_function_prologue (FILE *file, /* Output -mprofile-kernel code. This needs to be done here instead of in output_function_profile since it must go after the ELFv2 ABI local entry point. */ - if (TARGET_PROFILE_KERNEL) + if (TARGET_PROFILE_KERNEL && crtl->profile) { gcc_assert (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2); gcc_assert (!TARGET_32BIT);