summaryrefslogtreecommitdiff
path: root/Debugger/debug_stub.S
diff options
context:
space:
mode:
authorTat-Chee Wan (USM)2011-06-15 08:24:44 +0800
committerTat-Chee Wan (USM)2011-06-15 08:24:44 +0800
commitfa8394892071007624e8eab04152eba477cdf706 (patch)
tree9e11118191a9c1ada824ce60ef1f944086f99c7e /Debugger/debug_stub.S
parentcda5e33778749ea8e4a720af66b66fba7ee912ae (diff)
split platform specific code from generic debug code
Move platform specific routines from debug_stub.S into debug_runlooptasks.S
Diffstat (limited to 'Debugger/debug_stub.S')
-rw-r--r--Debugger/debug_stub.S107
1 files changed, 0 insertions, 107 deletions
diff --git a/Debugger/debug_stub.S b/Debugger/debug_stub.S
index b7c1253..119b939 100644
--- a/Debugger/debug_stub.S
+++ b/Debugger/debug_stub.S
@@ -469,113 +469,6 @@ debug_armComplexCCTable:
/* FIXME: The Debugger Stack Frame is probably not 100% consistent with the order that
GDB expects in the g/G messages. CSPR is probably located above R15 */
-#ifdef __NXOS__
-/****************************************************************************
- *
- * GDB Debugger Invocation Routine for NxOS
- *
- ****************************************************************************/
- .code 32
- .align 4
- .global nxos__handleDebug
-/* nxos__handleDebug
- * Prepare to switch to Debug Mode
- * int nxos__handleDebug(unsigned char *msg, comm_chan_t channel, long len);
- *
- * This routine is called from NxOS Fantom library to setup
- * Single Step Breakpoint in preparation for Debugger invocation if we're in
- * normal execution mode.
- *
- * It returns to complete the IRQ handling normally, after which the single
- * step breakpoint will be triggered, and the incoming GDB message will then
- * be processed in the dbg__bkpt_waitCMD() loop.
- *
- * If we're in Debugger Mode already, then just return and let the
- * dbg__bkpt_waitCMD() loop handle it normally.
- *
- * If we're operating in normal NxOS mode, return True (!0)
- * If we're already in Debugger Mode, return False (0)
- */
-nxos__handleDebug:
- push {r4, r5, lr}
- /* When called, NxOS is in Supervisor mode (MODE_SVC), called from nx__irq_handler()
- * via fantom_filter_packet().
- *
- * The IRQ Stack contains the LR and SPSR from the topmost interrupted task
- * (NxOS supports nested IRQs)
- */
- /* R0-R2 has received message related parameters */
-
- /* Switch to IRQ mode get SPSR to find out how we were called */
- msr cpsr_c, #(MODE_IRQ | CPSR_FIQ | CPSR_IRQ)
- mrs r3, spsr /* Copy SPSR to r3 */
- msr cpsr_c, #(MODE_SVC) /* Return to SVC mode, restore interrupts */
- and r3, r3, #CPSR_MODE /* Get previous mode */
- teq r3, #MODE_ABT /* Are we in Abort (Debug) mode? */
- moveq r0, #FALSE
- beq exit_nxos__handleDebug /* Yes, return False */
-
-_nxos_switch2debug:
- /* Retrieve ISR Return Address */
- ldr r3, =__irq_stack__
- ldmdb r3, {r4,r5} /* R4: SPSR, R5: LR */
- tst r4, #CPSR_THUMB /* Check for Thumb Mode */
- mov r1, r5 /* R5 has interrupted instruction address, setup Single Step Breakpoint for it */
- orrne r1, r1, #1 /* Configure for Thumb Single Step Breakpoint */
- bl _dbg__install_singlestep /* Setup Single Step, next instruction address returned in r1 */
- bl _dbg__activate_singlestep
- mov r0, #TRUE /* We're going to switch to Debug Mode (via Single Step Breakpoint) */
-exit_nxos__handleDebug:
- pop {r4, r5, lr}
- mov r1, lr /* Safe code: Thumb mode can't access lr */
- bx r1 /* In case we have Interworking from different caller mode */
-
-#else
-
-/****************************************************************************
- *
- * GDB Debugger Invocation Routine for NXT Firmware
- *
- ****************************************************************************/
- .code 16
- .align 2
- .global cCommHandleDebug
- .thumb_func
-/* cCommHandleDebug
- * Switch Mode to Debugger.
- * Used by NXT Firmware only
- *
- * UWORD cCommHandleDebug(UBYTE *pInBuf, UBYTE CmdBit, UWORD MsgLength);
- *
- * This routine is called from cCommInterprete either in normal operation mode (SVC)
- * or else when we're in debug mode (ABORT) which uses the cCommCtrl() routine to handle
- * I/O with the Host.
- *
- * On entry, the message is copied from the NXT buffer into our own buffers.
- *
- * If this is accessed from normal operation mode, we need to switch mode to
- * ABORT mode to handle the incoming message using a Manual Breakpoint instruction.
- * When DEBUG is exited, the execution resumes from the instruction following the Breakpoint.
- */
-cCommHandleDebug:
-/* Arg Registers are not preserved since this is invoked explicitly */
- push {lr} /* store arg registers */
- bl dbg__copyNxtDebugMsg /* setup Debugger Message Buffers, validate input, CPSR returned in R0 */
- _dbg_getmode r0 /* Get Debug Mode */
- cmp r0, #(TRUE & BYTE0) /* Confine it to Byte size */
-
- /* If Debug Mode is TRUE, this means that we're already running the Debugger */
- beq _cCommHandleDebug_cont
- /* Else, we're in normal operation mode (SVC), or other mode (??!) and need to force a switch to Debug mode */
- dbg__bkpt_thumb
-_cCommHandleDebug_cont:
- mov r0, #0 /* FIXME: Return Status */
- pop {r1} /* Can't Pop LR directly */
- bx r1 /* Safe code: actually we should be able to Pop PC since the caller is Thumb Mode */
-
- .ltorg
-#endif
-
/****************************************************************************
*
* GDB Debugger Init and Breakpoint Handler Routines