On Sat, 1 Aug 2009, Robert P. J. Day wrote:
>
> for an upcoming column on how to debug the kernel (and modules) with
> gdb, i'm showing how to use the above and, since it's been a while, i
> need a refresher.
>
> once i'm in gdb, i can list the section breakdown of the vmlinux
> file with:
>
> (gdb) info files
> ...
> Local exec file:
> `/home/rpjday/k/f11/vmlinux', file type elf64-x86-64.
> Entry point: 0x1000000
> 0xffffffff81000000 - 0xffffffff81009000 is .text.head
> 0xffffffff81009000 - 0xffffffff813f2d3f is .text
> 0xffffffff813f2d40 - 0xffffffff813f2ebc is .notes
> 0xffffffff813f2ec0 - 0xffffffff813f6f80 is __ex_table
> 0xffffffff813f7000 - 0xffffffff8158e10a is .rodata
> 0xffffffff8158e110 - 0xffffffff8159417c is __bug_table
> 0xffffffff81594180 - 0xffffffff81595810 is .pci_fixup
> 0xffffffff81595810 - 0xffffffff81595838 is .tracedata
> 0xffffffff81595840 - 0xffffffff815a26c0 is __ksymtab
> 0xffffffff815a26c0 - 0xffffffff815a91d0 is __ksymtab_gpl
> 0xffffffff815a91d0 - 0xffffffff815a91e0 is __ksymtab_unused
> 0xffffffff815a91e0 - 0xffffffff815bf743 is __ksymtab_strings
> 0xffffffff815bf750 - 0xffffffff815eacd0 is __init_rodata
> 0xffffffff815eacd0 - 0xffffffff815ed000 is __param
> 0xffffffff815ed000 - 0xffffffff8165ae60 is .data
> ... and so on.
>
> if i try to list the variables (obviously a looooong list) with
>
> (gdb) info variables
>
> gdb just goes away (perhaps I'm just asking for too much?). is there
> a way to ask for the variable/symbol list within a single section? i
> don't see the gdb command for that.
as an additional query related to the above, i'm testing debugging a
simple loadable module whose file scope variable i want to print from
gdb. so i loaded the module, then ran the obligatory:
(gdb) add-symbol-file rday.ko <text addr> \
-s .data <data addr> \
-s .bss <bss addr>
whose addresses i obviously got from under /sys/module. and, sure
enough, i can print the variable in question and i get the right
answer, which clearly proves that gdb understands the symbols
properly.
however, running
(gdb) info files
tells me nothing about the new symbol file i've added -- all i see is
for the original vmlinux file. is there a gdb command that will show
me the properties for subsequently added symbol files?
and, finally, if i unload the module, what will happen if i try to
print the value of that variable again? i'm scared to try it just in
case my kernel chokes. is there a corresponding gdb command to
*unload* the symbols from a symbol file you added earlier?
any other neat (but still simple) tricks related to using gdb to
debug the kernel or a loadable module gratefully accepted for
inclusion in the upcoming column.
rday
--
========================================================================
Robert P. J. Day Waterloo, Ontario, CANADA
Linux Consulting, Training and Annoying Kernel Pedantry.
Web page: http://crashcourse.ca
Twitter: http://twitter.com/rpjday
"Kernel Newbie Corner" column @ linux.com: http://cli.gs/WG6WYX
========================================================================
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