summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <[email protected]>2009-07-15 11:14:23 -0700
committerRoland McGrath <[email protected]>2009-07-15 11:15:02 -0700
commit7dd9464d06c7826952be3c4fa7fc963dd563c025 (patch)
tree1c82f4acd565fc1e8a61289caf765e7499c56ce6
parent96d950e3e28d89469b62b46d5a014ad1260e6a1a (diff)
dwarf_getlocation.c: Grok DW_OP_form_tls_address, DW_OP_GNU_push_tls_address, and DW_OP_bit_piece.
-rw-r--r--libdw/ChangeLog5
-rw-r--r--libdw/dwarf_getlocation.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 52e78e96..6c45b9d9 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-15 Roland McGrath <[email protected]>
+
+ * dwarf_getlocation.c: Grok DW_OP_form_tls_address,
+ DW_OP_GNU_push_tls_address, and DW_OP_bit_piece.
+
2009-07-13 Roland McGrath <[email protected]>
* dwarf_getlocation.c: Grok DW_OP_call_frame_cfa.
diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
index 7f07e169..c7f7a890 100644
--- a/libdw/dwarf_getlocation.c
+++ b/libdw/dwarf_getlocation.c
@@ -244,6 +244,8 @@ __libdw_intern_expression (Dwarf *dbg,
case DW_OP_push_object_address:
case DW_OP_call_ref:
case DW_OP_call_frame_cfa:
+ case DW_OP_form_tls_address:
+ case DW_OP_GNU_push_tls_address:
/* No operand. */
break;
@@ -336,6 +338,12 @@ __libdw_intern_expression (Dwarf *dbg,
get_sleb128 (newloc->number2, data);
break;
+ case DW_OP_bit_piece:
+ /* XXX Check size. */
+ get_uleb128 (newloc->number, data);
+ get_uleb128 (newloc->number2, data);
+ break;
+
default:
goto invalid;
}