aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>1994-04-01 08:50:03 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>1994-04-01 08:50:03 +0000
commit38b90473602f5c7295242ec0cce8f804d171bcbf (patch)
tree9e835890af03c6a3c8c8cc2205180734280ad1a3 /gdb
parent01f8d30971233e0c259278adf41cc870837e3aed (diff)
downloadgdb-38b90473602f5c7295242ec0cce8f804d171bcbf.zip
gdb-38b90473602f5c7295242ec0cce8f804d171bcbf.tar.gz
gdb-38b90473602f5c7295242ec0cce8f804d171bcbf.tar.bz2
For SVR4 targets, enable gdb to set breakpoints in shared
library functions before the executable is run. * elfread.c (elf_symtab_read): Handle symbols for shared library functions. * sparc-tdep.c (in_solib_trampoline): Renamed to in_plt_section and moved to objfiles.c. * objfiles.c (in_plt_section): Moved to here from sparc-tdep. * config/tm-sysv4.h (IN_SOLIB_TRAMPOLINE): Use new in_plt_section. * config/sparc/tm-sun4sol2.h (IN_SOLIB_TRAMPOLINE): Removed, the new generic definition from tm-sysv4.h works for Solaris.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/elfread.c24
-rw-r--r--gdb/objfiles.c20
3 files changed, 56 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index da77cff..da0b010 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,16 @@
+Fri Apr 1 00:44:00 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ For SVR4 targets, enable gdb to set breakpoints in shared
+ library functions before the executable is run.
+ * elfread.c (elf_symtab_read): Handle symbols for shared library
+ functions.
+ * sparc-tdep.c (in_solib_trampoline): Renamed to in_plt_section
+ and moved to objfiles.c.
+ * objfiles.c (in_plt_section): Moved to here from sparc-tdep.
+ * config/tm-sysv4.h (IN_SOLIB_TRAMPOLINE): Use new in_plt_section.
+ * config/sparc/tm-sun4sol2.h (IN_SOLIB_TRAMPOLINE): Removed,
+ the new generic definition from tm-sysv4.h works for Solaris.
+
Wed Mar 30 16:14:27 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* elfread.c (elf_symtab_read): Change storage_needed,
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 89df794..11d4b7e 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -311,7 +311,29 @@ elf_symtab_read (abfd, addr, objfile)
/* For non-absolute symbols, use the type of the section
they are relative to, to intuit text/data. Bfd provides
no way of figuring this out for absolute symbols. */
- if (sym -> section == &bfd_abs_section)
+ if (sym -> section == &bfd_und_section
+ && (sym -> flags & BSF_GLOBAL)
+ && (sym -> flags & BSF_FUNCTION))
+ {
+ /* Symbol is a reference to a function defined in
+ a shared library.
+ If its value is non zero then it is usually the
+ absolute address of the corresponding entry in
+ the procedure linkage table.
+ If its value is zero then the dynamic linker has to
+ resolve the symbol. We are unable to find any
+ meaningful address for this symbol in the
+ executable file, so we skip it.
+ Irix 5 has a zero value for all shared library functions
+ in the main symbol table. The dynamic symbol table
+ would provide the right values, but BFD currently
+ cannot handle dynamic ELF symbol tables. */
+ ms_type = mst_solib_trampoline;
+ symaddr = sym -> value;
+ if (symaddr == 0)
+ continue;
+ }
+ else if (sym -> section == &bfd_abs_section)
{
ms_type = mst_abs;
}
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 4f0dfd6..530e19b 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -825,3 +825,23 @@ find_pc_section(pc)
return(NULL);
}
+
+/* In SVR4, we recognize a trampoline by it's section name.
+ That is, if the pc is in a section named ".plt" then we are in
+ a trampoline. */
+
+int
+in_plt_section(pc, name)
+ CORE_ADDR pc;
+ char *name;
+{
+ struct obj_section *s;
+ int retval = 0;
+
+ s = find_pc_section(pc);
+
+ retval = (s != NULL
+ && s->the_bfd_section->name != NULL
+ && STREQ (s->the_bfd_section->name, ".plt"));
+ return(retval);
+}