dbghelp: Add hierarchical information in die object.
This commit is contained in:
parent
6d49f958de
commit
770e3b5ddf
|
@ -154,6 +154,7 @@ typedef struct dwarf2_debug_info_s
|
||||||
struct symt* symt;
|
struct symt* symt;
|
||||||
const unsigned char** data;
|
const unsigned char** data;
|
||||||
struct vector children;
|
struct vector children;
|
||||||
|
struct dwarf2_debug_info_s* parent;
|
||||||
} dwarf2_debug_info_t;
|
} dwarf2_debug_info_t;
|
||||||
|
|
||||||
typedef struct dwarf2_section_s
|
typedef struct dwarf2_section_s
|
||||||
|
@ -1006,6 +1007,7 @@ static BOOL dwarf2_read_range(dwarf2_parse_context_t* ctx, const dwarf2_debug_in
|
||||||
*/
|
*/
|
||||||
static BOOL dwarf2_read_one_debug_info(dwarf2_parse_context_t* ctx,
|
static BOOL dwarf2_read_one_debug_info(dwarf2_parse_context_t* ctx,
|
||||||
dwarf2_traverse_context_t* traverse,
|
dwarf2_traverse_context_t* traverse,
|
||||||
|
dwarf2_debug_info_t* parent_di,
|
||||||
dwarf2_debug_info_t** pdi)
|
dwarf2_debug_info_t** pdi)
|
||||||
{
|
{
|
||||||
const dwarf2_abbrev_entry_t*abbrev;
|
const dwarf2_abbrev_entry_t*abbrev;
|
||||||
|
@ -1036,6 +1038,7 @@ static BOOL dwarf2_read_one_debug_info(dwarf2_parse_context_t* ctx,
|
||||||
if (!di) return FALSE;
|
if (!di) return FALSE;
|
||||||
di->abbrev = abbrev;
|
di->abbrev = abbrev;
|
||||||
di->symt = NULL;
|
di->symt = NULL;
|
||||||
|
di->parent = parent_di;
|
||||||
|
|
||||||
if (abbrev->num_attr)
|
if (abbrev->num_attr)
|
||||||
{
|
{
|
||||||
|
@ -1052,7 +1055,7 @@ static BOOL dwarf2_read_one_debug_info(dwarf2_parse_context_t* ctx,
|
||||||
vector_init(&di->children, sizeof(dwarf2_debug_info_t*), 16);
|
vector_init(&di->children, sizeof(dwarf2_debug_info_t*), 16);
|
||||||
while (traverse->data < traverse->end_data)
|
while (traverse->data < traverse->end_data)
|
||||||
{
|
{
|
||||||
if (!dwarf2_read_one_debug_info(ctx, traverse, &child)) return FALSE;
|
if (!dwarf2_read_one_debug_info(ctx, traverse, di, &child)) return FALSE;
|
||||||
if (!child) break;
|
if (!child) break;
|
||||||
where = vector_add(&di->children, &ctx->pool);
|
where = vector_add(&di->children, &ctx->pool);
|
||||||
if (!where) return FALSE;
|
if (!where) return FALSE;
|
||||||
|
@ -2238,7 +2241,7 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections,
|
||||||
dwarf2_parse_abbrev_set(&abbrev_ctx, &ctx.abbrev_table, &ctx.pool);
|
dwarf2_parse_abbrev_set(&abbrev_ctx, &ctx.abbrev_table, &ctx.pool);
|
||||||
|
|
||||||
sparse_array_init(&ctx.debug_info_table, sizeof(dwarf2_debug_info_t), 128);
|
sparse_array_init(&ctx.debug_info_table, sizeof(dwarf2_debug_info_t), 128);
|
||||||
dwarf2_read_one_debug_info(&ctx, &cu_ctx, &di);
|
dwarf2_read_one_debug_info(&ctx, &cu_ctx, NULL, &di);
|
||||||
|
|
||||||
if (di->abbrev->tag == DW_TAG_compile_unit)
|
if (di->abbrev->tag == DW_TAG_compile_unit)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue