From e7c330c6f3d36d1ccb98be6f0eb4bae1ff9be160 Mon Sep 17 00:00:00 2001 From: "Ithamar R. Adema" Date: Thu, 19 Sep 2013 03:15:06 +0200 Subject: [PATCH] ARM: improve error output, fix iframe reporting. --- src/system/kernel/arch/arm/arch_int.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/system/kernel/arch/arm/arch_int.cpp b/src/system/kernel/arch/arm/arch_int.cpp index 0dc4fdcd9f..25aad9e0cf 100644 --- a/src/system/kernel/arch/arm/arch_int.cpp +++ b/src/system/kernel/arch/arm/arch_int.cpp @@ -31,7 +31,7 @@ #include -//#define TRACE_ARCH_INT +#define TRACE_ARCH_INT #ifdef TRACE_ARCH_INT # define TRACE(x) dprintf x #else @@ -108,9 +108,9 @@ print_iframe(const char *event, struct iframe *frame) frame->r0, frame->r1, frame->r2, frame->r3, frame->r4, frame->r5, frame->r6, frame->r7); dprintf("R08=%08lx R09=%08lx R10=%08lx R11=%08lx\n" - "R12=%08lx R13=%08lx R14=%08lx CPSR=%08lx\n", + "R12=%08lx SP=%08lx LR=%08lx PC=%08lx CPSR=%08lx\n", frame->r8, frame->r9, frame->r10, frame->r11, - frame->r12, frame->usr_sp, frame->usr_lr, frame->spsr); + frame->r12, frame->svc_sp, frame->svc_lr, frame->pc, frame->spsr); } @@ -215,9 +215,9 @@ private: extern "C" void arch_arm_undefined(struct iframe *iframe) { + print_iframe("Undefined Instruction", iframe); IFrameScope scope(iframe); // push/pop iframe - print_iframe("Undefined Instruction", iframe); panic("not handled!"); } @@ -225,17 +225,14 @@ arch_arm_undefined(struct iframe *iframe) extern "C" void arch_arm_syscall(struct iframe *iframe) { - IFrameScope scope(iframe); // push/pop iframe - print_iframe("Software interrupt", iframe); + IFrameScope scope(iframe); // push/pop iframe } extern "C" void arch_arm_data_abort(struct iframe *frame) { - IFrameScope scope(iframe); - Thread *thread = thread_get_current_thread(); bool isUser = (frame->spsr & 0x1f) == 0x10; addr_t far = arm_get_far(); @@ -244,8 +241,11 @@ arch_arm_data_abort(struct iframe *frame) #ifdef TRACE_ARCH_INT print_iframe("Data Abort", frame); + dprintf("FAR: %08lx, thread: %s\n", far, thread->name); #endif + IFrameScope scope(frame); + if (debug_debugger_running()) { // If this CPU or this thread has a fault handler, we're allowed to be // here. @@ -320,9 +320,9 @@ arch_arm_data_abort(struct iframe *frame) extern "C" void arch_arm_prefetch_abort(struct iframe *iframe) { + print_iframe("Prefetch Abort", iframe); IFrameScope scope(iframe); - print_iframe("Prefetch Abort", iframe); panic("not handled!"); }