← Back to team overview

t-kernel team mailing list archive

[PATCH] monitor: dump registers

 

From: Du Huanpeng <u74147@xxxxxxxxx>

Signed-off-by: Du Huanpeng <u74147@xxxxxxxxx>
---
 tkernel_source/monitor/cmdsvc/register.c         | 47 +++++++++++++++++++++++-
 tkernel_source/monitor/hwdepend/arm/cpu/monhdr.S | 13 +++----
 2 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/tkernel_source/monitor/cmdsvc/register.c b/tkernel_source/monitor/cmdsvc/register.c
index 0cd5c78..7ac28e4 100644
--- a/tkernel_source/monitor/cmdsvc/register.c
+++ b/tkernel_source/monitor/cmdsvc/register.c
@@ -23,7 +23,6 @@
 #include <sys/sysinfo.h>
 
 EXPORT	UW	regStack[39 + 10 + 2];
-IMPORT UW __stack_regs[16][32];
 /*
         register definition table
 
@@ -83,6 +82,32 @@ typedef	struct {
 #define	N_ACTREGS	(16 + 7 + 7 + 8 + 7 + 10)
 #define	N_REGS		(N_ACTREGS + 3)
 
+const char format[] = {
+	"r0     :[%08X]\n"
+	"r1     :[%08X]\n"
+	"r2     :[%08X]\n"
+	"r3     :[%08X]\n"
+	"r4     :[%08X]\n"
+	"r5     :[%08X]\n"
+	"r6     :[%08X]\n"
+	"r7     :[%08X]\n"
+	"r8     :[%08X]  "   "[%08X]\n"
+	"r9     :[%08X]  "   "[%08X]\n"
+	"r10/sl :[%08X]  "   "[%08X]\n"
+	"r11/fp :[%08X]  "   "[%08X]\n"
+	"r12/ip :[%08X]  "   "[%08X]\n"
+	"r13/sp :[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]\n"
+	"r14/lr :[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]  "   "[%08X]\n"
+	"        "
+	"< USER   >  "
+	"< FIQ    >  "
+	"< IRQ    >  "
+	"< ABORT  >  "
+	"< SVC    >  "
+	"< undef  >\n"
+};
+
+
 LOCAL	const	REGTAB	regTab[N_REGS] = {
 	{"R0      ",	R_GEN + 0x00			},	/* 0 */
 	{"R1      ",	R_GEN + 0x01			},	/* 1 */
@@ -284,9 +309,29 @@ EXPORT	ER	setRegister(W regno, UW val)
 EXPORT	void	dispRegister(W regno)
 {
 	W	i, j, n, id, rid;
+	unsigned int *regs = (void *)0x200;
+
+	printk(format,
+		regs[0x00],
+		regs[0x01],
+		regs[0x02],
+		regs[0x03],
+		regs[0x04],
+		regs[0x05],
+		regs[0x06],
+		regs[0x07],
+		regs[0x08], regs[0x18],
+		regs[0x09], regs[0x19],
+		regs[0x0A], regs[0x1A],
+		regs[0x0B], regs[0x1B],
+		regs[0x0C], regs[0x1C],
+		regs[0x0D], regs[0x1D], regs[0x2D], regs[0x3D], regs[0x4D], regs[0x5D],
+		regs[0x0E], regs[0x1E], regs[0x2E], regs[0x3E], regs[0x4E], regs[0x5E]);
 
 	if (regno >= N_REGS) return;
 
+
+
 	id = (regno < 0) ? (R_GRP | R_GEN) : regTab[regno].id;
 
 	for (n = i = 0; i < N_ACTREGS; i++) {
diff --git a/tkernel_source/monitor/hwdepend/arm/cpu/monhdr.S b/tkernel_source/monitor/hwdepend/arm/cpu/monhdr.S
index 9d985d4..54af316 100755
--- a/tkernel_source/monitor/hwdepend/arm/cpu/monhdr.S
+++ b/tkernel_source/monitor/hwdepend/arm/cpu/monhdr.S
@@ -64,18 +64,17 @@ _defaultHdr:
  */
 
 #define stack_regs_usr 0x200
-#define stack_regs_fiq 0x400
-#define stack_regs_irq 0x600
-#define stack_regs_svc 0x800
-#define stack_regs_abt 0xA00
-#define stack_regs_und 0xC00
 #define stack_regs_sys 0x200
+#define stack_regs_fiq (stack_regs_usr+0x18*4)
+#define stack_regs_irq (stack_regs_usr+0x2D*4)
+#define stack_regs_abt (stack_regs_usr+0x3D*4)
+#define stack_regs_svc (stack_regs_usr+0x4D*4)
+#define stack_regs_und (stack_regs_usr+0x5D*4)
 
 /*
  * svc mode -> go
  * usr & other mode -> return
  */
-
 	push	{lr}
 	mrs	lr, cpsr
 
@@ -86,8 +85,6 @@ _defaultHdr:
 /* else we are in svc mode */
 /* save sys and usr in svc mode, r0-r7 */
 	ldr	lr, =stack_regs_usr
-	ldr	lr, [lr]
-
 	stmia	lr, {r0-r7}		@ Now, we can work with r0-r7
 /* svc mode */
 	ldr	r7, =stack_regs_svc
-- 
1.9.1