Roland McGrath wrote:
> 2) The path to the debug info is wrong anyway. In fact, there
_is_
> no path info in the .gnu_debuglink section of the kernel modules:
They're not supposed to have directory names. Try elfutils tools, or gdb.
They handle separate debuginfo well. e.g. eu-addr2line -k 0x... is nice.
We don't yet have disassembly tools in elfutils, unfortunately.
Well, addr2line works because you point it directly to the .ko.debug file:
$ eu-addr2line -e ahci.ko.debug 0x0
drivers/ata/ahci.c:479
gdb will deal well with a .ko and find its debug info, and has disassembly
and source info. It doesn't have an interleaved output format AFAIK, though.
But how could gdb put the two separate files together when there is no
connection between them? How could it possibly know to go from:
/lib/modules/2.6.20-1.2925.fc6/kernel/drivers/ata/ahci.ko
to
/usr/lib/debug/lib/modules/2.6.20-1.2925.fc6/kernel/drivers/ata/ahci.ko.debug
without the full path name in the .gnu_debuglink section of the module?
The debug info file does have the full (and correct) pathname of the source:
comp_dir "/usr/src/debug/kernel-2.6.20/linux-2.6.20.i686"
This still isn't quite right; it should really be:
"/usr/src/debug/kernel-2.6.20/linux-2.6.20-1.2925.i686"
But that is really where the installer puts the files, so it's just a minor
packaging problem. (You can only have one 2.6.20 kernel source tree installed
for debugging using the current naming convention.)
I've considered writing an "unstrip" to paste stripped
and .debug file back
together so you can use them with dumber tools.
Yeah, that would be nice.