]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Fetch local hash from pending or finalized entry die. Use it in attr_value.
authorMark Wielaard <mjw@redhat.com>
Wed, 16 Feb 2011 17:42:29 +0000 (18:42 +0100)
committerMark Wielaard <mjw@redhat.com>
Wed, 16 Mar 2011 14:05:27 +0000 (15:05 +0100)
libdw/c++/dwarf_output

index 401aec6725df4d7dee2214243606b2c9299c6239..f121be0f31b58d440f7923203d483807c884af4b 100644 (file)
@@ -185,9 +185,7 @@ namespace elfutils
        {
          // Precompute our hash value based on our contents.
          for (iterator i = begin (); i != end (); ++i)
-           // XXX booo - still aren't handling circularity right...
-           if (i->second.what_space () != dwarf::VS_reference)
-             subr::hash_combine (_m_hash, *i);
+           subr::hash_combine (_m_hash, *i);
        }
 
        inline const _base &base () const
@@ -1402,8 +1400,18 @@ namespace elfutils
             it != _m_children.end ();
             ++it)
          {
+           // child lhash is always in the die_info, which might
+           // be in the pending_entry when not yet finalized, or
+           // part of the finalized child die_info.
            size_t child_lhash;
-           child_lhash = (*it)->_m_pending->_m_info->_m_local_hash;
+           struct pending_entry *pending = (*it)->_m_pending;
+           if (pending)
+             child_lhash = pending->_m_info->_m_local_hash;
+           else
+             {
+               die_info_pair *final_child = get_final_child (*it);
+               child_lhash = final_child->second._m_local_hash;
+             }
            subr::hash_combine (children_hash, child_lhash);
          }
        subr::hash_combine (lhash, children_hash);