summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2011-03-17 12:46:06 +0100
committerMark Wielaard <[email protected]>2011-03-17 13:22:34 +0100
commitf793650c0cd602569ce59e16cc3d747c262993b2 (patch)
tree5eb0e366db6a303e66c28a3e0c2bd4f9b91f4de1
parentdc69d5d8136f4615aa238d2f0eb355e7e48710c2 (diff)
Workaround all self referential ref values, not just DW_AT_containing_type.
-rw-r--r--libdw/c++/dwarf_output9
1 files changed, 5 insertions, 4 deletions
diff --git a/libdw/c++/dwarf_output b/libdw/c++/dwarf_output
index aeb192c4..aab1598b 100644
--- a/libdw/c++/dwarf_output
+++ b/libdw/c++/dwarf_output
@@ -1402,10 +1402,11 @@ namespace elfutils
= dynamic_cast<const entry *> (it->second._m_value);
if (ref != NULL)
{
- // Workaround weird case (bug?)
- // https://fedorahosted.org/pipermail/elfutils-devel/2011-February/001792.html
- if (it->first == DW_AT_containing_type
- && ref->_m_pending == this)
+ // Workaround weird cases of self-referential DIE.
+ // This really is a bug in the producer and dwarflint
+ // should warn about it. But it is easy to work around
+ // so just do it for now, by ignoring such values.
+ if (ref->_m_pending == this)
continue;
else
attr_rhashes ^= ref->get_reference_hash (stack);