]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Add DW_OP_GNU_parameter_ref to dwarf.h and handle it in readelf.
authorMark Wielaard <mjw@redhat.com>
Thu, 19 Jul 2012 22:09:56 +0000 (00:09 +0200)
committerMark Wielaard <mjw@redhat.com>
Thu, 26 Jul 2012 08:21:39 +0000 (10:21 +0200)
DW_OP_GNU_parameter_ref takes as operand a 4 byte CU relative reference
to the abstract optimized away DW_TAG_formal_parameter.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
libdw/ChangeLog
libdw/dwarf.h
src/ChangeLog
src/readelf.c

index ce45d15542f7062454a13985fffb45fecc2ec27a..2bafdc22dbf3e47e28e0443ef4b54e854da43d1e 100644 (file)
@@ -1,3 +1,7 @@
+2012-07-19  Mark Wielaard  <mjw@redhat.com>
+
+       * dwarf.h: Add DW_OP_GNU_parameter_ref.
+
 2012-07-24  Mark Wielaard  <mjw@redhat.com>
 
        * dwarf.h: Correct spelling of DW_LANG_ObjC.
index d6ec131879e78e14005f9abd82afcd8c37fc644d..f41d296021a5c3723350f80cf5ef1163686c71a6 100644 (file)
@@ -472,6 +472,7 @@ enum
     DW_OP_GNU_deref_type = 0xf6,
     DW_OP_GNU_convert = 0xf7,
     DW_OP_GNU_reinterpret = 0xf9,
+    DW_OP_GNU_parameter_ref = 0xfa,
 
     DW_OP_lo_user = 0xe0,      /* Implementation-defined range start.  */
     DW_OP_hi_user = 0xff       /* Implementation-defined range end.  */
index 2b657f8338ac0d4226501e9eb4465a71dfc12912..78b9a0b679be1529f9dcb6e6dad9ca4d512d2cf5 100644 (file)
@@ -1,3 +1,7 @@
+2012-07-19  Mark Wielaard  <mjw@redhat.com>
+
+       * readelf.c (print_ops): Handle DW_OP_GNU_parameter_ref.
+
 2012-07-11  Mark Wielaard  <mjw@redhat.com>
 
        * readelf.c (options): Add macro to help of debug-dump.
index ab76a1fa7db231924fcc7ef3c358f1dc1f881c3d..93f56c3b6c72b03856774e2a7d34d5b462e5ee6d 100644 (file)
@@ -4403,6 +4403,18 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
          offset += 1 + (data - start);
          break;
 
+       case DW_OP_GNU_parameter_ref:
+         /* 4 byte CU relative reference to the abstract optimized away
+            DW_TAG_formal_parameter.  */
+         NEED (4);
+         printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n",
+                 indent, "", (uintmax_t) offset, op_name,
+                 (uintmax_t) read_4ubyte_unaligned (dbg, data));
+         CONSUME (4);
+         data += 4;
+         offset += 5;
+         break;
+
        default:
          /* No Operand.  */
          if (op < sizeof known / sizeof known[0] && known[op] != NULL)