+2017-11-03 Mark Wielaard <mark@klomp.org>
+
+ * dwarf.h: Add DW_OP_GNU_variable_value.
+
2017-10-03 Mark Wielaard <mark@klomp.org>
* libdw.h: Define LIBDW_CIE_ID and use it in dwarf_cfi_cie_p.
DW_OP_GNU_convert = 0xf7,
DW_OP_GNU_reinterpret = 0xf9,
DW_OP_GNU_parameter_ref = 0xfa,
+ DW_OP_GNU_variable_value = 0xfd,
DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */
DW_OP_hi_user = 0xff /* Implementation-defined range end. */
+2017-11-03 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (print_ops): Handle DW_OP_GNU_variable_value. Print
+ referenced DIE as offset.
+
2017-09-10 Mark Wielaard <mark@klomp.org>
* ar.c (do_oper_delete): Remove DEBUG conditional check.
break;
case DW_OP_call_ref:
+ case DW_OP_GNU_variable_value:
/* Offset operand. */
if (ref_size != 4 && ref_size != 8)
goto invalid; /* Cannot be used in CFA. */
addr = read_8ubyte_unaligned (dbg, data);
data += ref_size;
CONSUME (ref_size);
-
- printf ("%*s[%4" PRIuMAX "] %s %#" PRIxMAX "\n",
+ /* addr is a DIE offset, so format it as one. */
+ printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n",
indent, "", (uintmax_t) offset,
op_name, (uintmax_t) addr);
offset += 1 + ref_size;