[U-Boot] [PATCH 1/1] x86: show UEFI images involved in crash

Bin Meng bmeng.cn at gmail.com
Tue Aug 27 02:48:57 UTC 2019


Hi Heinrich,

On Tue, Aug 27, 2019 at 10:43 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 8/27/19 3:18 AM, Bin Meng wrote:
> > Hi Heinrich,
> >
> > On Tue, Aug 27, 2019 at 1:26 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>
> >> On 8/26/19 8:13 AM, Bin Meng wrote:
> >>> Hi Heinrich,
> >>>
> >>> On Mon, Aug 26, 2019 at 1:55 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>>>
> >>>> If a crash occurs, show the loaded UEFI images to facilitate analysis.
> >>>>
> >>>> This is an example output:
> >>>>
> >>>> => bootefi 0x1000000
> >>>> Found 0 disks
> >>>> Hello world of bugs!
> >>>> Invalid Opcode (Undefined Opcode)
> >>>> EIP: 0010:[<06ceb06e>] EFLAGS: 00010206
> >>>> Original EIP :[<fec9906e>]
> >>>> EAX: 00000000 EBX: 06cec000 ECX: 00000fd0 EDX: 00000001
> >>>> ESI: 06ced18a EDI: 07d0fe10 EBP: 07fe27a0 ESP: 07d0fde0
> >>>>    DS: 0018 ES: 0018 FS: 0020 GS: 0018 SS: 0018
> >>>> CR0: 00000033 CR2: 00000000 CR3: 00000000 CR4: 00000000
> >>>> DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> >>>> DR6: ffff0ff0 DR7: 00000400
> >>>> Stack:
> >>>>       0x07d0fde8 : 0x00000000
> >>>>       0x07d0fde4 : 0x06ced040
> >>>> --->0x07d0fde0 : 0x07fe27a0
> >>>>       0x07d0fddc : 0x00010206
> >>>>       0x07d0fdd8 : 0x00000010
> >>>>       0x07d0fdd4 : 0x06ceb06e
> >>>> UEFI image [0x06cea000:0x06cf0fff] pc=0x106e '/bug-i386.efi'
> >>>> ### ERROR ### Please RESET the board ###
> >>>>
> >>>> With the additional information provided by this patch we know that the
> >>>> problem occurred 0x106e after the load address of bug-i386.efi.
> >>>>
> >>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> >>>> ---
> >>>>    arch/x86/cpu/i386/interrupt.c | 14 ++++++++++++++
> >>>>    1 file changed, 14 insertions(+)
> >>>>
> >>>> diff --git a/arch/x86/cpu/i386/interrupt.c b/arch/x86/cpu/i386/interrupt.c
> >>>> index 47df3172b7..1445204878 100644
> >>>> --- a/arch/x86/cpu/i386/interrupt.c
> >>>> +++ b/arch/x86/cpu/i386/interrupt.c
> >>>> @@ -12,6 +12,7 @@
> >>>>
> >>>>    #include <common.h>
> >>>>    #include <dm.h>
> >>>> +#include <efi_loader.h>
> >>>>    #include <asm/control_regs.h>
> >>>>    #include <asm/i8259.h>
> >>>>    #include <asm/interrupt.h>
> >>>> @@ -64,6 +65,18 @@ static char *exceptions[] = {
> >>>>           "Reserved"
> >>>>    };
> >>>>
> >>>> +/**
> >>>> + * show_efi_loaded_images() - show loaded UEFI images
> >>>> + *
> >>>> + * List all loaded UEFI images.
> >>>> + *
> >>>> + * @eip:       instruction pointer
> >>>> + */
> >>>> +static void show_efi_loaded_images(uintptr_t eip)
> >>>> +{
> >>>> +       efi_print_image_infos((void *)eip);
> >>>> +}
> >>>> +
> >>>>    static void dump_regs(struct irq_regs *regs)
> >>>>    {
> >>>>           unsigned long cs, eip, eflags;
> >>>> @@ -144,6 +157,7 @@ static void dump_regs(struct irq_regs *regs)
> >>>>                   printf("0x%8.8lx : 0x%8.8lx\n", sp, (ulong)readl(sp));
> >>>>                   sp -= 4;
> >>>>           }
> >>>> +       show_efi_loaded_images(eip);
> >>>
> >>> Should we wrap the call with #ifdef CONFIG_EFI_LOADER or something?
> >>
> >> In include/efi_loader.h we have
> >>
> >> static inline void efi_print_image_infos(void *pc) { }
> >>
> >> if EFI_LOADER is not defined.
> >>
> >> Best regards
> >>
> >
> > I feel a little bit strange of show_efi_loaded_images() being called
> > in the dump_regs(). The dump_regs() is called in the exception
> > handler. It's a bit odd we show the EFI image info in the exception
> > handler. Shouldn't we print the EFI image info from the command line
> > interface?
>
> We have a command to  display loaded images from the command line
> (efidebug images). But when a crash occurs in an UEFI application, I
> cannot reach the command line anymore.
>
> When running complex UEFI applications like the SCT multiple UEFI images
> are involved with loading addresses which I cannot control from the
> command line. So it is hard to find out where a crash occurred.
>
> For ARM we already have the same information in crash dumps.
>
> If not UEFI image is loaded, no line is added to the crash dump.

OK, could you please provide a sample EFI image of such to trigger the
issue? I would like to have a test.

Regards,
Bin


More information about the U-Boot mailing list