[PATCH 2/9] [WineDbg]: allow internal (host) integral variables to hold 64bit value on 64bit platforms

Eric Pouech eric.pouech at orange.fr
Mon Dec 14 15:05:27 CST 2009




A+
---

 programs/winedbg/debugger.h |    4 ++--
 programs/winedbg/expr.c     |   16 ++++++++--------
 programs/winedbg/types.c    |   20 +++++++++++++++++++-
 3 files changed, 29 insertions(+), 11 deletions(-)


diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index e48dbd3..300f48a 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -328,8 +328,8 @@ extern int              display_enable(int displaynum, int enable);
 extern void             expr_free_all(void);
 extern struct expr*     expr_alloc_internal_var(const char* name);
 extern struct expr*     expr_alloc_symbol(const char* name);
-extern struct expr*     expr_alloc_sconstant(int val);
-extern struct expr*     expr_alloc_uconstant(unsigned val);
+extern struct expr*     expr_alloc_sconstant(long int val);
+extern struct expr*     expr_alloc_uconstant(long unsigned val);
 extern struct expr*     expr_alloc_string(const char* str);
 extern struct expr*     expr_alloc_binary_op(int oper, struct expr*, struct expr*);
 extern struct expr*     expr_alloc_unary_op(int oper, struct expr*);
diff --git a/programs/winedbg/expr.c b/programs/winedbg/expr.c
index 3d5cef1..6b8c46f 100644
--- a/programs/winedbg/expr.c
+++ b/programs/winedbg/expr.c
@@ -37,12 +37,12 @@ struct expr
     {
         struct
         {
-            int                 value;
+            long int            value;
         } s_const;
 
         struct
         {
-            unsigned int        value;
+            long unsigned int   value;
         } u_const;
 
         struct
@@ -165,7 +165,7 @@ struct expr* expr_alloc_symbol(const char* name)
     return ex;
 }
 
-struct expr* expr_alloc_sconstant(int value)
+struct expr* expr_alloc_sconstant(long int value)
 {
     struct expr*        ex;
 
@@ -176,7 +176,7 @@ struct expr* expr_alloc_sconstant(int value)
     return ex;
 }
 
-struct expr* expr_alloc_uconstant(unsigned int value)
+struct expr* expr_alloc_uconstant(long unsigned int value)
 {
     struct expr*        ex;
 
@@ -350,13 +350,13 @@ struct dbg_lvalue expr_eval(struct expr* exp)
         break;
     case EXPR_TYPE_U_CONST:
         rtn.cookie      = DLV_HOST;
-        rtn.type.id     = dbg_itype_unsigned_int;
+        rtn.type.id     = dbg_itype_unsigned_long_int;
         rtn.type.module = 0;
         rtn.addr.Offset = (ULONG_PTR)&exp->un.u_const.value;
         break;
     case EXPR_TYPE_S_CONST:
         rtn.cookie      = DLV_HOST;
-        rtn.type.id     = dbg_itype_signed_int;
+        rtn.type.id     = dbg_itype_signed_long_int;
         rtn.type.module = 0;
         rtn.addr.Offset = (ULONG_PTR)&exp->un.s_const.value;
         break;
@@ -690,10 +690,10 @@ int expr_print(const struct expr* exp)
         dbg_printf("$%s", exp->un.intvar.name);
         break;
     case EXPR_TYPE_U_CONST:
-        dbg_printf("%u", exp->un.u_const.value);
+        dbg_printf("%lu", exp->un.u_const.value);
         break;
     case EXPR_TYPE_S_CONST:
-        dbg_printf("%d", exp->un.s_const.value);
+        dbg_printf("%ld", exp->un.s_const.value);
         break;
     case EXPR_TYPE_STRING:
         dbg_printf("\"%s\"", exp->un.string.str);
diff --git a/programs/winedbg/types.c b/programs/winedbg/types.c
index 68bf12b..414bb9f 100644
--- a/programs/winedbg/types.c
+++ b/programs/winedbg/types.c
@@ -784,6 +784,24 @@ BOOL types_get_info(const struct dbg_type* type, IMAGEHLP_SYMBOL_TYPE_INFO ti, v
 
     switch (type->id)
     {
+    case dbg_itype_unsigned_long_int:
+        switch (ti)
+        {
+        case TI_GET_SYMTAG:     X(DWORD)   = SymTagBaseType; break;
+        case TI_GET_LENGTH:     X(DWORD64) = ADDRSIZE; break;
+        case TI_GET_BASETYPE:   X(DWORD)   = btUInt; break;
+        default: WINE_FIXME("unsupported %u for u-long int\n", ti); return FALSE;
+        }
+        break;
+    case dbg_itype_signed_long_int:
+        switch (ti)
+        {
+        case TI_GET_SYMTAG:     X(DWORD)   = SymTagBaseType; break;
+        case TI_GET_LENGTH:     X(DWORD64) = ADDRSIZE; break;
+        case TI_GET_BASETYPE:   X(DWORD)   = btInt; break;
+        default: WINE_FIXME("unsupported %u for s-long int\n", ti); return FALSE;
+        }
+        break;
     case dbg_itype_unsigned_int:
         switch (ti)
         {
@@ -851,7 +869,7 @@ BOOL types_get_info(const struct dbg_type* type, IMAGEHLP_SYMBOL_TYPE_INFO ti, v
         switch (ti)
         {
         case TI_GET_SYMTAG:     X(DWORD)   = SymTagPointerType; break;
-        case TI_GET_LENGTH:     X(DWORD64) = 4; break;
+        case TI_GET_LENGTH:     X(DWORD64) = ADDRSIZE; break;
         case TI_GET_TYPE:       X(DWORD)   = dbg_itype_char; break;
         default: WINE_FIXME("unsupported %u for a string\n", ti); return FALSE;
         }






More information about the wine-patches mailing list