gdb: Fix redirection issue in dump_module_sections

An error in any GDB command causes it to immediately abort with an error,
this includes any command that calls that command. This leads to an issue
in dump_module_sections where an error causes the command to exit without
turning off file redirection. The user then ends up with a GDB command
line where commands output nothing to the console.

Instead do the work of dump_module_sections in the command
dump_module_sections_helper and run the command using GDB's pipe command
which does the redirection and undoes the redirection when it finishes
regardless of any errors in the command.

Also, remove .segments.tmp file prior to loading modules in case one was
left from a previous run.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Glenn Washburn authored and Daniel Kiper committed 2023-02-28 13:38:42 +01:00
1 parent be0b23ef99
commit a0b86f1807
1 file changed
+5 -10
+5 -10
View File
@@ -10,15 +10,8 @@
### ###
# Add section numbers and addresses to .segments.tmp # Add section numbers and addresses to .segments.tmp
define dump_module_sections define dump_module_sections_helper
set $mod = $arg0 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 printf "%s", $mod->name
set $segment = $mod->segment set $segment = $mod->segment
while ($segment) while ($segment)
@@ -26,9 +19,10 @@ define dump_module_sections
set $segment = $segment->next set $segment = $segment->next
end end
printf "\n" printf "\n"
end
set logging off define dump_module_sections
# FIXME: restore logging status pipe dump_module_sections_helper $arg0 | sh -c 'cat >>.segments.tmp'
end end
document dump_module_sections document dump_module_sections
Gather information about module whose mod structure was Gather information about module whose mod structure was
@@ -59,6 +53,7 @@ document load_module
end end
define load_all_modules define load_all_modules
shell rm -f .segments.tmp
set $this = grub_dl_head set $this = grub_dl_head
while ($this != 0) while ($this != 0)
dump_module_sections $this dump_module_sections $this