[PATCH 02/26] [DbgHelp]: added an ANSI copy of the module name (useful for next patches)

Eric Pouech eric.pouech at wanadoo.fr
Wed Feb 21 14:54:39 CST 2007




A+
---

 dlls/dbghelp/dbghelp_private.h |    4 ++++
 dlls/dbghelp/dwarf.c           |    4 ++--
 dlls/dbghelp/elf_module.c      |   16 ++++++++--------
 dlls/dbghelp/module.c          |    7 ++++---
 dlls/dbghelp/msc.c             |    2 +-
 dlls/dbghelp/pe_module.c       |    2 +-
 dlls/dbghelp/symbol.c          |   20 ++++++++++----------
 dlls/dbghelp/type.c            |    2 +-
 8 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index be6b7e6..ebf1acb 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -311,9 +311,13 @@ struct process;
 struct module
 {
     IMAGEHLP_MODULE64           module;
+    /* ANSI copy of module.ModuleName for efficiency */
+    char                        module_name[MAX_PATH];
     struct module*              next;
     enum module_type		type : 16;
     unsigned short              is_virtual : 1;
+
+    /* specific information for debug types */
     struct elf_module_info*	elf_info;
     struct dwarf2_module_info_s*dwarf2_info;
     
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 75d545a..59facaf 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -330,7 +330,7 @@ static const char* dwarf2_debug_traverse
 
 static const char* dwarf2_debug_ctx(const dwarf2_parse_context_t* ctx) 
 {
-    return wine_dbg_sprintf("ctx(%p,%s)", ctx, ctx->module->module.ModuleName);
+    return wine_dbg_sprintf("ctx(%p,%s)", ctx, ctx->module->module_name);
 }
 
 static const char* dwarf2_debug_di(const dwarf2_debug_info_t* di) 
@@ -1749,7 +1749,7 @@ static void dwarf2_set_line_number(struc
 
     if (!file || !(psrc = vector_at(v, file - 1))) return;
 
-    TRACE("%s %lx %s %u\n", module->module.ModuleName, address, source_get(module, *psrc), line);
+    TRACE("%s %lx %s %u\n", module->module_name, address, source_get(module, *psrc), line);
     if (!(symt = symt_find_nearest(module, address)) ||
         symt->symt.tag != SymTagFunction) return;
     func = (struct symt_function*)symt;
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index bbce495..06e3808 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -454,7 +454,7 @@ static const Elf32_Sym* elf_lookup_symta
     if (!result && !(result = weak_result))
     {
         FIXME("Couldn't find symbol %s!%s in symtab\n", 
-              module->module.ModuleName, name);
+              module->module_name, name);
         return NULL;
     }
     return result->symp;
@@ -492,17 +492,17 @@ static void elf_finish_stabs_info(struct
                 if (((struct symt_function*)sym)->address != module->elf_info->elf_addr &&
                     ((struct symt_function*)sym)->address != module->elf_info->elf_addr + symp->st_value)
                     FIXME("Changing address for %p/%s!%s from %08lx to %08lx\n", 
-                          sym, module->module.ModuleName, sym->hash_elt.name, 
+                          sym, module->module_name, sym->hash_elt.name, 
                           ((struct symt_function*)sym)->address, module->elf_info->elf_addr + symp->st_value);
                 if (((struct symt_function*)sym)->size && ((struct symt_function*)sym)->size != symp->st_size)
                     FIXME("Changing size for %p/%s!%s from %08lx to %08x\n", 
-                          sym, module->module.ModuleName, sym->hash_elt.name,
+                          sym, module->module_name, sym->hash_elt.name,
                           ((struct symt_function*)sym)->size, symp->st_size);
 
                 ((struct symt_function*)sym)->address = module->elf_info->elf_addr +
                                                         symp->st_value;
                 ((struct symt_function*)sym)->size    = symp->st_size;
-            } else FIXME("Couldn't find %s!%s\n", module->module.ModuleName, sym->hash_elt.name);
+            } else FIXME("Couldn't find %s!%s\n", module->module_name, sym->hash_elt.name);
             break;
         case SymTagData:
             switch (((struct symt_data*)sym)->kind)
