grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB start


From: Glenn Washburn
Subject: [PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB start
Date: Thu, 15 Dec 2022 23:29:35 -0600

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 <development@efficientek.com>
---
 grub-core/gdb_grub.in | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in
index 8ae6344edf..3b3cea1a4d 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.
@@ -134,6 +136,41 @@ document runtime_load_module
        Load module symbols at runtime as they are 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
@@ -151,6 +188,7 @@ if ! $runonce
                exec-file kernel.exec
        else
                file kernel.exec
+               run_on_start
                runtime_load_module
        end
 
-- 
2.34.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]