From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10735 invoked by alias); 19 Jan 2002 17:56:57 -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 10703 invoked from network); 19 Jan 2002 17:56:57 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sources.redhat.com with SMTP; 19 Jan 2002 17:56:57 -0000 Received: from telocity.telocity.com (taarna.sfbay.redhat.com [205.180.230.102]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with SMTP id JAA29216; Sat, 19 Jan 2002 09:56:53 -0800 (PST) Message-ID: <3C49B256.3B38@redhat.com> Date: Sat, 19 Jan 2002 09:56:00 -0000 From: Michael Snyder X-Mailer: Mozilla 3.04 (Win95; I) MIME-Version: 1.0 To: Daniel Jacobowitz CC: gdb-patches@sources.redhat.com Subject: Re: [RFA] Fix for searching for data symbols References: <20020119123318.A1378@nevyn.them.org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-01/txt/msg00534.txt.bz2 Daniel Jacobowitz wrote: > > This patch fixes the problem I described in: > http://sources.redhat.com/ml/gdb/2002-01/msg00223.html > > Basically, since we use the bounds of the text segment to search for symbols > in find_pc_*, don't let them return a bogus answer for a symbol we know is > off in data land. > > OK to commit, or does anyone prefer a different approach to this? Is there any chance that a data symbol that we don't want would shadow a text symbol that we do want? Eg. maybe in one module we have static int foo; and in another we have extern int foo(void); Maybe they are even in separate objfiles (shared libs). Maybe lookup_minimal_symbol will find the wrong one first, and your change will terminate the search before we would have found the right one? Just speculating... > > -- > Daniel Jacobowitz Carnegie Mellon University > MontaVista Software Debian GNU/Linux Developer > > 2002-01-19 Daniel Jacobowitz > > * symtab.c (find_pc_sect_psymtab): Do not search psymtabs for > data symbols, since we search based on textlow and texthigh. > (find_pc_sect_symtab): Likewise. > > Index: symtab.c > =================================================================== > RCS file: /cvs/src/src/gdb/symtab.c,v > retrieving revision 1.51 > diff -u -p -r1.51 symtab.c > --- symtab.c 2001/12/21 22:32:37 1.51 > +++ symtab.c 2002/01/19 17:29:09 > @@ -354,12 +354,22 @@ find_pc_sect_psymtab (CORE_ADDR pc, asec > { > register struct partial_symtab *pst; > register struct objfile *objfile; > + struct minimal_symbol *msymbol; > > + /* If we know that this is not a text address, return failure. */ > + msymbol = lookup_minimal_symbol_by_pc_section (pc, section); > + if (msymbol > + && (msymbol->type == mst_data > + || msymbol->type == mst_bss > + || msymbol->type == mst_abs > + || msymbol->type == mst_file_data > + || msymbol->type == mst_file_bss)) > + return NULL; > + > ALL_PSYMTABS (objfile, pst) > { > if (pc >= pst->textlow && pc < pst->texthigh) > { > - struct minimal_symbol *msymbol; > struct partial_symtab *tpst; > > /* An objfile that has its functions reordered might have > @@ -370,7 +380,6 @@ find_pc_sect_psymtab (CORE_ADDR pc, asec > section == 0) /* can't validate section this way */ > return (pst); > > - msymbol = lookup_minimal_symbol_by_pc_section (pc, section); > if (msymbol == NULL) > return (pst); > > @@ -1385,6 +1394,17 @@ find_pc_sect_symtab (CORE_ADDR pc, asect > register struct partial_symtab *ps; > register struct objfile *objfile; > CORE_ADDR distance = 0; > + struct minimal_symbol *msymbol; > + > + /* If we know that this is not a text address, return failure. */ > + msymbol = lookup_minimal_symbol_by_pc_section (pc, section); > + if (msymbol > + && (msymbol->type == mst_data > + || msymbol->type == mst_bss > + || msymbol->type == mst_abs > + || msymbol->type == mst_file_data > + || msymbol->type == mst_file_bss)) > + return NULL; > > /* Search all symtabs for the one whose file contains our address, and which > is the smallest of all the ones containing the address. This is designed