A new command, run_on_start, is created which handles some complexities of the EFI platform when breaking on GRUB start. If GRUB start is hooked, run "onstart" command if it is defned.
Signed-off-by: Glenn Washburn <developm...@efficientek.com> --- grub-core/gdb_grub.in | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in index 57152b718..03122bc7f 100644 --- a/grub-core/gdb_grub.in +++ b/grub-core/gdb_grub.in @@ -36,6 +36,8 @@ end define dynamic_load_symbols dynamic_load_kernel_exec_symbols $arg0 + run_on_start + # We may have been very late to loading the kernel.exec symbols and # and modules may already be loaded. So load symbols for any already # loaded. @@ -170,6 +172,41 @@ document num_modules Given a module name print its address or NULL if not loaded. end +define run_on_start + # TODO: Add check to see if _start symbol is defined, if not, then + # the symbols have not yet been loaded and this command will not work. + watch *_start + set $break_efi_start_bpnum = $bpnum + commands + silent + delete $break_efi_start_bpnum + break _start + commands + silent + delete $break_efi_start_bpnum + set $onstart_name = "onstart" + is_user_command $onstart_name + if $ret + onstart + end + continue + end + set $break_efi_start_bpnum = $bpnum + continue + end +end +document run_on_start + On some targets, such as x86_64-efi, even if you know where the + firmware will load the grub image, you can not simply set a break + point before the image is loaded because loading the image + overwrites the break point in memory. So setup a hardware watch + point, which does not have that problem, and if that gets triggered, + then reset the break point. If a user-defined command named + "onstart" exists it will be run after the start is hit. + NOTE: This assumes symbols have already been correctly loaded for + the EFI application. +end + ### set confirm off @@ -180,13 +217,20 @@ set confirm off # fail. set $platform_efi = $_streq("@platform@", "efi") +set $target = "@target-cpu@-@platform@" if ! $runonce if $platform_efi # Only load the executable file, not the symbols exec-file kernel.exec else + if $_streq($target, "i386-pc") + add-symbol-file boot.image + add-symbol-file diskboot.image + add-symbol-file lzma_decompress.image + end file kernel.exec + run_on_start runtime_load_module end -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel