lkml.org 
[lkml]   [2009]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Anyone working on ftrace function graph support on ARM?
    On Tue, Mar 24, 2009 at 11:14:39PM +0100, Ingo Molnar wrote:
    >
    > * Frederic Weisbecker <fweisbec@gmail.com> wrote:
    >
    > > On Tue, Mar 24, 2009 at 10:48:46PM +0100, Ingo Molnar wrote:
    > > >
    > > > * Frederic Weisbecker <fweisbec@gmail.com> wrote:
    > > >
    > > > > Well it's a very naive listing, there are sometimes some problems.
    > > > > For example on x86-64, I had to save even some non-scratch
    > > > > registers before calling the return hook, I still don't know why.
    > > >
    > > > btw., which are those registers?
    > > >
    > > > Ingo
    > >
    > >
    > > I would expect to only save rax,rdi,rsi,rdx,rcx,r8,r9 which are
    > > used for parameters.
    >
    > > And I had some crashes until I append r10 and r11 which actually
    > > are scratch if I'm not wrong, but since they are scratch and are
    > > not used for arguments, I thought they didn't need to be saved.
    > >
    > > Well, I think there were some code flow cases I was missing.
    >
    > Correct, r10 and r11 are clobbered registers too - and you need to
    > save them too in mcount methods.
    >
    > The reason is that mcount has a special calling convention - it's
    > not just about not destroying arguments - GCC can keep data in r10
    > or r11 scratch registers across function calls as well - for example
    > for relatively static functions that are in its local optimization
    > scope.
    >
    > If GCC can prove that the local scope function itself does not
    > clobber r10/r11, it does not have to clobber them across the
    > function call. But the mcount() callback still gets inserted.
    >
    > So the rule is: mcount must not destroy _any_ register state.
    > (beyond flags)
    >
    > ngo


    Aah, ok, understood!
    Thanks.



    \
     
     \ /
      Last update: 2009-03-24 23:57    [W:4.042 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site