grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 08/10] kern: Make grub_error() more verbose


From: Daniel Kiper
Subject: Re: [PATCH 08/10] kern: Make grub_error() more verbose
Date: Fri, 28 Feb 2020 13:32:10 +0100
User-agent: NeoMutt/20170113 (1.7.2)

On Tue, Feb 25, 2020 at 01:25:51PM +0100, Javier Martinez Canillas wrote:
> From: Peter Jones <address@hidden>
>
> Add file and line to grub_error() output to make troubleshooting easier.

This patch does more than that. I think it requires splitting into two
separate ones...

Daniel

> Signed-off-by: Peter Jones <address@hidden>
> Signed-off-by: Javier Martinez Canillas <address@hidden>
> ---
>
>  grub-core/kern/efi/mm.c | 17 ++++++++++++++---
>  grub-core/kern/err.c    | 13 +++++++++++--
>  include/grub/err.h      |  5 ++++-
>  3 files changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
> index b02fab1b102..457772d57f2 100644
> --- a/grub-core/kern/efi/mm.c
> +++ b/grub-core/kern/efi/mm.c
> @@ -125,12 +125,20 @@ grub_efi_allocate_pages_real 
> (grub_efi_physical_address_t address,
>
>    /* Limit the memory access to less than 4GB for 32-bit platforms.  */
>    if (address > GRUB_EFI_MAX_USABLE_ADDRESS)
> -    return 0;
> +    {
> +      grub_error (GRUB_ERR_BAD_ARGUMENT,
> +               N_("invalid memory address (0x%llx > 0x%llx)"),
> +               address, GRUB_EFI_MAX_USABLE_ADDRESS);
> +      return NULL;
> +    }
>
>    b = grub_efi_system_table->boot_services;
>    status = efi_call_4 (b->allocate_pages, alloctype, memtype, pages, 
> &address);
>    if (status != GRUB_EFI_SUCCESS)
> -    return 0;
> +    {
> +      grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
> +      return NULL;
> +    }
>
>    if (address == 0)
>      {
> @@ -140,7 +148,10 @@ grub_efi_allocate_pages_real 
> (grub_efi_physical_address_t address,
>        status = efi_call_4 (b->allocate_pages, alloctype, memtype, pages, 
> &address);
>        grub_efi_free_pages (0, pages);
>        if (status != GRUB_EFI_SUCCESS)
> -     return 0;
> +     {
> +       grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
> +       return NULL;
> +     }
>      }
>
>    grub_efi_store_alloc (address, pages);
> diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c
> index 53c734de70e..aebfe0cf839 100644
> --- a/grub-core/kern/err.c
> +++ b/grub-core/kern/err.c
> @@ -33,15 +33,24 @@ static struct grub_error_saved 
> grub_error_stack_items[GRUB_ERROR_STACK_SIZE];
>  static int grub_error_stack_pos;
>  static int grub_error_stack_assert;
>
> +#ifdef grub_error
> +#undef grub_error
> +#endif
> +
>  grub_err_t
> -grub_error (grub_err_t n, const char *fmt, ...)
> +grub_error (grub_err_t n, const char *file, const int line, const char *fmt, 
> ...)
>  {
>    va_list ap;
> +  int m;
>
>    grub_errno = n;
>
> +  m = grub_snprintf (grub_errmsg, sizeof (grub_errmsg), "%s:%d:", file, 
> line);
> +  if (m < 0)
> +    m = 0;
> +
>    va_start (ap, fmt);
> -  grub_vsnprintf (grub_errmsg, sizeof (grub_errmsg), _(fmt), ap);
> +  grub_vsnprintf (grub_errmsg + m, sizeof (grub_errmsg) - m, _(fmt), ap);
>    va_end (ap);
>
>    return n;
> diff --git a/include/grub/err.h b/include/grub/err.h
> index 24ba9f5f592..b68bbec3c72 100644
> --- a/include/grub/err.h
> +++ b/include/grub/err.h
> @@ -85,7 +85,10 @@ struct grub_error_saved
>  extern grub_err_t EXPORT_VAR(grub_errno);
>  extern char EXPORT_VAR(grub_errmsg)[GRUB_MAX_ERRMSG];
>
> -grub_err_t EXPORT_FUNC(grub_error) (grub_err_t n, const char *fmt, ...);
> +grub_err_t EXPORT_FUNC(grub_error) (grub_err_t n, const char *file, const 
> int line, const char *fmt, ...);
> +
> +#define grub_error(n, fmt, ...) grub_error (n, __FILE__, __LINE__, fmt, 
> ##__VA_ARGS__)
> +
>  void EXPORT_FUNC(grub_fatal) (const char *fmt, ...) __attribute__ 
> ((noreturn));
>  void EXPORT_FUNC(grub_error_push) (void);
>  int EXPORT_FUNC(grub_error_pop) (void);
> --
> 2.24.1



reply via email to

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