Hopefully Simple Question on Debugging Kernel Modules
John Baldwin
jhb at freebsd.org
Mon Feb 23 08:59:36 PST 2009
On Friday 20 February 2009 6:40:56 pm David Christensen wrote:
> I'm sure this is a simple question but the answer is alluding my Google
> search capabilities. My driver is being loaded as a kernel module and
> is failing with the following error:
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address = 0xfffffffe40abe9dc
> fault code = supervisor write data, page not present
> instruction pointer = 0x8:0xffffffff920b638f
> stack pointer = 0x10:0xffffffff9212bb10
> frame pointer = 0x10:0xffffffff9212bbb0
> 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 = 12 (irq268: bce0)
> [thread pid 12 tid 100166 ]
> Stopped at bce_intr+0x8df: addl $0x1,0x2c854(%r12,%rax,4)
> db>
>
> I simply need to find the offending source line in my driver. Not sure
> how I've managed to get the driver running at all without this but it's
> time to do things the right way. I have KDB/DDB/GDB built into my
> -CURRENT kernel already. It'd be great to find the source line while in
> the kernel debugger but I'm also fine with rebooting the system to
> identify the line number.
Just use gdb on bce.ko (built with debug symbols):
gdb /path/to/if_bce.ko
(gdb) l *bce_intr+0x8df
If you get a crashdump you can run kgdb on it and just walk up to the relevant
stack frame and use 'l' there to get a listing.
--
John Baldwin
More information about the freebsd-current
mailing list