From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11388 invoked by alias); 7 Oct 2003 03:01:45 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 11380 invoked from network); 7 Oct 2003 03:01:44 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 7 Oct 2003 03:01:44 -0000 Received: from drow by nevyn.them.org with local (Exim 4.22 #1 (Debian)) id 1A6i6Z-0003Q4-Ni for ; Mon, 06 Oct 2003 23:01:43 -0400 Date: Tue, 07 Oct 2003 03:01:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [RFC] lookup problem in blockframe.c:inside_main_func() Message-ID: <20031007030143.GA8787@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20031006233728.GB933@gnat.com> <20031007001543.GA16602@nevyn.them.org> <20031007002422.GF933@gnat.com> <20031007014942.GA18589@nevyn.them.org> <20031007021431.GH933@gnat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20031007021431.GH933@gnat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-10/txt/msg00156.txt.bz2 On Mon, Oct 06, 2003 at 07:14:31PM -0700, Joel Brobecker wrote: > I don't understand you suggestion, there isn't much code above the > part I'd like to change. Maybe below? That's what I meant, yeah. > In any case, attached is the patch that I came up with. I tested it > on x86-linux RH9.0 using the stock gcc/g++ there. No regression found. > Would it be acceptable for inclusion? I can also add a dated comments > explaining why we are doing it that way instead of using lookup_symbol. Please do. > > Beware, right now that minsym code may find the one which demangles to > > main; but that should change. > > Hmmm, did I do it the right way, or did I open a bad door? In the latter > case, is there a way for me to make sure I find the right one? It seems > pretty easy to verify that I did find the right own by comparing > main_name() against the SYMBOL_LINKAGE_NAME, but that still would not > help us find the right symbol :-). > > 2003-10-06 J. Brobecker > > * blockframe.c (inside_main_func): No longer use symbol_lookup() > to lookup the main function symbol. This patch looks good to me, and I can approve it, but let's give it a little while in case anyone else has comments. Symtab maintainers maybe? Is there any risk of this finding the wrong function - I can't see any? > Index: blockframe.c > =================================================================== > RCS file: /cvs/src/src/gdb/blockframe.c,v > retrieving revision 1.80 > diff -u -p -r1.80 blockframe.c > --- blockframe.c 14 Sep 2003 16:32:12 -0000 1.80 > +++ blockframe.c 7 Oct 2003 01:56:40 -0000 > @@ -83,22 +83,27 @@ deprecated_inside_entry_file (CORE_ADDR > int > inside_main_func (CORE_ADDR pc) > { > + struct minimal_symbol *msymbol; > + > if (pc == 0) > return 1; > if (symfile_objfile == 0) > return 0; > > + msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); > + > /* If the addr range is not set up at symbol reading time, set it up > now. This is for DEPRECATED_FRAME_CHAIN_VALID_ALTERNATE. I do > this for coff, because it is unable to set it up and symbol > reading time. */ > > - if (symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC && > - symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC) > + if (msymbol != NULL > + && symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC > + && symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC) > { > - struct symbol *mainsym; > + struct symbol *mainsym > + = find_pc_function (SYMBOL_VALUE_ADDRESS (msymbol)); > > - mainsym = lookup_symbol (main_name (), NULL, VAR_DOMAIN, NULL, NULL); > if (mainsym && SYMBOL_CLASS (mainsym) == LOC_BLOCK) > { > symfile_objfile->ei.main_func_lowpc = > @@ -111,8 +116,6 @@ inside_main_func (CORE_ADDR pc) > /* Not in the normal symbol tables, see if "main" is in the partial > symbol table. If it's not, then give up. */ > { > - struct minimal_symbol *msymbol > - = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); > if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text) > { > struct obj_section *osect -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer