Lines Matching defs:die

30  * On the first pass, we iterate through every die, creating new type nodes as
33 * corresponding to a given die can be completely filled out (sizes and offsets
275 die_off(dwarf_t *dw, Dwarf_Die die)
279 if (dwarf_dieoffset(die, &off, &dw->dw_err) == DW_DLV_OK)
282 terminate("failed to get offset for die: %s\n",
289 die_sibling(dwarf_t *dw, Dwarf_Die die)
294 if ((rc = dwarf_siblingof(dw->dw_dw, die, &sib, &dw->dw_err)) ==
300 terminate("die %ju: failed to find type sibling: %s\n",
301 (uintmax_t)die_off(dw, die), dwarf_errmsg(dw->dw_err));
307 die_child(dwarf_t *dw, Dwarf_Die die)
312 if ((rc = dwarf_child(die, &child, &dw->dw_err)) == DW_DLV_OK)
317 terminate("die %ju: failed to find type child: %s\n",
318 (uintmax_t)die_off(dw, die), dwarf_errmsg(dw->dw_err));
324 die_tag(dwarf_t *dw, Dwarf_Die die)
328 if (dwarf_tag(die, &tag, &dw->dw_err) == DW_DLV_OK)
331 terminate("die %ju: failed to get tag for type: %s\n",
332 (uintmax_t)die_off(dw, die), dwarf_errmsg(dw->dw_err));
338 die_attr(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, int req)
343 if ((rc = dwarf_attr(die, name, &attr, &dw->dw_err)) == DW_DLV_OK) {
347 terminate("die %ju: no attr 0x%x\n",
348 (uintmax_t)die_off(dw, die),
355 terminate("die %ju: failed to get attribute for type: %s\n",
356 (uintmax_t)die_off(dw, die), dwarf_errmsg(dw->dw_err));
362 die_signed(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Signed *valp,
366 if (dwarf_attrval_signed(die, name, valp, &dw->dw_err) != DW_DLV_OK) {
368 terminate("die %ju: failed to get signed: %s\n",
369 (uintmax_t)die_off(dw, die),
378 die_unsigned(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Unsigned *valp,
382 if (dwarf_attrval_unsigned(die, name, valp, &dw->dw_err) != DW_DLV_OK) {
384 terminate("die %ju: failed to get unsigned: %s\n",
385 (uintmax_t)die_off(dw, die),
394 die_bool(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Bool *valp, int req)
398 if (dwarf_attrval_flag(die, name, valp, &dw->dw_err) != DW_DLV_OK) {
400 terminate("die %ju: failed to get flag: %s\n",
401 (uintmax_t)die_off(dw, die),
410 die_string(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, char **strp, int req)
414 if (dwarf_attrval_string(die, name, &str, &dw->dw_err) != DW_DLV_OK ||
417 terminate("die %ju: failed to get string: %s\n",
418 (uintmax_t)die_off(dw, die),
430 die_attr_ref(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name)
434 if (dwarf_attrval_unsigned(die, name, &off, &dw->dw_err) != DW_DLV_OK) {
435 terminate("die %ju: failed to get ref: %s\n",
436 (uintmax_t)die_off(dw, die), dwarf_errmsg(dw->dw_err));
443 die_name(dwarf_t *dw, Dwarf_Die die)
447 (void) die_string(dw, die, DW_AT_name, &str, 0);
455 die_isdecl(dwarf_t *dw, Dwarf_Die die)
459 return (die_bool(dw, die, DW_AT_declaration, &val, 0) && val);
463 die_isglobal(dwarf_t *dw, Dwarf_Die die)
472 if (die_signed(dw, die, DW_AT_visibility, &vis, 0))
475 return (die_bool(dw, die, DW_AT_external, &ext, 0) && ext);
491 die_lookup_pass1(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name)
493 Dwarf_Off ref = die_attr_ref(dw, die, name);
503 die_mem_offset(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name,
512 terminate("die %ju: can only process attribute "
514 (uintmax_t)die_off(dw, die));
516 if ((at = die_attr(dw, die, name, 0)) == NULL)
537 terminate("die %ju: cannot parse member offset with "
539 (uintmax_t)die_off(dw, die));
567 if (dwarf_attrval_unsigned(die, name, valp, &dw->dw_err) !=
573 terminate("die %ju: cannot parse member offset with form "
574 "%u\n", (uintmax_t)die_off(dw, die), form);
607 * will be represented by a pointer die without a DW_AT_type. CTF requires
678 debug(3, "die %ju: creating new type %#x for sub-dimension\n",
682 terminate("die %ju: unexpected non-subrange node in array\n",
717 debug(3, "die %ju: hi mom sibling type %#x for dimension\n",
738 debug(3, "die %ju <%jx>: creating array\n",
743 terminate("die %ju: failed to retrieve array bounds\n",
748 * Add the die that contains the type of the array elements
782 debug(3, "die %ju <%jx>: array nelems %u size %u\n", (uintmax_t)off,
840 die_enum_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
846 if (die_isdecl(dw, die)) {
851 debug(3, "die %ju: creating enum\n", (uintmax_t)off);
855 (void) die_unsigned(dw, die, DW_AT_byte_size, &uval, DW_ATTR_REQ);
858 if ((mem = die_child(dw, die)) != NULL) {
879 terminate("die %ju: enum %ju: member without "
884 debug(3, "die %ju: enum %ju: created %s = %d\n",
981 debug(3, "die %ju: creating %s %s <%d>\n", (uintmax_t)off,
1015 debug(3, "die %ju: mem %ju: creating member\n",
1034 debug(3, "die %ju: got mloff 0x%jx\n", (uintmax_t)off,
1071 debug(3, "die %ju: mem %ju: created \"%s\" (off %u sz %u)\n",
1105 debug(3, "die %ju: worked around %s %s\n", (uintmax_t)off,
1126 die_struct_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1128 die_sou_create(dw, die, off, tdp, STRUCT, "struct");
1132 die_union_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1134 die_sou_create(dw, die, off, tdp, UNION, "union");
1138 die_class_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1140 die_sou_create(dw, die, off, tdp, CLASS, "class");
1263 die_funcptr_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1271 debug(3, "die %ju <0x%jx>: creating function pointer\n",
1278 for (arg = die_child(dw, die); arg != NULL;
1287 if (die_isdecl(dw, die)) {
1301 if ((attr = die_attr(dw, die, DW_AT_type, 0)) != NULL) {
1302 fn->fn_ret = die_lookup_pass1(dw, die, DW_AT_type);
1310 for (fn->fn_nargs = 0, arg = die_child(dw, die); arg != NULL;
1320 debug(3, "die %ju: adding %d argument%s\n", (uintmax_t)off,
1324 for (i = 0, arg = die_child(dw, die);
1473 terminate("die %ju: unrecognized real type size %ju\n",
1528 terminate("die %ju: unknown base type encoding 0x%jx\n",
1542 debug(3, "die %ju: creating base type\n", (uintmax_t)off);
1556 terminate("die %ju: base type without name\n", (uintmax_t)off);
1561 debug(3, "die %ju: name \"%s\" remapped to \"%s\"\n",
1571 debug(3, "die %ju: using dwarf data for base \"%s\"\n",
1587 die_through_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp,
1592 debug(3, "die %ju <0x%jx>: creating %s type %d\n", (uintmax_t)off,
1597 if ((attr = die_attr(dw, die, DW_AT_type, 0)) != NULL) {
1598 tdp->t_tdesc = die_lookup_pass1(dw, die, DW_AT_type);
1619 die_typedef_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1621 die_through_create(dw, die, off, tdp, TYPEDEF, "typedef");
1625 die_const_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1627 die_through_create(dw, die, off, tdp, CONST, "const");
1631 die_pointer_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1633 die_through_create(dw, die, off, tdp, POINTER, "pointer");
1637 die_reference_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1639 die_through_create(dw, die, off, tdp, REFERENCE, "reference");
1643 die_restrict_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1645 die_through_create(dw, die, off, tdp, RESTRICT, "restrict");
1649 die_volatile_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1651 die_through_create(dw, die, off, tdp, VOLATILE, "volatile");
1656 die_function_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp __unused)
1663 debug(3, "die %ju <0x%jx>: creating function definition\n",
1670 for (arg = die_child(dw, die); arg != NULL;
1679 if (die_isdecl(dw, die) || (name = die_name(dw, die)) == NULL) {
1688 ii->ii_type = die_isglobal(dw, die) ? II_GFUN : II_SFUN;
1693 debug(3, "die %ju: function %s is %s\n", (uintmax_t)off, ii->ii_name,
1696 if (die_attr(dw, die, DW_AT_type, 0) != NULL)
1697 ii->ii_dtype = die_lookup_pass1(dw, die, DW_AT_type);
1701 for (arg = die_child(dw, die); arg != NULL;
1705 debug(3, "die %ju: looking at sub member at %ju\n",
1706 (uintmax_t)off, (uintmax_t)die_off(dw, die));
1712 terminate("die %ju: func arg %d has no name\n",
1728 debug(3, "die %ju: function has %d argument%s\n",
1733 for (arg = die_child(dw, die), i = 0;
1749 die_variable_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp __unused)
1754 debug(3, "die %ju: creating object definition\n", (uintmax_t)off);
1756 if (die_isdecl(dw, die) || (name = die_name(dw, die)) == NULL)
1760 ii->ii_type = die_isglobal(dw, die) ? II_GVAR : II_SVAR;
1762 ii->ii_dtype = die_lookup_pass1(dw, die, DW_AT_type);
1789 die_lexblk_descend(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off __unused, tdesc_t *tdp __unused)
1791 Dwarf_Die child = die_child(dw, die);
1798 * Used to map the die to a routine which can parse it, using the tag to do the
1846 die_create_one(dwarf_t *dw, Dwarf_Die die)
1848 Dwarf_Off off = die_off(dw, die);
1853 debug(3, "die %ju <0x%jx>: create_one\n", (uintmax_t)off,
1857 terminate("illegal die offset %ju (max %ju)\n", (uintmax_t)off,
1861 tag = die_tag(dw, die);
1864 debug(2, "die %ju: ignoring tag type %x\n", (uintmax_t)off,
1877 tdp->t_name = die_name(dw, die);
1879 dc->dc_create(dw, die, off, tdp);
1883 die_create(dwarf_t *dw, Dwarf_Die die)
1886 die_create_one(dw, die);
1887 } while ((die = die_sibling(dw, die)) != NULL);