[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB st
From: |
Glenn Washburn |
Subject: |
Re: [PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB start |
Date: |
Wed, 21 Dec 2022 12:19:16 -0600 |
On Wed, 21 Dec 2022 16:27:40 +0100
Daniel Kiper <dkiper@net-space.pl> wrote:
> On Thu, Dec 15, 2022 at 11:29:35PM -0600, Glenn Washburn wrote:
> > 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
>
> s/break/hbreak/?
A regular break works here for me. I want to avoid hbreak at all costs,
which is why I had a previous convoluted method using break (which I
thought worked, and then found it didn't quite). My understanding is
that the number of hardware breakpoints are limited and commonly its
around 4. Specifically, my understanding is that on x86-64 the number
is exactly 4, so I would prefer the user have usable as many as
possible.
Really, I'd like to figure out why sometimes break works and why
sometimes not, and then figure out a way to make it work for these
scripts. I recently had the idea that maybe the UEFI firmware sets up
the pages where it loads the .text section of the GRUB UEFI binary to
readonly in the page table structure. But I went through the structure
when %eip is at _start and the R/W bit is set on the pages I checked.
Even if the pages were set to readonly, I suspect the qemu gdb stub
allows writing to that memory anyway.
So I'm at a loss as to what could be preventing break from working. I'd
love to hear some ideas if anyone has some.
Glenn
> > + 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
>
> Nit, s/grub/GRUB/...
>
> > + 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
>
> Daniel
- [PATCH v4 07/15] gdb: Remove Perl dependency for GRUB GDB script, (continued)
[PATCH v4 09/15] gdb: Conditionally run GDB script logic for dynamically or statically positioned GRUB, Glenn Washburn, 2022/12/16
[PATCH v4 10/15] gdb: Only connect to remote target once when first sourced, Glenn Washburn, 2022/12/16
[PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB start, Glenn Washburn, 2022/12/16
[PATCH v4 13/15] gdb: Add extra early initialization symbols for i386-pc, Glenn Washburn, 2022/12/16
[PATCH v4 14/15] gdb: Add ability to turn on shell tracing for gdb helper script, Glenn Washburn, 2022/12/16
[PATCH v4 11/15] gdb: Allow user defined "onload_<modname>" command to be run when module is loaded, Glenn Washburn, 2022/12/16
[PATCH v4 15/15] docs: Add debugging chapter to development documentation, Glenn Washburn, 2022/12/16