summaryrefslogtreecommitdiff
path: root/gdb/minsyms.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2008-05-16 12:58:49 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2008-05-16 12:58:49 +0000
commitdf7b94e7175a108bf8cdc1b3243ef65abc509a97 (patch)
tree34abce8c44621084ac30a8b05e497cededc640a6 /gdb/minsyms.c
parent9c8899e53d4ea60fa6b58b829e0d9a856915a338 (diff)
downloadgdb-df7b94e7175a108bf8cdc1b3243ef65abc509a97.tar.gz
gdb/
2008-05-15 Pedro Alves <pedro@codesourcery.com> Ulrich Weigand <uweigand@de.ibm.com> * minsyms.c (lookup_minimal_symbol_by_pc_name): New function. * symtab.h (lookup_minimal_symbol_by_pc_name): Add prototype. * symtab.c (fixup_section): Remove prototype. Add ADDR parameter; use it instead of ginfo->value.address. Look up minimal symbol by address and name. Assume OBJFILE is non-NULL. (fixup_symbol_section): Ensure we always have an objfile to look into. Extract and pass to fixup_section the symbol's address that will match the minimal symbol's address. (fixup_psymbol_section): Likewise. (find_pc_sect_psymtab): Fall back to non-addrmap case when debugging overlays and the addrmap returned the wrong section. * dwarf2read.c (var_decode_location): Set SYMBOL_CLASS before calling fixup_symbol_section. gdb/testsuite/ 2008-05-15 Pedro Alves <pedro@codesourcery.com> * gdb.base/fixsection.exp: New file. * gdb.base/fixsection0.c: New file. * gdb.base/fixsection1.c: New file.
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r--gdb/minsyms.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index ca9ba9a6715..59febf295e9 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -332,6 +332,41 @@ lookup_minimal_symbol_text (const char *name, struct objfile *objf)
}
/* Look through all the current minimal symbol tables and find the
+ first minimal symbol that matches NAME and PC. If OBJF is non-NULL,
+ limit the search to that objfile. Returns a pointer to the minimal
+ symbol that matches, or NULL if no match is found. */
+
+struct minimal_symbol *
+lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
+ struct objfile *objf)
+{
+ struct objfile *objfile;
+ struct minimal_symbol *msymbol;
+
+ unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
+
+ for (objfile = object_files;
+ objfile != NULL;
+ objfile = objfile->next)
+ {
+ if (objf == NULL || objf == objfile
+ || objf->separate_debug_objfile == objfile)
+ {
+ for (msymbol = objfile->msymbol_hash[hash];
+ msymbol != NULL;
+ msymbol = msymbol->hash_next)
+ {
+ if (SYMBOL_VALUE_ADDRESS (msymbol) == pc
+ && strcmp (SYMBOL_LINKAGE_NAME (msymbol), name) == 0)
+ return msymbol;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/* Look through all the current minimal symbol tables and find the
first minimal symbol that matches NAME and is a solib trampoline.
If OBJF is non-NULL, limit the search to that objfile. Returns a
pointer to the minimal symbol that matches, or NULL if no match is