linux-mips.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: rostedt@goodmis.org
Cc: Wu Zhangjin <wuzhangjin@gmail.com>,
	linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Ralf Baechle <ralf@linux-mips.org>,
	Nicholas Mc Guire <der.herr@hofr.at>
Subject: Re: [PATCH -v4 9/9] tracing: add function graph tracer support for MIPS
Date: Wed, 21 Oct 2009 09:37:41 -0700	[thread overview]
Message-ID: <4ADF38D5.9060100@caviumnetworks.com> (raw)
In-Reply-To: <1256141540.18347.3118.camel@gandalf.stny.rr.com>

Steven Rostedt wrote:
> On Wed, 2009-10-21 at 22:35 +0800, Wu Zhangjin wrote:
>> The implementation of function graph tracer for MIPS is a little
>> different from X86.
>>
>> in MIPS, gcc(with -pg) only transfer the caller's return address(at) and
>> the _mcount's return address(ra) to us.
>>
>> move at, ra
>> jal _mcount
>>
>> in the function is a leaf, it will no save the return address(ra):
>>
>> ffffffff80101298 <au1k_wait>:
>> ffffffff80101298:       67bdfff0        daddiu  sp,sp,-16
>> ffffffff8010129c:       ffbe0008        sd      s8,8(sp)
>> ffffffff801012a0:       03a0f02d        move    s8,sp
>> ffffffff801012a4:       03e0082d        move    at,ra
>> ffffffff801012a8:       0c042930        jal     ffffffff8010a4c0 <_mcount>
>> ffffffff801012ac:       00020021        nop
>>
>> so, we can hijack it directly in _mcount, but if the function is non-leaf, the
>> return address is saved in the stack.
>>
>> ffffffff80133030 <copy_process>:
>> ffffffff80133030:       67bdff50        daddiu  sp,sp,-176
>> ffffffff80133034:       ffbe00a0        sd      s8,160(sp)
>> ffffffff80133038:       03a0f02d        move    s8,sp
>> ffffffff8013303c:       ffbf00a8        sd      ra,168(sp)
>> ffffffff80133040:       ffb70098        sd      s7,152(sp)
>> ffffffff80133044:       ffb60090        sd      s6,144(sp)
>> ffffffff80133048:       ffb50088        sd      s5,136(sp)
>> ffffffff8013304c:       ffb40080        sd      s4,128(sp)
>> ffffffff80133050:       ffb30078        sd      s3,120(sp)
>> ffffffff80133054:       ffb20070        sd      s2,112(sp)
>> ffffffff80133058:       ffb10068        sd      s1,104(sp)
>> ffffffff8013305c:       ffb00060        sd      s0,96(sp)
>> ffffffff80133060:       03e0082d        move    at,ra
>> ffffffff80133064:       0c042930        jal     ffffffff8010a4c0 <_mcount>
>> ffffffff80133068:       00020021        nop
>>
>> but we can not get the exact stack address(which saved ra) directly in
>> _mcount, we need to search the content of at register in the stack space
>> or search the "s{d,w} ra, offset(sp)" instruction in the text. 'Cause we
>> can not prove there is only a match in the stack space, so, we search
>> the text instead.
>>
>> as we can see, if the first instruction above "move at, ra" is "move s8,
>> sp"(move fp, sp), it is a leaf function, so we hijack the at register
> 
> Are you sure it will always be the first instruction for leaf registers.
> You may want to search for that instruction and stop on it. If you have
> not yet found the storage of ra in the stack, then you know it is a leaf
> function.
> 

There is no deterministic way to identify MIPS function prologs.  This 
is especially true for leaf functions, but also for functions with 
multiple return sites.

For certain GCC versions there may be a set of command line options that 
would give good results, but in general it is not possible.  Attempts at 
fast backtrace generation using code inspection are not reliable and 
will invariably result in faults and panics when they fail.

