Debugging kernel cores without a stack

Joshua Isom jrisom at gmail.com
Sun Mar 24 17:23:17 UTC 2013


I have several core dumps that need debugged.  All are the same problem. 
  The debugging problem is when I fire up kgdb, I have to backtrace even 
though the kernel message buffer contains a back trace.  If I try to set 
the frame with "frame 0xffffff8020bddb30" I get an error "Cannot access 
memory at address 0x0".  All I have to debug with are these two pieces 
of information.  How do I get more information?

> jri.homeunix.com dumped core - see /var/crash/vmcore.29
>
> Sun Mar 24 10:49:52 CDT 2013
>
> FreeBSD jri.homeunix.com 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r248680M: Sun Mar 24 07:13:16 CDT 2013     r
>
> panic: kdb_switch: did not reenter debugger
>
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd"...
>
> Unread portion of the kernel message buffer:
> witness_warn() at witness_warn+0x4a8/frame 0xffffff8020bdd690
> trap_pfault() at trap_pfault+0x5a/frame 0xffffff8020bdd740
> trap() at trap+0x659/frame 0xffffff8020bdd950
> calltrap() at calltrap+0x8/frame 0xffffff8020bdd950
> --- trap 0xc, rip = 0xffffffff8133519e, rsp = 0xffffff8020bdda10, rbp = 0xffffff8020bddb30 ---
> ath_edma_tx_processq() at ath_edma_tx_processq+0x18e/frame 0xffffff8020bddb30
> taskqueue_run_locked() at taskqueue_run_locked+0xf0/frame 0xffffff8020bddb80
> taskqueue_thread_loop() at taskqueue_thread_loop+0x9b/frame 0xffffff8020bddbb0
> fork_exit() at fork_exit+0x84/frame 0xffffff8020bddbf0
> fork_trampoline() at fork_trampoline+0xe/frame 0xffffff8020bddbf0
> --- trap 0, rip = 0, rsp = 0xffffff8020bddcb0, rbp = 0 ---
>
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address   = 0x0
> fault code              = supervisor read data, page not present
> instruction pointer     = 0x20:0xffffffff8133519e
> stack pointer           = 0x28:0xffffff8020bdda10
> frame pointer           = 0x28:0xffffff8020bddb30
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process         = 0 (ath0 taskq)
> Uptime: 2m19s
> Dumping 261 out of 1771 MB:..7%..13%..25%..31%..43%..56%..62%..74%..86%..92%

> (kgdb) list *(0xffffffff8133519e)
> 0xffffffff8133519e is in ath_edma_tx_processq (/root/ATH/head/sys/modules/ath/../../dev/ath/if_ath_tx_edma.c:552).
> 547                                 bf->bf_descid);
> 548                     }
> 549     #endif
> 550
> 551                     /* This removes the buffer and decrements the queue depth */
> 552                     ATH_TXQ_REMOVE(txq, bf, bf_list);
> 553                     if (bf->bf_state.bfs_aggr)
> 554                             txq->axq_aggr_depth--;
> 555                     txq->axq_fifo_depth --;
> 556                     /* XXX assert FIFO depth >= 0 */


More information about the freebsd-hackers mailing list