From: Julian Seward Date: Sun, 23 Nov 2014 12:23:46 +0000 (+0000) Subject: Merge, from trunk, 14603,14610 X-Git-Tag: svn/VALGRIND_3_10_1~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfe4b9247c3d0e8dc52c427b3cdbcd4d69423680;p=thirdparty%2Fvalgrind.git Merge, from trunk, 14603,14610 339721 assertion 'check_sibling == sibling' failed in readdwarf3.c ... 14603,14610 git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_10_BRANCH@14750 --- diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c index cf1d7239ed..26b5df9989 100644 --- a/coregrind/m_debuginfo/readdwarf3.c +++ b/coregrind/m_debuginfo/readdwarf3.c @@ -1373,11 +1373,29 @@ void get_Form_contents ( /*OUT*/FormContents* cts, TRACE_D3("%x ", (UInt)u8); work >>= 8; } - /* Due to the way that the hash table is constructed, the - resulting DIE offset here is already "cooked". See - cook_die_using_form. */ - cts->u.val = lookup_signatured_type (cc->signature_types, signature, - c->barf); + + /* cc->signature_types is only built/initialised when + VG_(clo_read_var_info) is set. In this case, + the DW_FORM_ref_sig8 can be looked up. + But we can also arrive here when only reading inline info + and VG_(clo_trace_symtab) is set. In such a case, + we cannot lookup the DW_FORM_ref_sig8, we rather assign + a dummy value. This is a kludge, but otherwise, + the 'dwarf inline info reader' tracing would have to + do type processing/reading. It is better to avoid + adding significant 'real' processing only due to tracing. */ + if (VG_(clo_read_var_info)) { + /* Due to the way that the hash table is constructed, the + resulting DIE offset here is already "cooked". See + cook_die_using_form. */ + cts->u.val = lookup_signatured_type (cc->signature_types, signature, + c->barf); + } else { + vg_assert (td3); + vg_assert (VG_(clo_read_inline_info)); + TRACE_D3(""); + cts->u.val = 0; /* Assign a dummy/rubbish value */ + } cts->szB = sizeof(UWord); break; } @@ -1500,7 +1518,7 @@ UInt get_Form_szB (CUConst* cc, DW_FORM form ) case DW_FORM_block: return VARSZ_FORM; case DW_FORM_ref_sig8: - return 8 + 8; + return 8; case DW_FORM_indirect: return VARSZ_FORM; case DW_FORM_GNU_ref_alt: