dbghelp: Add support for parsing methods (in C++ classes) for dwarf debug format.
This commit is contained in:
parent
395d734d33
commit
a575351b30
|
@ -1377,6 +1377,9 @@ static void dwarf2_parse_udt_member(dwarf2_parse_context_t* ctx,
|
||||||
if (dwarf2_get_di_children(ctx, di)) FIXME("Unsupported children\n");
|
if (dwarf2_get_di_children(ctx, di)) FIXME("Unsupported children\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx,
|
||||||
|
dwarf2_debug_info_t* di);
|
||||||
|
|
||||||
static struct symt* dwarf2_parse_udt_type(dwarf2_parse_context_t* ctx,
|
static struct symt* dwarf2_parse_udt_type(dwarf2_parse_context_t* ctx,
|
||||||
dwarf2_debug_info_t* di,
|
dwarf2_debug_info_t* di,
|
||||||
enum UdtKind udt)
|
enum UdtKind udt)
|
||||||
|
@ -1411,13 +1414,15 @@ static struct symt* dwarf2_parse_udt_type(dwarf2_parse_context_t* ctx,
|
||||||
case DW_TAG_enumeration_type:
|
case DW_TAG_enumeration_type:
|
||||||
dwarf2_parse_enumeration_type(ctx, child);
|
dwarf2_parse_enumeration_type(ctx, child);
|
||||||
break;
|
break;
|
||||||
|
case DW_TAG_subprogram:
|
||||||
|
dwarf2_parse_subprogram(ctx, child);
|
||||||
|
break;
|
||||||
case DW_TAG_structure_type:
|
case DW_TAG_structure_type:
|
||||||
case DW_TAG_class_type:
|
case DW_TAG_class_type:
|
||||||
case DW_TAG_union_type:
|
case DW_TAG_union_type:
|
||||||
case DW_TAG_typedef:
|
case DW_TAG_typedef:
|
||||||
/* FIXME: we need to handle nested udt definitions */
|
/* FIXME: we need to handle nested udt definitions */
|
||||||
case DW_TAG_inheritance:
|
case DW_TAG_inheritance:
|
||||||
case DW_TAG_subprogram:
|
|
||||||
case DW_TAG_template_type_param:
|
case DW_TAG_template_type_param:
|
||||||
case DW_TAG_template_value_param:
|
case DW_TAG_template_value_param:
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
|
@ -1860,7 +1865,11 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx,
|
||||||
&sig_type->symt);
|
&sig_type->symt);
|
||||||
di->symt = &subpgm.func->symt;
|
di->symt = &subpgm.func->symt;
|
||||||
}
|
}
|
||||||
else subpgm.func = NULL;
|
else
|
||||||
|
{
|
||||||
|
WARN("no location for '%s::%s'\n", ctx->name_space, name.u.string);
|
||||||
|
subpgm.func = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
subpgm.ctx = ctx;
|
subpgm.ctx = ctx;
|
||||||
if (!dwarf2_compute_location_attr(ctx, di, DW_AT_frame_base,
|
if (!dwarf2_compute_location_attr(ctx, di, DW_AT_frame_base,
|
||||||
|
|
Loading…
Reference in New Issue