summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2009-07-24 15:49:51 -0700
committerUlrich Drepper <[email protected]>2009-07-24 15:49:51 -0700
commitdaf85b25f2a7fa9fde54f1104761209381959160 (patch)
treec5fbc7e889c00846dc6ebc1195e66f9102261828
parentfa1d4447b16f16ff9056a24163b175fcbc3a57cf (diff)
Handle DW_OP_implicit_value in readelf.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/readelf.c15
2 files changed, 20 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 69f9a655..84e4f548 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-20 Mark Wielaard <[email protected]>
+
+ * readelf.c (print_ops): Add handling of DW_OP_implicit_value
+ and DW_OP_stack_value.
+
2009-07-14 Ulrich Drepper <[email protected]>
* elflint.c (check_elf_header): Allow Linux ABI.
diff --git a/src/readelf.c b/src/readelf.c
index 2e8257fa..69d9aa52 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -3880,6 +3880,8 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
[DW_OP_form_tls_address] = "form_tls_address",
[DW_OP_call_frame_cfa] = "call_frame_cfa",
[DW_OP_bit_piece] = "bit_piece",
+ [DW_OP_implicit_value] = "implicit_value",
+ [DW_OP_stack_value] = "stack_value",
};
if (len == 0)
@@ -4092,6 +4094,19 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
offset += 3;
break;
+ case DW_OP_implicit_value:
+ start = data;
+ get_uleb128 (uleb, data); /* XXX check overrun */
+ printf ("%*s[%4" PRIuMAX "] %s %u (",
+ indent, "", (uintmax_t) offset, known[op], uleb);
+ NEED (uleb);
+ while (uleb-- > 0)
+ printf ("%02x ", *data++);
+ fputs (")\n", stdout);
+ len -= data - start;
+ offset += 1 + (data - start);
+ break;
+
default:
/* No Operand. */
if (op < sizeof known / sizeof known[0] && known[op] != NULL)