aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/elfread.c17
2 files changed, 23 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5a8eb1c..68267a3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2011-12-19 Joel Brobecker <brobecker@adacore.com>
+
+ * elfread.c (elf_symtab_read): Ignore undefined symbols with
+ nonzero addresses if they do not correspond to a .plt section
+ when one is available in the objfile.
+
2011-12-17 Andreas Schwab <schwab@linux-m68k.org>
* cp-name-parser.y (cp_merge_demangle_parse_infos): Don't use
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 067c77f..fd65ecf 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -303,6 +303,23 @@ elf_symtab_read (struct objfile *objfile, int type,
if (!sect)
continue;
+ /* On ia64-hpux, we have discovered that the system linker
+ adds undefined symbols with nonzero addresses that cannot
+ be right (their address points inside the code of another
+ function in the .text section). This creates problems
+ when trying to determine which symbol corresponds to
+ a given address.
+
+ We try to detect those buggy symbols by checking which
+ section we think they correspond to. Normally, PLT symbols
+ are stored inside their own section, and the typical name
+ for that section is ".plt". So, if there is a ".plt"
+ section, and yet the section name of our symbol does not
+ start with ".plt", we ignore that symbol. */
+ if (strncmp (sect->name, ".plt", 4) != 0
+ && bfd_get_section_by_name (abfd, ".plt") != NULL)
+ continue;
+
symaddr += ANOFFSET (objfile->section_offsets, sect->index);
msym = record_minimal_symbol