t-kernel team mailing list archive
-
t-kernel team
-
Mailing list archive
-
Message #00111
[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