/* Target-dependent code for the GNU C Library (glibc).
- Copyright (C) 2002, 2003, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2002-2020 Free Software Foundation, Inc.
This file is part of GDB.
/* 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
of GNU/Linux will provide a portable, efficient interface for
debugging programs that use shared libraries. */
- struct objfile *objfile;
- struct minimal_symbol *resolver
- = find_minsym_and_objfile ("_dl_runtime_resolve", &objfile);
+ struct bound_minimal_symbol resolver
+ = lookup_bound_minimal_symbol ("_dl_runtime_resolve");
- if (resolver)
+ if (resolver.minsym)
{
/* The dynamic linker began using this name in early 2005. */
- struct minimal_symbol *fixup
- = lookup_minimal_symbol ("_dl_fixup", NULL, objfile);
+ struct bound_minimal_symbol fixup
+ = lookup_minimal_symbol ("_dl_fixup", NULL, resolver.objfile);
/* This is the name used in older versions. */
- if (! fixup)
- fixup = lookup_minimal_symbol ("fixup", NULL, objfile);
+ if (! fixup.minsym)
+ fixup = lookup_minimal_symbol ("fixup", NULL, resolver.objfile);
- if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc)
- return frame_pc_unwind (get_current_frame ());
+ if (fixup.minsym && BMSYMBOL_VALUE_ADDRESS (fixup) == pc)
+ return frame_unwind_caller_pc (get_current_frame ());
}
return 0;