From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 6B6BA395C824 for ; Thu, 28 May 2020 13:02:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6B6BA395C824 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 0B1E1AA35; Thu, 28 May 2020 13:02:08 +0000 (UTC) Subject: Re: [PATCH][gdb/symtab] Make gold index workaround more precise To: Tom Tromey Cc: gdb-patches@sourceware.org References: <20200513094147.GA20499@delia> <87tv0b64yd.fsf@tromey.com> <89719b8a-9252-7af5-3ad8-1bcd1ebbc80c@suse.de> <87zh9z1zkr.fsf@tromey.com> <9219cd5c-f957-7879-c98b-5940c42704c0@suse.de> <87k10xpflh.fsf@tromey.com> From: Tom de Vries Autocrypt: addr=tdevries@suse.de; keydata= xsBNBF0ltCcBCADDhsUnMMdEXiHFfqJdXeRvgqSEUxLCy/pHek88ALuFnPTICTwkf4g7uSR7 HvOFUoUyu8oP5mNb4VZHy3Xy8KRZGaQuaOHNhZAT1xaVo6kxjswUi3vYgGJhFMiLuIHdApoc u5f7UbV+egYVxmkvVLSqsVD4pUgHeSoAcIlm3blZ1sDKviJCwaHxDQkVmSsGXImaAU+ViJ5l CwkvyiiIifWD2SoOuFexZyZ7RUddLosgsO0npVUYbl6dEMq2a5ijGF6/rBs1m3nAoIgpXk6P TCKlSWVW6OCneTaKM5C387972qREtiArTakRQIpvDJuiR2soGfdeJ6igGA1FZjU+IsM5ABEB AAHNH1RvbSBkZSBWcmllcyA8dGRldnJpZXNAc3VzZS5kZT7CwKsEEwEIAD4WIQSsnSe5hKbL MK1mGmjuhV2rbOJEoAUCXSW0JwIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAh CRDuhV2rbOJEoBYhBKydJ7mEpsswrWYaaO6FXats4kSgc48H/Ra2lq5p3dHsrlQLqM7N68Fo eRDf3PMevXyMlrCYDGLVncQwMw3O/AkousktXKQ42DPJh65zoXB22yUt8m0g12xkLax98KFJ 5NyUloa6HflLl+wQL/uZjIdNUQaHQLw3HKwRMVi4l0/Jh/TygYG1Dtm8I4o708JS4y8GQxoQ UL0z1OM9hyM3gI2WVTTyprsBHy2EjMOu/2Xpod95pF8f90zBLajy6qXEnxlcsqreMaqmkzKn 3KTZpWRxNAS/IH3FbGQ+3RpWkNGSJpwfEMVCeyK5a1n7yt1podd1ajY5mA1jcaUmGppqx827 8TqyteNe1B/pbiUt2L/WhnTgW1NC1QDOwE0EXSW0JwEIAM99H34Bu4MKM7HDJVt864MXbx7B 1M93wVlpJ7Uq+XDFD0A0hIal028j+h6jA6bhzWto4RUfDl/9mn1StngNVFovvwtfzbamp6+W pKHZm9X5YvlIwCx131kTxCNDcF+/adRW4n8CU3pZWYmNVqhMUiPLxElA6QhXTtVBh1RkjCZQ Kmbd1szvcOfaD8s+tJABJzNZsmO2hVuFwkDrRN8Jgrh92a+yHQPd9+RybW2l7sJv26nkUH5Z 5s84P6894ebgimcprJdAkjJTgprl1nhgvptU5M9Uv85Pferoh2groQEAtRPlCGrZ2/2qVNe9 XJfSYbiyedvApWcJs5DOByTaKkcAEQEAAcLAkwQYAQgAJhYhBKydJ7mEpsswrWYaaO6FXats 4kSgBQJdJbQnAhsMBQkDwmcAACEJEO6FXats4kSgFiEErJ0nuYSmyzCtZhpo7oVdq2ziRKD3 twf7BAQBZ8TqR812zKAD7biOnWIJ0McV72PFBxmLIHp24UVe0ZogtYMxSWKLg3csh0yLVwc7 H3vldzJ9AoK3Qxp0Q6K/rDOeUy3HMqewQGcqrsRRh0NXDIQk5CgSrZslPe47qIbe3O7ik/MC q31FNIAQJPmKXX25B115MMzkSKlv4udfx7KdyxHrTSkwWZArLQiEZj5KG4cCKhIoMygPTA3U yGaIvI/BGOtHZ7bEBVUCFDFfOWJ26IOCoPnSVUvKPEOH9dv+sNy7jyBsP5QxeTqwxC/1ZtNS DUCSFQjqA6bEGwM22dP8OUY6SC94x1G81A9/xbtm9LQxKm0EiDH8KBMLfQ== Message-ID: <4f159c12-a394-a8f1-5db8-caee6e9c5b46@suse.de> Date: Thu, 28 May 2020 15:02:05 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <87k10xpflh.fsf@tromey.com> Content-Type: multipart/mixed; boundary="------------158FC14B80E7444C113A7A5A" Content-Language: en-US X-Spam-Status: No, score=-16.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_STOCKGEN, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 May 2020 13:02:11 -0000 This is a multi-part message in MIME format. --------------158FC14B80E7444C113A7A5A Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 27-05-2020 17:22, Tom Tromey wrote: >>>>>> "Tom" == Tom de Vries writes: > > Tom> I tested this further in combination with the ada .gdb_index enabling, > Tom> and ran into failures in gdb.ada/bp_inlined_func.exp, which I managed to > Tom> fix by skipping the workaround when symbol_kind == function. > > Tom> At this point, I wonder, should we just enable this workaround for > Tom> symbol_kind == type? > > I think that would make sense. > I'll commit this patch then, once retesting has finished. Thanks, - Tom --------------158FC14B80E7444C113A7A5A Content-Type: text/x-patch; charset=UTF-8; name="0002-gdb-symtab-Make-gold-index-workaround-more-precise.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="0002-gdb-symtab-Make-gold-index-workaround-more-precise.patc"; filename*1="h" [gdb/symtab] Make gold index workaround more precise There's a PR gold/15646 - "gold-generated .gdb_index has duplicated symbols that gdb-generated index doesn't", that causes gold to generate duplicate symbols in the index. F.i., a namespace N1 declared in a header file can be listed for two CUs that include the header file: ... [759] N1: 2 [global type] 3 [global type] ... This causes a gdb performance problem: f.i. when attempting to set a breakpoint on a non-existing function N1::misspelled, the symtab for both CUs will be expanded. Gdb contains a workaround for this, added in commit 8943b87476 "Work around gold/15646", that skips duplicate global symbols in the index. However, the workaround does not check for the symbol kind ("type" in the example above). Make the workaround more precise by limiting it to symbol kind "type". Tested on x86_64-linux, with native and target board gold-gdb-index. gdb/ChangeLog: 2020-05-26 Tom de Vries * dwarf2/read.c (dw2_symtab_iter_next, dw2_expand_marked_cus): Limit PR gold/15646 workaround to symbol kind "type". --- gdb/dwarf2/read.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a62224c0be..25f05fb993 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -3522,10 +3522,14 @@ dw2_symtab_iter_next (struct dw2_symtab_iterator *iter) } /* Work around gold/15646. */ - if (!is_static && iter->global_seen) - continue; - if (!is_static) - iter->global_seen = 1; + if (!is_static + && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE) + { + if (iter->global_seen) + continue; + + iter->global_seen = 1; + } } /* Only check the symbol's kind if it has one. */ @@ -4627,12 +4631,14 @@ dw2_expand_marked_cus && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE); /* Work around gold/15646. */ - if (attrs_valid) + if (attrs_valid + && !is_static + && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE) { - if (!is_static && global_seen) + if (global_seen) continue; - if (!is_static) - global_seen = true; + + global_seen = true; } /* Only check the symbol's kind if it has one. */ --------------158FC14B80E7444C113A7A5A--