[<prev] [next>] [day] [month] [year] [list]
Message-ID: <x7qy0oo5rggoe62v832pgmom.1258663715758@email.android.com>
Date: Thu, 19 Nov 2009 12:48:35 -0800
From: "H. Peter Anvin" <hpa@...or.com>
To: Frederic Weisbecker <fweisbec@...il.com>,
Steven Rostedt <rostedt@...dmis.org>
CC: David Daney <ddaney@...iumnetworks.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Andrew Haley <aph@...hat.com>,
Richard Guenther <richard.guenther@...il.com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...e.hu>,
LKML <linux-kernel@...r.kernel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Heiko Carstens <heiko.carstens@...ibm.com>,
feng.tang@...el.com, Peter Zijlstra <peterz@...radead.org>,
jakub@...hat.com, gcc@....gnu.org
Subject: Re: BUG: GCC-4.4.x changes the function frame on some functions
On i386, if we call __fentry__ immediately on entry the return address will be in 4(%esp), so I fail to see how you could not reliably have the return address. Other arches would have different constraints, of course.
"Frederic Weisbecker" <fweisbec@...il.com> wrote:
>On Thu, Nov 19, 2009 at 03:05:41PM -0500, Steven Rostedt wrote:
>> On Thu, 2009-11-19 at 20:46 +0100, Frederic Weisbecker wrote:
>> > On Thu, Nov 19, 2009 at 02:28:06PM -0500, Steven Rostedt wrote:
>>
>> > > <function>:
>> > > call __fentry__
>> > > [...]
>> > >
>> > >
>> > > -- Steve
>> >
>> >
>> > I would really like this. So that we can forget about other possible
>> > further suprises due to sophisticated function prologues beeing before
>> > the mcount call.
>> >
>> > And I guess that would fix it in every archs.
>>
>> Well, other archs use a register to store the return address. But it
>> would also be easy to do (pseudo arch assembly):
>>
>> <function>:
>> mov lr, (%sp)
>> add 8, %sp
>> blr __fentry__
>> sub 8, %sp
>> mov (%sp), lr
>>
>>
>> That way the lr would have the current function, and the parent would
>> still be at 8(%sp)
>>
>
>
>Yeah right, we need at least such very tiny prologue for
>archs that store return addresses in a reg.
>
>
>> >
>> > That said, Linus had a good point about the fact there might other uses
>> > of mcount even more tricky than what does the function graph tracer,
>> > outside the kernel, and those may depend on the strict ABI assumption
>> > that 4(ebp) is always the _real_ return address, and that through all
>> > the previous stack call. This is even a concern that extrapolates the
>> > single mcount case.
>>
>> As I am proposing a new call. This means that mcount stay as is for
>> legacy reasons. Yes I know there exists the -finstrument-functions but
>> that adds way too much bloat to the code. One single call to the
>> profiler is all I want.
>
>
>Sure, the purpose is not to change the existing -mcount thing.
>What I meant is that we could have -mcount and -real-ra-before-fp
>at the same time to guarantee fp + 4 is really what we want while
>using -mcount.
>
>The __fentry__ idea is more neat, but the guarantee of a real pointer
>to the return address is still something that lacks.
>
>
>> >
>> > So I wonder that actually the real problem is the lack of something that
>> > could provide this guarantee. We may need a -real-ra-before-fp (yeah
>> > I suck in naming).
>>
>> Don't worry, so do the C compiler folks, I mean, come on "mcount"?
>
>
>I guess it has been first created for the single purpose of counting
>specific functions but then it has been used for wider, unpredicted uses :)
>
--
Sent from my mobile phone. Please excuse any lack of formatting.
Powered by blists - more mailing lists