(BTW dbghelp is already doing the right thing)
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- tools/winedump/msc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index 2c3d406347e..b7b7eb435ff 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -1161,7 +1161,7 @@ BOOL codeview_dump_types_from_block(const void* table, unsigned long len)
codeview_dump_one_type(curr_type, type); curr_type++; - ptr += (type->generic.len + 2 + 3) & ~3; + ptr += type->generic.len + 2; }
return TRUE;
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- include/wine/mscvpdb.h | 15 +++++++++++++++ tools/winedump/msc.c | 8 ++++++++ 2 files changed, 23 insertions(+)
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index c9ab4abb166..1ede937abc4 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -1958,6 +1958,20 @@ union codeview_symbol unsigned short varflags; char name[1]; } file_static_v3; + + struct + { + unsigned short int len; + unsigned short int id; + struct p_string pname; + } unamespace_v2; + + struct + { + unsigned short int len; + unsigned short int id; + unsigned char name[1]; + } unamespace_v3; };
enum BinaryAnnotationOpcode @@ -2031,6 +2045,7 @@ enum BinaryAnnotationOpcode #define S_GTHREAD32_ST 0x100f #define S_FRAMEPROC 0x1012 #define S_COMPILE2_ST 0x1013 +#define S_UNAMESPACE_ST 0x1029
#define S_OBJNAME 0x1101 #define S_THUNK32 0x1102 diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index b7b7eb435ff..12d1a9e62ab 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -1839,6 +1839,14 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size) get_varflags(sym->file_static_v3.varflags)); break;
+ case S_UNAMESPACE_ST: + printf("UNameSpace V2 '%s'\n", p_string(&sym->unamespace_v2.pname)); + break; + + case S_UNAMESPACE: + printf("UNameSpace V3 '%s'\n", sym->unamespace_v3.name); + break; + default: printf("\n\t\t>>> Unsupported symbol-id %x sz=%d\n", sym->generic.id, sym->generic.len + 2); dump_data((const void*)sym, sym->generic.len + 2, " ");
- harmonized pointer handling using only BYREF entry
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dwarf.c | 32 ++++++++++++++-------------- dlls/dbghelp/msc.c | 57 ++++++++++++++++++++++++------------------------- dlls/dbghelp/symbol.c | 18 ++++++++------- dlls/dbghelp/type.c | 8 +++---- 4 files changed, 57 insertions(+), 58 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index c15b59b57c3..c20c3db5ca9 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1888,19 +1888,19 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, case DW_FORM_data4: case DW_FORM_udata: case DW_FORM_addr: - v.n1.n2.vt = VT_UI4; - v.n1.n2.n3.lVal = value.u.uvalue; + V_VT(&v) = VT_UI4; + V_UI4(&v) = value.u.uvalue; break;
case DW_FORM_data8: case DW_FORM_sec_offset: - v.n1.n2.vt = VT_UI8; - v.n1.n2.n3.llVal = value.u.lluvalue; + V_VT(&v) = VT_UI8; + V_UI8(&v) = value.u.lluvalue; break;
case DW_FORM_sdata: - v.n1.n2.vt = VT_I4; - v.n1.n2.n3.lVal = value.u.svalue; + V_VT(&v) = VT_I4; + V_I4(&v) = value.u.svalue; break;
case DW_FORM_strp: @@ -1908,8 +1908,8 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, /* FIXME: native doesn't report const strings from here !! * however, the value of the string is in the code somewhere */ - v.n1.n2.vt = VT_I1 | VT_BYREF; - v.n1.n2.n3.byref = pool_strdup(&subpgm->ctx->module_ctx->module->pool, value.u.string); + V_VT(&v) = VT_BYREF; + V_BYREF(&v) = pool_strdup(&subpgm->ctx->module_ctx->module->pool, value.u.string); break;
case DW_FORM_block: @@ -1917,23 +1917,23 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, case DW_FORM_block2: case DW_FORM_block4: case DW_FORM_exprloc: - v.n1.n2.vt = VT_I4; + V_VT(&v) = VT_I4; switch (value.u.block.size) { - case 1: v.n1.n2.n3.lVal = *(BYTE*)value.u.block.ptr; break; - case 2: v.n1.n2.n3.lVal = *(USHORT*)value.u.block.ptr; break; - case 4: v.n1.n2.n3.lVal = *(DWORD*)value.u.block.ptr; break; + case 1: V_I4(&v) = *(BYTE*)value.u.block.ptr; break; + case 2: V_I4(&v) = *(USHORT*)value.u.block.ptr; break; + case 4: V_I4(&v) = *(DWORD*)value.u.block.ptr; break; default: - v.n1.n2.vt = VT_I1 | VT_BYREF; - v.n1.n2.n3.byref = pool_alloc(&subpgm->ctx->module_ctx->module->pool, value.u.block.size); - memcpy(v.n1.n2.n3.byref, value.u.block.ptr, value.u.block.size); + V_VT(&v) = VT_BYREF; + V_BYREF(&v) = pool_alloc(&subpgm->ctx->module_ctx->module->pool, value.u.block.size); + memcpy(V_BYREF(&v), value.u.block.ptr, value.u.block.size); } break;
default: FIXME("Unsupported form for const value %s (%lx)\n", debugstr_a(name.u.string), value.form); - v.n1.n2.vt = VT_EMPTY; + V_VT(&v) = VT_EMPTY; } if (subpgm->func) { diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index c3e243879b2..353915cc7db 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -263,8 +263,8 @@ static int leaf_as_variant(VARIANT* v, const unsigned short int* leaf)
if (type < LF_NUMERIC) { - v->n1.n2.vt = VT_UINT; - v->n1.n2.n3.uintVal = type; + V_VT(v) = VT_UINT; + V_UINT(v) = type; } else { @@ -272,109 +272,108 @@ static int leaf_as_variant(VARIANT* v, const unsigned short int* leaf) { case LF_CHAR: length += 1; - v->n1.n2.vt = VT_I1; - v->n1.n2.n3.cVal = *(const char*)leaf; + V_VT(v) = VT_I1; + V_I1(v) = *(const char*)leaf; break;
case LF_SHORT: length += 2; - v->n1.n2.vt = VT_I2; - v->n1.n2.n3.iVal = *(const short*)leaf; + V_VT(v) = VT_I2; + V_I2(v) = *(const short*)leaf; break;
case LF_USHORT: length += 2; - v->n1.n2.vt = VT_UI2; - v->n1.n2.n3.uiVal = *leaf; + V_VT(v) = VT_UI2; + V_UI2(v) = *leaf; break;
case LF_LONG: length += 4; - v->n1.n2.vt = VT_I4; - v->n1.n2.n3.lVal = *(const int*)leaf; + V_VT(v) = VT_I4; + V_I4(v) = *(const int*)leaf; break;
case LF_ULONG: length += 4; - v->n1.n2.vt = VT_UI4; - v->n1.n2.n3.uiVal = *(const unsigned int*)leaf; + V_VT(v) = VT_UI4; + V_UI4(v) = *(const unsigned int*)leaf; break;
case LF_QUADWORD: length += 8; - v->n1.n2.vt = VT_I8; - v->n1.n2.n3.llVal = *(const long long int*)leaf; + V_VT(v) = VT_I8; + V_I8(v) = *(const long long int*)leaf; break;
case LF_UQUADWORD: length += 8; - v->n1.n2.vt = VT_UI8; - v->n1.n2.n3.ullVal = *(const long long unsigned int*)leaf; + V_VT(v) = VT_UI8; + V_UI8(v) = *(const long long unsigned int*)leaf; break;
case LF_REAL32: length += 4; - v->n1.n2.vt = VT_R4; - v->n1.n2.n3.fltVal = *(const float*)leaf; + V_VT(v) = VT_R4; + V_R4(v) = *(const float*)leaf; break;
case LF_REAL48: FIXME("Unsupported numeric leaf type %04x\n", type); length += 6; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_REAL64: length += 8; - v->n1.n2.vt = VT_R8; - v->n1.n2.n3.fltVal = *(const double*)leaf; + V_VT(v) = VT_R8; + V_R8(v) = *(const double*)leaf; break;
case LF_REAL80: FIXME("Unsupported numeric leaf type %04x\n", type); length += 10; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_REAL128: FIXME("Unsupported numeric leaf type %04x\n", type); length += 16; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_COMPLEX32: FIXME("Unsupported numeric leaf type %04x\n", type); length += 4; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_COMPLEX64: FIXME("Unsupported numeric leaf type %04x\n", type); length += 8; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_COMPLEX80: FIXME("Unsupported numeric leaf type %04x\n", type); length += 10; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ break;
case LF_COMPLEX128: FIXME("Unsupported numeric leaf type %04x\n", type); length += 16; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
case LF_VARSTRING: FIXME("Unsupported numeric leaf type %04x\n", type); length += 2 + *leaf; - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break;
default: FIXME("Unknown numeric leaf type %04x\n", type); - v->n1.n2.vt = VT_EMPTY; /* FIXME */ + V_VT(v) = VT_EMPTY; /* FIXME */ break; } } diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index ffb0e53fdeb..0b71584e6e0 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -748,18 +748,18 @@ static void symt_fill_sym_info(struct module_pair* pair, if (data->container && (data->container->tag == SymTagFunction || data->container->tag == SymTagBlock)) sym_info->Flags |= SYMFLAG_LOCAL; - switch (data->u.value.n1.n2.vt) + switch (V_VT(&data->u.value)) { - case VT_I4: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.lVal; break; - case VT_I2: sym_info->Value = (ULONG)(LONG_PTR)data->u.value.n1.n2.n3.iVal; break; - case VT_I1: sym_info->Value = (ULONG)(LONG_PTR)data->u.value.n1.n2.n3.cVal; break; - case VT_UI4: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.ulVal; break; - case VT_UI2: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.uiVal; break; - case VT_UI1: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.bVal; break; - case VT_I1 | VT_BYREF: sym_info->Value = (ULONG64)(DWORD_PTR)data->u.value.n1.n2.n3.byref; break; + case VT_I4: sym_info->Value = (ULONG)V_I4(&data->u.value); break; + case VT_I2: sym_info->Value = (ULONG)(LONG_PTR)V_I2(&data->u.value); break; + case VT_I1: sym_info->Value = (ULONG)(LONG_PTR)V_I1(&data->u.value); break; + case VT_UI4: sym_info->Value = (ULONG)V_UI4(&data->u.value); break; + case VT_UI2: sym_info->Value = (ULONG)V_UI2(&data->u.value); break; + case VT_UI1: sym_info->Value = (ULONG)V_UI1(&data->u.value); break; + case VT_BYREF: sym_info->Value = (ULONG64)(DWORD_PTR)V_BYREF(&data->u.value); break; case VT_EMPTY: sym_info->Value = 0; break; default: - FIXME("Unsupported variant type (%u)\n", data->u.value.n1.n2.vt); + FIXME("Unsupported variant type (%u)\n", V_VT(&data->u.value)); sym_info->Value = 0; break; } diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c index d41e13ef79e..e50c5cac1fd 100644 --- a/dlls/dbghelp/type.c +++ b/dlls/dbghelp/type.c @@ -371,8 +371,8 @@ BOOL symt_add_enum_element(struct module* module, struct symt_enum* enum_type, e->kind = DataIsConstant; e->container = &enum_type->symt; e->type = enum_type->base_type; - e->u.value.n1.n2.vt = VT_I4; - e->u.value.n1.n2.n3.lVal = value; + V_VT(&e->u.value) = VT_I4; + V_I4(&e->u.value) = value;
p = vector_add(&enum_type->vchildren, &module->pool); if (!p) return FALSE; /* FIXME we leak e */ @@ -952,8 +952,8 @@ BOOL symt_get_info(struct module* module, const struct symt* type, } } if (loc.kind != loc_absolute) return FALSE; - X(VARIANT).n1.n2.vt = VT_UI4; /* FIXME */ - X(VARIANT).n1.n2.n3.uiVal = loc.offset; + V_VT(&X(VARIANT)) = VT_UI4; /* FIXME */ + V_UI4(&X(VARIANT)) = loc.offset; } break; default: return FALSE;
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/symbol.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 0b71584e6e0..3fb6ba360fd 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -750,13 +750,16 @@ static void symt_fill_sym_info(struct module_pair* pair, sym_info->Flags |= SYMFLAG_LOCAL; switch (V_VT(&data->u.value)) { - case VT_I4: sym_info->Value = (ULONG)V_I4(&data->u.value); break; - case VT_I2: sym_info->Value = (ULONG)(LONG_PTR)V_I2(&data->u.value); break; - case VT_I1: sym_info->Value = (ULONG)(LONG_PTR)V_I1(&data->u.value); break; - case VT_UI4: sym_info->Value = (ULONG)V_UI4(&data->u.value); break; - case VT_UI2: sym_info->Value = (ULONG)V_UI2(&data->u.value); break; - case VT_UI1: sym_info->Value = (ULONG)V_UI1(&data->u.value); break; - case VT_BYREF: sym_info->Value = (ULONG64)(DWORD_PTR)V_BYREF(&data->u.value); break; + case VT_I8: sym_info->Value = (LONG64)V_I8(&data->u.value); break; + case VT_I4: sym_info->Value = (LONG64)V_I4(&data->u.value); break; + case VT_I2: sym_info->Value = (LONG64)V_I2(&data->u.value); break; + case VT_I1: sym_info->Value = (LONG64)V_I1(&data->u.value); break; + case VT_UINT:sym_info->Value = V_UINT(&data->u.value); break; + case VT_UI8: sym_info->Value = V_UI8(&data->u.value); break; + case VT_UI4: sym_info->Value = V_UI4(&data->u.value); break; + case VT_UI2: sym_info->Value = V_UI2(&data->u.value); break; + case VT_UI1: sym_info->Value = V_UI1(&data->u.value); break; + case VT_BYREF: sym_info->Value = (DWORD_PTR)V_BYREF(&data->u.value); break; case VT_EMPTY: sym_info->Value = 0; break; default: FIXME("Unsupported variant type (%u)\n", V_VT(&data->u.value));
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dbghelp_private.h | 2 ++ dlls/dbghelp/dwarf.c | 5 +---- dlls/dbghelp/module.c | 7 +++++++ dlls/dbghelp/msc.c | 5 +---- dlls/dbghelp/symbol.c | 30 ++++++------------------------ dlls/dbghelp/type.c | 20 +++----------------- 6 files changed, 20 insertions(+), 49 deletions(-)
diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index 14c4336e205..fda6714c332 100644 --- a/dlls/dbghelp/dbghelp_private.h +++ b/dlls/dbghelp/dbghelp_private.h @@ -629,6 +629,8 @@ extern const WCHAR S_WineLoaderW[] DECLSPEC_HIDDEN; extern const WCHAR S_SlashW[] DECLSPEC_HIDDEN; extern const struct loader_ops no_loader_ops DECLSPEC_HIDDEN;
+extern BOOL module_init_pair(struct module_pair* pair, HANDLE hProcess, + DWORD64 addr) DECLSPEC_HIDDEN; extern struct module* module_find_by_addr(const struct process* pcs, DWORD64 addr, enum module_type type) DECLSPEC_HIDDEN; diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index c20c3db5ca9..f371f7a6822 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -3652,10 +3652,7 @@ BOOL dwarf2_virtual_unwind(struct cpu_stack_walk *csw, ULONG_PTR ip, struct module_pair pair; struct frame_info info;
- if (!(pair.pcs = process_find_by_handle(csw->hProcess)) || - !(pair.requested = module_find_by_addr(pair.pcs, ip, DMT_UNKNOWN)) || - !module_get_debug(&pair)) - return FALSE; + if (!module_init_pair(&pair, csw->hProcess, ip)) return FALSE; if (!dwarf2_fetch_frame_info(pair.effective, csw->cpu, ip, &info)) return FALSE;
/* if at very beginning of function, return and use default unwinder */ diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 254bbb297d7..488ed1a3bd6 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -262,6 +262,13 @@ struct module* module_new(struct process* pcs, const WCHAR* name, return module; }
+BOOL module_init_pair(struct module_pair* pair, HANDLE hProcess, DWORD64 addr) +{ + if (!(pair->pcs = process_find_by_handle(hProcess))) return FALSE; + pair->requested = module_find_by_addr(pair->pcs, addr, DMT_UNKNOWN); + return module_get_debug(pair); +} + /*********************************************************************** * module_find_by_nameW * diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index 353915cc7db..2468051acc7 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -3199,10 +3199,7 @@ BOOL pdb_virtual_unwind(struct cpu_stack_walk *csw, DWORD_PTR ip, char* strbase; BOOL ret = TRUE;
- if (!(pair.pcs = process_find_by_handle(csw->hProcess)) || - !(pair.requested = module_find_by_addr(pair.pcs, ip, DMT_UNKNOWN)) || - !module_get_debug(&pair)) - return FALSE; + if (!module_init_pair(&pair, csw->hProcess, ip)) return FALSE; if (!pair.effective->format_info[DFI_PDB]) return FALSE; pdb_info = pair.effective->format_info[DFI_PDB]->u.pdb_info; TRACE("searching %lx => %lx\n", ip, ip - (DWORD_PTR)pair.effective->module.BaseOfImage); diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 3fb6ba360fd..1113bbc39cf 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -1363,10 +1363,7 @@ BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address, struct module_pair pair; struct symt_ht* sym;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, Address, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, Address)) return FALSE; if ((sym = symt_find_nearest(pair.effective, Address)) == NULL) return FALSE;
symt_fill_sym_info(&pair, NULL, &sym->symt, Symbol); @@ -1717,10 +1714,7 @@ static BOOL get_line_from_addr(HANDLE hProcess, DWORD64 addr, struct symt_ht* symt; struct symt_function* func;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, addr, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, addr)) return FALSE; if ((symt = symt_find_nearest(pair.effective, addr)) == NULL) return FALSE;
if (symt->symt.tag != SymTagFunction) return FALSE; @@ -1862,10 +1856,7 @@ static BOOL symt_get_func_line_prev(HANDLE hProcess, struct internal_line_t* int struct line_info* li; struct line_info* srcli;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, addr, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, addr)) return FALSE;
if (key == NULL) return FALSE;
@@ -1944,10 +1935,7 @@ static BOOL symt_get_func_line_next(HANDLE hProcess, struct internal_line_t* int struct line_info* srcli;
if (key == NULL) return FALSE; - pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, addr, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, addr)) return FALSE;
/* search current source file */ for (srcli = key; !srcli->is_source_file; srcli--); @@ -2344,10 +2332,7 @@ BOOL WINAPI SymAddSymbol(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR name,
TRACE("(%p %s %s %u)\n", hProcess, wine_dbgstr_a(name), wine_dbgstr_longlong(addr), size);
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, BaseOfDll, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, BaseOfDll)) return FALSE;
return symt_new_custom(pair.effective, name, addr, size) != NULL; } @@ -2400,11 +2385,8 @@ BOOL WINAPI SymEnumLines(HANDLE hProcess, ULONG64 base, PCSTR compiland, if (!cb) return FALSE; if (!(dbghelp_options & SYMOPT_LOAD_LINES)) return TRUE;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; + if (!module_init_pair(&pair, hProcess, base)) return FALSE; if (compiland) FIXME("Unsupported yet (filtering on compiland %s)\n", compiland); - pair.requested = module_find_by_addr(pair.pcs, base, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; if (!(srcmask = file_regex(srcfile))) return FALSE;
sci.SizeOfStruct = sizeof(sci); diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c index e50c5cac1fd..eecb83f325f 100644 --- a/dlls/dbghelp/type.c +++ b/dlls/dbghelp/type.c @@ -483,9 +483,7 @@ BOOL WINAPI SymEnumTypes(HANDLE hProcess, ULONG64 BaseOfDll, hProcess, wine_dbgstr_longlong(BaseOfDll), EnumSymbolsCallback, UserContext);
- if (!(pair.pcs = process_find_by_handle(hProcess))) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, BaseOfDll, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, BaseOfDll)) return FALSE;
sym_info->SizeOfStruct = sizeof(SYMBOL_INFO); sym_info->MaxNameLen = sizeof(buffer) - sizeof(SYMBOL_INFO); @@ -1007,16 +1005,7 @@ BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD64 ModBase, { struct module_pair pair;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - - pair.requested = module_find_by_addr(pair.pcs, ModBase, DMT_UNKNOWN); - if (!module_get_debug(&pair)) - { - FIXME("Someone didn't properly set ModBase (%s)\n", wine_dbgstr_longlong(ModBase)); - return FALSE; - } - + if (!module_init_pair(&pair, hProcess, ModBase)) return FALSE; return symt_get_info(pair.effective, symt_index2ptr(pair.effective, TypeId), GetType, pInfo); }
@@ -1031,10 +1020,7 @@ BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, ULONG64 BaseOfDll, struct symt* type; DWORD64 size;
- pair.pcs = process_find_by_handle(hProcess); - if (!pair.pcs) return FALSE; - pair.requested = module_find_by_addr(pair.pcs, BaseOfDll, DMT_UNKNOWN); - if (!module_get_debug(&pair)) return FALSE; + if (!module_init_pair(&pair, hProcess, BaseOfDll)) return FALSE; type = symt_find_type_by_name(pair.effective, SymTagNull, Name); if (!type) return FALSE; Symbol->Index = Symbol->TypeIndex = symt_ptr2index(pair.effective, type);