
If an exception occurs in a loaded image and the relocation offset is unknown, it is helful to know the instructions pointed to by the program counter. This patch adds the missing output.
A possible output is: *pc: fb de f7 e7 1e ff 2f e1 01 00 50 e3 f0 4d 2d e9 01 80 a0 e1
The output can be disassembled with xxd -pc -r - > a.out $(CROSS_COMPILE)objdump -D -marm -b binary a.out
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- v2 print bytes not halfwords --- arch/arm/lib/interrupts.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/arch/arm/lib/interrupts.c b/arch/arm/lib/interrupts.c index 28ba3f14f36..25489e34462 100644 --- a/arch/arm/lib/interrupts.c +++ b/arch/arm/lib/interrupts.c @@ -59,6 +59,9 @@ static void show_efi_loaded_images(struct pt_regs *regs) void show_regs (struct pt_regs *regs) { unsigned long __maybe_unused flags; + /* The least significant bit chooses thumb, remove it. */ + u8 *pc = (u8 *)(instruction_pointer(regs) & ~1); + int i; const char __maybe_unused *processor_modes[] = { "USER_26", "FIQ_26", "IRQ_26", "SVC_26", "UK4_26", "UK5_26", "UK6_26", "UK7_26", @@ -96,6 +99,10 @@ void show_regs (struct pt_regs *regs) fast_interrupts_enabled (regs) ? "on" : "off", processor_modes[processor_mode (regs)], thumb_mode (regs) ? " (T)" : ""); + printf("*pc:"); + for (i = 0; i < 24; ++i) + printf(" %02x", pc[i]); + printf("\n"); }
/* fixup PC to point to the instruction leading to the exception */