This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
[PATCH] readelf: Print DIE offset in attribute reading error messages.
- From: Mark Wielaard <mark at klomp dot org>
- To: elfutils-devel at sourceware dot org
- Cc: Tom Tromey <tom at tromey dot com>, Mark Wielaard <mark at klomp dot org>
- Date: Tue, 3 Oct 2017 16:59:17 +0200
- Subject: [PATCH] readelf: Print DIE offset in attribute reading error messages.
- Authentication-results: sourceware.org; auth=none
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 <mark@klomp.org>
---
src/ChangeLog | 4 ++++
src/readelf.c | 16 ++++++++++------
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/ChangeLog b/src/ChangeLog
index 0d3bfc1..ba7d46d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2017-10-03 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (attr_callback): Print DIE offset in error messages.
+
2017-09-10 Mark Wielaard <mark@klomp.org>
* ar.c (do_oper_delete): Remove DEBUG conditional check.
diff --git a/src/readelf.c b/src/readelf.c
index 5e2f3fc..16d2033 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -5934,13 +5934,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;
}
@@ -5948,8 +5950,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;
}
@@ -5963,8 +5966,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,
--
1.8.3.1