From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55227 invoked by alias); 18 Feb 2020 11:26:35 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 55219 invoked by uid 89); 18 Feb 2020 11:26:35 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=consult X-HELO: mail-qv1-f65.google.com Received: from mail-qv1-f65.google.com (HELO mail-qv1-f65.google.com) (209.85.219.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Feb 2020 11:26:33 +0000 Received: by mail-qv1-f65.google.com with SMTP id dc14so8951584qvb.9 for ; Tue, 18 Feb 2020 03:26:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=DBQBhqHZeZZ3s+LqZ9G5B3K77HakMit5L/8FxhKsdMo=; b=waFGbhhN0uc5cnJyxVYwJNmEcFmhxTUYGvotrPmwBuVsMEvkjsH6BqqfCXKmVPfVJF lM6V3CchRrnRHp4ZJ0LP04G6+xiMTTt1DHWTdwdpF9dr8bNh7UlGODt0tCvboxPvBMLO qHT0E6QfcJQepdT0ef8k1KkJc7hkArdw4lCghDGUmiZvfkmxzY9dMHgKnh2L2tY0eNRO q1q5TmxJy5QuTBneLwBr4Z28Jw3ujTJSE+wzjE8frQLFMpOytqKsv3jKDs2v694WGyrA 65Y1yn/PKLojhByyreX2yxF2NA/15DL0Tia4ma+UjJAuyL56Gsvmt2cOWg3kGOWeOXmL 3ykA== Return-Path: Received: from [192.168.0.185] ([179.177.236.155]) by smtp.gmail.com with ESMTPSA id p50sm1726219qtf.5.2020.02.18.03.26.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Feb 2020 03:26:29 -0800 (PST) Subject: Re: [PATCH 06/14] Add "objfile" parameter to two partial_symtab methods To: Tom Tromey , gdb-patches@sourceware.org References: <20200215165444.32653-1-tom@tromey.com> <20200215165444.32653-7-tom@tromey.com> From: Luis Machado Message-ID: <491adc21-9638-7dbc-7f8d-f4abfab37c75@linaro.org> Date: Tue, 18 Feb 2020 11:26:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200215165444.32653-7-tom@tromey.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00707.txt.bz2 On 2/15/20 1:54 PM, Tom Tromey wrote: > This series will cause partial symtabs to be shared across obfiles. "across objfiles." > 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) get_compunit_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)) >