grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] gdb: Add gdbinfo command for printing the load address of th


From: Daniel Kiper
Subject: Re: [PATCH] gdb: Add gdbinfo command for printing the load address of the EFI application
Date: Tue, 30 May 2023 16:29:08 +0200
User-agent: NeoMutt/20170113 (1.7.2)

On Sat, May 13, 2023 at 09:25:38PM -0500, Glenn Washburn wrote:
> EFI firmware determines where to load the GRUB EFI at runtime, and so the
> addresses of debug symbols are not known ahead of time. There is a command
> defined in the gdb_grub script which will load the debug symbols at the
> appropriate addresses, if given given the application load address for GRUB.

s/given given/given/

> So add a command named "gdbinfo" to allow the user to print this GDB command
> string with the application load address on-demand. For the outputted GDB
> command to have any effect when entered into a GDB session, GDB should have
> been started with the script as an argument to the -x option or sourced into
> an active GDB session before running the outputted command.
>
> Documentation for the gdbinfo command is also added.
>
> Co-developed-by: Peter Jones <pjones@redhat.com>
> Signed-off-by: Peter Jones <pjones@redhat.com>
> Signed-off-by: Glenn Washburn <development@efficientek.com>
> ---
>  docs/grub.texi              | 13 ++++++++++++
>  grub-core/Makefile.core.def |  1 +
>  grub-core/kern/efi/debug.c  | 38 ++++++++++++++++++++++++++++++++++
>  grub-core/kern/efi/efi.c    |  4 ++--
>  grub-core/kern/efi/init.c   |  5 ++++-
>  include/grub/efi/debug.h    | 41 +++++++++++++++++++++++++++++++++++++
>  include/grub/efi/efi.h      |  2 +-
>  7 files changed, 100 insertions(+), 4 deletions(-)
>  create mode 100644 grub-core/kern/efi/debug.c
>  create mode 100644 include/grub/efi/debug.h
>
> diff --git a/docs/grub.texi b/docs/grub.texi
> index 9d4adf0b8ab6..8669f76d176e 100644
> --- a/docs/grub.texi
> +++ b/docs/grub.texi
> @@ -4319,6 +4319,7 @@ you forget a command, you can run the command 
> @command{help}
>  * export::                      Export an environment variable
>  * false::                       Do nothing, unsuccessfully
>  * fwsetup::                     Reboot into the firmware setup menu
> +* gdbinfo::                     Provide info for debugging with GDB
>  * gettext::                     Translate a string
>  * gptsync::                     Fill an MBR based on GPT entries
>  * halt::                        Shut down your computer
> @@ -4851,6 +4852,18 @@ exit successfully if so.
>  @end deffn
>
>
> +@node gdbinfo
> +@subsection gdbinfo
> +
> +@deffn Command gdbinfo
> +Output text to be used as a GDB command for a GDB session using the gdb_grub
> +script and attached to a running GRUB instance. The GDB command that is
> +output will tell GDB how to load debugging symbols to their proper runtime
> +address. Currently this is only available for EFI platforms. See the 
> Debugging
> +in the developer documentation for more information.
> +@end deffn
> +
> +
>  @node gettext
>  @subsection gettext
>
> diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
> index fb4cc066c526..3344f15bd5d1 100644
> --- a/grub-core/Makefile.core.def
> +++ b/grub-core/Makefile.core.def
> @@ -206,6 +206,7 @@ kernel = {
>
>    efi = disk/efi/efidisk.c;
>    efi = kern/efi/efi.c;
> +  efi = kern/efi/debug.c;
>    efi = kern/efi/init.c;
>    efi = kern/efi/mm.c;
>    efi = term/efi/console.c;
> diff --git a/grub-core/kern/efi/debug.c b/grub-core/kern/efi/debug.c
> new file mode 100644
> index 000000000000..506ad90dca06
> --- /dev/null
> +++ b/grub-core/kern/efi/debug.c
> @@ -0,0 +1,38 @@
> +/*
> + *  GRUB  --  GRand Unified Bootloader
> + *  Copyright (C) 2022  Free Software Foundation, Inc.
> + *
> + *  GRUB is free software: you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation, either version 3 of the License, or
> + *  (at your option) any later version.
> + *
> + *  GRUB is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
> + */
> +/* debug.c - aides for debugging the EFI application */
> +
> +#include <grub/efi/debug.h>
> +#include <grub/command.h>
> +#include <grub/i18n.h>
> +
> +static grub_err_t
> +grub_cmd_gdbinfo (struct grub_command *cmd __attribute__ ((unused)),
> +               int argc __attribute__ ((unused)),
> +               char **args __attribute__ ((unused)))
> +{
> +  grub_efi_print_gdb_info ();
> +  return 0;
> +}
> +
> +void
> +grub_efi_register_debug_commands (void)
> +{
> +  grub_register_command_lockdown ("gdbinfo", grub_cmd_gdbinfo, 0,
> +                               N_("Print infomation useful for GDB 
> debugging"));

I think we agreed after some discussion we can enable gdbinfo command
even on UEFI platforms with Secure Boot enabled. So, I would do
s/grub_register_command_lockdown/grub_register_command/

Otherwise Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>...

I can make above mentioned fixes for you before push...

Daniel



reply via email to

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