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 DF19E385BF81 for ; Wed, 8 Apr 2020 11:03:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DF19E385BF81 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 4FE27AD9F; Wed, 8 Apr 2020 11:03:24 +0000 (UTC) Date: Wed, 8 Apr 2020 13:03:23 +0200 From: Tom de Vries To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH][gdb/symtab] Find filename in shared psymtab Message-ID: <20200408110321.GA10759@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-31.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_DMARC_STATUS, 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: Wed, 08 Apr 2020 11:03:27 -0000 Hi, When running test-case gdb.ada/dgopt.exp with target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects and gcc-8, gcc-9 or gcc-10, and the tentative fix for PR25700 ( https://sourceware.org/pipermail/gdb-patches/2020-April/167451.html ), we run into this regression: ... (gdb) list x.adb:16, 16^M No source file named x.adb.^M (gdb) FAIL: gdb.ada/dgopt.exp: list x.adb:16, 16 ... The reason for the failure is that without the tentative fix for PR25700, we have an unshared psymtab: ... { psymtab gdb.ada/dgopt/x.adb ((struct partial_symtab *) $hex)^M readin no^M fullname (null)^M text addresses 0x0 -- 0x0^M psymtabs_addrmap_supported yes^M globals (none)^M statics (none)^M dependencies (none)^M }^M ... and a shared psymtab (with user field set): ... { psymtab gdb.ada/dgopt/x.adb ((struct partial_symtab *) $hex)^M readin no^M fullname (null)^M text addresses 0x0 -- 0x0^M psymtabs_addrmap_supported yes^M globals (none)^M statics (none)^M user @0x159a ((struct partial_symtab *) 0x37b57c0)^M dependencies (none)^M }^M ... The tentative fix for PR25700 removes the unshared psymtab. Then when trying to find a psymtab matching x.adb in psym_map_symtabs_matching_filename, we run into this continue for the shared psymtab: ... for (partial_symtab *pst : require_partial_symbols (objfile, true)) { /* We can skip shared psymtabs here, because any file name will be attached to the unshared psymtab. */ if (pst->user != NULL) continue; ... and consequently cannot find the file. Fix this by not skipping the shared symtab in psym_map_symtabs_matching_filename. Build and reg-tested on x86_64-linux. The test-case passes on master, starts failing with the tentative patch for PR25700, and passes again with this patch. OK for trunk? Thanks, - Tom [gdb/symtab] Find filename in shared psymtab --- gdb/psymtab.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/gdb/psymtab.c b/gdb/psymtab.c index d952f453d9..5e4e7d116f 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -157,17 +157,15 @@ psym_map_symtabs_matching_filename for (partial_symtab *pst : require_partial_symbols (objfile, true)) { - /* We can skip shared psymtabs here, because any file name will be - attached to the unshared psymtab. */ - if (pst->user != NULL) - continue; - /* Anonymous psymtabs don't have a file name. */ if (pst->anonymous) continue; if (compare_filenames_for_search (pst->filename, name)) { + while (pst->user) + pst = pst->user; + if (partial_map_expand_apply (objfile, name, real_path, pst, callback)) return true;