From f5e933a0d0912f25dc342a4f658f3910d34aef24 Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Mon, 13 Jun 2011 08:53:18 +0800 Subject: disable interrupts when switching from undef handler to debugger NxOS has nested interrupts support. Prevent accidental retriggering of UNDEF handler while processing an existing breakpoint by disabling interrupts until the breakpoint has been restored and the debugger is really ready to handle debug messages. --- Debugger/debug_stub.S | 2 ++ Debugger/undef_handler.S | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Debugger/debug_stub.S b/Debugger/debug_stub.S index d374cbe..aaf1c85 100644 --- a/Debugger/debug_stub.S +++ b/Debugger/debug_stub.S @@ -720,6 +720,8 @@ dbg__bkpt_offset_outofrange: dbg__bkpt_waitCMD: /* We enter this code section when a Breakpoint Triggers */ _dbg_setmode TRUE /* Debug Mode = True */ + msr cpsr_c, #(MODE_ABT) /* Re-enable Interrupts */ + _dbg_getstate r0 cmp r0, #DBG_CONFIGURED blo dbg__bkpt_waitCMD_cont /* Not configured yet, don't send Breakpoint Signal Response */ diff --git a/Debugger/undef_handler.S b/Debugger/undef_handler.S index f185fbd..11d3cbc 100644 --- a/Debugger/undef_handler.S +++ b/Debugger/undef_handler.S @@ -100,8 +100,8 @@ _is_arm: ldr r2, =dbg__arm_bkpt_handler /* handle BKPT, BKPT index in r0 */ _exit_undef_handler: and r0, r1, r0 /* Keep index value */ - msr cpsr_c, #(MODE_ABT) /* Configure Abort Mode */ - mov pc, r2 /* Invoke Debugger State (Supervisor Mode) */ + msr cpsr_c, #(MODE_ABT | CPSR_FIQ | CPSR_IRQ) /* Switch to Abort Mode, Disable Interrupts */ + mov pc, r2 /* Invoke Debugger */ .global resume_execution -- cgit v1.2.3