Alexandre Julliard : winedbg: Add context dumping for x86_64.
Alexandre Julliard
julliard at winehq.org
Thu Apr 9 11:13:49 CDT 2009
Module: wine
Branch: master
Commit: 09d7fa707f9cdef672c88a9d583629b02c28032a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=09d7fa707f9cdef672c88a9d583629b02c28032a
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Apr 8 20:40:35 2009 +0200
winedbg: Add context dumping for x86_64.
---
programs/winedbg/be_x86_64.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index f2dcc1a..b1315bb 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -66,7 +66,41 @@ static void be_x86_64_single_step(CONTEXT* ctx, unsigned enable)
static void be_x86_64_print_context(HANDLE hThread, const CONTEXT* ctx,
int all_regs)
{
- dbg_printf("Context printing for x86_64 not done yet\n");
+ char *pt, buf[33];
+
+ dbg_printf("Register dump:\n");
+ strcpy(buf, " - 00 - - - ");
+ pt = buf + strlen(buf) - 1;
+ if (ctx->EFlags & 0x00000001) *pt-- = 'C'; /* Carry Flag */
+ if (ctx->EFlags & 0x00000002) *pt-- = '1';
+ if (ctx->EFlags & 0x00000004) *pt-- = 'P'; /* Parity Flag */
+ if (ctx->EFlags & 0x00000008) *pt-- = '-';
+ if (ctx->EFlags & 0x00000010) *pt-- = 'A'; /* Auxiliary Carry Flag */
+ if (ctx->EFlags & 0x00000020) *pt-- = '-';
+ if (ctx->EFlags & 0x00000040) *pt-- = 'Z'; /* Zero Flag */
+ if (ctx->EFlags & 0x00000080) *pt-- = 'S'; /* Sign Flag */
+ if (ctx->EFlags & 0x00000100) *pt-- = 'T'; /* Trap/Trace Flag */
+ if (ctx->EFlags & 0x00000200) *pt-- = 'I'; /* Interrupt Enable Flag */
+ if (ctx->EFlags & 0x00000400) *pt-- = 'D'; /* Direction Indicator */
+ if (ctx->EFlags & 0x00000800) *pt-- = 'O'; /* Overflow flags */
+ if (ctx->EFlags & 0x00001000) *pt-- = '1'; /* I/O Privilege Level */
+ if (ctx->EFlags & 0x00002000) *pt-- = '1'; /* I/O Privilege Level */
+ if (ctx->EFlags & 0x00004000) *pt-- = 'N'; /* Nested Task Flag */
+ if (ctx->EFlags & 0x00008000) *pt-- = '-';
+ if (ctx->EFlags & 0x00010000) *pt-- = 'R'; /* Resume Flag */
+ if (ctx->EFlags & 0x00020000) *pt-- = 'V'; /* Vritual Mode Flag */
+ if (ctx->EFlags & 0x00040000) *pt-- = 'a'; /* Alignment Check Flag */
+
+ dbg_printf(" rip:%016lx rsp:%016lx rbp:%016lx eflags:%08x (%s)\n",
+ ctx->Rip, ctx->Rsp, ctx->Rbp, ctx->EFlags, buf);
+ dbg_printf(" rax:%016lx rbx:%016lx rcx:%016lx rdx:%016lx\n",
+ ctx->Rax, ctx->Rbx, ctx->Rcx, ctx->Rdx);
+ dbg_printf(" rsi:%016lx rdi:%016lx r8:%016lx r9:%016lx r10:%016lx\n",
+ ctx->Rsi, ctx->Rdi, ctx->R8, ctx->R9, ctx->R10 );
+ dbg_printf(" r11:%016lx r12:%016lx r13:%016lx r14:%016lx r15:%016lx\n",
+ ctx->R11, ctx->R12, ctx->R13, ctx->R14, ctx->R15 );
+
+ if (all_regs) dbg_printf( "Floating point x86_64 dump not implemented\n" );
}
static void be_x86_64_print_segment_info(HANDLE hThread, const CONTEXT* ctx)
More information about the wine-cvs
mailing list