try ignoring bad PLT entries in ELF symbol tables
authorJoel Brobecker <brobecker@gnat.com>
Mon, 19 Dec 2011 04:36:29 +0000 (04:36 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Mon, 19 Dec 2011 04:36:29 +0000 (04:36 +0000)
Comment says it all:

         /* 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.  */

gdb/ChangeLog:

        * 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.

gdb/ChangeLog
gdb/elfread.c

index 5a8eb1c0647db0c06473e9229ec7b9e21d2d0de1..68267a31545bb45b1473b3020b7594fd3277b1d6 100644 (file)
@@ -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
index 067c77f26dcc354f9e8ce08055044c535109549c..fd65ecf91597b4598660ecdfc43468b3704f917e 100644 (file)
@@ -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
This page took 0.031857 seconds and 4 git commands to generate.