From: Mark Wielaard Date: Tue, 3 Oct 2017 14:55:25 +0000 (+0200) Subject: readelf: Print DIE offset in attribute reading error messages. X-Git-Tag: elfutils-0.171~106 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d36d125fac8999506b8b2137d6b04c0354954ac;p=thirdparty%2Felfutils.git readelf: Print DIE offset in attribute reading error messages. When processing large files it is useful to know the DIE offset if printing of attributes fails (especially when redirecting the output). With this change the error message looks like: eu-readelf: DIE [2aeb8ef1] cannot get attribute value: invalid DWARF Signed-off-by: Mark Wielaard --- diff --git a/src/ChangeLog b/src/ChangeLog index 3b886a7bb..d112cd2e5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2017-10-03 Mark Wielaard + + * readelf.c (attr_callback): Print DIE offset in error messages. + 2017-11-03 Mark Wielaard * readelf.c (print_ops): Handle DW_OP_GNU_variable_value. Print diff --git a/src/readelf.c b/src/readelf.c index 833884b53..e364583c8 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -5935,13 +5935,15 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) { struct attrcb_args *cbargs = (struct attrcb_args *) arg; const int level = cbargs->level; + Dwarf_Die *die = cbargs->die; unsigned int attr = dwarf_whatattr (attrp); if (unlikely (attr == 0)) { if (!cbargs->silent) - error (0, 0, gettext ("cannot get attribute code: %s"), - dwarf_errmsg (-1)); + error (0, 0, gettext ("DIE [%" PRIx64 "] " + "cannot get attribute code: %s"), + dwarf_dieoffset (die), dwarf_errmsg (-1)); return DWARF_CB_ABORT; } @@ -5949,8 +5951,9 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) if (unlikely (form == 0)) { if (!cbargs->silent) - error (0, 0, gettext ("cannot get attribute form: %s"), - dwarf_errmsg (-1)); + error (0, 0, gettext ("DIE [%" PRIx64 "] " + "cannot get attribute form: %s"), + dwarf_dieoffset (die), dwarf_errmsg (-1)); return DWARF_CB_ABORT; } @@ -5964,8 +5967,9 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) { attrval_out: if (!cbargs->silent) - error (0, 0, gettext ("cannot get attribute value: %s"), - dwarf_errmsg (-1)); + error (0, 0, gettext ("DIE [%" PRIx64 "] " + "cannot get attribute value: %s"), + dwarf_dieoffset (die), dwarf_errmsg (-1)); return DWARF_CB_ABORT; } char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize,