[Crash-utility] [RFC] display function param and local value for backtrace

Dave Anderson anderson at redhat.com
Wed Oct 17 17:00:33 UTC 2012



----- Original Message -----
> 2012/10/16 Lei Wen <leiwen at marvell.com>:
> > Current I am trying to make crash support display out function param and
> > local value while backtracing.
> >
> > The idea for this patch is to mimic core dump support in gdb, teaching the
> > crash to supply the regset to the gdb, so that gdb could have full knowledge
> > what is going on in the panic point.
> 
> Just for comparison/inspiration, I'm attaching the patch I've been using
> for some time now to get this information in crash.  It enables gdb's
> backtrace directly so you will need to run it with "backtrace" or "gdb
> bt".
> 
> I've made no attempt to clean up the patch, it's as-is (hacky) and
> applies on top of Crash 6.0.6.  I've only tested it on ARM and there are
> several rough edges even on ARM (example, observe the "request failed"
> message after the successful trace).
 
Interesting -- I'm sure that Lei can take advantage of some of the work
you've done.

BTW, what happens when you run it against a task that has taken a
kernel-mode exception or kernel-mode interrupt?

Dave


> It looks like this:
> 
> crash> set 533
> crash> bt
> PID: 533    TASK: e62d4560  CPU: 1   COMMAND: "kworker/u:2"
>  #0 [<c0648f14>] (__schedule) from [<c0649688>]
>  #1 [<c0649688>] (schedule) from [<c064a898>]
>  #2 [<c064a898>] (__mutex_lock_slowpath) from [<c064a98c>]
>  #3 [<c064a98c>] (mutex_lock) from [<c03171dc>]
>  #4 [<c03171dc>] (device_attach) from [<c03168fc>]
>  #5 [<c03168fc>] (bus_probe_device) from [<c03149dc>]
>  #6 [<c03149dc>] (device_add) from [<c040cd88>]
>  #7 [<c040cd88>] (sdio_add_func) from [<c040c060>]
>  #8 [<c040c060>] (mmc_attach_sdio) from [<c0404930>]
>  #9 [<c0404930>] (mmc_rescan) from [<c00bb5e4>]
> #10 [<c00bb5e4>] (process_one_work) from [<c00bbaf4>]
> #11 [<c00bbaf4>] (worker_thread) from [<c00c0564>]
> #12 [<c00c0564>] (kthread) from [<c0064288>]
> crash> gdb bt
> #0  0xc0648f14 in context_switch (next=0xe49b6520, prev=0xe62d4560,
> rq=0xc1b4a8c0) at /tmp/kernel/kernel/sched.c:3216
> #1  __schedule () at /tmp/kernel/kernel/sched.c:4354
> #2  0xc0649688 in schedule () at /tmp/kernel/kernel/sched.c:4406
> #3  0xc064a898 in __mutex_lock_common (state=2, lock=0xe49f1c3c,
> subclass=<optimized out>, nest_lock=<optimized out>, ip=<optimized
> out>) at /tmp/kernel/kernel/mutex.c:244
> #4  __mutex_lock_slowpath (lock_count=0xe49f1c3c) at
> /tmp/kernel/kernel/mutex.c:405
> #5  0xc064a98c in __mutex_fastpath_lock (fail_fn=0xc064a760
> <__mutex_lock_slowpath>, count=0xe49f1c3c) at
> /tmp/kernel/arch/arm/include/asm/mutex.h:43
> #6  mutex_lock (lock=0xe49f1c3c) at /tmp/kernel/kernel/mutex.c:90
> #7  0xc03171dc in device_lock (dev=0xe49f1c08) at
> /tmp/kernel/include/linux/device.h:673
> #8  device_attach (dev=0xe49f1c08) at
> /tmp/kernel/drivers/base/dd.c:246
> #9  0xc03168fc in bus_probe_device (dev=<optimized out>) at
> /tmp/kernel/drivers/base/bus.c:493
> #10 0xc03149dc in device_add (dev=0xe49f1c08) at
> /tmp/kernel/drivers/base/core.c:978
> #11 0xc040cd88 in sdio_add_func (func=0xe49f1c00) at
> /tmp/kernel/drivers/mmc/core/sdio_bus.c:315
> #12 0xc040c060 in mmc_attach_sdio (host=0xe6486800) at
> /tmp/kernel/drivers/mmc/core/sdio.c:1197
> #13 0xc0404930 in mmc_rescan_try_freq (freq=<optimized out>,
> host=0xe6486800) at /tmp/kernel/drivers/mmc/core/core.c:2069
> #14 mmc_rescan (work=0xe6486a08) at
> /tmp/kernel/drivers/mmc/core/core.c:2188
> #15 0xc00bb5e4 in process_one_work (worker=0xe62e04e0,
> work=0xe6486a08) at /tmp/kernel/kernel/workqueue.c:1870
> #16 0xc00bbaf4 in worker_thread (__worker=0xe62e04e0) at
> /tmp/kernel/kernel/workqueue.c:1981
> #17 0xc00c0564 in kthread (_create=0xe60a9ec4) at
> /tmp/kernel/kernel/kthread.c:96
> #18 0xc0064288 in kernel_thread_helper ()
> Register 25 is not available
> gdb: gdb request failed: bt
> crash> gdb bt full
> #0  0xc0648f14 in context_switch (next=0xe49b6520, prev=0xe62d4560,
> rq=0xc1b4a8c0) at /tmp/kernel/kernel/sched.c:3216
>         mm = 0x0
>         oldmm = <optimized out>
> #1  __schedule () at /tmp/kernel/kernel/sched.c:4354
>         prev = 0xe62d4560
>         next = 0xe49b6520
>         switch_count = <optimized out>
>         rq = 0xc1b4a8c0
>         cpu = <optimized out>
> #2  0xc0649688 in schedule () at /tmp/kernel/kernel/sched.c:4406
>         tsk = <unavailable>
> #3  0xc064a898 in __mutex_lock_common (state=2, lock=0xe49f1c3c,
> subclass=<optimized out>, nest_lock=<optimized out>, ip=<optimized
> out>) at /tmp/kernel/kernel/mutex.c:244
>         task = 0xe62d4560
>         waiter = {
>           list = {
>             next = 0xe49f1c48,
>             prev = 0xe49f1c48
>           },
>           task = 0xe62d4560
>         }
> #4  __mutex_lock_slowpath (lock_count=0xe49f1c3c) at
> /tmp/kernel/kernel/mutex.c:405
>         lock = 0xe49f1c3c
> #5  0xc064a98c in __mutex_fastpath_lock (fail_fn=0xc064a760
> <__mutex_lock_slowpath>, count=0xe49f1c3c) at
> /tmp/kernel/arch/arm/include/asm/mutex.h:43
>         __ex_flag = <optimized out>
>         __res = <optimized out>
> #6  mutex_lock (lock=0xe49f1c3c) at /tmp/kernel/kernel/mutex.c:90
> No locals.
> #7  0xc03171dc in device_lock (dev=0xe49f1c08) at
> /tmp/kernel/include/linux/device.h:673
> No locals.
> #8  device_attach (dev=0xe49f1c08) at
> /tmp/kernel/drivers/base/dd.c:246
>         ret = 0
> #9  0xc03168fc in bus_probe_device (dev=<optimized out>) at
> /tmp/kernel/drivers/base/bus.c:493
>         bus = <optimized out>
>         ret = <optimized out>
> #10 0xc03149dc in device_add (dev=0xe49f1c08) at
> /tmp/kernel/drivers/base/core.c:978
>         parent = 0xe3c7e008
>         class_intf = <optimized out>
>         error = 0
>         __func__ = "device_add"
> #11 0xc040cd88 in sdio_add_func (func=0xe49f1c00) at
> /tmp/kernel/drivers/mmc/core/sdio_bus.c:315
>         ret = <unavailable>
> #12 0xc040c060 in mmc_attach_sdio (host=0xe6486800) at
> /tmp/kernel/drivers/mmc/core/sdio.c:1197
>         err = <optimized out>
>         i = <optimized out>
>         funcs = 2
>         ocr = 553647872
>         card = 0xe3c7e000
> #13 0xc0404930 in mmc_rescan_try_freq (freq=<optimized out>,
> host=0xe6486800) at /tmp/kernel/drivers/mmc/core/core.c:2069
> No locals.
> #14 mmc_rescan (work=0xe6486a08) at
> /tmp/kernel/drivers/mmc/core/core.c:2188
>         host = 0xe6486800
>         i = <optimized out>
> #15 0xc00bb5e4 in process_one_work (worker=0xe62e04e0,
> work=0xe6486a08) at /tmp/kernel/kernel/workqueue.c:1870
>         cwq = 0xe6344a00
>         gcwq = <optimized out>
>         bwh = <unavailable>
>         cpu_intensive = <optimized out>
>         f = 0xc04046e4 <mmc_rescan>
> #16 0xc00bbaf4 in worker_thread (__worker=0xe62e04e0) at
> /tmp/kernel/kernel/workqueue.c:1981
>         work = <optimized out>
>         worker = 0xe62e04e0
>         gcwq = 0xc09c0a60
> #17 0xc00c0564 in kthread (_create=0xe60a9ec4) at
> /tmp/kernel/kernel/kthread.c:96
>         create = 0xe60a9ec4
>         threadfn = 0xc00bb960 <worker_thread>
>         data = 0xe62e04e0
>         self = {
>           should_stop = 0,
>           data = 0xe62e04e0,
>           exited = {
>             done = 0,
>             wait = {
>               lock = {
>                 {
>                   rlock = {
>                     raw_lock = {
>                       lock = 0
>                     },
>                     break_lock = 0
>                   }
>                 }
>               },
>               task_list = {
>                 next = 0xe62effd0,
>                 prev = 0xe62effd0
>               }
>             }
>           }
>         }
>         ret = -4
> #18 0xc0064288 in kernel_thread_helper ()
> No symbol table info available.
> Register 25 is not available
> gdb: gdb request failed: bt full
> 




More information about the Crash-utility mailing list