summaryrefslogtreecommitdiffstats
path: root/libdw/dwarf_getlocation.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2010-05-08 04:01:14 -0700
committerRoland McGrath <roland@redhat.com>2010-08-30 04:10:41 -0700
commit932585d2385c9d4e5686e4ddc9ba30c68172d7f3 (patch)
treed9a9bd294301b8d01c7a994b9560cb68121dcd3f /libdw/dwarf_getlocation.c
parenta159915a87d83951acb9e504b9cefc08ba98b8bd (diff)
Handle DW_OP_GNU_implicit_pointer.
Diffstat (limited to 'libdw/dwarf_getlocation.c')
-rw-r--r--libdw/dwarf_getlocation.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
index e960ef9e..f7a60f9f 100644
--- a/libdw/dwarf_getlocation.c
+++ b/libdw/dwarf_getlocation.c
@@ -420,6 +420,15 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order,
data += newloc->number; /* Skip the block. */
break;
+ case DW_OP_GNU_implicit_pointer:
+ /* DW_FORM_ref_addr, depends on offset size of CU. */
+ if (__libdw_read_offset_inc (dbg, sec_index, &data, ref_size,
+ &newloc->number, IDX_debug_info, 0))
+ return -1;
+ /* XXX Check size. */
+ get_uleb128 (newloc->number2, data); /* Byte offset. */
+ break;
+
default:
goto invalid;
}