diff --git a/dwarf_loader.c b/dwarf_loader.c index 44605a8..3b58ecb 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -242,9 +242,23 @@ static Dwarf_Off attr_offset(Dwarf_Die *die, const uint32_t name) Dwarf_Attribute attr; Dwarf_Block block; - if (dwarf_attr(die, name, &attr) != NULL && - dwarf_formblock(&attr, &block) == 0) - return dwarf_expr(block.data, block.length); + if (dwarf_attr(die, name, &attr) == NULL) + return 0; + + switch (dwarf_whatform(&attr)) { + case DW_FORM_data1: + case DW_FORM_data2: + case DW_FORM_sdata: + case DW_FORM_udata: { + Dwarf_Word value; + if (dwarf_formudata(&attr, &value) == 0) + return value; + break; + } + default: + if (dwarf_formblock(&attr, &block) == 0) + return dwarf_expr(block.data, block.length); + } return 0; }