dbghelp: Add support for parsing methods (in C++ classes) for dwarf debug format.

This commit is contained in:
Eric Pouech 2011-03-08 21:31:20 +01:00 committed by Alexandre Julliard
parent 395d734d33
commit a575351b30
1 changed files with 11 additions and 2 deletions

View File

@ -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,