From: Julian Seward Date: Fri, 8 Oct 2010 23:57:25 +0000 (+0000) Subject: Dwarf3 reader: handle Dwarf3 created by gcc-4.5.1. In other words, X-Git-Tag: svn/VALGRIND_3_6_0~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18503c8e64ee2d1ea7edc3b5a01dc9c764da859e;p=thirdparty%2Fvalgrind.git Dwarf3 reader: handle Dwarf3 created by gcc-4.5.1. In other words, work around the all-new-buggy-Dwarf3 created by gcc-4.5.1. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11418 --- diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c index 37c7f42d7c..c358a1bbe9 100644 --- a/coregrind/m_debuginfo/readdwarf3.c +++ b/coregrind/m_debuginfo/readdwarf3.c @@ -3759,8 +3759,11 @@ void new_dwarf3_reader_wrk ( key.dioff = varp->absOri; /* this is what we want to find */ found = VG_(lookupXA)( dioff_lookup_tab, &keyp, &ixFirst, &ixLast ); - if (!found) - barf("DW_AT_abstract_origin can't be resolved"); + if (!found) { + /* barf("DW_AT_abstract_origin can't be resolved"); */ + TRACE_D3(" SKIP (DW_AT_abstract_origin can't be resolved)\n\n"); + continue; + } /* If the following fails, there is more than one entry with the same dioff. Which can't happen. */ vg_assert(ixFirst == ixLast); diff --git a/coregrind/m_debuginfo/tytypes.c b/coregrind/m_debuginfo/tytypes.c index 10cc47364a..c16813bbf5 100644 --- a/coregrind/m_debuginfo/tytypes.c +++ b/coregrind/m_debuginfo/tytypes.c @@ -692,6 +692,8 @@ MaybeULong ML_(sizeOfType)( XArray* /* of TyEnt */ tyents, - bo->Te.Bound.boundL + 1) )); } return eszB; + case Te_TyVoid: + return mk_MaybeULong_Nothing(); /*UNKNOWN*/ default: VG_(printf)("ML_(sizeOfType): unhandled: "); ML_(pp_TyEnt)(ent);