Now an error getting the attribute value will not only print the DIE offset
and the reason, but also the attribute name and form. e.g.
DIE [b] cannot get attribute 'ranges' (sec_offset) value: .debug_ranges
section missing
Also we don't abort, but try to print the other attributes of the DIE
anyway. It might just be one attribute whose value cannot be resolved.
Signed-off-by: Mark Wielaard <mark@klomp.org>
+2017-11-21 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (attr_callback): Print attribute name and form in error
+ message. If only the value cannot be retrieved/resolved don't abort.
+
2017-10-03 Mark Wielaard <mark@klomp.org>
* readelf.c (attr_callback): Print DIE offset in error messages.
attrval_out:
if (!cbargs->silent)
error (0, 0, gettext ("DIE [%" PRIx64 "] "
- "cannot get attribute value: %s"),
- dwarf_dieoffset (die), dwarf_errmsg (-1));
- return DWARF_CB_ABORT;
+ "cannot get attribute '%s' (%s) value: "
+ "%s"),
+ dwarf_dieoffset (die),
+ dwarf_attr_name (attr),
+ dwarf_form_name (form),
+ dwarf_errmsg (-1));
+ /* Don't ABORT, it might be other attributes can be resolved. */
+ return DWARF_CB_OK;
}
char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize,
addr, addr);