[U-Boot] [PATCH v3 2/2] arm: print information about loaded UEFI images

Alexander Graf agraf at suse.de
Thu Apr 5 07:58:08 UTC 2018


On 04/04/2018 04:36 PM, Heinrich Schuchardt wrote:
> If an exception occurs in a UEFI loaded image we need the start address of
> the image to determine the relocation offset.
>
> This patch adds the necessary lines after the registers in the crash dump.
> A possible output would be:
>
> UEFI image [0xbffe6000:0xbffe631f] pc=0x138 '/\snp.efi'
>
> With the offset 0x138 we can now find the relevant instruction in the
> disassembled 'snp.efi' binary.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
>   arch/arm/lib/interrupts.c | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
>
> diff --git a/arch/arm/lib/interrupts.c b/arch/arm/lib/interrupts.c
> index 80869adb61..dad77ff589 100644
> --- a/arch/arm/lib/interrupts.c
> +++ b/arch/arm/lib/interrupts.c
> @@ -20,6 +20,7 @@
>    */
>   
>   #include <common.h>
> +#include <efi_loader.h>
>   #include <asm/proc-armv/ptrace.h>
>   #include <asm/u-boot-arm.h>
>   #include <efi_loader.h>
> @@ -51,6 +52,14 @@ void bad_mode (void)
>   	reset_cpu (0);
>   }
>   
> +static void show_efi_loaded_images(struct pt_regs *regs)
> +{
> +#if defined(CONFIG_EFI_LOADER) && \
> +	!defined(CONFIG_SPL_BUILD) && !defined(API_BUILD)
> +	efi_print_image_infos((void *)instruction_pointer(regs));
> +#endif

Sorry I didn't catch this earlier. Please just implement a stub function 
in include/efi_loader.h, similar to efi_set_bootdev() for example. That 
way we keep the generic code clean from ifdefs.

Also, why do you have to exclude API_BUILD?


Alex

> +}
> +
>   void show_regs (struct pt_regs *regs)
>   {
>   	unsigned long __maybe_unused flags;
> @@ -106,6 +115,7 @@ void do_undefined_instruction (struct pt_regs *pt_regs)
>   	printf ("undefined instruction\n");
>   	fixup_pc(pt_regs, -4);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -115,6 +125,7 @@ void do_software_interrupt (struct pt_regs *pt_regs)
>   	printf ("software interrupt\n");
>   	fixup_pc(pt_regs, -4);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -124,6 +135,7 @@ void do_prefetch_abort (struct pt_regs *pt_regs)
>   	printf ("prefetch abort\n");
>   	fixup_pc(pt_regs, -8);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -133,6 +145,7 @@ void do_data_abort (struct pt_regs *pt_regs)
>   	printf ("data abort\n");
>   	fixup_pc(pt_regs, -8);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -142,6 +155,7 @@ void do_not_used (struct pt_regs *pt_regs)
>   	printf ("not used\n");
>   	fixup_pc(pt_regs, -8);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -151,6 +165,7 @@ void do_fiq (struct pt_regs *pt_regs)
>   	printf ("fast interrupt request\n");
>   	fixup_pc(pt_regs, -8);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }
>   
> @@ -160,5 +175,6 @@ void do_irq (struct pt_regs *pt_regs)
>   	printf ("interrupt request\n");
>   	fixup_pc(pt_regs, -8);
>   	show_regs (pt_regs);
> +	show_efi_loaded_images(pt_regs);
>   	bad_mode ();
>   }




More information about the U-Boot mailing list