linux-mips
[Top] [All Lists]

Re: how to get a process backtrace from kernel gdb?

To: Fuxin Zhang <fxzhang@ict.ac.cn>
Subject: Re: how to get a process backtrace from kernel gdb?
From: Ralf Baechle <ralf@linux-mips.org>
Date: Wed, 22 Mar 2006 11:32:03 +0000
Cc: Srinivas Kommu <kommu@hotmail.com>, linux-mips@linux-mips.org
In-reply-to: <442130DA.8060407@ict.ac.cn>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <4420940B.9030605@hotmail.com> <20060322105026.GA3129@linux-mips.org> <442130DA.8060407@ict.ac.cn>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.2.1i
On Wed, Mar 22, 2006 at 07:11:22PM +0800, Fuxin Zhang wrote:

> Are there any existing method/code to get a reliable back trace dump for
> oops? Kgdb is not usable here because I have no serial port. Do I need
> to copy gdb code to analysis the stack?

By all practical means the method used by get_wchan() in my previous
posting is safe.  A method that is also theoretically correct is a little
harder but could be constructed based on the gcc generated DWARF 2
debugging info.  IA64 does this for example.

> If I am not wrong, dump_stack() just print out any stack address falled
> in the text section, and that will make the result hard to understand.
> For example, I often find some interrupt functions mixed with normal
> function names and repeated functions, e.g.

You're absolutely right, dump_stack really needs to be fixed to be more
useful.  As it is it's generating alot of confusing output.  There are
two possible approaches here:

 a) Analyze the code with a simple frame unwinder along the lines of the
    get_wchan implementation.  Simple but possibly fragile as compilers
    continue to improve.
 b) Bite the bullet and use the DWARD 2 frame unwind info and code.  More
    complicated but will be a solid and correct solution albeit larger so
    not acceptable for small embedded devices.

I fear we may have to do both, 2) as the prefered solution and 1) as the
fallback solution.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>