[PATCH 06/10] [WineDbg]: implement float fetching for X86-64 debugger

Eric Pouech eric.pouech at orange.fr
Wed Feb 3 14:47:40 CST 2010




A+
---

 programs/winedbg/be_i386.c   |    2 +-
 programs/winedbg/be_x86_64.c |   20 +++++++++++++++++---
 2 files changed, 18 insertions(+), 4 deletions(-)


diff --git a/programs/winedbg/be_i386.c b/programs/winedbg/be_i386.c
index e805a80..6ab5970 100644
--- a/programs/winedbg/be_i386.c
+++ b/programs/winedbg/be_i386.c
@@ -726,7 +726,7 @@ static int be_i386_fetch_integer(const struct dbg_lvalue* lvalue, unsigned size,
 static int be_i386_fetch_float(const struct dbg_lvalue* lvalue, unsigned size, 
                                long double* ret)
 {
-    char        tmp[12];
+    char        tmp[sizeof(long double)];
 
     /* FIXME: this assumes that debuggee and debugger use the same 
      * representation for reals
diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index 3a111af..42cdcab 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -364,11 +364,25 @@ static int be_x86_64_fetch_integer(const struct dbg_lvalue* lvalue, unsigned siz
     return TRUE;
 }
 
-static int be_x86_64_fetch_float(const struct dbg_lvalue* lvalue, unsigned size, 
+static int be_x86_64_fetch_float(const struct dbg_lvalue* lvalue, unsigned size,
                                 long double* ret)
 {
-    dbg_printf("not done fetch_float\n");
-    return FALSE;
+    char        tmp[sizeof(long double)];
+
+    /* FIXME: this assumes that debuggee and debugger use the same
+     * representation for reals
+     */
+    if (!memory_read_value(lvalue, size, tmp)) return FALSE;
+
+    /* float & double types have to be promoted to a long double */
+    switch (size)
+    {
+    case sizeof(float):         *ret = *(float*)tmp;            break;
+    case sizeof(double):        *ret = *(double*)tmp;           break;
+    case sizeof(long double):   *ret = *(long double*)tmp;      break;
+    default:                    return FALSE;
+    }
+    return TRUE;
 }
 
 struct backend_cpu be_x86_64 =






More information about the wine-patches mailing list