From patchwork Sat Feb 15 16:54:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 38102 Received: (qmail 86340 invoked by alias); 15 Feb 2020 16:54:59 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 85477 invoked by uid 89); 15 Feb 2020 16:54:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=cust, __LINE__, sk:get_obj, __line__ X-HELO: gateway23.websitewelcome.com Received: from gateway23.websitewelcome.com (HELO gateway23.websitewelcome.com) (192.185.50.129) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 15 Feb 2020 16:54:49 +0000 Received: from cm10.websitewelcome.com (cm10.websitewelcome.com [100.42.49.4]) by gateway23.websitewelcome.com (Postfix) with ESMTP id 3AB6C4025 for ; Sat, 15 Feb 2020 10:54:48 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id 30iOjdBZDEfyq30iOjm6c2; Sat, 15 Feb 2020 10:54:48 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=nQgIllpy0my/S5sum544EXt4cC8t1ORr2Vr3e+gzAVY=; b=hhDnIdCKoroojYMYcH1+6Gjf/D XZDK4BJtVOjxMsImzSVzXjhjOEN2LeTeFzerhwD9tFQIwtTumrXQY3Jj31V7DPWgqSb380sSVerbC BhqoEfCd3Txxe/jFvQHQlJznp; Received: from 75-166-123-50.hlrn.qwest.net ([75.166.123.50]:45240 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1j30iN-000xcC-T6; Sat, 15 Feb 2020 09:54:47 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 06/14] Add "objfile" parameter to two partial_symtab methods Date: Sat, 15 Feb 2020 09:54:36 -0700 Message-Id: <20200215165444.32653-7-tom@tromey.com> In-Reply-To: <20200215165444.32653-1-tom@tromey.com> References: <20200215165444.32653-1-tom@tromey.com> This series will cause partial symtabs to be shared across obfiles. However, full symtabs and symbols will still be objfile-dependent. So, a debug info reader will need to know which objfile to consult when expanding a partial symtab. This patch adds an objfile parameter to the two relevant methods partial_symtab. Current implementations simply ignore them. gdb/ChangeLog 2020-02-15 Tom Tromey * psymtab.c (partial_map_expand_apply) (psym_find_pc_sect_compunit_symtab, psym_lookup_symbol) (psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab) (psym_print_stats, psym_expand_symtabs_for_function) (psym_map_symbol_filenames, psym_map_matching_symbols) (psym_expand_symtabs_matching) (partial_symtab::read_dependencies, maintenance_info_psymtabs) (maintenance_check_psymtabs): Update. * psympriv.h (struct partial_symtab) : Add objfile parameter. (struct standard_psymtab) : Likewise. --- gdb/ChangeLog | 15 +++++++++++++++ gdb/psympriv.h | 10 +++++----- gdb/psymtab.c | 40 ++++++++++++++++++++-------------------- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 1b1f57cf764..0270f0bb9b2 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -139,12 +139,12 @@ struct partial_symtab /* Return true if the symtab corresponding to this psymtab has been readin. */ - virtual bool readin_p () const = 0; + virtual bool readin_p (struct objfile *) const = 0; /* Return a pointer to the compunit allocated for this source file. Return nullptr if !readin or if there was no symtab. */ - virtual struct compunit_symtab *get_compunit_symtab () const = 0; - + virtual struct compunit_symtab *get_compunit_symtab (struct objfile *) const + = 0; /* Return the raw low text address of this partial_symtab. */ CORE_ADDR raw_text_low () const @@ -310,14 +310,14 @@ struct standard_psymtab : public partial_symtab { } - bool readin_p () const override + bool readin_p (struct objfile *) const override { return readin; } /* Return a pointer to the compunit allocated for this source file. Return nullptr if !readin or if there was no symtab. */ - struct compunit_symtab *get_compunit_symtab () const override + struct compunit_symtab *get_compunit_symtab (struct objfile *) const override { return compunit_symtab; } diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 56576b3bcec..5c23ebfd94c 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -131,7 +131,7 @@ partial_map_expand_apply (struct objfile *objfile, gdb_assert (pst->user == NULL); /* Don't visit already-expanded psymtabs. */ - if (pst->readin_p ()) + if (pst->readin_p (objfile)) return 0; /* This may expand more than one symtab, and we want to iterate over @@ -385,7 +385,7 @@ psym_find_pc_sect_compunit_symtab (struct objfile *objfile, msymbol); if (ps != NULL) { - if (warn_if_readin && ps->readin_p ()) + if (warn_if_readin && ps->readin_p (objfile)) /* Might want to error() here (in case symtab is corrupt and will cause a core dump), but maybe we can successfully continue, so let's not. */ @@ -393,7 +393,7 @@ psym_find_pc_sect_compunit_symtab (struct objfile *objfile, (Internal error: pc %s in read in psymtab, but not in symtab.)\n"), paddress (get_objfile_arch (objfile), pc)); psymtab_to_symtab (objfile, ps); - return ps->get_compunit_symtab (); + return ps->get_compunit_symtab (objfile); } return NULL; } @@ -484,8 +484,8 @@ psym_lookup_symbol (struct objfile *objfile, for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (!ps->readin_p () && lookup_partial_symbol (objfile, ps, name, - psymtab_index, domain)) + if (!ps->readin_p (objfile) + && lookup_partial_symbol (objfile, ps, name, psymtab_index, domain)) { struct symbol *sym, *with_opaque = NULL; struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps); @@ -750,11 +750,11 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) pst = pst->user; /* If it's been looked up before, return it. */ - if (pst->get_compunit_symtab ()) - return pst->get_compunit_symtab (); + if (pst->get_compunit_symtab (objfile)) + return pst->get_compunit_symtab (objfile); /* If it has not yet been read in, read it. */ - if (!pst->readin_p ()) + if (!pst->readin_p (objfile)) { scoped_restore decrementer = increment_reading_symtab (); @@ -772,7 +772,7 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) printf_filtered (_("done.\n")); } - return pst->get_compunit_symtab (); + return pst->get_compunit_symtab (objfile); } /* Psymtab version of find_last_source_symtab. See its definition in @@ -795,7 +795,7 @@ psym_find_last_source_symtab (struct objfile *ofp) if (cs_pst) { - if (cs_pst->readin_p ()) + if (cs_pst->readin_p (ofp)) { internal_error (__FILE__, __LINE__, _("select_source_symtab: " @@ -952,11 +952,11 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, gdb_print_host_address (objfile, outfile); fprintf_filtered (outfile, ")\n"); - if (psymtab->readin_p ()) + if (psymtab->readin_p (objfile)) { fprintf_filtered (outfile, " Full symtab was read (at "); - gdb_print_host_address (psymtab->get_compunit_symtab (), outfile); + gdb_print_host_address (psymtab->get_compunit_symtab (objfile), outfile); fprintf_filtered (outfile, ")\n"); } @@ -1010,7 +1010,7 @@ psym_print_stats (struct objfile *objfile) i = 0; for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (!ps->readin_p ()) + if (!ps->readin_p (objfile)) i++; } printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"), i); @@ -1050,7 +1050,7 @@ psym_expand_symtabs_for_function (struct objfile *objfile, { for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (ps->readin_p ()) + if (ps->readin_p (objfile)) continue; if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN) @@ -1105,7 +1105,7 @@ psym_map_symbol_filenames (struct objfile *objfile, { const char *fullname; - if (ps->readin_p ()) + if (ps->readin_p (objfile)) continue; /* We can skip shared psymtabs here, because any file name will be @@ -1185,7 +1185,7 @@ psym_map_matching_symbols for (partial_symtab *ps : require_partial_symbols (objfile, true)) { QUIT; - if (ps->readin_p () + if (ps->readin_p (objfile) || match_partial_symbol (objfile, ps, global, name, domain, ordered_compare)) { @@ -1320,7 +1320,7 @@ psym_expand_symtabs_matching { QUIT; - if (ps->readin_p ()) + if (ps->readin_p (objfile)) continue; /* We skip shared psymtabs because file-matching doesn't apply @@ -1688,7 +1688,7 @@ partial_symtab::read_dependencies (struct objfile *objfile) { for (int i = 0; i < number_of_dependencies; ++i) { - if (!dependencies[i]->readin_p ()) + if (!dependencies[i]->readin_p (objfile)) { /* Inform about additional files to be read in. */ if (info_verbose) @@ -2000,7 +2000,7 @@ maintenance_info_psymtabs (const char *regexp, int from_tty) host_address_to_string (psymtab)); printf_filtered (" readin %s\n", - psymtab->readin_p () ? "yes" : "no"); + psymtab->readin_p (objfile) ? "yes" : "no"); printf_filtered (" fullname %s\n", psymtab->fullname ? psymtab->fullname : "(null)"); @@ -2091,7 +2091,7 @@ maintenance_check_psymtabs (const char *ignore, int from_tty) /* We don't call psymtab_to_symtab here because that may cause symtab expansion. When debugging a problem it helps if checkers leave things unchanged. */ - cust = ps->get_compunit_symtab (); + cust = ps->get_compunit_symtab (objfile); /* First do some checks that don't require the associated symtab. */ if (ps->text_high (objfile) < ps->text_low (objfile))