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
That does not necessarily work, because it may not be able to do enough
relocation. -e /installed/stripped/file, -k, -K, -p PID work, and they
find the debuginfo file for you. (For ET_REL files you need to add 0x10000
to the address you use if using elfutils < 0.126.)
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
Lo and behold, it does work. Really, truly. Embedding directory names is
Not The Way. (Try "help set debug-file-directory" in gdb. The elfutils
tools and their --debuginfo-path option are similar.)