summaryrefslogtreecommitdiffstats
path: root/grub-core/gdb_grub.in
diff options
context:
space:
mode:
Diffstat (limited to 'grub-core/gdb_grub.in')
-rw-r--r--grub-core/gdb_grub.in85
1 files changed, 85 insertions, 0 deletions
diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in
new file mode 100644
index 0000000..e322d3d
--- /dev/null
+++ b/grub-core/gdb_grub.in
@@ -0,0 +1,85 @@
+###
+### 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