Module: wine Branch: master Commit: a2d10bc2e5a9fc9ba4f3f86140a0ed15f82467a9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a2d10bc2e5a9fc9ba4f3f86140...
Author: André Hentschel nerv@dawncrow.de Date: Mon May 2 22:40:00 2011 +0200
winedbg: Implement printing the Program Status Register.
---
programs/winedbg/be_arm.c | 30 ++++++++++++++++++++++++++++-- 1 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/programs/winedbg/be_arm.c b/programs/winedbg/be_arm.c index f34ecc7..f71514c 100644 --- a/programs/winedbg/be_arm.c +++ b/programs/winedbg/be_arm.c @@ -57,9 +57,35 @@ static void be_arm_single_step(CONTEXT* ctx, unsigned enable)
static void be_arm_print_context(HANDLE hThread, const CONTEXT* ctx, int all_regs) { + static const char condflags[] = "NZCV"; + int i; + char buf[8]; + + switch (ctx->Cpsr & 0x1F) + { + case 0: strcpy(buf, "User26"); break; + case 1: strcpy(buf, "FIQ26"); break; + case 2: strcpy(buf, "IRQ26"); break; + case 3: strcpy(buf, "SVC26"); break; + case 16: strcpy(buf, "User"); break; + case 17: strcpy(buf, "FIQ"); break; + case 18: strcpy(buf, "IRQ"); break; + case 19: strcpy(buf, "SVC"); break; + case 23: strcpy(buf, "ABT"); break; + case 27: strcpy(buf, "UND"); break; + default: strcpy(buf, "UNKNWN"); break; + } + dbg_printf("Register dump:\n"); - dbg_printf(" Pc:%04x Sp:%04x Lr:%04x Cpsr:%04x\n", - ctx->Pc, ctx->Sp, ctx->Lr, ctx->Cpsr); + dbg_printf("%s %s Mode\n", (ctx->Cpsr & 0x20) ? "Thumb" : "ARM", buf); + + strcpy(buf, condflags); + for (i = 0; buf[i]; i++) + if (!((ctx->Cpsr >> 26) & (1 << (sizeof(condflags) - i)))) + buf[i] = '-'; + + dbg_printf(" Pc:%04x Sp:%04x Lr:%04x Cpsr:%04x(%s)\n", + ctx->Pc, ctx->Sp, ctx->Lr, ctx->Cpsr, buf); dbg_printf(" r0:%04x r1:%04x r2:%04x r3:%04x\n", ctx->R0, ctx->R1, ctx->R2, ctx->R3); dbg_printf(" r4:%04x r5:%04x r6:%04x r7:%04x r8:%04x\n",