aboutsummaryrefslogtreecommitdiff
path: root/gdb/minsyms.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1996-01-08 17:55:25 +0000
committerJeff Law <law@redhat.com>1996-01-08 17:55:25 +0000
commit436d4143274d6bb3c32632f7ae1bd82cda5128b5 (patch)
tree1b03454d0f21a99f7d5f601c3f7d023edfea7e8f /gdb/minsyms.c
parent01082eaf1926a56afc7b4cb51a25d3560ee31f5b (diff)
downloadgdb-436d4143274d6bb3c32632f7ae1bd82cda5128b5.zip
gdb-436d4143274d6bb3c32632f7ae1bd82cda5128b5.tar.gz
gdb-436d4143274d6bb3c32632f7ae1bd82cda5128b5.tar.bz2
* buildsym.c (end_symtab): Remove sort_pending and sort_linevec
arguments. Sorting is now dependent on OBJF_REORDERED. All callers/references changed. * dbxread.c (read_ofile_symtab): Correctly determine value for last_source_start_addr for reordered executables. (process_one_symbol): Handle N_FUN with no name as an end of function marker. * partial-stab.h (case N_FN, N_TEXT): Don't assume CUR_SYMBOL_VALUE is the high text address for a psymtab. (case N_SO): Likewise. (case N_FUN): Handle N_FUN with no name as an end of function marker. * minsyms.c (lookup_minimal_symbol_by_pc): Examine all symbols at the same address rather than a random subset of them. * coffread.c (coff_symfile_init): Set OBJF_REORDERED. * elfread.c (elf_symfile_init): Similarly. * somread.c (som_symfile_init): Similarly. * xcoffread.c (xcoff_symfile_init): Similarly. Support for debugging reordered executables. Remaining mentor vm changes.
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r--gdb/minsyms.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index c020062..e36302e 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -1,5 +1,5 @@
/* GDB routines for manipulating the minimal symbol tables.
- Copyright 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+ Copyright 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
Contributed by Cygnus Support, using pieces from other GDB modules.
This file is part of GDB.
@@ -253,7 +253,6 @@ lookup_minimal_symbol_text (name, sfile, objf)
return NULL;
}
-
/* Search through the minimal symbol table for each objfile and find the
symbol whose address is the largest address that is still less than or
equal to PC. Returns a pointer to the minimal symbol if such a symbol
@@ -325,6 +324,15 @@ lookup_minimal_symbol_by_pc (pc)
lo = new;
}
}
+
+ /* If we have multiple symbols at the same address, we want
+ hi to point to the last one. That way we can find the
+ right symbol if it has an index greater than hi. */
+ while (hi < objfile -> minimal_symbol_count - 1
+ && (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
+ == SYMBOL_VALUE_ADDRESS (&msymbol[hi+1])))
+ hi++;
+
/* The minimal symbol indexed by hi now is the best one in this
objfile's minimal symbol table. See if it is the best one
overall. */