[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