aboutsummaryrefslogtreecommitdiff
path: root/gdb/symtab.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2002-01-31 05:03:31 +0000
committerDaniel Jacobowitz <drow@false.org>2002-01-31 05:03:31 +0000
commit8a48e96728f9b0d7f7d56495ce7206e9c9955527 (patch)
treed5bd1fd6698326f5c40e089e8579f60d1055e3ec /gdb/symtab.c
parent4e4770d0c61fb454aa228e4540c48b925b01f29b (diff)
downloadfsf-binutils-gdb-8a48e96728f9b0d7f7d56495ce7206e9c9955527.zip
fsf-binutils-gdb-8a48e96728f9b0d7f7d56495ce7206e9c9955527.tar.gz
fsf-binutils-gdb-8a48e96728f9b0d7f7d56495ce7206e9c9955527.tar.bz2
2002-01-30 Daniel Jacobowitz <drow@mvista.com>
* 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.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r--gdb/symtab.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c
index c987f5a..18bea05 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -355,12 +355,24 @@ find_pc_sect_psymtab (CORE_ADDR pc, asection *section)
{
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. This is
+ necessary because we loop based on texthigh and textlow, which do
+ not include the data ranges. */
+ 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
@@ -371,7 +383,6 @@ find_pc_sect_psymtab (CORE_ADDR pc, asection *section)
section == 0) /* can't validate section this way */
return (pst);
- msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
if (msymbol == NULL)
return (pst);
@@ -1386,6 +1397,21 @@ find_pc_sect_symtab (CORE_ADDR pc, asection *section)
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. This is
+ necessary because we loop based on the block's high and low code
+ addresses, which do not include the data ranges, and because
+ we call find_pc_sect_psymtab which has a similar restriction based
+ on the partial_symtab's texthigh and textlow. */
+ 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