Lines Matching defs:die

34  * On the first pass, we iterate through every die, creating new type nodes as
37 * corresponding to a given die can be completely filled out (sizes and offsets
268 die_off(dwarf_t *dw, Dwarf_Die die)
272 if (dwarf_dieoffset(die, &off, &dw->dw_err) == DW_DLV_OK)
275 terminate("failed to get offset for die: %s\n",
282 die_sibling(dwarf_t *dw, Dwarf_Die die)
287 if ((rc = dwarf_siblingof(dw->dw_dw, die, &sib, &dw->dw_err)) ==
293 terminate("die %llu: failed to find type sibling: %s\n",
294 die_off(dw, die), dwarf_errmsg(dw->dw_err));
300 die_child(dwarf_t *dw, Dwarf_Die die)
305 if ((rc = dwarf_child(die, &child, &dw->dw_err)) == DW_DLV_OK)
310 terminate("die %llu: failed to find type child: %s\n",
311 die_off(dw, die), dwarf_errmsg(dw->dw_err));
317 die_tag(dwarf_t *dw, Dwarf_Die die)
321 if (dwarf_tag(die, &tag, &dw->dw_err) == DW_DLV_OK)
324 terminate("die %llu: failed to get tag for type: %s\n",
325 die_off(dw, die), dwarf_errmsg(dw->dw_err));
331 die_attr(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, int req)
336 if ((rc = dwarf_attr(die, name, &attr, &dw->dw_err)) == DW_DLV_OK) {
340 terminate("die %llu: no attr 0x%x\n", die_off(dw, die),
347 terminate("die %llu: failed to get attribute for type: %s\n",
348 die_off(dw, die), dwarf_errmsg(dw->dw_err));
379 * die - the DIE we're interested in
399 die_signed(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Signed *valp,
405 if ((attr = die_attr(dw, die, name, req)) == NULL)
412 terminate("die %llu: failed to get signed (form 0x%x)\n",
413 die_off(dw, die), die_attr_form(dw, attr));
423 die_unsigned(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Unsigned *valp,
429 if ((attr = die_attr(dw, die, name, req)) == NULL)
436 terminate("die %llu: failed to get unsigned (form 0x%x)\n",
437 die_off(dw, die), die_attr_form(dw, attr));
447 die_bool(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, Dwarf_Bool *valp, int req)
452 if ((attr = die_attr(dw, die, name, req)) == NULL)
459 terminate("die %llu: failed to get bool (form 0x%x)\n",
460 die_off(dw, die), die_attr_form(dw, attr));
470 die_string(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name, char **strp, int req)
475 if ((attr = die_attr(dw, die, name, req)) == NULL)
482 terminate("die %llu: failed to get string (form 0x%x)\n",
483 die_off(dw, die), die_attr_form(dw, attr));
493 die_attr_ref(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name)
498 attr = die_attr(dw, die, name, DW_ATTR_REQ);
501 terminate("die %llu: failed to get ref (form 0x%x)\n",
502 die_off(dw, die), die_attr_form(dw, attr));
511 die_name(dwarf_t *dw, Dwarf_Die die)
515 (void) die_string(dw, die, DW_AT_name, &str, 0);
521 die_isdecl(dwarf_t *dw, Dwarf_Die die)
525 return (die_bool(dw, die, DW_AT_declaration, &val, 0) && val);
529 die_isglobal(dwarf_t *dw, Dwarf_Die die)
538 if (die_signed(dw, die, DW_AT_visibility, &vis, 0))
541 return (die_bool(dw, die, DW_AT_external, &ext, 0) && ext);
557 die_lookup_pass1(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name)
559 Dwarf_Off ref = die_attr_ref(dw, die, name);
569 die_mem_offset(dwarf_t *dw, Dwarf_Die die, Dwarf_Half name,
576 if ((attr = die_attr(dw, die, name, req)) == NULL)
580 terminate("die %llu: failed to get mem offset location list\n",
581 die_off(dw, die));
587 terminate("die %llu: cannot parse member offset\n",
588 die_off(dw, die));
626 * will be represented by a pointer die without a DW_AT_type. CTF requires
697 debug(3, "die %llu: creating new type %u for sub-dimension\n",
701 terminate("die %llu: unexpected non-subrange node in array\n",
751 debug(3, "die %llu: creating array\n", off);
755 terminate("die %llu: failed to retrieve array bounds\n", off);
782 debug(3, "die %llu: array nelems %u size %u\n", off,
838 die_enum_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
844 debug(3, "die %llu: creating enum\n", off);
848 (void) die_unsigned(dw, die, DW_AT_byte_size, &uval, DW_ATTR_REQ);
851 if ((mem = die_child(dw, die)) != NULL) {
872 terminate("die %llu: enum %llu: member without "
876 debug(3, "die %llu: enum %llu: created %s = %d\n", off,
969 debug(3, "die %llu: creating %s %s\n", off,
1002 debug(3, "die %llu: mem %llu: creating member\n", off, memoff);
1020 debug(3, "die %llu: got mloff %llx\n", off,
1039 debug(3, "die %llu: mem %llu: created \"%s\" (off %u sz %u)\n",
1072 debug(3, "die %llu: worked around %s %s\n", off, typename, old);
1092 die_struct_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1094 die_sou_create(dw, die, off, tdp, STRUCT, "struct");
1098 die_union_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1100 die_sou_create(dw, die, off, tdp, UNION, "union");
1185 die_funcptr_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1193 debug(3, "die %llu: creating function pointer\n", off);
1199 for (arg = die_child(dw, die); arg != NULL;
1208 if (die_isdecl(dw, die)) {
1222 if ((attr = die_attr(dw, die, DW_AT_type, 0)) != NULL) {
1224 fn->fn_ret = die_lookup_pass1(dw, die, DW_AT_type);
1232 for (fn->fn_nargs = 0, arg = die_child(dw, die); arg != NULL;
1242 debug(3, "die %llu: adding %d argument%s\n", off, fn->fn_nargs,
1246 for (i = 0, arg = die_child(dw, die);
1379 terminate("die %llu: unrecognized real type size %u\n", off, sz);
1425 terminate("die %llu: unknown base type encoding 0x%llx\n",
1439 debug(3, "die %llu: creating base type\n", off);
1453 terminate("die %llu: base type without name\n", off);
1458 debug(3, "die %llu: name \"%s\" remapped to \"%s\"\n", off,
1468 debug(3, "die %llu: using dwarf data for base \"%s\"\n", off,
1484 die_through_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp,
1489 debug(3, "die %llu: creating %s\n", off, typename);
1493 if ((attr = die_attr(dw, die, DW_AT_type, 0)) != NULL) {
1495 tdp->t_tdesc = die_lookup_pass1(dw, die, DW_AT_type);
1516 die_typedef_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1518 die_through_create(dw, die, off, tdp, TYPEDEF, "typedef");
1522 die_const_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1524 die_through_create(dw, die, off, tdp, CONST, "const");
1528 die_pointer_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1530 die_through_create(dw, die, off, tdp, POINTER, "pointer");
1534 die_restrict_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1536 die_through_create(dw, die, off, tdp, RESTRICT, "restrict");
1540 die_volatile_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1542 die_through_create(dw, die, off, tdp, VOLATILE, "volatile");
1547 die_function_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1554 debug(3, "die %llu: creating function definition\n", off);
1560 for (arg = die_child(dw, die); arg != NULL;
1569 if (die_isdecl(dw, die) || (name = die_name(dw, die)) == NULL) {
1578 ii->ii_type = die_isglobal(dw, die) ? II_GFUN : II_SFUN;
1583 debug(3, "die %llu: function %s is %s\n", off, ii->ii_name,
1586 if (die_attr(dw, die, DW_AT_type, 0) != NULL)
1587 ii->ii_dtype = die_lookup_pass1(dw, die, DW_AT_type);
1591 for (arg = die_child(dw, die); arg != NULL;
1595 debug(3, "die %llu: looking at sub member at %llu\n",
1596 off, die_off(dw, die));
1602 terminate("die %llu: func arg %d has no name\n",
1618 debug(3, "die %llu: function has %d argument%s\n", off,
1623 for (arg = die_child(dw, die), i = 0;
1639 die_variable_create(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1644 debug(3, "die %llu: creating object definition\n", off);
1646 if (die_isdecl(dw, die) || (name = die_name(dw, die)) == NULL)
1650 ii->ii_type = die_isglobal(dw, die) ? II_GVAR : II_SVAR;
1652 ii->ii_dtype = die_lookup_pass1(dw, die, DW_AT_type);
1679 die_lexblk_descend(dwarf_t *dw, Dwarf_Die die, Dwarf_Off off, tdesc_t *tdp)
1681 Dwarf_Die child = die_child(dw, die);
1688 * Used to map the die to a routine which can parse it, using the tag to do the
1734 die_create_one(dwarf_t *dw, Dwarf_Die die)
1736 Dwarf_Off off = die_off(dw, die);
1741 debug(3, "die %llu: create_one\n", off);
1744 terminate("illegal die offset %llu (max %llu)\n", off,
1748 tag = die_tag(dw, die);
1751 debug(2, "die %llu: ignoring tag type %x\n", off, tag);
1763 tdp->t_name = die_name(dw, die);
1765 dc->dc_create(dw, die, off, tdp);
1769 die_create(dwarf_t *dw, Dwarf_Die die)
1772 die_create_one(dw, die);
1773 } while ((die = die_sibling(dw, die)) != NULL);