[U-Boot] [RFC] Analyzing data abort in EFI payload

Heinrich Schuchardt xypron.debian at gmx.de
Wed Mar 28 12:15:42 UTC 2018


I have an EFI payload which causes a data abort exception on arm32:

data abort
pc : [<79e7afe6>]          lr : [<79e7aff5>]


reloc pc : [<44f15fe6>]    lr : [<44f15ff5>]


sp : 7af3a740  ip : 7efb0420     fp : 7af774f8


r10: 7af3a7f0  r9 : 7af44ed8     r8 : 7ef9b1d0


r7 : 00000000  r6 : 00000000     r5 : 7ef8af21  r4 : 7af774f8


r3 : 00000003  r2 : 79f2f040     r1 : 00000000  r0 : 79f2f079


Flags: Nzcv  IRQs off  FIQs off  Mode SVC_32


Resetting CPU ...



resetting ...

"reloc pc" is calculated as
instruction_pointer(regs) - gd->reloc_off

This relocation offset is the one used for U-Boot not the one used for
the EFI payload.

When a data abort occurs we may have multiple loaded EFI images. For the
analysis we need the offset, the start address, and the end address for
each of these. Then we can determine to which image the PC points to and
via the offset find the assembly instruction in the image file.

Printing this information when an image is started may destroy the
screen content. Furthermore the screen may be cleared afterwards.

So the most appropriate time for printing the information would be when
the abort occurs. If the memory is not corrupted we could loop over all
loaded image handles and retrieve the information from there. We could
call an efi function for this purpose right after show_regs(pt_regs) in
arch/arm/lib/interrupts.c.

What is your view on this?

Best regards

Heinrich


More information about the U-Boot mailing list