]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
readelf: Print DIE offset in attribute reading error messages.
authorMark Wielaard <mark@klomp.org>
Tue, 3 Oct 2017 14:55:25 +0000 (16:55 +0200)
committerMark Wielaard <mark@klomp.org>
Thu, 16 Nov 2017 14:27:47 +0000 (15:27 +0100)
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
src/readelf.c

index 3b886a7bb34f67b2888f5caf5db39a5d8e5def16..d112cd2e5543813695f6019e4f7583272124ca3b 100644 (file)
@@ -1,3 +1,7 @@
+2017-10-03  Mark Wielaard  <mark@klomp.org>
+
+       * readelf.c (attr_callback): Print DIE offset in error messages.
+
 2017-11-03  Mark Wielaard  <mark@klomp.org>
 
        * readelf.c (print_ops): Handle DW_OP_GNU_variable_value. Print
index 833884b532ab03bacd605bae59fadf1efb014ab8..e364583c8c580185e17d24e173599be0dbb72170 100644 (file)
@@ -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,