[PATCH 09/10] [DbgHelp]: ensure the stab_nlist structure is usable on 64bit systems

Eric Pouech eric.pouech at orange.fr
Sat Oct 9 01:51:41 CDT 2010




A+
---

 dlls/dbghelp/stabs.c |   21 ++++++++-------------
 1 files changed, 8 insertions(+), 13 deletions(-)


diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c
index 837e213..8ef177c 100644
--- a/dlls/dbghelp/stabs.c
+++ b/dlls/dbghelp/stabs.c
@@ -110,16 +110,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs);
 
 struct stab_nlist
 {
-    union
-    {
-        char*                   n_name;
-        struct stab_nlist*      n_next;
-        long                    n_strx;
-    } n_un;
+    unsigned            n_strx;
     unsigned char       n_type;
     char                n_other;
     short               n_desc;
-    unsigned long       n_value;
+    unsigned            n_value;
 };
 
 static void stab_strcpy(char* dest, int sz, const char* source)
@@ -1315,7 +1310,7 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
     stabbuff[0] = '\0';
     for (i = 0; i < nstab; i++, stab_ptr++)
     {
-        ptr = strs + stab_ptr->n_un.n_strx;
+        ptr = strs + stab_ptr->n_strx;
         if ((ptr > strs_end) || (ptr + strlen(ptr) > strs_end))
         {
             WARN("Bad stabs string %p\n", ptr);
@@ -1421,7 +1416,7 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
                 loc.reg = 0; /* FIXME */
                 loc.offset = stab_ptr->n_value;
                 symt_add_func_local(module, curr_func,
-                                    (long)stab_ptr->n_value >= 0 ? DataIsParam : DataIsLocal,
+                                    (int)stab_ptr->n_value >= 0 ? DataIsParam : DataIsLocal,
                                     &loc, NULL, param_type, symname);
                 symt_add_function_signature_parameter(module, 
                                                       (struct symt_function_signature*)curr_func->type, 
@@ -1471,7 +1466,7 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
                 case 35:
                 case 36: loc.reg = CV_REG_MM0 + stab_ptr->n_value - 29; break;
                 default:
-                    FIXME("Unknown register value (%lu)\n", stab_ptr->n_value);
+                    FIXME("Unknown register value (%u)\n", stab_ptr->n_value);
                     loc.reg = CV_REG_NONE;
                     break;
                 }
@@ -1617,7 +1612,7 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
 	case N_EXCL:
             if (stabs_add_include(stabs_find_include(ptr, stab_ptr->n_value)) < 0)
             {
-                ERR("Excluded header not found (%s,%ld)\n", ptr, stab_ptr->n_value);
+                ERR("Excluded header not found (%s,%d)\n", ptr, stab_ptr->n_value);
                 module_reset_debug_info(module);
                 ret = FALSE;
                 goto done;
@@ -1663,8 +1658,8 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
             break;
         }
         stabbuff[0] = '\0';
-        TRACE("0x%02x %lx %s\n", 
-              stab_ptr->n_type, stab_ptr->n_value, debugstr_a(strs + stab_ptr->n_un.n_strx));
+        TRACE("0x%02x %x %s\n",
+              stab_ptr->n_type, stab_ptr->n_value, debugstr_a(strs + stab_ptr->n_strx));
     }
     module->module.SymType = SymDia;
     module->module.CVSig = 'S' | ('T' << 8) | ('A' << 16) | ('B' << 24);






More information about the wine-patches mailing list