Thread Previous • Date Previous • Date Next • Thread Next |
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
Thread Previous • Date Previous • Date Next • Thread Next |