From 91c7ff299469a07c37fc10ea681f90d2ddfaaccb Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sat, 12 Dec 2009 12:19:38 +0100 Subject: [PATCH] winedbg: For the x86_64 backend, fetch all the integral types. --- programs/winedbg/be_x86_64.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c index dc1f2277fa9..ed5cdf2351c 100644 --- a/programs/winedbg/be_x86_64.c +++ b/programs/winedbg/be_x86_64.c @@ -226,10 +226,24 @@ static int be_x86_64_adjust_pc_for_break(CONTEXT* ctx, BOOL way) } static int be_x86_64_fetch_integer(const struct dbg_lvalue* lvalue, unsigned size, - unsigned ext_sign, LONGLONG* ret) + unsigned ext_sign, LONGLONG* ret) { - dbg_printf("not done fetch_integer\n"); - return FALSE; + if (size != 1 && size != 2 && size != 4 && size != 8 && size != 16) + return FALSE; + + memset(ret, 0, sizeof(*ret)); /* clear unread bytes */ + /* FIXME: this assumes that debuggee and debugger use the same + * integral representation + */ + if (!memory_read_value(lvalue, size, ret)) return FALSE; + + /* propagate sign information */ + if (ext_sign && size < 16 && (*ret >> (size * 8 - 1)) != 0) + { + ULONGLONG neg = -1; + *ret |= neg << (size * 8); + } + return TRUE; } static int be_x86_64_fetch_float(const struct dbg_lvalue* lvalue, unsigned size,