diff options
Diffstat (limited to 'gdb/glibc-tdep.c')
-rw-r--r-- | gdb/glibc-tdep.c | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/gdb/glibc-tdep.c b/gdb/glibc-tdep.c deleted file mode 100644 index a37be98..0000000 --- a/gdb/glibc-tdep.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Target-dependent code for the GNU C Library (glibc). - - Copyright (C) 2002, 2003 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#include "defs.h" -#include "frame.h" -#include "symtab.h" -#include "symfile.h" -#include "objfiles.h" - -#include "glibc-tdep.h" - -/* 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 - a function reference, and - 2) if so, tells us where to set a temporary breakpoint that will - trigger when the dynamic linker is done. */ - -CORE_ADDR -glibc_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) -{ - /* The GNU dynamic linker is part of the GNU C library, and is used - by all GNU systems (GNU/Hurd, GNU/Linux). An unresolved PLT - entry points to "_dl_runtime_resolve", which calls "fixup" to - patch the PLT, and then passes control to the function. - - We look for the symbol `_dl_runtime_resolve', and find `fixup' in - the same objfile. If we are at the entry point of `fixup', then - we set a breakpoint at the return address (at the top of the - stack), and continue. - - It's kind of gross to do all these checks every time we're - called, since they don't change once the executable has gotten - started. But this is only a temporary hack --- upcoming versions - 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); - - if (resolver) - { - struct minimal_symbol *fixup - = lookup_minimal_symbol ("fixup", NULL, objfile); - - if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc) - return frame_pc_unwind (get_current_frame ()); - } - - return 0; -} |