PR symtab/11198:

* symtab.h (lookup_minimal_symbol_and_objfile): Declare.
	* minsyms.c (lookup_minimal_symbol_and_objfile): New function.
	* glibc-tdep.c (find_minsym_and_objfile): Remove.
	(glibc_skip_solib_resolver): Use
	lookup_minimal_symbol_and_objfile.
This commit is contained in:
Tom Tromey 2010-01-21 17:12:18 +00:00
parent 8b315be588
commit 0d5392b8b1
4 changed files with 45 additions and 30 deletions

View File

@ -1,3 +1,12 @@
2010-01-21 Tom Tromey <tromey@redhat.com>
PR symtab/11198:
* symtab.h (lookup_minimal_symbol_and_objfile): Declare.
* minsyms.c (lookup_minimal_symbol_and_objfile): New function.
* glibc-tdep.c (find_minsym_and_objfile): Remove.
(glibc_skip_solib_resolver): Use
lookup_minimal_symbol_and_objfile.
2010-01-21 Kai Tietz <kai.tietz@onevision.com>
* inflow.c (check_syscall): Guard by #if clause for GO32 and

View File

@ -28,35 +28,6 @@
/* Calling functions in shared libraries. */
/* Find the minimal symbol named NAME, and return both the minsym
struct and its objfile. This probably ought to be in minsym.c, but
everything there is trying to deal with things like C++ and
SOFUN_ADDRESS_MAYBE_TURQUOISE, ... Since this is so simple, it may
be considered too special-purpose for general consumption. */
static struct minimal_symbol *
find_minsym_and_objfile (char *name, struct objfile **objfile_p)
{
struct objfile *objfile;
ALL_OBJFILES (objfile)
{
struct minimal_symbol *msym;
ALL_OBJFILE_MSYMBOLS (objfile, msym)
{
if (SYMBOL_LINKAGE_NAME (msym)
&& strcmp (SYMBOL_LINKAGE_NAME (msym), name) == 0)
{
*objfile_p = objfile;
return msym;
}
}
}
return 0;
}
/* See the comments for SKIP_SOLIB_RESOLVER at the top of infrun.c.
This function:
1) decides whether a PLT has sent us into the linker to resolve
@ -85,7 +56,7 @@ glibc_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
struct objfile *objfile;
struct minimal_symbol *resolver
= find_minsym_and_objfile ("_dl_runtime_resolve", &objfile);
= lookup_minimal_symbol_and_objfile ("_dl_runtime_resolve", &objfile);
if (resolver)
{

View File

@ -693,6 +693,37 @@ lookup_minimal_symbol_by_pc (CORE_ADDR pc)
{
return lookup_minimal_symbol_by_pc_section (pc, NULL);
}
/* Find the minimal symbol named NAME, and return both the minsym
struct and its objfile. This only checks the linkage name. Sets
*OBJFILE_P and returns the minimal symbol, if it is found. If it
is not found, returns NULL. */
struct minimal_symbol *
lookup_minimal_symbol_and_objfile (const char *name,
struct objfile **objfile_p)
{
struct objfile *objfile;
unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
ALL_OBJFILES (objfile)
{
struct minimal_symbol *msym;
for (msym = objfile->msymbol_hash[hash];
msym != NULL;
msym = msym->hash_next)
{
if (strcmp (SYMBOL_LINKAGE_NAME (msym), name) == 0)
{
*objfile_p = objfile;
return msym;
}
}
}
return 0;
}
/* Return leading symbol character for a BFD. If BFD is NULL,

View File

@ -1158,6 +1158,10 @@ extern struct minimal_symbol *lookup_minimal_symbol_by_pc_name
extern struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR);
extern struct minimal_symbol *
lookup_minimal_symbol_and_objfile (const char *,
struct objfile **);
extern struct minimal_symbol
*lookup_minimal_symbol_by_pc_section (CORE_ADDR, struct obj_section *);