* glibc-tdep.c, glibc-tdep.h: New files.
* config/arm/linux.mt (TDEPFILES): Add glibc-tdep.o * config/i386/linux.mt (TDEPFILES): Likewise. * i386-linux-tdep.c (glibc-tdep.h): Include. (find_minsym_and_objfile, skip_hurd_resolver): Delete. (i386_linux_skip_solib_resolver): Call glibc_skip_solib_resolver. * arm-linux-tdep.c (glibc-tdep.h): Include. (find_minsym_and_objfile, skip_hurd_resolver): Delete. (arm_linux_skip_solib_resolver): Call glibc_skip_solib_resolver. * Makefile.in (ALLDEPFILES): Add glibc-tdep.c (glibc_tdep_h): Define. (glibc-tdep.o): Add dependencies. (arm-linux-tdep.o): Update dependencies. (i386-linux-tdep.o): Likewise.
This commit is contained in:
parent
e60e0ab267
commit
a3640c7517
|
@ -1,3 +1,21 @@
|
||||||
|
2003-11-09 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
David S. Miller <davem@redhat.com>
|
||||||
|
|
||||||
|
* glibc-tdep.c, glibc-tdep.h: New files.
|
||||||
|
* config/arm/linux.mt (TDEPFILES): Add glibc-tdep.o
|
||||||
|
* config/i386/linux.mt (TDEPFILES): Likewise.
|
||||||
|
* i386-linux-tdep.c (glibc-tdep.h): Include.
|
||||||
|
(find_minsym_and_objfile, skip_hurd_resolver): Delete.
|
||||||
|
(i386_linux_skip_solib_resolver): Call glibc_skip_solib_resolver.
|
||||||
|
* arm-linux-tdep.c (glibc-tdep.h): Include.
|
||||||
|
(find_minsym_and_objfile, skip_hurd_resolver): Delete.
|
||||||
|
(arm_linux_skip_solib_resolver): Call glibc_skip_solib_resolver.
|
||||||
|
* Makefile.in (ALLDEPFILES): Add glibc-tdep.c
|
||||||
|
(glibc_tdep_h): Define.
|
||||||
|
(glibc-tdep.o): Add dependencies.
|
||||||
|
(arm-linux-tdep.o): Update dependencies.
|
||||||
|
(i386-linux-tdep.o): Likewise.
|
||||||
|
|
||||||
2003-11-09 Andrew Cagney <cagney@redhat.com>
|
2003-11-09 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* config/mips/irix6.mh (NAT_FILE): Set to "nm-irix5.h".
|
* config/mips/irix6.mh (NAT_FILE): Set to "nm-irix5.h".
|
||||||
|
|
|
@ -692,6 +692,7 @@ gdbthread_h = gdbthread.h $(breakpoint_h) $(frame_h)
|
||||||
gdbtypes_h = gdbtypes.h
|
gdbtypes_h = gdbtypes.h
|
||||||
gdb_vfork_h = gdb_vfork.h
|
gdb_vfork_h = gdb_vfork.h
|
||||||
gdb_wait_h = gdb_wait.h
|
gdb_wait_h = gdb_wait.h
|
||||||
|
glibc_tdep_h = glibc-tdep.h
|
||||||
gnu_nat_h = gnu-nat.h
|
gnu_nat_h = gnu-nat.h
|
||||||
gregset_h = gregset.h
|
gregset_h = gregset.h
|
||||||
hppa_tdep_h = hppa-tdep.h
|
hppa_tdep_h = hppa-tdep.h
|
||||||
|
@ -1268,6 +1269,7 @@ ALLDEPFILES = \
|
||||||
coff-solib.c \
|
coff-solib.c \
|
||||||
core-sol2.c core-regset.c core-aout.c corelow.c \
|
core-sol2.c core-regset.c core-aout.c corelow.c \
|
||||||
dcache.c delta68-nat.c dpx2-nat.c exec.c fork-child.c \
|
dcache.c delta68-nat.c dpx2-nat.c exec.c fork-child.c \
|
||||||
|
glibc-tdep.c \
|
||||||
go32-nat.c h8300-tdep.c \
|
go32-nat.c h8300-tdep.c \
|
||||||
hppa-tdep.c hppa-hpux-tdep.c \
|
hppa-tdep.c hppa-hpux-tdep.c \
|
||||||
hppab-nat.c hppah-nat.c hpread.c \
|
hppab-nat.c hppah-nat.c hpread.c \
|
||||||
|
@ -1582,7 +1584,7 @@ arch-utils.o: arch-utils.c $(defs_h) $(arch_utils_h) $(buildsym_h) \
|
||||||
$(gdbcmd_h) $(inferior_h) $(gdb_string_h) $(regcache_h) \
|
$(gdbcmd_h) $(inferior_h) $(gdb_string_h) $(regcache_h) \
|
||||||
$(gdb_assert_h) $(sim_regno_h) $(version_h) $(floatformat_h)
|
$(gdb_assert_h) $(sim_regno_h) $(version_h) $(floatformat_h)
|
||||||
arm-linux-nat.o: arm-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
arm-linux-nat.o: arm-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||||
$(gdb_string_h) $(regcache_h) $(arm_tdep_h) $(gregset_h)
|
$(gdb_string_h) $(regcache_h) $(arm_tdep_h) $(glibc_tdep_h) $(gregset_h)
|
||||||
arm-linux-tdep.o: arm-linux-tdep.c $(defs_h) $(target_h) $(value_h) \
|
arm-linux-tdep.o: arm-linux-tdep.c $(defs_h) $(target_h) $(value_h) \
|
||||||
$(gdbtypes_h) $(floatformat_h) $(gdbcore_h) $(frame_h) $(regcache_h) \
|
$(gdbtypes_h) $(floatformat_h) $(gdbcore_h) $(frame_h) $(regcache_h) \
|
||||||
$(doublest_h) $(solib_svr4_h) $(osabi_h) $(arm_tdep_h) $(symtab_h) \
|
$(doublest_h) $(solib_svr4_h) $(osabi_h) $(arm_tdep_h) $(symtab_h) \
|
||||||
|
@ -1868,7 +1870,7 @@ i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||||
i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
|
i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
|
||||||
$(value_h) $(regcache_h) $(inferior_h) $(reggroups_h) $(symtab_h) \
|
$(value_h) $(regcache_h) $(inferior_h) $(reggroups_h) $(symtab_h) \
|
||||||
$(symfile_h) $(objfiles_h) $(solib_svr4_h) $(osabi_h) $(i386_tdep_h) \
|
$(symfile_h) $(objfiles_h) $(solib_svr4_h) $(osabi_h) $(i386_tdep_h) \
|
||||||
$(i386_linux_tdep_h)
|
$(i386_linux_tdep_h) $(glibc_tdep_h)
|
||||||
i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
|
i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
|
||||||
$(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h)
|
$(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h)
|
||||||
i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)
|
i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)
|
||||||
|
@ -2417,6 +2419,8 @@ utils.o: utils.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(event_top_h) \
|
||||||
$(filenames_h) $(inferior_h) $(mmalloc_h)
|
$(filenames_h) $(inferior_h) $(mmalloc_h)
|
||||||
uw-thread.o: uw-thread.c $(defs_h) $(gdbthread_h) $(target_h) $(inferior_h) \
|
uw-thread.o: uw-thread.c $(defs_h) $(gdbthread_h) $(target_h) $(inferior_h) \
|
||||||
$(regcache_h) $(gregset_h)
|
$(regcache_h) $(gregset_h)
|
||||||
|
glibc-tdep.o: glibc-tdep.c $(defs_h) $(frame_h) $(symtab_h) \
|
||||||
|
$(symfile_h) $(objfiles_h) $(glibc_tdep_h)
|
||||||
v850ice.o: v850ice.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \
|
v850ice.o: v850ice.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \
|
||||||
$(inferior_h) $(breakpoint_h) $(symfile_h) $(target_h) $(objfiles_h) \
|
$(inferior_h) $(breakpoint_h) $(symfile_h) $(target_h) $(objfiles_h) \
|
||||||
$(gdbcore_h) $(value_h) $(command_h) $(regcache_h)
|
$(gdbcore_h) $(value_h) $(command_h) $(regcache_h)
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
# Target: ARM based machine running GNU/Linux
|
# Target: ARM based machine running GNU/Linux
|
||||||
TM_FILE= tm-linux.h
|
TM_FILE= tm-linux.h
|
||||||
TDEPFILES= arm-tdep.o arm-linux-tdep.o solib.o solib-svr4.o solib-legacy.o
|
TDEPFILES= arm-tdep.o arm-linux-tdep.o glibc-tdep.o solib.o solib-svr4.o solib-legacy.o
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Target: Intel 386 running GNU/Linux
|
# Target: Intel 386 running GNU/Linux
|
||||||
TDEPFILES= i386-tdep.o i386-linux-tdep.o i387-tdep.o \
|
TDEPFILES= i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \
|
||||||
solib.o solib-svr4.o solib-legacy.o
|
solib.o solib-svr4.o solib-legacy.o
|
||||||
TM_FILE= tm-linux.h
|
TM_FILE= tm-linux.h
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/* Target-dependent code for the GNU C Library (glibc).
|
||||||
|
|
||||||
|
Copyright 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., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, 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 (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;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* Target-dependent code for the GNU C Library (glibc).
|
||||||
|
|
||||||
|
Copyright 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., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifndef GLIBC_TDEP_H
|
||||||
|
#define GLIBC_TDEP_H
|
||||||
|
|
||||||
|
extern CORE_ADDR glibc_skip_solib_resolver (CORE_ADDR);
|
||||||
|
|
||||||
|
#endif /* glibc-tdep.h */
|
Loading…
Reference in New Issue