| ### |
| ### Load debuging information about GNU GRUB 2 modules into GDB |
| ### automatically. Needs readelf, Perl and gmodule.pl script |
| ### |
| ### Has to be launched from the writable and trusted |
| ### directory containing *.image and *.module |
| ### |
| ### $Id: .gdbinit,v 1.1 2006/05/14 11:38:08 lkundrak Exp $ |
| ### Lubomir Kundrak <lkudrak@skosi.org> |
| ### |
| |
| # Add section numbers and addresses to .segments.tmp |
| define dump_module_sections |
| set $mod = $arg0 |
| |
| # FIXME: save logging status |
| set logging file .segments.tmp |
| set logging redirect on |
| set logging overwrite off |
| set logging on |
| |
| printf "%s", $mod->name |
| set $segment = $mod->segment |
| while ($segment) |
| printf " %i 0x%lx", $segment->section, $segment->addr |
| set $segment = $segment->next |
| end |
| printf "\n" |
| |
| set logging off |
| # FIXME: restore logging status |
| end |
| document dump_module_sections |
| Gather information about module whose mod structure was |
| given for use with match_and_load_symbols |
| end |
| |
| # Generate and execute GDB commands and delete temporary files |
| # afterwards |
| define match_and_load_symbols |
| shell perl gmodule.pl <.segments.tmp >.loadsym.gdb |
| source .loadsym.gdb |
| shell rm -f .segments.tmp .loadsym.gdb |
| end |
| document match_and_load_symbols |
| Launch script, that matches section names with information |
| generated by dump_module_sections and load debugging info |
| apropriately |
| end |
| |
| ### |
| |
| define load_module |
| dump_module_sections $arg0 |
| match_and_load_symbols |
| end |
| document load_module |
| Load debugging information for module given as argument. |
| end |
| |
| define load_all_modules |
| set $this = grub_dl_head |
| while ($this != 0) |
| dump_module_sections $this |
| set $this = $this->next |
| end |
| match_and_load_symbols |
| end |
| document load_all_modules |
| Load debugging information for all loaded modules. |
| end |
| |
| ### |
| |
| set confirm off |
| file kernel.exec |
| target remote :1234 |
| |
| # inform when module is loaded |
| break grub_dl_add |
| commands |
| silent |
| load_module mod |
| cont |
| end |