diff options
author | Daniel Jacobowitz <drow@false.org> | 2002-01-31 05:03:31 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2002-01-31 05:03:31 +0000 |
commit | 8a48e96728f9b0d7f7d56495ce7206e9c9955527 (patch) | |
tree | d5bd1fd6698326f5c40e089e8579f60d1055e3ec /gdb/symtab.c | |
parent | 4e4770d0c61fb454aa228e4540c48b925b01f29b (diff) | |
download | fsf-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.c | 30 |
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 |