This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: -ffunction-sections and profiling


Tim Abbott <tabbott@MIT.EDU> writes:

> I'd like to be able to compile the Linux kernel with both
> -ffunction-sections and profiling (-pg).  Using gcc with both
> -ffunction-sections and -pg causes the following warning to be
> printed:
>
> "warning: -ffunction-sections disabled; it makes profiling impossible"
>
> and indeed -ffunction-sections is disabled.  I've not been able to
> find any documentation or mailing list threads that explain this
> conflict, though the discussion starting at [1] speculates it is
> related to the labels emitted for profiling support, and notes that
> the code for disabling -ffunction-sections was written when
> -ffunction-sections was introduced back in 1996.
>
> However, I've compiled gcc 4.3.2 on i386 after removing the code that
> disables -ffunction-sections when profiling is enabled.  It does
> generate working -ffunction-sections code that has mcount calls at the
> start of each function.  I've also tried gprof with a simple program
> compiled with -ffunction-sections -pg, and it gave similar (though
> definitely not identical) results to those from using gprof with the
> same program compiled with just -pg.
>
> So, why does gcc disable -ffunction-sections when compiling with -pg?

I think it is no longer necessary.  In some cases gcc uses a counter
for every function, which it does by switching into the .data section
before the function and declaring the counter.  Back when
-ffunction-sections was introduced, the profiling code would then
switch back to the general .text section rather than to the section
where the function was supposed to go.  That is long fixed.  I suspect
that this limitation can be removed.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]