###
### 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
