Hi Heinrich, On Tue, Aug 27, 2019 at 1:26 AM Heinrich Schuchardt <xypron.g...@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.g...@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.g...@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? Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot