Lines Matching full:die
35 Dwarf_Die die; in _dwarf_die_alloc() local
39 if ((die = calloc(1, sizeof(struct _Dwarf_Die))) == NULL) { in _dwarf_die_alloc()
44 STAILQ_INIT(&die->die_attr); in _dwarf_die_alloc()
46 *ret_die = die; in _dwarf_die_alloc()
56 Dwarf_Die die; in _dwarf_die_add() local
64 if ((ret = _dwarf_die_alloc(dbg, &die, error)) != DW_DLE_NONE) in _dwarf_die_add()
67 die->die_offset = offset; in _dwarf_die_add()
68 die->die_abnum = abnum; in _dwarf_die_add()
69 die->die_ab = ab; in _dwarf_die_add()
70 die->die_cu = cu; in _dwarf_die_add()
71 die->die_dbg = cu->cu_dbg; in _dwarf_die_add()
73 *diep = die; in _dwarf_die_add()
78 /* Find die at offset 'off' within the same CU. */
80 _dwarf_die_find(Dwarf_Die die, Dwarf_Unsigned off) in _dwarf_die_find() argument
89 cu = die->die_cu; in _dwarf_die_find()
90 dbg = die->die_dbg; in _dwarf_die_find()
109 Dwarf_Die die; in _dwarf_die_parse() local
117 die = NULL; in _dwarf_die_parse()
130 * Return to previous DIE level. in _dwarf_die_parse()
140 if ((ret = _dwarf_die_add(cu, die_offset, abnum, ab, &die, in _dwarf_die_parse()
146 dwarf_size, cu, die, ad, ad->ad_form, 0, in _dwarf_die_parse()
151 die->die_next_off = offset; in _dwarf_die_parse()
153 dwarf_dealloc(dbg, die, DW_DLA_DIE); in _dwarf_die_parse()
155 /* Advance to next DIE level. */ in _dwarf_die_parse()
159 *ret_die = die; in _dwarf_die_parse()
168 _dwarf_die_link(Dwarf_P_Die die, Dwarf_P_Die parent, Dwarf_P_Die child, in _dwarf_die_link() argument
173 assert(die != NULL); in _dwarf_die_link()
178 if (die->die_parent) { in _dwarf_die_link()
179 if (die->die_parent != parent) { in _dwarf_die_link()
180 if (die->die_parent->die_child == die) in _dwarf_die_link()
181 die->die_parent->die_child = NULL; in _dwarf_die_link()
182 die->die_parent = NULL; in _dwarf_die_link()
194 die->die_parent = parent; in _dwarf_die_link()
197 * Attach this DIE to the end of sibling list. If new in _dwarf_die_link()
198 * parent doesn't have any child, set this DIE as the in _dwarf_die_link()
203 last_child->die_right = die; in _dwarf_die_link()
204 die->die_left = last_child; in _dwarf_die_link()
206 parent->die_child = die; in _dwarf_die_link()
212 if (die->die_child) { in _dwarf_die_link()
213 if (die->die_child != child) { in _dwarf_die_link()
214 die->die_child->die_parent = NULL; in _dwarf_die_link()
215 die->die_child = NULL; in _dwarf_die_link()
220 die->die_child = child; in _dwarf_die_link()
221 child->die_parent = die; in _dwarf_die_link()
227 if (die->die_left) { in _dwarf_die_link()
228 if (die->die_left != left_sibling) { in _dwarf_die_link()
229 die->die_left->die_right = NULL; in _dwarf_die_link()
230 die->die_left = NULL; in _dwarf_die_link()
235 die->die_left = left_sibling; in _dwarf_die_link()
236 left_sibling->die_right = die; in _dwarf_die_link()
242 if (die->die_right) { in _dwarf_die_link()
243 if (die->die_right != right_sibling) { in _dwarf_die_link()
244 die->die_right->die_left = NULL; in _dwarf_die_link()
245 die->die_right = NULL; in _dwarf_die_link()
250 die->die_right = right_sibling; in _dwarf_die_link()
251 right_sibling->die_left = die; in _dwarf_die_link()
277 Dwarf_P_Die die, int pass2, Dwarf_Error *error) in _dwarf_die_gen_recursive() argument
296 if (die->die_child && die->die_right) { in _dwarf_die_gen_recursive()
297 if (_dwarf_attr_find(die, DW_AT_sibling) == NULL) in _dwarf_die_gen_recursive()
298 (void) dwarf_add_AT_reference(dbg, die, DW_AT_sibling, in _dwarf_die_gen_recursive()
299 die->die_right, error); in _dwarf_die_gen_recursive()
305 die->die_ab = NULL; in _dwarf_die_gen_recursive()
307 if (die->die_tag != ab->ab_tag) in _dwarf_die_gen_recursive()
309 if (ab->ab_children == DW_CHILDREN_no && die->die_child != NULL) in _dwarf_die_gen_recursive()
312 die->die_child == NULL) in _dwarf_die_gen_recursive()
314 at = STAILQ_FIRST(&die->die_attr); in _dwarf_die_gen_recursive()
329 die->die_ab = ab; in _dwarf_die_gen_recursive()
337 if (die->die_ab == NULL) { in _dwarf_die_gen_recursive()
338 ret = _dwarf_abbrev_add(cu, ++cu->cu_abbrev_cnt, die->die_tag, in _dwarf_die_gen_recursive()
339 die->die_child != NULL ? DW_CHILDREN_yes : DW_CHILDREN_no, in _dwarf_die_gen_recursive()
343 STAILQ_FOREACH(at, &die->die_attr, at_next) { in _dwarf_die_gen_recursive()
349 die->die_ab = ab; in _dwarf_die_gen_recursive()
352 die->die_offset = ds->ds_size; in _dwarf_die_gen_recursive()
355 * Transform the DIE to bytes stream. in _dwarf_die_gen_recursive()
358 &ds->ds_size, die->die_ab->ab_entry, error); in _dwarf_die_gen_recursive()
364 /* Transform the attributes of this DIE. */ in _dwarf_die_gen_recursive()
365 ret = _dwarf_attr_gen(dbg, ds, drs, cu, die, pass2, error); in _dwarf_die_gen_recursive()
369 /* Proceed to child DIE. */ in _dwarf_die_gen_recursive()
370 if (die->die_child != NULL) { in _dwarf_die_gen_recursive()
371 ret = _dwarf_die_gen_recursive(dbg, cu, drs, die->die_child, in _dwarf_die_gen_recursive()
377 /* Proceed to sibling DIE. */ in _dwarf_die_gen_recursive()
378 if (die->die_right != NULL) { in _dwarf_die_gen_recursive()
379 ret = _dwarf_die_gen_recursive(dbg, cu, drs, die->die_right, in _dwarf_die_gen_recursive()
385 /* Write a null DIE indicating the end of current level. */ in _dwarf_die_gen_recursive()
386 if (die->die_right == NULL) { in _dwarf_die_gen_recursive()
402 Dwarf_Die die; in _dwarf_die_gen() local
408 die = dbg->dbgp_root_die; in _dwarf_die_gen()
411 * Insert a DW_AT_stmt_list attribute into root DIE, if there are in _dwarf_die_gen()
415 RCHECK(_dwarf_add_AT_dataref(dbg, die, DW_AT_stmt_list, 0, 0, in _dwarf_die_gen()
418 RCHECK(_dwarf_die_gen_recursive(dbg, cu, drs, die, 0, error)); in _dwarf_die_gen()
421 RCHECK(_dwarf_die_gen_recursive(dbg, cu, drs, die, 1, error)); in _dwarf_die_gen()
443 Dwarf_P_Die die, tdie; in _dwarf_die_pro_cleanup() local
448 STAILQ_FOREACH_SAFE(die, &dbg->dbgp_dielist, die_pro_next, tdie) { in _dwarf_die_pro_cleanup()
449 STAILQ_FOREACH_SAFE(at, &die->die_attr, at_next, tat) { in _dwarf_die_pro_cleanup()
450 STAILQ_REMOVE(&die->die_attr, at, _Dwarf_Attribute, in _dwarf_die_pro_cleanup()
454 free(die); in _dwarf_die_pro_cleanup()