lkml.org 
[lkml]   [2009]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] MIPS: Add option to pass return address location to _mcount. Was: [PATCH -v4 4/9] tracing: add static function tracer support for MIPS
    From
    Date
    Hi,

    On Sat, 2009-10-24 at 10:12 +0100, Richard Sandiford wrote:
    > Thanks for the patch.
    [...]
    > > How about this patch, I think it does what you suggest.
    > >
    > > When we pass -pg -mmcount-raloc, the address of the return address
    > > relative to sp is passed in $12 to _mcount. If the return address is
    > > not saved, $12 will be zero. I think this will work as registers are
    > > never saved with an offset of zero. $12 is a temporary register that is
    > > not part of the ABI.
    >
    > Hmm, well, the suggestion was to pass a pointer rather than an offset,
    > but both you and Wu Zhangjin seem to prefer the offset. Is there a
    > reason for that? I suggested a pointer because
    >
    > (a) they're more C-like
    > (b) they're just as quick and easy to compute
    > (c) MIPS doesn't have indexed addresses (well, except for a few
    > special cases) so the callee is going to have to compute the
    > pointer at some stage anyway
    >

    Agree with you.

    if not with -fno-omit-frame-pointer, we also need to calculate the frame
    pointer, and then plus it with the offset. with pointer, we can get it
    directly, but it may need a more instruction(lui..., addiu...) for
    loading the pointer. of course, at last, the pointer will save more time
    for us :-)

    so, David, could you please use pointer instead? and then I will test it
    asap(cloning the latest gcc currently). thanks!

    > (It sounds from Wu Zhangjin's reply like he'd alread suggested the
    > offset thing before I sent my message. If so, sorry for not using
    > that earlier message as context.)
    >

    It doesn't matter, Seems at that time, you were not added in the CC
    list, but added by David Daney later.

    > > + if (TARGET_RALOC)
    > > + {
    > > + /* If TARGET_RALOC load $12 with the offset of the ra save
    > > + location. */
    > > + if (mips_raloc_in_delay_slot_p())
    > > + emit_small_ra_offset = 1;
    > > + else
    > > + {
    > > + if (Pmode == DImode)
    > > + fprintf (file, "\tdli\t%s,%d\t\t# offset of ra\n", reg_names[12],
    > > + cfun->machine->frame.ra_fp_offset);
    > > + else
    > > + fprintf (file, "\tli\t%s,%d\t\t# offset of ra\n", reg_names[12],
    > > + cfun->machine->frame.ra_fp_offset);
    > > + }
    > > + }
    >
    > We shouldn't need to do the delay slot dance. With either the pointer
    > ((D)LA) or offset ((D)LI) approach, the macro won't use $at, so we can
    > insert the new code immediately before the jump, leaving the assembler
    > to fill the delay slot. This is simpler and should mean that the delay
    > slot gets filled more often in the multi-insn-macro cases.
    >
    > Looks good otherwise, but I'd be interested in other suggestions for
    > the option name. I kept misreading "raloc" as a typo for "reloc".
    >

    The same misreading to me, what about -mmcount-ra-loc? add one "-", or
    -mcount-ra-location?

    BTW: Just made dynamic function tracer for MIPS support module tracing
    with the help of -mlong-calls. after some more tests, I will send it as
    -v5 revision later. hope the -v6 revision work with this new feature of
    gcc from David Daney.

    Regards,
    Wu Zhangjin



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