From aac77c98a261c4d7edac7f789fde32e335f5d494 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 21 Feb 2007 21:54:39 +0100 Subject: [PATCH] dbghelp: Added an ANSI copy of the module name (useful for next patches). --- dlls/dbghelp/dbghelp_private.h | 6 +++++- dlls/dbghelp/dwarf.c | 8 ++++---- dlls/dbghelp/elf_module.c | 24 ++++++++++++------------ dlls/dbghelp/module.c | 7 ++++--- dlls/dbghelp/msc.c | 2 +- dlls/dbghelp/pe_module.c | 2 +- dlls/dbghelp/symbol.c | 34 +++++++++++++++++----------------- dlls/dbghelp/type.c | 2 +- 8 files changed, 45 insertions(+), 40 deletions(-) diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index be6b7e675e6..2ec675bc4a4 100644 --- a/dlls/dbghelp/dbghelp_private.h +++ b/dlls/dbghelp/dbghelp_private.h @@ -311,12 +311,16 @@ 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; - + /* memory allocation pool */ struct pool pool; diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 75d545a1eea..e4944e31f51 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -328,12 +328,12 @@ static const char* dwarf2_debug_traverse_ctx(const dwarf2_traverse_context_t* ct return wine_dbg_sprintf("ctx(%p)", ctx->data); } -static const char* dwarf2_debug_ctx(const dwarf2_parse_context_t* ctx) +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) +static const char* dwarf2_debug_di(const dwarf2_debug_info_t* di) { return wine_dbg_sprintf("debug_info(abbrev:%p,symt:%p)", di->abbrev, di->symt); @@ -1749,7 +1749,7 @@ static void dwarf2_set_line_number(struct module* module, unsigned long address, 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 bbce4951a7a..1350a13d914 100644 --- a/dlls/dbghelp/elf_module.c +++ b/dlls/dbghelp/elf_module.c @@ -453,8 +453,8 @@ static const Elf32_Sym* elf_lookup_symtab(const struct module* module, } if (!result && !(result = weak_result)) { - FIXME("Couldn't find symbol %s!%s in symtab\n", - module->module.ModuleName, name); + FIXME("Couldn't find symbol %s!%s in symtab\n", + module->module_name, name); return NULL; } return result->symp; @@ -491,18 +491,18 @@ static void elf_finish_stabs_info(struct module* module, struct hash_table* symt { 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, + FIXME("Changing address for %p/%s!%s from %08lx to %08lx\n", + 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, + FIXME("Changing size for %p/%s!%s from %08lx to %08x\n", + 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) @@ -517,14 +517,14 @@ static void elf_finish_stabs_info(struct module* module, struct hash_table* symt { 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, + FIXME("Changing address for %p/%s!%s from %08lx to %08lx\n", + 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 module* module, struct hash_table* ht_symt 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(struct module* module, 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 e63b5769840..ebee8d919fc 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -82,6 +82,7 @@ static void module_fill_module(const char* in, char* out, size_t size) 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* module) { 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 hProcess, { 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(HANDLE hProcess, { 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 3099f0de7f8..203997faec3 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -2417,7 +2417,7 @@ static BOOL codeview_process_info(const struct process* pcs, } 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 684001e6361..7958bd06c42 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 struct process* pcs, 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 44859602331..8a89203e1ff 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -130,8 +130,8 @@ struct symt_compiland* symt_new_compiland(struct module* module, { struct symt_compiland* sym; - TRACE_(dbghelp_symt)("Adding compiland symbol %s:%s\n", - module->module.ModuleName, source_get(module, src_idx)); + TRACE_(dbghelp_symt)("Adding compiland symbol %s:%s\n", + module->module_name, source_get(module, src_idx)); if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) { sym->symt.tag = SymTagCompiland; @@ -151,9 +151,9 @@ struct symt_public* symt_new_public(struct module* module, struct symt_public* sym; struct symt** p; - TRACE_(dbghelp_symt)("Adding public symbol %s:%s @%lx\n", - module->module.ModuleName, name, address); - if ((dbghelp_options & SYMOPT_AUTO_PUBLICS) && + TRACE_(dbghelp_symt)("Adding public symbol %s:%s @%lx\n", + module->module_name, name, address); + if ((dbghelp_options & SYMOPT_AUTO_PUBLICS) && symt_find_nearest(module, address) != NULL) return NULL; if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) @@ -186,8 +186,8 @@ struct symt_data* symt_new_global_variable(struct module* module, struct symt** p; DWORD64 tsz; - TRACE_(dbghelp_symt)("Adding global symbol %s:%s @%lx %p\n", - module->module.ModuleName, name, addr, type); + TRACE_(dbghelp_symt)("Adding global symbol %s:%s @%lx %p\n", + 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_variable(struct module* module, { 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) @@ -223,8 +223,8 @@ struct symt_function* symt_new_function(struct module* module, struct symt_function* sym; struct symt** p; - TRACE_(dbghelp_symt)("Adding global function %s:%s @%lx-%lx\n", - module->module.ModuleName, name, addr, addr + size - 1); + TRACE_(dbghelp_symt)("Adding global function %s:%s @%lx-%lx\n", + module->module_name, name, addr, addr + size - 1); assert(!sig_type || sig_type->tag == SymTagFunctionType); if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) @@ -309,8 +309,8 @@ struct symt_data* symt_add_func_local(struct module* module, struct symt_data* locsym; struct symt** p; - TRACE_(dbghelp_symt)("Adding local symbol (%s:%s): %s %p\n", - module->module.ModuleName, func->hash_elt.name, + TRACE_(dbghelp_symt)("Adding local symbol (%s:%s): %s %p\n", + module->module_name, func->hash_elt.name, name, type); assert(func); @@ -424,8 +424,8 @@ struct symt_thunk* symt_new_thunk(struct module* module, { struct symt_thunk* sym; - TRACE_(dbghelp_symt)("Adding global thunk %s:%s @%lx-%lx\n", - module->module.ModuleName, name, addr, addr + size - 1); + TRACE_(dbghelp_symt)("Adding global thunk %s:%s @%lx-%lx\n", + 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(struct module* module, 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, ULONG64 BaseOfDll, PCSTR Mask, { 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, ULONG64 BaseOfDll, PCSTR Mask, !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 d520414d5fc..3a36abaacb5 100644 --- a/dlls/dbghelp/type.c +++ b/dlls/dbghelp/type.c @@ -164,7 +164,7 @@ struct symt_udt* symt_new_udt(struct module* module, const char* typename, { 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; -- 2.11.4.GIT