On Mon, Sep 24, 2012 at 9:30 PM, Dave Anderson <anderson(a)redhat.com> wrote:
 ----- Original Message -----
 >
 > Dave,
 >
 >
 > On Fri, Sep 21, 2012 at 9:44 PM, Dave Anderson < anderson(a)redhat.com
 > > wrote:
 >
 >
 >
 >
 >
 > ----- Original Message -----
 > >
 > > Hi Dave,
 > >
 > >
 > > I notice there was some discussion around on enabling
 > > the display function parameters feature for crash tool.
 > > Like this one:
 > > 
http://www.redhat.com/archives/crash-utility/2009-May/msg00016.html
 >
 > Yes, it seems to come up every few years. People have tried, but it
 > has never come to fruition.
 >
 >
 > >
 > > Although the answer seems to be quite clear, it should be hard to
 > > support such feature. But does this feature cannot be done anyway?
 > > I think this feature would be great in assisting kernel debug.
 > >
 > > The main feature I require, first should be know each param's value in
 the call stack.
 > > Then it is better to know each call stack's param's name.
 > >
 > > Like for do_vfs_ioctl function, it is better to display as:
 > > do_vfs_ioctl(filp=xxx, fd=xxx, cmd=xxx, arg=xxx)
 > >
 > > Do you have any idea on how this could be implemented?
 >
 > No I don't.
 >
 >
 >
 > Sorry for asking the stupid question, but I notice that we could
 > get the structure member in crash by "struct" command:
 >
 > crash> struct stackframe
 > struct stackframe {
 > long unsigned int fp;
 > long unsigned int sp;
 > long unsigned int lr;
 > long unsigned int pc;
 > }
 > SIZE: 16
 >
 >
 > I check the crash code, and find cmd_struct use gdb interface to
 > parse it out.
 >
 >
 > And the gdb itself seems already could parse out function argument[1],
 so could
 > we still use similar mechanism as the "struct" command to implement a
 "func"
 > command, which could shows the function declaration?
 You can either use the "whatis" command to get the function declaration:
  crash> help whatis
  NAME
    whatis - search symbol table for data or type information
  SYNOPSIS
    whatis [struct | union | typedef | symbol]
  DESCRIPTION
    This command displays the definition of structures, unions, typedefs or
    text/data symbols.
  ...
  crash> whatis do_vfs_ioctl
  int do_vfs_ioctl(struct file *, unsigned int, unsigned int, long unsigned
 int);
  crash>
 Or print it with "p", which gives you both the declaration and its virtual
 address:
  crash> p do_vfs_ioctl
  do_vfs_ioctl = $14 =
   {int (struct file *, unsigned int, unsigned int, long unsigned int)}
 0xffffffff811247ec <do_vfs_ioctl>
  crash>
 
That works. :)
However could it be possible to show the argument without only display its
type?
The kernel is defining the do_vfs_ioctl as:
int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
             unsigned long arg);
Could the "filp, fd, cmd, arg" be showed out?