From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 121270 invoked by alias); 26 Aug 2019 19:06:11 -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 121262 invoked by uid 89); 26 Aug 2019 19:06:11 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_STOCKGEN,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Aug 2019 19:06:09 +0000 Received: from [172.16.0.120] (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id B39941F33F; Mon, 26 Aug 2019 15:06:07 -0400 (EDT) Subject: Re: [PATCH] Factor out the common code in lookup_{static,global}_symbol To: Christian Biesinger , gdb-patches@sourceware.org References: <20190826182953.128905-1-cbiesinger@google.com> From: Simon Marchi Message-ID: Date: Mon, 26 Aug 2019 19:06:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190826182953.128905-1-cbiesinger@google.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2019-08/txt/msg00604.txt.bz2 On 2019-08-26 2:29 p.m., Christian Biesinger via gdb-patches wrote: > The two functions are extremely similar; this factors out their code into > a shared _internal function. > > gdb/ChangeLog: > > 2019-08-02 Christian Biesinger > > * symtab.c (lookup_static_symbol): Call the new function (and move > it down to be next to lookup_global_symbol). > (struct global_sym_lookup_data): Add block_enum member and rename to... > (struct global_or_static_sym_lookup_data): ...this. > (lookup_symbol_global_iterator_cb): Pass block_index instead of > GLOBAL_BLOCK to lookup_symbol_in_objfile and rename to... > (lookup_symbol_global_or_static_iterator_cb): ...this. > (lookup_global_or_static_symbol): New function. > (lookup_global_symbol): Call new function. > --- > gdb/symtab.c | 96 +++++++++++++++++++++++----------------------------- > 1 file changed, 42 insertions(+), 54 deletions(-) > > diff --git a/gdb/symtab.c b/gdb/symtab.c > index d85c77b4ce..5ad6456e03 100644 > --- a/gdb/symtab.c > +++ b/gdb/symtab.c > @@ -2566,47 +2566,9 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index, > return result; > } > > -/* See symtab.h. */ > - > -struct block_symbol > -lookup_static_symbol (const char *name, const domain_enum domain) > -{ > - struct symbol_cache *cache = get_symbol_cache (current_program_space); > - struct block_symbol result; > - struct block_symbol_cache *bsc; > - struct symbol_cache_slot *slot; > - > - /* Lookup in STATIC_BLOCK is not current-objfile-dependent, so just pass > - NULL for OBJFILE_CONTEXT. */ > - result = symbol_cache_lookup (cache, NULL, STATIC_BLOCK, name, domain, > - &bsc, &slot); > - if (result.symbol != NULL) > - { > - if (SYMBOL_LOOKUP_FAILED_P (result)) > - return {}; > - return result; > - } > - > - for (objfile *objfile : current_program_space->objfiles ()) > - { > - result = lookup_symbol_in_objfile (objfile, STATIC_BLOCK, name, domain); > - if (result.symbol != NULL) > - { > - /* Still pass NULL for OBJFILE_CONTEXT here. */ > - symbol_cache_mark_found (bsc, slot, NULL, result.symbol, > - result.block); > - return result; > - } > - } > - > - /* Still pass NULL for OBJFILE_CONTEXT here. */ > - symbol_cache_mark_not_found (bsc, slot, NULL, name, domain); > - return {}; > -} > - > /* Private data to be used with lookup_symbol_global_iterator_cb. */ > > -struct global_sym_lookup_data > +struct global_or_static_sym_lookup_data > { > /* The name of the symbol we are searching for. */ > const char *name; > @@ -2614,6 +2576,9 @@ struct global_sym_lookup_data > /* The domain to use for our search. */ > domain_enum domain; > > + /* The block index in which to search. */ > + enum block_enum block_index; > + > /* The field where the callback should store the symbol if found. > It should be initialized to {NULL, NULL} before the search is started. */ > struct block_symbol result; > @@ -2625,16 +2590,16 @@ struct global_sym_lookup_data > which in reality is a pointer to struct global_sym_lookup_data. */ > > static int > -lookup_symbol_global_iterator_cb (struct objfile *objfile, > - void *cb_data) > +lookup_symbol_global_or_static_iterator_cb (struct objfile *objfile, > + void *cb_data) > { The comment above this function talks about GLOBAL_BLOCK and global_sym_lookup_data, so it needs to be updated. > - struct global_sym_lookup_data *data = > - (struct global_sym_lookup_data *) cb_data; > + struct global_or_static_sym_lookup_data *data = > + (struct global_or_static_sym_lookup_data *) cb_data; > > gdb_assert (data->result.symbol == NULL > && data->result.block == NULL); > > - data->result = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK, > + data->result = lookup_symbol_in_objfile (objfile, data->block_index, > data->name, data->domain); > > /* If we found a match, tell the iterator to stop. Otherwise, > @@ -2642,25 +2607,28 @@ lookup_symbol_global_iterator_cb (struct objfile *objfile, > return (data->result.symbol != NULL); > } > > -/* See symtab.h. */ > +/* This function contains the common code of lookup_{global,static}_symbol. > + BLOCK is only used if BLOCK_INDEX is GLOBAL_SCOPE, in which case it is > + used to retrieve the objfile to start the lookup in. */ This comment needs to be updated to match the code. LGTM with those fixed. Thanks, Simon