Commit aac77c98 authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

dbghelp: Added an ANSI copy of the module name (useful for next patches).

parent 33c8ffc3
...@@ -311,12 +311,16 @@ struct process; ...@@ -311,12 +311,16 @@ struct process;
struct module struct module
{ {
IMAGEHLP_MODULE64 module; IMAGEHLP_MODULE64 module;
/* ANSI copy of module.ModuleName for efficiency */
char module_name[MAX_PATH];
struct module* next; struct module* next;
enum module_type type : 16; enum module_type type : 16;
unsigned short is_virtual : 1; unsigned short is_virtual : 1;
/* specific information for debug types */
struct elf_module_info* elf_info; struct elf_module_info* elf_info;
struct dwarf2_module_info_s*dwarf2_info; struct dwarf2_module_info_s*dwarf2_info;
/* memory allocation pool */ /* memory allocation pool */
struct pool pool; struct pool pool;
......
...@@ -328,12 +328,12 @@ static const char* dwarf2_debug_traverse_ctx(const dwarf2_traverse_context_t* ct ...@@ -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); 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)", return wine_dbg_sprintf("debug_info(abbrev:%p,symt:%p)",
di->abbrev, di->symt); di->abbrev, di->symt);
...@@ -1749,7 +1749,7 @@ static void dwarf2_set_line_number(struct module* module, unsigned long address, ...@@ -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; 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)) || if (!(symt = symt_find_nearest(module, address)) ||
symt->symt.tag != SymTagFunction) return; symt->symt.tag != SymTagFunction) return;
func = (struct symt_function*)symt; func = (struct symt_function*)symt;
......
...@@ -453,8 +453,8 @@ static const Elf32_Sym* elf_lookup_symtab(const struct module* module, ...@@ -453,8 +453,8 @@ static const Elf32_Sym* elf_lookup_symtab(const struct module* module,
} }
if (!result && !(result = weak_result)) if (!result && !(result = weak_result))
{ {
FIXME("Couldn't find symbol %s!%s in symtab\n", FIXME("Couldn't find symbol %s!%s in symtab\n",
module->module.ModuleName, name); module->module_name, name);
return NULL; return NULL;
} }
return result->symp; return result->symp;
...@@ -491,18 +491,18 @@ static void elf_finish_stabs_info(struct module* module, struct hash_table* symt ...@@ -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 && if (((struct symt_function*)sym)->address != module->elf_info->elf_addr &&
((struct symt_function*)sym)->address != module->elf_info->elf_addr + symp->st_value) ((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", 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_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) 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", 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)->size, symp->st_size);
((struct symt_function*)sym)->address = module->elf_info->elf_addr + ((struct symt_function*)sym)->address = module->elf_info->elf_addr +
symp->st_value; symp->st_value;
((struct symt_function*)sym)->size = symp->st_size; ((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; break;
case SymTagData: case SymTagData:
switch (((struct symt_data*)sym)->kind) switch (((struct symt_data*)sym)->kind)
...@@ -517,14 +517,14 @@ static void elf_finish_stabs_info(struct module* module, struct hash_table* symt ...@@ -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 && 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) ((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", 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_function*)sym)->address, module->elf_info->elf_addr + symp->st_value);
((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; symp->st_value;
((struct symt_data*)sym)->kind = (ELF32_ST_BIND(symp->st_info) == STB_LOCAL) ? ((struct symt_data*)sym)->kind = (ELF32_ST_BIND(symp->st_info) == STB_LOCAL) ?
DataIsFileStatic : DataIsGlobal; 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; break;
default:; default:;
} }
...@@ -619,7 +619,7 @@ static int elf_new_wine_thunks(struct module* module, struct hash_table* ht_symt ...@@ -619,7 +619,7 @@ static int elf_new_wine_thunks(struct module* module, struct hash_table* ht_symt
if ((xsize || ste->symp->st_size) && if ((xsize || ste->symp->st_size) &&
(kind == (ELF32_ST_BIND(ste->symp->st_info) == STB_LOCAL) ? DataIsFileStatic : DataIsGlobal)) (kind == (ELF32_ST_BIND(ste->symp->st_info) == STB_LOCAL) ? DataIsFileStatic : DataIsGlobal))
FIXME("Duplicate in %s: %s<%08x-%08x> %s<%s-%s>\n", 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, ste->ht_elt.name, addr, ste->symp->st_size,
symt->hash_elt.name, symt->hash_elt.name,
wine_dbgstr_longlong(xaddr), wine_dbgstr_longlong(xsize)); wine_dbgstr_longlong(xaddr), wine_dbgstr_longlong(xsize));
...@@ -1014,7 +1014,7 @@ static BOOL elf_load_debug_info_from_map(struct module* module, ...@@ -1014,7 +1014,7 @@ static BOOL elf_load_debug_info_from_map(struct module* module,
const BYTE* dw2_debug_line; const BYTE* dw2_debug_line;
const BYTE* dw2_debug_loclist; 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 = (const BYTE*) elf_map_section(fmap, debug_sect);
dw2_debug_abbrev = (const BYTE*) elf_map_section(fmap, debug_abbrev_sect); dw2_debug_abbrev = (const BYTE*) elf_map_section(fmap, debug_abbrev_sect);
......
...@@ -82,6 +82,7 @@ static void module_fill_module(const char* in, char* out, size_t size) ...@@ -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) void module_set_module(struct module* module, const char* name)
{ {
module_fill_module(name, module->module.ModuleName, sizeof(module->module.ModuleName)); 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) 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) ...@@ -519,7 +520,7 @@ BOOL module_remove(struct process* pcs, struct module* module)
{ {
struct module** p; 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_symbols);
hash_table_destroy(&module->ht_types); hash_table_destroy(&module->ht_types);
HeapFree(GetProcessHeap(), 0, (char*)module->sources); HeapFree(GetProcessHeap(), 0, (char*)module->sources);
...@@ -592,7 +593,7 @@ BOOL WINAPI SymEnumerateModules(HANDLE hProcess, ...@@ -592,7 +593,7 @@ BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
{ {
if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF) if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
continue; continue;
if (!EnumModulesCallback(module->module.ModuleName, if (!EnumModulesCallback(module->module_name,
module->module.BaseOfImage, UserContext)) module->module.BaseOfImage, UserContext))
break; break;
} }
...@@ -616,7 +617,7 @@ BOOL WINAPI SymEnumerateModules64(HANDLE hProcess, ...@@ -616,7 +617,7 @@ BOOL WINAPI SymEnumerateModules64(HANDLE hProcess,
{ {
if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF) if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
continue; continue;
if (!EnumModulesCallback(module->module.ModuleName, if (!EnumModulesCallback(module->module_name,
module->module.BaseOfImage, UserContext)) module->module.BaseOfImage, UserContext))
break; break;
} }
......
...@@ -2417,7 +2417,7 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2417,7 +2417,7 @@ static BOOL codeview_process_info(const struct process* pcs,
} }
default: default:
ERR("Unknown CODEVIEW signature %.4s in module %s\n", 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; break;
} }
if (ret) if (ret)
......
...@@ -178,7 +178,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs, ...@@ -178,7 +178,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs,
misc->DataType != IMAGE_DEBUG_MISC_EXENAME) misc->DataType != IMAGE_DEBUG_MISC_EXENAME)
{ {
WINE_ERR("-Debug info stripped, but no .DBG file in module %s\n", WINE_ERR("-Debug info stripped, but no .DBG file in module %s\n",
module->module.ModuleName); module->module_name);
} }
else else
{ {
......
...@@ -130,8 +130,8 @@ struct symt_compiland* symt_new_compiland(struct module* module, ...@@ -130,8 +130,8 @@ struct symt_compiland* symt_new_compiland(struct module* module,
{ {
struct symt_compiland* sym; struct symt_compiland* sym;
TRACE_(dbghelp_symt)("Adding compiland symbol %s:%s\n", 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)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
{ {
sym->symt.tag = SymTagCompiland; sym->symt.tag = SymTagCompiland;
...@@ -151,9 +151,9 @@ struct symt_public* symt_new_public(struct module* module, ...@@ -151,9 +151,9 @@ struct symt_public* symt_new_public(struct module* module,
struct symt_public* sym; struct symt_public* sym;
struct symt** p; struct symt** p;
TRACE_(dbghelp_symt)("Adding public symbol %s:%s @%lx\n", 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) && if ((dbghelp_options & SYMOPT_AUTO_PUBLICS) &&
symt_find_nearest(module, address) != NULL) symt_find_nearest(module, address) != NULL)
return NULL; return NULL;
if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
...@@ -186,8 +186,8 @@ struct symt_data* symt_new_global_variable(struct module* module, ...@@ -186,8 +186,8 @@ struct symt_data* symt_new_global_variable(struct module* module,
struct symt** p; struct symt** p;
DWORD64 tsz; DWORD64 tsz;
TRACE_(dbghelp_symt)("Adding global symbol %s:%s @%lx %p\n", 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)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
{ {
sym->symt.tag = SymTagData; sym->symt.tag = SymTagData;
...@@ -202,7 +202,7 @@ struct symt_data* symt_new_global_variable(struct module* module, ...@@ -202,7 +202,7 @@ struct symt_data* symt_new_global_variable(struct module* module,
{ {
if (tsz != size) if (tsz != size)
FIXME("Size mismatch for %s.%s between type (%s) and src (%lu)\n", 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); wine_dbgstr_longlong(tsz), size);
} }
if (compiland) if (compiland)
...@@ -223,8 +223,8 @@ struct symt_function* symt_new_function(struct module* module, ...@@ -223,8 +223,8 @@ struct symt_function* symt_new_function(struct module* module,
struct symt_function* sym; struct symt_function* sym;
struct symt** p; struct symt** p;
TRACE_(dbghelp_symt)("Adding global function %s:%s @%lx-%lx\n", 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); assert(!sig_type || sig_type->tag == SymTagFunctionType);
if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
...@@ -309,8 +309,8 @@ struct symt_data* symt_add_func_local(struct module* module, ...@@ -309,8 +309,8 @@ struct symt_data* symt_add_func_local(struct module* module,
struct symt_data* locsym; struct symt_data* locsym;
struct symt** p; struct symt** p;
TRACE_(dbghelp_symt)("Adding local symbol (%s:%s): %s %p\n", 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); name, type);
assert(func); assert(func);
...@@ -424,8 +424,8 @@ struct symt_thunk* symt_new_thunk(struct module* module, ...@@ -424,8 +424,8 @@ struct symt_thunk* symt_new_thunk(struct module* module,
{ {
struct symt_thunk* sym; struct symt_thunk* sym;
TRACE_(dbghelp_symt)("Adding global thunk %s:%s @%lx-%lx\n", 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)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
{ {
...@@ -455,7 +455,7 @@ struct symt_data* symt_new_constant(struct module* module, ...@@ -455,7 +455,7 @@ struct symt_data* symt_new_constant(struct module* module,
struct symt_data* sym; struct symt_data* sym;
TRACE_(dbghelp_symt)("Adding constant value %s:%s\n", 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)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
{ {
...@@ -877,7 +877,7 @@ static BOOL sym_enum(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask, ...@@ -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 (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)) symt_enum_module(&pair, &sym_regex, se))
break; break;
} }
...@@ -892,7 +892,7 @@ static BOOL sym_enum(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask, ...@@ -892,7 +892,7 @@ static BOOL sym_enum(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask,
!module_get_containee(pair.pcs, pair.requested) && !module_get_containee(pair.pcs, pair.requested) &&
module_get_debug(&pair)) 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)) symt_enum_module(&pair, &sym_regex, se))
break; break;
} }
......
...@@ -164,7 +164,7 @@ struct symt_udt* symt_new_udt(struct module* module, const char* typename, ...@@ -164,7 +164,7 @@ struct symt_udt* symt_new_udt(struct module* module, const char* typename,
{ {
struct symt_udt* sym; 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)))) if ((sym = pool_alloc(&module->pool, sizeof(*sym))))
{ {
sym->symt.tag = SymTagUDT; sym->symt.tag = SymTagUDT;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment