summaryrefslogtreecommitdiff
path: root/gdb/elfread.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/elfread.c')
-rw-r--r--gdb/elfread.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 067c77f26dc..fd65ecf9159 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