Debugging Loadable Modules Using GDB

Alexander Fiveg pebu3op at googlemail.com
Mon Aug 30 20:34:09 UTC 2010


On Mon, Aug 30, 2010 at 01:10:37PM -0400, John Baldwin wrote:
 > On Monday, August 30, 2010 12:12:50 pm Alexander Fiveg wrote:
> > On Mon, Aug 30, 2010 at 08:16:11AM -0400, John Baldwin wrote:
> >  > On Friday, August 27, 2010 4:11:41 pm Alexander Fiveg wrote:
> > > > Hi,
> > > > from "FreeBSD Developers' Handbook, 10.7 Debugging Loadable Modules Using
> > > > GDB":
> > > > "...
> > > > (kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0
> > > > ...
> > > > "
> > > > Actually I couldn't debug my modules using .ko-file. Moreover, I've find out 
> > > that .ko files do not contain sections with debugging info. With .kld-file 
> > > debugging works out. Do I something incorrectly or the info in the Developers 
> > > Book is outdated?
> > > 
> > > With newer versions of kgdb you shouldn't need to manually invoke 'add-symbol-
> > > file'.  Kernel modules are treated as shared libraries and should 
> > > automatically be loaded.  Try using 'info sharedlibrary' to see the list of 
> > > kernel modules and if symbols for them are loaded already.
> > Yes, the .ko files are loaded automatically. The problem is that they do
> > not contain debugging info. I have always to load the .kld file in order to 
> > debug a module:
> > 
> > (kgdb) f 9
> > #9  0xc4dc558b in rm_8254_delayed_interrupt_per_packet () from
> > /boot/kernel/if_ringmap.ko
> > (kgdb) info locals
> > No symbol table info available.
> > 
> > (kgdb) add-symbol-file /home/alexandre/p4/ringmap/current/sys/modules/ringmap/if_ringmap.kld 0xc4dafc70
> > add symbol table from file "/home/alexandre/p4/ringmap/current/sys/modules/ringmap/if_ringmap.kld"
> > at
> > 	.text_addr = 0xc4dafc70
> > (y or n) y
> > Reading symbols from /home/alexandre/p4/ringmap/current/sys/modules/ringmap/if_ringmap.kld...done.
> > 
> > (kgdb) f 9 
> > #9  0xc4dc558b in rm_8254_delayed_interrupt_per_packet ()
> >     at /home/alexandre/p4/ringmap/current/sys/modules/ringmap/../../dev/e1000/ringmap_8254.c:142
> > 142	co->ring->slot[slot_num].ts = co->ring->last_ts;
> > 
> > (kgdb) info locals
> > co = (struct capt_object *) 0xc4d68380
> > adapter = (struct adapter *) 0xc4e77000
> > __func__ = "E\000\000�\034@\000\000\211\203�E\000\000\017\206B\022\000\000\2039\000\213A\004\017\205�\f\000\000\001��1�"
> > 
> > 
> > Is there any way to get the all symbols and needed debug info without
> > loading the .kld file ?
> 
> How are you compiling the kld?  If you are building it by hand, use
> 'make DEBUG_FLAGS=-g' when you build and install the kld.  That should build
> with debug symbols enabled and install the ko.symbols file which kgdb will
> find and use.
Thanks a lot!. That is what I want to know. But I think this option is not 
mentioned anywhere. I could not find it in "man make make.conf" and also 
no mention about it in FreeBSD Developers' Handbook. 

Alex

> 
>  -- 
> John Baldwin

 -- 
Alexander Fiveg <pebu3op at googlemail.com>
Key fingerprint = ECBB 747C 919D 78F5 E8EC  7DBC 8B46 376D 107B CCAA



More information about the freebsd-doc mailing list