diff --git a/dwarf2.def b/dwarf2.def index e9a8bca..17311fa 100644 --- a/dwarf2.def +++ b/dwarf2.def @@ -588,6 +588,9 @@ DW_OP (DW_OP_GNU_reinterpret, 0xf9) DW_OP (DW_OP_GNU_parameter_ref, 0xfa) /* Extension for Fission. See http://gcc.gnu.org/wiki/DebugFission. */ DW_OP (DW_OP_GNU_addr_index, 0xfb) +/* The GNU variable value extension. + See http://dwarfstd.org/ShowIssue.php?issue=161109.2 . */ +DW_OP (DW_OP_GNU_variable_value, 0xfd) /* HP extensions. */ DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address. */ DW_OP (DW_OP_HP_is_value, 0xe1) diff --git a/dwz.c b/dwz.c index b3b779d..b387ebc 100644 --- a/dwz.c +++ b/dwz.c @@ -1522,6 +1522,7 @@ read_exprloc (DSO *dso, dw_die_ref die, unsigned char *ptr, size_t len, ptr += 4; break; case DW_OP_call_ref: + case DW_OP_GNU_variable_value: case DW_OP_GNU_implicit_pointer: cu = die_cu (die); addr = read_size (ptr, cu->cu_version == 2 ? ptr_size : 4); @@ -8576,6 +8577,7 @@ adjust_exprloc (dw_cu_ref cu, dw_die_ref die, dw_cu_ref refcu, ptr += 4; break; case DW_OP_call_ref: + case DW_OP_GNU_variable_value: case DW_OP_GNU_implicit_pointer: addr = read_size (ptr, refcu->cu_version == 2 ? ptr_size : 4); assert (cu->cu_version == refcu->cu_version);