David Daney

  reply	other threads:[~2009-10-21 16:38 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1256135456.git.wuzhangjin@gmail.com>
2009-10-21 14:34 ` [PATCH -v4 1/9] tracing: convert trace_clock_local() as weak function Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 2/9] MIPS: add mips_timecounter_read() to get high precision timestamp Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 3/9] tracing: add MIPS specific trace_clock_local() Wu Zhangjin
2009-10-21 14:46   ` Steven Rostedt
2009-10-21 15:11     ` Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 4/9] tracing: add static function tracer support for MIPS Wu Zhangjin
2009-10-21 15:24   ` Steven Rostedt
2009-10-22 17:47     ` Wu Zhangjin
2009-10-22 17:59       ` Steven Rostedt
2009-10-22 18:34         ` Wu Zhangjin
2009-10-22 18:34       ` David Daney
2009-10-22 19:13         ` Wu Zhangjin
     [not found]         ` <19168.49354.525249.654494@ropi.home>
2009-10-22 20:52           ` Steven Rostedt
2009-10-22 21:09             ` Frederic Weisbecker
2009-10-22 21:29             ` Adam Nemet
2009-10-22 21:55               ` Steven Rostedt
2009-10-23  1:09                 ` Wu Zhangjin
2009-10-22 22:17         ` Richard Sandiford
2009-10-23  9:32           ` Wu Zhangjin
2009-10-23 22:48           ` [PATCH] MIPS: Add option to pass return address location to _mcount. Was: " David Daney
2009-10-24  9:12             ` Richard Sandiford
2009-10-24 15:53               ` Wu Zhangjin
2009-10-26 19:08               ` [PATCH] MIPS: Add option to pass return address location to _mcount David Daney
2009-10-27  1:04                 ` Wu Zhangjin
2009-10-27 21:20                 ` Richard Sandiford
2009-10-29  6:44                   ` Wu Zhangjin
2009-10-29 16:32                     ` David Daney
2009-10-29 18:11                   ` David Daney
2009-10-23  7:21         ` [PATCH -v4 4/9] tracing: add static function tracer support for MIPS Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 5/9] tracing: enable HAVE_FUNCTION_TRACE_MCOUNT_TEST " Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 6/9] tracing: add an endian argument to scripts/recordmcount.pl Wu Zhangjin
2009-10-21 15:26   ` Steven Rostedt
2009-10-21 14:35 ` [PATCH -v4 7/9] tracing: add dynamic function tracer support for MIPS Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 8/9] tracing: not trace mips_timecounter_init() in MIPS Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 9/9] tracing: add function graph tracer support for MIPS Wu Zhangjin
2009-10-21 15:21   ` Wu Zhangjin
2009-10-21 16:14     ` Steven Rostedt
2009-10-21 16:12   ` Steven Rostedt
2009-10-21 16:37     ` David Daney [this message]
2009-10-21 16:46       ` Steven Rostedt
2009-10-21 17:07         ` David Daney
2009-10-21 17:23           ` Steven Rostedt
2009-10-21 17:48             ` David Daney
2009-10-21 18:09               ` Steven Rostedt
2009-10-21 18:17                 ` Nicholas Mc Guire
2009-10-21 18:34                   ` Steven Rostedt
2009-10-21 18:25                 ` David Daney
2009-10-22 11:38             ` Wu Zhangjin
2009-10-22 13:17               ` Steven Rostedt
2009-10-22 13:31                 ` Wu Zhangjin
2009-10-22 15:20                   ` Steven Rostedt
2009-10-22 15:59               ` David Daney
2009-10-22 16:11                 ` Steven Rostedt
2009-10-22 16:16                   ` David Daney
2009-10-22 18:00                     ` Steven Rostedt
2009-10-22 17:39     ` Wu Zhangjin
2009-10-22 17:58       ` Steven Rostedt
     [not found]   ` <26008418.post@talk.nabble.com>
2009-10-25 10:48     ` Wu Zhangjin
2009-10-25 10:48       ` Wu Zhangjin
2009-10-25 13:37       ` Patrik Kluba
2009-10-25 13:37         ` Patrik Kluba
2009-10-25 14:22         ` Wu Zhangjin
2009-10-25 15:55       ` Richard Sandiford

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ADF38D5.9060100@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=der.herr@hofr.at \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=wuzhangjin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).