dwarf_getlocation.c: Grok DW_OP_form_tls_address, DW_OP_GNU_push_tls_address, and DW_OP_bit_piece.
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 52e78e9..6c45b9d 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-15 Roland McGrath <roland@redhat.com>
+
+ * 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 <roland@redhat.com>
* dwarf_getlocation.c: Grok DW_OP_call_frame_cfa.
diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
index 7f07e16..c7f7a89 100644
--- a/libdw/dwarf_getlocation.c
+++ b/libdw/dwarf_getlocation.c
@@ -244,6 +244,8 @@
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 @@
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;
}