dbghelp: Properly manage in dbghelp interfaces local variables and parameters that are constant.
This commit is contained in:
parent
99a5488a18
commit
083eca072d
|
@ -347,6 +347,7 @@ struct module_format
|
|||
|
||||
struct module
|
||||
{
|
||||
struct process* process;
|
||||
IMAGEHLP_MODULEW64 module;
|
||||
/* ANSI copy of module.ModuleName for efficiency */
|
||||
char module_name[MAX_PATH];
|
||||
|
|
|
@ -142,6 +142,7 @@ struct module* module_new(struct process* pcs, const WCHAR* name,
|
|||
|
||||
pool_init(&module->pool, 65536);
|
||||
|
||||
module->process = pcs;
|
||||
module->module.SizeOfStruct = sizeof(module->module);
|
||||
module->module.BaseOfImage = mod_addr;
|
||||
module->module.ImageSize = size;
|
||||
|
|
|
@ -803,9 +803,35 @@ BOOL symt_get_info(struct module* module, const struct symt* type,
|
|||
break;
|
||||
|
||||
case TI_GET_VALUE:
|
||||
if (type->tag != SymTagData || ((const struct symt_data*)type)->kind != DataIsConstant)
|
||||
return FALSE;
|
||||
X(VARIANT) = ((const struct symt_data*)type)->u.value;
|
||||
if (type->tag != SymTagData) return FALSE;
|
||||
switch (((const struct symt_data*)type)->kind)
|
||||
{
|
||||
case DataIsConstant: X(VARIANT) = ((const struct symt_data*)type)->u.value; break;
|
||||
case DataIsLocal:
|
||||
case DataIsParam:
|
||||
{
|
||||
struct location loc = ((const struct symt_data*)type)->u.var;
|
||||
unsigned i;
|
||||
struct module_format* modfmt;
|
||||
|
||||
if (loc.kind < loc_user) return FALSE;
|
||||
for (i = 0; i < DFI_LAST; i++)
|
||||
{
|
||||
modfmt = module->format_info[i];
|
||||
if (modfmt && modfmt->loc_compute)
|
||||
{
|
||||
modfmt->loc_compute(module->process, modfmt,
|
||||
(const struct symt_function*)((const struct symt_data*)type)->container, &loc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (loc.kind != loc_absolute) return FALSE;
|
||||
X(VARIANT).n1.n2.vt = VT_UI4; /* FIXME */
|
||||
X(VARIANT).n1.n2.n3.uiVal = loc.offset;
|
||||
}
|
||||
break;
|
||||
default: return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case TI_GET_CALLING_CONVENTION:
|
||||
|
|
Loading…
Reference in New Issue