summaryrefslogtreecommitdiff
path: root/Debugger
diff options
context:
space:
mode:
authorTat-Chee Wan (USM)2011-07-20 11:43:49 +0800
committerTat-Chee Wan (USM)2011-07-20 11:43:49 +0800
commitc459f880d4a63516664434c0da480905e4481400 (patch)
treeead815e99960edbfbeb1e7966ab83ac54321caa5 /Debugger
parent0c0b43214104217fe4616a7600e2165d192202df (diff)
refactoring of message copying macros
Cleaned up macros used to copy debug messages to output buffers
Diffstat (limited to 'Debugger')
-rw-r--r--Debugger/debug_internals.h6
-rw-r--r--Debugger/debug_macros.h165
-rw-r--r--Debugger/debug_stub.S31
3 files changed, 113 insertions, 89 deletions
diff --git a/Debugger/debug_internals.h b/Debugger/debug_internals.h
index c0291f3..e187b82 100644
--- a/Debugger/debug_internals.h
+++ b/Debugger/debug_internals.h
@@ -126,7 +126,11 @@
/*@{*/
#define CMD_QUERY_MINPARAMLEN 0
#define CMD_QUERY_CURRTID_PARAMLEN 1
-#define CMD_QUERY_CURRTID_CHAR 'C'
+#define CMD_QUERY_FTINFO_PARAMLEN 11
+#define CMD_QUERY_STINFO_PARAMLEN 11
+#define CMD_QUERY_CURRTID_CHAR 'C'
+#define CMD_QUERY_FTINFO_CHAR 'f'
+#define CMD_QUERY_STINFO_CHAR 's'
/*@}*/
diff --git a/Debugger/debug_macros.h b/Debugger/debug_macros.h
index b25c7b4..8d63e46 100644
--- a/Debugger/debug_macros.h
+++ b/Debugger/debug_macros.h
@@ -122,17 +122,44 @@
bne 1b
.endm
+/* _dbg_CopyMsg2OutputBuf
+ * Copies source message to output buffer
+ * On entry:
+ * R2: source message buffer (ASCIIZ terminated)
+ * On exit:
+ * R0: Pointer to Output Buffer ASCIIZ location
+ * R2-R3: destroyed
+ */
+ .macro _dbg_CopyMsg2OutputBuf
+ ldr r0, =debug_OutMsgBuf
+ _dbg_stpcpy r0, r2, r3
+ .endm
+
+/* _dbg_CopyMsg2OutputBuf_withParam
+ * Internal Routine called to output message with parameters
+ * Return Message with byte-sized parameter
+ * On entry:
+ * R1: byte-sized param
+ * R2: source message buffer (ASCIIZ terminated)
+ * On exit:
+ * R0: Pointer to Output Buffer ASCIIZ location
+ * R1-R3: destroyed
+ */
+ .macro _dbg_CopyMsg2OutputBuf_withParam
+ _dbg_CopyMsg2OutputBuf /* R1 unchanged */
+ bl byte2ascii /* R0 points to buffer position after byte value */
+ _asciiz r0, r1
+ .endm
+
/* _dbg_outputAckOnlyFlag
* Return Flag ('+') for Continue or Step
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R2-R3: destroyed
*/
.macro _dbg_outputAckOnlyFlag
- ldr r0, =debug_OutMsgBuf
- ldr r1, =debug_AckOnlyFlag /* ASCIIZ terminated */
- _dbg_stpcpy r0, r1, r2
+ ldr r2, =debug_AckOnlyFlag /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
.endm
@@ -140,60 +167,67 @@
* Return Flag ('-') for Checksum Error (retransmission needed)
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R2-R3: destroyed
*/
.macro _dbg_outputRetransmitFlag
- ldr r0, =debug_OutMsgBuf
- ldr r1, =debug_RetransmitFlag /* ASCIIZ terminated */
- _dbg_stpcpy r0, r1, r2
+ ldr r2, =debug_RetransmitFlag /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
.endm
/* _dbg_outputMsgValidResponse
* Return Message with valid response ('+$')
* On exit:
* R0: Pointer to Output Buffer next character slot location
- * R1: destroyed
- * R2: destroyed
+ * R2-R3: destroyed
*/
.macro _dbg_outputMsgValidResponse
- ldr r0, =debug_OutMsgBuf
- ldr r1, =debug_ValidResponsePrefix
- _dbg_stpcpy r0, r1, r2
+ ldr r2, =debug_ValidResponsePrefix
+ _dbg_CopyMsg2OutputBuf
.endm
-
/* _dbg_outputMsgStatusOk
* Return Message with Ok ('+$OK') status
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R2-R3: destroyed
*/
.macro _dbg_outputMsgStatusOk
- ldr r0, =debug_OutMsgBuf
- ldr r1, =debug_OkResponse /* ASCIIZ terminated */
- _dbg_stpcpy r0, r1, r2
+ ldr r2, =debug_OkResponse /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
.endm
-/* __dbg_outputErrMsg
- * Internal Routine called to generate error messages
- * Return Message with Error ('+$ENN') status
- * On entry:
- * R1: error code
- * On exit:
+/* _dbg_outputMsgCurrTID
+ * Return Message with Default Thread ID ('+$QC0')
+ * On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
- * R3: destroyed
- */
- .macro __dbg_outputErrMsg
- ldr r0, =debug_OutMsgBuf
- ldr r2, =debug_ErrorResponsePrefix
- _dbg_stpcpy r0, r2, r3
- bl byte2ascii /* R0 points to buffer position after byte value */
- _asciiz r0, r1
- .endm
+ * R2-R3: destroyed
+ */
+ .macro _dbg_outputMsgCurrTID
+ ldr r2, =debug_ThreadIDResponse /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
+ .endm
+
+/* _dbg_outputMsgFirstThreadInfo
+ * Return Message with Default Current Thread ID ('+$m0')
+ * On exit:
+ * R0: Pointer to Output Buffer ASCIIZ location
+ * R2-R3: destroyed
+ */
+ .macro _dbg_outputMsgFirstThreadInfo
+ ldr r2, =debug_FirstThreadInfoResponse /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
+ .endm
+
+/* _dbg_outputMsgSubsequentThreadInfo
+ * Return Message with Default Current Thread ID ('+$m0')
+ * On exit:
+ * R0: Pointer to Output Buffer ASCIIZ location
+ * R2-R3: destroyed
+ */
+ .macro _dbg_outputMsgSubsequentThreadInfo
+ ldr r2, =debug_SubsequentThreadInfoResponse /* ASCIIZ terminated */
+ _dbg_CopyMsg2OutputBuf
+ .endm
/* _dbg_outputMsgStatusErr
* Return Message with Error ('+$ENN') status
@@ -201,43 +235,22 @@
* R1: error code
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
- * R3: destroyed
+ * R1-R3: destroyed
*/
.macro _dbg_outputMsgStatusErr
- __dbg_outputErrMsg
+ ldr r2, =debug_ErrorResponsePrefix
+ _dbg_CopyMsg2OutputBuf_withParam
.endm
/* _dbg_outputMsgStatusErrCode
* Return Message with Error ('+$ENN') status
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R1-R3: destroyed
*/
.macro _dbg_outputMsgStatusErrCode errcode
mov r1, #\errcode
- __dbg_outputErrMsg
- .endm
-
-/* __dbg_outputSigMsg
- * Internal Routine called to generate Signal messages
- * Return Message with Signal ('+$SNN') status
- * On entry:
- * R1: signal code
- * On exit:
- * R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
- * R3: destroyed
- */
- .macro __dbg_outputSigMsg
- ldr r0, =debug_OutMsgBuf
- ldr r2, =debug_SignalResponsePrefix
- _dbg_stpcpy r0, r2, r3
- bl byte2ascii /* R0 points to buffer position after byte value */
- _asciiz r0, r1
+ _dbg_outputMsgStatusErr
.endm
/* _dbg_outputMsgStatusSig
@@ -246,38 +259,24 @@
* R1: signal code
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R1-R3: destroyed
*/
.macro _dbg_outputMsgStatusSig
- __dbg_outputSigMsg
+ ldr r2, =debug_SignalResponsePrefix
+ _dbg_CopyMsg2OutputBuf_withParam
.endm
/* _dbg_outputMsgStatusSigCode
* Return Message with Signal ('+$SNN') status
* On exit:
* R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
+ * R1-R3: destroyed
*/
.macro _dbg_outputMsgStatusSigCode statuscode
mov r1, #\statuscode
- __dbg_outputSigMsg
+ _dbg_outputMsgStatusSig
.endm
-/* _dbg_outputMsgCurrTID
- * Return Message with Default Thread ID ('+$QC0')
- * On exit:
- * R0: Pointer to Output Buffer ASCIIZ location
- * R1: destroyed
- * R2: destroyed
- */
- .macro _dbg_outputMsgCurrTID
- ldr r0, =debug_OutMsgBuf
- ldr r1, =debug_ThreadIDResponse /* ASCIIZ terminated */
- _dbg_stpcpy r0, r1, r2
- .endm
-
/* _regenum2index
* Convert register enum to debugger stack index
diff --git a/Debugger/debug_stub.S b/Debugger/debug_stub.S
index 1b0ef8c..cbb253a 100644
--- a/Debugger/debug_stub.S
+++ b/Debugger/debug_stub.S
@@ -254,6 +254,11 @@ debug_OkResponse:
debug_ThreadIDResponse:
.byte '+','$','Q','C','0',0 /* 0: Any thread */
+debug_FirstThreadInfoResponse:
+ .byte '+','$','m','0',0 /* 0: One default thread */
+debug_SubsequentThreadInfoResponse:
+ .byte '+','$','l',0 /* End of Thread List */
+
/* The CmdIndexTable and CmdJumpTable must be kept in sync */
debug_cmdIndexTable:
.byte 'g','G','p','P','m','M','D','c','s','k','z','Z','?','q','Q',0
@@ -693,11 +698,11 @@ __dbg__procCmdReturnOutputLengthError:
*/
__dbg__procBreakpointAddrError:
mov r1, #MSG_UNKNOWNBRKPT
- b __dbg__procErrorMsg
+/* b __dbg__procErrorMsg */
__dbg__procErrorMsg:
- __dbg_outputErrMsg
+ _dbg_outputMsgStatusErr
/* b __dbg__sendDebugMsgExit */
__dbg__sendDebugMsgExit:
@@ -743,15 +748,31 @@ _dbg__cmd_Query:
_dbg_setstate DBG_CONFIGURED /* We have exchanged query messages with the GDB server */
ldmfd sp!, {r0, r1} /* Restore parameters needed for subsequent processing */
bl __dbg__cmdParamLen
- cmp r1, #CMD_QUERY_CURRTID_PARAMLEN
- bne _dbg__cmd_Query_default
+ cmp r1, #CMD_QUERY_MINPARAMLEN
+ beq _dbg__cmd_Query_default
-_dbg__cmd_Query_check:
ldrb r2, [r0] /* Get First Query Param Char */
+_dbg__cmd_Query_check_C:
teq r2, #CMD_QUERY_CURRTID_CHAR /* Handle Current Thread ID Query */
+ bne _dbg__cmd_Query_check_fThreadInfo
+ cmp r1, #CMD_QUERY_CURRTID_PARAMLEN
bne _dbg__cmd_Query_default
_dbg_outputMsgCurrTID
b __dbg__sendDebugMsgExit
+_dbg__cmd_Query_check_fThreadInfo:
+ teq r2, #CMD_QUERY_FTINFO_CHAR /* Handle fThreadInfo Query */
+ bne _dbg__cmd_Query_check_sThreadInfo
+ cmp r1, #CMD_QUERY_FTINFO_PARAMLEN
+ bne _dbg__cmd_Query_default
+ _dbg_outputMsgFirstThreadInfo
+ b __dbg__sendDebugMsgExit
+_dbg__cmd_Query_check_sThreadInfo:
+ teq r2, #CMD_QUERY_STINFO_CHAR /* Handle sThreadInfo ID Query */
+ bne _dbg__cmd_Query_default
+ cmp r1, #CMD_QUERY_STINFO_PARAMLEN
+ bne _dbg__cmd_Query_default
+ _dbg_outputMsgSubsequentThreadInfo
+ b __dbg__sendDebugMsgExit
_dbg__cmd_Query_default:
b __dbg__procUnimplementedError /* FIXME: return an empty message to GDB (no modifiable settings) */