Debugging Loadable Modules Using GDB

Benedict Reuschling bcr at FreeBSD.org
Tue Aug 31 20:52:16 UTC 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 31.08.10 21:27, schrieb Alexander Fiveg:
> On Mon, Aug 30, 2010 at 05:34:01PM -0400, John Baldwin wrote:
>> On Monday, August 30, 2010 4:34:04 pm Alexander Fiveg wrote:
>>> 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. 
>>
>> It's a bit of a "feature" of the bsd.*.mk files that if you define
>> 'DEBUG_FLAGS' it is added to CFLAGS (and CXXFLAGS) and that any resulting
>> binaries are not stripped, etc.  The same trick can be used to build debug
>> versions of binaries and libraries.  It probably is underdocumented.  Not
>> sure make.conf(5) is the right place as the typical usage is on the command
>> line, not in /etc/make.conf or /etc/src.conf.  However, I can't think of a
>> better place.  Maybe src.conf(5)?
> 
> Anyway, "FreeBSD Developers' Handbook" wouldn't be wrong place for it :)

I recently grabbed that the PR regarding the removal of the two sections
in question:

http://www.freebsd.org/cgi/query-pr.cgi?pr=docs/143342

Since I'm pretty blank when it come to knowledge about kld-debugging, I
would appreciate some help integrating these changes you are discussing.
If someone would write some sections about how this is being done, I
volunteer to do the doc-related parts (formatting, grammar, sgml-markup
and such).

Otherwise, I would just remove these sections and close the PR.

Regards

Benedict Reuschling
Mail: bcr at FreeBSD.org

The FreeBSD Documentation Project
FreeBSD German Documentation Project - https://doc.bsdgroup.de
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkx9aPcACgkQTSZQLkqBk0j4hwCgj2DHo7PPNsDbWELdVXn8Dw4g
UBQAnRGZB666EVGbU0u4ALLFWJPTbJ/C
=u0gb
-----END PGP SIGNATURE-----


More information about the freebsd-hackers mailing list