@@ -518,13 +518,13 @@ static void elf_finish_stabs_info(struct
                 if (((struct symt_data*)sym)->u.var.offset != module->elf_info->elf_addr &&
                     ((struct symt_data*)sym)->u.var.offset != module->elf_info->elf_addr + symp->st_value)
                     FIXME("Changing address for %p/%s!%s from %08lx to %08lx\n", 
-                          sym, module->module.ModuleName, sym->hash_elt.name, 
+                          sym, module->module_name, sym->hash_elt.name, 
                           ((struct symt_function*)sym)->address, module->elf_info->elf_addr + symp->st_value);
                     ((struct symt_data*)sym)->u.var.offset = module->elf_info->elf_addr +
                                                           symp->st_value;
                     ((struct symt_data*)sym)->kind = (ELF32_ST_BIND(symp->st_info) == STB_LOCAL) ?
                         DataIsFileStatic : DataIsGlobal;
-                } else FIXME("Couldn't find %s!%s\n", module->module.ModuleName, sym->hash_elt.name);
+                } else FIXME("Couldn't find %s!%s\n", module->module_name, sym->hash_elt.name);
                 break;
             default:;
             }
@@ -619,7 +619,7 @@ static int elf_new_wine_thunks(struct mo
                 if ((xsize || ste->symp->st_size) &&
                     (kind == (ELF32_ST_BIND(ste->symp->st_info) == STB_LOCAL) ? DataIsFileStatic : DataIsGlobal))
                     FIXME("Duplicate in %s: %s<%08x-%08x> %s<%s-%s>\n",
-                          module->module.ModuleName,
+                          module->module_name,
                           ste->ht_elt.name, addr, ste->symp->st_size,
                           symt->hash_elt.name,
                           wine_dbgstr_longlong(xaddr), wine_dbgstr_longlong(xsize));
@@ -1014,7 +1014,7 @@ static BOOL elf_load_debug_info_from_map
             const BYTE* dw2_debug_line;
             const BYTE* dw2_debug_loclist;
 
-            TRACE("Loading Dwarf2 information for %s\n", module->module.ModuleName);
+            TRACE("Loading Dwarf2 information for %s\n", module->module_name);
 
             dw2_debug = (const BYTE*) elf_map_section(fmap, debug_sect);
             dw2_debug_abbrev = (const BYTE*) elf_map_section(fmap, debug_abbrev_sect);
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c
index e63b576..d351f15 100644
--- a/dlls/dbghelp/module.c
+++ b/dlls/dbghelp/module.c
@@ -82,6 +82,7 @@ static void module_fill_module(const cha
 void module_set_module(struct module* module, const char* name)
 {
     module_fill_module(name, module->module.ModuleName, sizeof(module->module.ModuleName));
+    strcpy(module->module_name, module->module.ModuleName);
 }
 
 static const char*      get_module_type(enum module_type type, BOOL virtual)
@@ -519,7 +520,7 @@ BOOL module_remove(struct process* pcs, 
 {
     struct module**     p;
 
-    TRACE("%s (%p)\n", module->module.ModuleName, module);
+    TRACE("%s (%p)\n", module->module_name, module);
     hash_table_destroy(&module->ht_symbols);
     hash_table_destroy(&module->ht_types);
     HeapFree(GetProcessHeap(), 0, (char*)module->sources);
@@ -592,7 +593,7 @@ BOOL  WINAPI SymEnumerateModules(HANDLE 
     {
         if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
             continue;
-        if (!EnumModulesCallback(module->module.ModuleName, 
+        if (!EnumModulesCallback(module->module_name, 
                                  module->module.BaseOfImage, UserContext))
             break;
     }
@@ -616,7 +617,7 @@ BOOL  WINAPI SymEnumerateModules64(HANDL
     {
         if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
             continue;
-        if (!EnumModulesCallback(module->module.ModuleName, 
+        if (!EnumModulesCallback(module->module_name, 
                                  module->module.BaseOfImage, UserContext))
             break;
     }
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index 3099f0d..203997f 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -2417,7 +2417,7 @@ static BOOL codeview_process_info(const 
     }
     default:
         ERR("Unknown CODEVIEW signature %.4s in module %s\n",
-            (const char*)signature, msc_dbg->module->module.ModuleName);
+            (const char*)signature, msc_dbg->module->module_name);
         break;
     }
     if (ret)
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index 684001e..7958bd0 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -178,7 +178,7 @@ static BOOL pe_load_msc_debug_info(const
             misc->DataType != IMAGE_DEBUG_MISC_EXENAME)
         {
             WINE_ERR("-Debug info stripped, but no .DBG file in module %s\n",
-                     module->module.ModuleName);
+                     module->module_name);
         }
         else
         {
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 4485960..487ce0c 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -131,7 +131,7 @@ struct symt_compiland* symt_new_compilan
     struct symt_compiland*    sym;
 
     TRACE_(dbghelp_symt)("Adding compiland symbol %s:%s\n", 
-                         module->module.ModuleName, source_get(module, src_idx));
+                         module->module_name, source_get(module, src_idx));
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
     {
         sym->symt.tag = SymTagCompiland;
@@ -152,7 +152,7 @@ struct symt_public* symt_new_public(stru
     struct symt**       p;
 
     TRACE_(dbghelp_symt)("Adding public symbol %s:%s @%lx\n", 
-                         module->module.ModuleName, name, address);
+                         module->module_name, name, address);
     if ((dbghelp_options & SYMOPT_AUTO_PUBLICS) && 
         symt_find_nearest(module, address) != NULL)
         return NULL;
@@ -187,7 +187,7 @@ struct symt_data* symt_new_global_variab
     DWORD64             tsz;
 
     TRACE_(dbghelp_symt)("Adding global symbol %s:%s @%lx %p\n", 
-                         module->module.ModuleName, name, addr, type);
+                         module->module_name, name, addr, type);
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
     {
         sym->symt.tag      = SymTagData;
@@ -202,7 +202,7 @@ struct symt_data* symt_new_global_variab
         {
             if (tsz != size)
                 FIXME("Size mismatch for %s.%s between type (%s) and src (%lu)\n",
-                      module->module.ModuleName, name, 
+                      module->module_name, name, 
                       wine_dbgstr_longlong(tsz), size);
         }
         if (compiland)
@@ -224,7 +224,7 @@ struct symt_function* symt_new_function(
     struct symt**               p;
 
     TRACE_(dbghelp_symt)("Adding global function %s:%s @%lx-%lx\n", 
-                         module->module.ModuleName, name, addr, addr + size - 1);
+                         module->module_name, name, addr, addr + size - 1);
 
     assert(!sig_type || sig_type->tag == SymTagFunctionType);
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
@@ -310,7 +310,7 @@ struct symt_data* symt_add_func_local(st
     struct symt**       p;
 
     TRACE_(dbghelp_symt)("Adding local symbol (%s:%s): %s %p\n", 
-                         module->module.ModuleName, func->hash_elt.name, 
+                         module->module_name, func->hash_elt.name, 
                          name, type);
 
     assert(func);
@@ -425,7 +425,7 @@ struct symt_thunk* symt_new_thunk(struct
     struct symt_thunk*  sym;
 
     TRACE_(dbghelp_symt)("Adding global thunk %s:%s @%lx-%lx\n", 
-                         module->module.ModuleName, name, addr, addr + size - 1);
+                         module->module_name, name, addr, addr + size - 1);
 
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
     {
@@ -455,7 +455,7 @@ struct symt_data* symt_new_constant(stru
     struct symt_data*  sym;
 
     TRACE_(dbghelp_symt)("Adding constant value %s:%s\n",
-                         module->module.ModuleName, name);
+                         module->module_name, name);
 
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
     {
@@ -877,7 +877,7 @@ static BOOL sym_enum(HANDLE hProcess, UL
         {
             if (pair.requested->type == DMT_PE && module_get_debug(&pair))
             {
-                if (regexec(&mod_regex, pair.requested->module.ModuleName, 0, NULL, 0) == 0 &&
+                if (regexec(&mod_regex, pair.requested->module_name, 0, NULL, 0) == 0 &&
                     symt_enum_module(&pair, &sym_regex, se))
                     break;
             }
@@ -892,7 +892,7 @@ static BOOL sym_enum(HANDLE hProcess, UL
                     !module_get_containee(pair.pcs, pair.requested) &&
                     module_get_debug(&pair))
                 {
-                    if (regexec(&mod_regex, pair.requested->module.ModuleName, 0, NULL, 0) == 0 &&
+                    if (regexec(&mod_regex, pair.requested->module_name, 0, NULL, 0) == 0 &&
                         symt_enum_module(&pair, &sym_regex, se))
                     break;
                 }
diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c
index d520414..3a36aba 100644
--- a/dlls/dbghelp/type.c
+++ b/dlls/dbghelp/type.c
@@ -164,7 +164,7 @@ struct symt_udt* symt_new_udt(struct mod
 {
     struct symt_udt*            sym;
 
-    TRACE_(dbghelp_symt)("Adding udt %s:%s\n", module->module.ModuleName, typename);
+    TRACE_(dbghelp_symt)("Adding udt %s:%s\n", module->module_name, typename);
     if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
     {
         sym->symt.tag = SymTagUDT;



More information about the wine-patches mailing list