- cleaned

git-svn-id: http://moon:8086/svn/mips@80 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
2017-01-14 15:10:39 +00:00
parent 2bc3668020
commit b11c98a70f
4 changed files with 123 additions and 128 deletions
+4
View File
@@ -84,6 +84,10 @@ void dbg_uart_isr(struct xcptcontext *xcp)
void dbg_putchar(char c)
{
if (c == 0x0A)
{
writechar(4, 0x0D);
}
writechar(4, c);
}
+70 -84
View File
@@ -9,16 +9,10 @@
extern int instr_info(unsigned iword, instr_info_t *pInfo);
extern int tdisasm(char *buffer, unsigned address, unsigned iword, unsigned char ext, unsigned *regmask, unsigned *symbol_value, unsigned *ls_register);
#define DBG_PRINT_REG(tag_str, reg) \
#define DBG_PRINT_REG_CHG(tag_str, reg, reg_last) \
dbg_puts(tag_str); \
dbg_print_word(reg); \
dbg_puts(" ");
#define DBG_PRINT_REG_CHG(tag_str, reg, chg_tag) \
dbg_puts(tag_str); \
dbg_print_word(reg); \
dbg_puts(chg_tag); \
dbg_puts(reg != reg_last ? "*" : " "); \
dbg_puts(" ");
#define MAX_USER_BP 16
@@ -167,16 +161,59 @@ uint32_t BreakGetType(uint32_t instr)
return (instr >> 6) & BP_MASK_TYPE;
}
char* reg_changed(uint32_t reg1, uint32_t reg2)
void print_regs(struct xcptcontext * xcp, struct xcptcontext * xcp_last)
{
static char chg_str[2] = {0};
DBG_PRINT_REG_CHG(" Status : ", xcp->sr, xcp_last->sr);
DBG_PRINT_REG_CHG(" Cause : ", xcp->cr, xcp_last->cr);
DBG_PRINT_REG_CHG(" EPC : ", xcp->epc, xcp_last->epc);
DBG_PRINT_REG_CHG("BadAddr : ", xcp->baddr, xcp_last->baddr);
dbg_puts("\n");
DBG_PRINT_REG_CHG(" MDLO : ", xcp->mdlo, xcp_last->mdlo);
DBG_PRINT_REG_CHG(" MDHI : ", xcp->mdhi, xcp_last->mdhi);
if (reg1 != reg2)
chg_str[0] = '*';
else
chg_str[0] = ' ';
dbg_puts("\n");
return chg_str;
dbg_puts("Registers:\n");
DBG_PRINT_REG_CHG(" 0 (ze) : ", xcp->regs[0], xcp_last->regs[0]);
DBG_PRINT_REG_CHG(" 1 (at) : ", xcp->regs[1], xcp_last->regs[1]);
DBG_PRINT_REG_CHG(" 2 (v0) : ", xcp->regs[2], xcp_last->regs[2]);
DBG_PRINT_REG_CHG(" 3 (v1) : ", xcp->regs[3], xcp_last->regs[3]);
dbg_puts("\n");
DBG_PRINT_REG_CHG(" 4 (a0) : ", xcp->regs[4], xcp_last->regs[4]);
DBG_PRINT_REG_CHG(" 5 (a1) : ", xcp->regs[5], xcp_last->regs[5]);
DBG_PRINT_REG_CHG(" 6 (a2) : ", xcp->regs[6], xcp_last->regs[6]);
DBG_PRINT_REG_CHG(" 7 (a3) : ", xcp->regs[7], xcp_last->regs[7]);
dbg_puts("\n");
DBG_PRINT_REG_CHG(" 8 (t0) : ", xcp->regs[8], xcp_last->regs[8]);
DBG_PRINT_REG_CHG(" 9 (t1) : ", xcp->regs[9], xcp_last->regs[9]);
DBG_PRINT_REG_CHG("10 (t2) : ", xcp->regs[10], xcp_last->regs[10]);
DBG_PRINT_REG_CHG("11 (t3) : ", xcp->regs[11], xcp_last->regs[11]);
dbg_puts("\n");
DBG_PRINT_REG_CHG("12 (t4) : ", xcp->regs[12], xcp_last->regs[12]);
DBG_PRINT_REG_CHG("13 (t5) : ", xcp->regs[13], xcp_last->regs[13]);
DBG_PRINT_REG_CHG("14 (t6) : ", xcp->regs[14], xcp_last->regs[14]);
DBG_PRINT_REG_CHG("15 (t7) : ", xcp->regs[15], xcp_last->regs[15]);
dbg_puts("\n");
DBG_PRINT_REG_CHG("16 (s0) : ", xcp->regs[16], xcp_last->regs[16]);
DBG_PRINT_REG_CHG("17 (s1) : ", xcp->regs[17], xcp_last->regs[17]);
DBG_PRINT_REG_CHG("18 (s2) : ", xcp->regs[18], xcp_last->regs[18]);
DBG_PRINT_REG_CHG("19 (s3) : ", xcp->regs[19], xcp_last->regs[19]);
dbg_puts("\n");
DBG_PRINT_REG_CHG("20 (s4) : ", xcp->regs[20], xcp_last->regs[20]);
DBG_PRINT_REG_CHG("21 (s5) : ", xcp->regs[21], xcp_last->regs[21]);
DBG_PRINT_REG_CHG("22 (s6) : ", xcp->regs[22], xcp_last->regs[22]);
DBG_PRINT_REG_CHG("23 (s7) : ", xcp->regs[23], xcp_last->regs[23]);
dbg_puts("\n");
DBG_PRINT_REG_CHG("24 (t8) : ", xcp->regs[24], xcp_last->regs[24]);
DBG_PRINT_REG_CHG("25 (t9) : ", xcp->regs[25], xcp_last->regs[25]);
DBG_PRINT_REG_CHG("26 (k0) : ", xcp->regs[26], xcp_last->regs[26]);
DBG_PRINT_REG_CHG("27 (k1) : ", xcp->regs[27], xcp_last->regs[27]);
dbg_puts("\n");
DBG_PRINT_REG_CHG("28 (gp) : ", xcp->regs[28], xcp_last->regs[28]);
DBG_PRINT_REG_CHG("29 (sp) : ", xcp->regs[29], xcp_last->regs[29]);
DBG_PRINT_REG_CHG("30 (fp) : ", xcp->regs[30], xcp_last->regs[30]);
DBG_PRINT_REG_CHG("31 (ra) : ", xcp->regs[31], xcp_last->regs[31]);
dbg_puts("\n");
}
void set_mgmt_break(uint32_t *pAddr_break, int index)
@@ -184,7 +221,7 @@ void set_mgmt_break(uint32_t *pAddr_break, int index)
mgmt_bp_ss[index].pAddr = NULL;
mgmt_bp_ss[index].instr = 0;
dbg_puts_d("Set management break at ");dbg_print_word_d((long)pAddr_break);dbg_puts_d("\n\r");
dbg_puts_d("Set management break at ");dbg_print_word_d((long)pAddr_break);dbg_puts_d("\n");
// Don't overwrite user breaks
if (IsBreak(*pAddr_break) && (BreakGetType(*pAddr_break) == BP_USER_BASE))
{
@@ -265,7 +302,7 @@ void dbg_handler(struct xcptcontext * xcp)
pAddr_prev = pAddr_curr - 1;
pAddr_next = pAddr_curr + 1;
dbg_puts_d("\n\r");dbg_puts_d(g_state_names[g_state]);dbg_puts_d("\n\r");
dbg_puts_d("\n");dbg_puts_d(g_state_names[g_state]);dbg_puts_d("\n");
if (IsBreak(*pAddr_curr))
{
@@ -276,12 +313,12 @@ void dbg_handler(struct xcptcontext * xcp)
case BP_MGMT_BASE_SS:
// Restore original instructions after single-step
dbg_puts_d("1. Restore after single-step at ");dbg_print_word_d((long)mgmt_bp_ss[0].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("1. Restore after single-step at ");dbg_print_word_d((long)mgmt_bp_ss[0].pAddr);dbg_puts_d("\n");
*(mgmt_bp_ss[0].pAddr) = mgmt_bp_ss[0].instr;
ICACHE_invalidate_at(mgmt_bp_ss[0].pAddr);
if (mgmt_bp_ss[1].pAddr)
{
dbg_puts_d("2. Restore after single-step at ");dbg_print_word_d((long)mgmt_bp_ss[1].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("2. Restore after single-step at ");dbg_print_word_d((long)mgmt_bp_ss[1].pAddr);dbg_puts_d("\n");
*(mgmt_bp_ss[1].pAddr) = mgmt_bp_ss[1].instr;
ICACHE_invalidate_at(mgmt_bp_ss[1].pAddr);
}
@@ -291,19 +328,19 @@ void dbg_handler(struct xcptcontext * xcp)
case BP_MGMT_BASE_RU:
bp_index = BP_GET_ID(*pAddr_curr);
dbg_puts_d("Restore user break at ");dbg_print_word_d((long)user_bp[bp_index].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("Restore user break at ");dbg_print_word_d((long)user_bp[bp_index].pAddr);dbg_puts_d("\n");
*(user_bp[bp_index].pAddr) = BP_USER(bp_index);
ICACHE_invalidate_at(user_bp[bp_index].pAddr);
*(mgmt_bp_ru[0].pAddr) = mgmt_bp_ru[0].instr;
ICACHE_invalidate_at(mgmt_bp_ru[0].pAddr);
dbg_puts_d("1. Restore after RU at ");dbg_print_word_d((long)mgmt_bp_ru[0].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("1. Restore after RU at ");dbg_print_word_d((long)mgmt_bp_ru[0].pAddr);dbg_puts_d("\n");
if (mgmt_bp_ru[1].pAddr)
{
*(mgmt_bp_ru[1].pAddr) = mgmt_bp_ru[1].instr;
ICACHE_invalidate_at(mgmt_bp_ru[1].pAddr);
dbg_puts_d("2. Restore after RU at ");dbg_print_word_d((long)mgmt_bp_ru[1].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("2. Restore after RU at ");dbg_print_word_d((long)mgmt_bp_ru[1].pAddr);dbg_puts_d("\n");
}
if (!g_is_ss)
return;
@@ -314,70 +351,19 @@ void dbg_handler(struct xcptcontext * xcp)
is_user_bp = 1;
bp_index = BP_GET_ID(*pAddr_curr);
dbg_puts_d("Restore instruction at ");dbg_print_word_d((long)user_bp[bp_index].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("Restore instruction at ");dbg_print_word_d((long)user_bp[bp_index].pAddr);dbg_puts_d("\n");
*(user_bp[bp_index].pAddr) = user_bp[bp_index].instr;
ICACHE_invalidate_at(user_bp[bp_index].pAddr);
break;
default:
dbg_puts_d("Found ordinary break at ");dbg_print_word_d((long)pAddr_curr);dbg_puts_d("\n\r");
dbg_puts_d("Found ordinary break at ");dbg_print_word_d((long)pAddr_curr);dbg_puts_d("\n");
break;
}
}
dbg_puts("\n\r");
DBG_PRINT_REG_CHG(" Status : ", xcp->sr, reg_changed(xcp->sr, xcp_last.sr));
DBG_PRINT_REG_CHG(" Cause : ", xcp->cr, reg_changed(xcp->cr, xcp_last.cr));
DBG_PRINT_REG_CHG(" EPC : ", xcp->epc, reg_changed(xcp->epc, xcp_last.epc));
DBG_PRINT_REG_CHG("BadAddr : ", xcp->baddr, reg_changed(xcp->baddr, xcp_last.baddr));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG(" MDLO : ", xcp->mdlo, reg_changed(xcp->mdlo, xcp_last.mdlo));
DBG_PRINT_REG_CHG(" MDHI : ", xcp->mdhi, reg_changed(xcp->mdhi, xcp_last.mdhi));
dbg_puts("\n\r");
dbg_puts("Registers:\n\r");
DBG_PRINT_REG_CHG(" 0 (ze) : ", xcp->regs[0], reg_changed(xcp->regs[0], xcp_last.regs[0]));
DBG_PRINT_REG_CHG(" 1 (at) : ", xcp->regs[1], reg_changed(xcp->regs[1], xcp_last.regs[1]));
DBG_PRINT_REG_CHG(" 2 (v0) : ", xcp->regs[2], reg_changed(xcp->regs[2], xcp_last.regs[2]));
DBG_PRINT_REG_CHG(" 3 (v1) : ", xcp->regs[3], reg_changed(xcp->regs[3], xcp_last.regs[3]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG(" 4 (a0) : ", xcp->regs[4], reg_changed(xcp->regs[4], xcp_last.regs[4]));
DBG_PRINT_REG_CHG(" 5 (a1) : ", xcp->regs[5], reg_changed(xcp->regs[5], xcp_last.regs[5]));
DBG_PRINT_REG_CHG(" 6 (a2) : ", xcp->regs[6], reg_changed(xcp->regs[6], xcp_last.regs[6]));
DBG_PRINT_REG_CHG(" 7 (a3) : ", xcp->regs[7], reg_changed(xcp->regs[7], xcp_last.regs[7]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG(" 8 (t0) : ", xcp->regs[8], reg_changed(xcp->regs[8], xcp_last.regs[8]));
DBG_PRINT_REG_CHG(" 9 (t1) : ", xcp->regs[9], reg_changed(xcp->regs[9], xcp_last.regs[9]));
DBG_PRINT_REG_CHG("10 (t2) : ", xcp->regs[10], reg_changed(xcp->regs[10], xcp_last.regs[10]));
DBG_PRINT_REG_CHG("11 (t3) : ", xcp->regs[11], reg_changed(xcp->regs[11], xcp_last.regs[11]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG("12 (t4) : ", xcp->regs[12], reg_changed(xcp->regs[12], xcp_last.regs[12]));
DBG_PRINT_REG_CHG("13 (t5) : ", xcp->regs[13], reg_changed(xcp->regs[13], xcp_last.regs[13]));
DBG_PRINT_REG_CHG("14 (t6) : ", xcp->regs[14], reg_changed(xcp->regs[14], xcp_last.regs[14]));
DBG_PRINT_REG_CHG("15 (t7) : ", xcp->regs[15], reg_changed(xcp->regs[15], xcp_last.regs[15]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG("16 (s0) : ", xcp->regs[16], reg_changed(xcp->regs[16], xcp_last.regs[16]));
DBG_PRINT_REG_CHG("17 (s1) : ", xcp->regs[17], reg_changed(xcp->regs[17], xcp_last.regs[17]));
DBG_PRINT_REG_CHG("18 (s2) : ", xcp->regs[18], reg_changed(xcp->regs[18], xcp_last.regs[18]));
DBG_PRINT_REG_CHG("19 (s3) : ", xcp->regs[19], reg_changed(xcp->regs[19], xcp_last.regs[19]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG("20 (s4) : ", xcp->regs[20], reg_changed(xcp->regs[20], xcp_last.regs[20]));
DBG_PRINT_REG_CHG("21 (s5) : ", xcp->regs[21], reg_changed(xcp->regs[21], xcp_last.regs[21]));
DBG_PRINT_REG_CHG("22 (s6) : ", xcp->regs[22], reg_changed(xcp->regs[22], xcp_last.regs[22]));
DBG_PRINT_REG_CHG("23 (s7) : ", xcp->regs[23], reg_changed(xcp->regs[23], xcp_last.regs[23]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG("24 (t8) : ", xcp->regs[24], reg_changed(xcp->regs[24], xcp_last.regs[24]));
DBG_PRINT_REG_CHG("25 (t9) : ", xcp->regs[25], reg_changed(xcp->regs[25], xcp_last.regs[25]));
DBG_PRINT_REG_CHG("26 (k0) : ", xcp->regs[26], reg_changed(xcp->regs[26], xcp_last.regs[26]));
DBG_PRINT_REG_CHG("27 (k1) : ", xcp->regs[27], reg_changed(xcp->regs[27], xcp_last.regs[27]));
dbg_puts("\n\r");
DBG_PRINT_REG_CHG("28 (gp) : ", xcp->regs[28], reg_changed(xcp->regs[28], xcp_last.regs[28]));
DBG_PRINT_REG_CHG("29 (sp) : ", xcp->regs[29], reg_changed(xcp->regs[29], xcp_last.regs[29]));
DBG_PRINT_REG_CHG("30 (fp) : ", xcp->regs[30], reg_changed(xcp->regs[30], xcp_last.regs[30]));
DBG_PRINT_REG_CHG("31 (ra) : ", xcp->regs[31], reg_changed(xcp->regs[31], xcp_last.regs[31]));
dbg_puts("\n\r");
dbg_puts("\n");
print_regs(xcp, &xcp_last);
pInstr = pAddr_prev;
// Disassemble instructions
@@ -410,7 +396,7 @@ void dbg_handler(struct xcptcontext * xcp)
}
}
dbg_puts(g_buf);
dbg_puts("\n\r");
dbg_puts("\n");
pInstr++;
}
@@ -424,7 +410,7 @@ void dbg_handler(struct xcptcontext * xcp)
ICACHE_invalidate_at(mgmt_bp_ru[0].pAddr);
mgmt_bp_ru[1].pAddr = NULL;
mgmt_bp_ru[1].instr = 0;
dbg_puts_d("1. Insert RU-break at ");dbg_print_word_d((long)mgmt_bp_ru[0].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("1. Insert RU-break at ");dbg_print_word_d((long)mgmt_bp_ru[0].pAddr);dbg_puts_d("\n");
// We have two possible management breaks, if previous instruction was branch or jump
if (is_branch_shadow)
@@ -445,7 +431,7 @@ void dbg_handler(struct xcptcontext * xcp)
// Replace instruction with managment breakpoint
*(mgmt_bp_ru[1].pAddr) = BP_MGMT_RU(bp_index);
ICACHE_invalidate_at(mgmt_bp_ru[1].pAddr);
dbg_puts_d("2. Insert RU-break at ");dbg_print_word_d((long)mgmt_bp_ru[1].pAddr);dbg_puts_d("\n\r");
dbg_puts_d("2. Insert RU-break at ");dbg_print_word_d((long)mgmt_bp_ru[1].pAddr);dbg_puts_d("\n");
}
}
@@ -472,14 +458,14 @@ void dbg_handler(struct xcptcontext * xcp)
dbg_puts("Enter breakpoint: ");
dbg_gets(buffer, sizeof(buffer));
bp_addr = strtol(buffer, NULL, 16);
dbg_puts("Insert breakpoint at "); dbg_print_word(bp_addr); dbg_puts("\n\r");
dbg_puts("Insert breakpoint at "); dbg_print_word(bp_addr); dbg_puts("\n");
user_bp[g_bp_count].pAddr = (uint32_t*)bp_addr;
user_bp[g_bp_count].instr = *(user_bp[g_bp_count].pAddr);
*(user_bp[g_bp_count].pAddr) = BP_USER(g_bp_count);
tdisasm(g_buf, (long)user_bp[g_bp_count].pAddr, user_bp[g_bp_count].instr, 0, &junk, &junk, &junk);
dbg_print_word((long)user_bp[g_bp_count].pAddr);dbg_puts(": b ");dbg_puts(g_buf);dbg_puts("\n\r");
dbg_print_word((long)user_bp[g_bp_count].pAddr);dbg_puts(": b ");dbg_puts(g_buf);dbg_puts("\n");
ICACHE_invalidate_at(user_bp[g_bp_count].pAddr);
g_bp_count++;
break;
@@ -545,7 +531,7 @@ void dbg_handler(struct xcptcontext * xcp)
pInstr++;
} while(1);
dbg_puts_d("Return found at "); dbg_print_word_d((long)pInstr);dbg_puts_d("\n\r");
dbg_puts_d("Return found at "); dbg_print_word_d((long)pInstr);dbg_puts_d("\n");
set_mgmt_break(pInstr, 0);
break;
@@ -573,7 +559,7 @@ void dbg_handler(struct xcptcontext * xcp)
if ((result == INSTR_TYPE_JUMP) && (info.flags & INSTR_FLAGS_JUMP_LINK))
{
singlestep(xcp, pAddr_next, 0);
dbg_puts_d("Skip sub-routine\n\r");
dbg_puts_d("Skip sub-routine\n");
}
else
{
+43 -39
View File
@@ -24,59 +24,63 @@ void xcpt_register(int xcpt_num, fp_xcpt_t fp)
g_xcpt_handler[xcpt_num] = fp;
}
void xcpt_registers_print(struct xcptcontext * xcp)
{
PRINT_REG(" Status : ", xcp->sr);
PRINT_REG(" Cause : ", xcp->cr);
PRINT_REG(" EPC : ", xcp->epc);
PRINT_REG("BadAddr : ", xcp->baddr);
xcpt_registers_print_with_change(xcp, xcp);
}
void xcpt_registers_print_with_change(struct xcptcontext * xcp, struct xcptcontext * xcp_last)
{
PRINT_REG_CHG(" Status : ", xcp->sr, xcp_last->sr);
PRINT_REG_CHG(" Cause : ", xcp->cr, xcp_last->cr);
PRINT_REG_CHG(" EPC : ", xcp->epc, xcp_last->epc);
PRINT_REG_CHG("BadAddr : ", xcp->baddr, xcp_last->baddr);
sputs("\n");
PRINT_REG(" MDLO : ", xcp->mdlo);
PRINT_REG(" MDHI : ", xcp->mdhi);
PRINT_REG_CHG(" MDLO : ", xcp->mdlo, xcp_last->mdlo);
PRINT_REG_CHG(" MDHI : ", xcp->mdhi, xcp_last->mdhi);
sputs("\n");
sputs("Registers:\n");
PRINT_REG(" 0 (ze) : ", xcp->regs[0]);
PRINT_REG(" 1 (at) : ", xcp->regs[1]);
PRINT_REG(" 2 (v0) : ", xcp->regs[2]);
PRINT_REG(" 3 (v1) : ", xcp->regs[3]);
PRINT_REG_CHG(" 0 (ze) : ", xcp->regs[0], xcp_last->regs[0]);
PRINT_REG_CHG(" 1 (at) : ", xcp->regs[1], xcp_last->regs[1]);
PRINT_REG_CHG(" 2 (v0) : ", xcp->regs[2], xcp_last->regs[2]);
PRINT_REG_CHG(" 3 (v1) : ", xcp->regs[3], xcp_last->regs[3]);
sputs("\n");
PRINT_REG(" 4 (a0) : ", xcp->regs[4]);
PRINT_REG(" 5 (a1) : ", xcp->regs[5]);
PRINT_REG(" 6 (a2) : ", xcp->regs[6]);
PRINT_REG(" 7 (a3) : ", xcp->regs[7]);
PRINT_REG_CHG(" 4 (a0) : ", xcp->regs[4], xcp_last->regs[4]);
PRINT_REG_CHG(" 5 (a1) : ", xcp->regs[5], xcp_last->regs[5]);
PRINT_REG_CHG(" 6 (a2) : ", xcp->regs[6], xcp_last->regs[6]);
PRINT_REG_CHG(" 7 (a3) : ", xcp->regs[7], xcp_last->regs[7]);
sputs("\n");
PRINT_REG(" 8 (t0) : ", xcp->regs[8]);
PRINT_REG(" 9 (t1) : ", xcp->regs[9]);
PRINT_REG("10 (t2) : ", xcp->regs[10]);
PRINT_REG("11 (t3) : ", xcp->regs[11]);
PRINT_REG_CHG(" 8 (t0) : ", xcp->regs[8], xcp_last->regs[8]);
PRINT_REG_CHG(" 9 (t1) : ", xcp->regs[9], xcp_last->regs[9]);
PRINT_REG_CHG("10 (t2) : ", xcp->regs[10], xcp_last->regs[10]);
PRINT_REG_CHG("11 (t3) : ", xcp->regs[11], xcp_last->regs[11]);
sputs("\n");
PRINT_REG("12 (t4) : ", xcp->regs[12]);
PRINT_REG("13 (t5) : ", xcp->regs[13]);
PRINT_REG("14 (t6) : ", xcp->regs[14]);
PRINT_REG("15 (t7) : ", xcp->regs[15]);
PRINT_REG_CHG("12 (t4) : ", xcp->regs[12], xcp_last->regs[12]);
PRINT_REG_CHG("13 (t5) : ", xcp->regs[13], xcp_last->regs[13]);
PRINT_REG_CHG("14 (t6) : ", xcp->regs[14], xcp_last->regs[14]);
PRINT_REG_CHG("15 (t7) : ", xcp->regs[15], xcp_last->regs[15]);
sputs("\n");
PRINT_REG("16 (s0) : ", xcp->regs[16]);
PRINT_REG("17 (s1) : ", xcp->regs[17]);
PRINT_REG("18 (s2) : ", xcp->regs[18]);
PRINT_REG("19 (s3) : ", xcp->regs[19]);
PRINT_REG_CHG("16 (s0) : ", xcp->regs[16], xcp_last->regs[16]);
PRINT_REG_CHG("17 (s1) : ", xcp->regs[17], xcp_last->regs[17]);
PRINT_REG_CHG("18 (s2) : ", xcp->regs[18], xcp_last->regs[18]);
PRINT_REG_CHG("19 (s3) : ", xcp->regs[19], xcp_last->regs[19]);
sputs("\n");
PRINT_REG("20 (s4) : ", xcp->regs[20]);
PRINT_REG("21 (s5) : ", xcp->regs[21]);
PRINT_REG("22 (s6) : ", xcp->regs[22]);
PRINT_REG("23 (s7) : ", xcp->regs[23]);
PRINT_REG_CHG("20 (s4) : ", xcp->regs[20], xcp_last->regs[20]);
PRINT_REG_CHG("21 (s5) : ", xcp->regs[21], xcp_last->regs[21]);
PRINT_REG_CHG("22 (s6) : ", xcp->regs[22], xcp_last->regs[22]);
PRINT_REG_CHG("23 (s7) : ", xcp->regs[23], xcp_last->regs[23]);
sputs("\n");
PRINT_REG("24 (t8) : ", xcp->regs[24]);
PRINT_REG("25 (t9) : ", xcp->regs[25]);
PRINT_REG("26 (k0) : ", xcp->regs[26]);
PRINT_REG("27 (k1) : ", xcp->regs[27]);
PRINT_REG_CHG("24 (t8) : ", xcp->regs[24], xcp_last->regs[24]);
PRINT_REG_CHG("25 (t9) : ", xcp->regs[25], xcp_last->regs[25]);
PRINT_REG_CHG("26 (k0) : ", xcp->regs[26], xcp_last->regs[26]);
PRINT_REG_CHG("27 (k1) : ", xcp->regs[27], xcp_last->regs[27]);
sputs("\n");
PRINT_REG("28 (gp) : ", xcp->regs[28]);
PRINT_REG("29 (sp) : ", xcp->regs[29]);
PRINT_REG("30 (fp) : ", xcp->regs[30]);
PRINT_REG("31 (ra) : ", xcp->regs[31]);
PRINT_REG_CHG("28 (gp) : ", xcp->regs[28], xcp_last->regs[28]);
PRINT_REG_CHG("29 (sp) : ", xcp->regs[29], xcp_last->regs[29]);
PRINT_REG_CHG("30 (fp) : ", xcp->regs[30], xcp_last->regs[30]);
PRINT_REG_CHG("31 (ra) : ", xcp->regs[31], xcp_last->regs[31]);
sputs("\n");
}
+6 -5
View File
@@ -42,17 +42,18 @@ typedef int (*fp_xcpt_t)(struct xcptcontext * xcp);
sputs(" ");
#define PRINT_REG_CHG(tag_str, reg, chg_tag) \
sputs(tag_str); \
print_word(reg); \
sputs(chg_tag); \
sputs(" ");
#define PRINT_REG_CHG(tag_str, reg, reg_last) \
dbg_puts(tag_str); \
dbg_print_word(reg); \
dbg_puts(reg != reg_last ? "*" : " "); \
dbg_puts(" ");
// Public functions
void xcpt_register(int xcpt_num, fp_xcpt_t fp);
int xcpt_get_type(struct xcptcontext * xcp);
void xcpt_registers_print(struct xcptcontext * xcp);
void xcpt_registers_print_with_change(struct xcptcontext * xcp, struct xcptcontext * xcp_last);
void xcpt_exctype_print(struct xcptcontext * xcp);
#endif // XCPT_H