gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 8 Mar 2010 08:32:49 +0000 (08:32 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 8 Mar 2010 08:32:49 +0000 (08:32 +0000)
* symfile.c (addr_info_make_relative): New variable sect_name, use it.
Do not warn on ".gnu.liblist" and ".gnu.conflict".

gdb/ChangeLog
gdb/symfile.c

index 39c0c789c374995d5190ca2b6f438b388e6d5ff5..71a46794e03eb4a78e162ba27e97bf5d55b4b31e 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * symfile.c (addr_info_make_relative): New variable sect_name, use it.
+       Do not warn on ".gnu.liblist" and ".gnu.conflict".
+
 2010-03-08  Joel Brobecker  <brobecker@adacore.com>
 
        Memory error when reading wrong core file.
index dbb396caff56bccae1847ba2d6a819c7947d6996..aabb94580b83920fef71b759adcc1b443ed9c9c6 100644 (file)
@@ -592,7 +592,8 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
 
   for (i = 0; i < addrs->num_sections && addrs->other[i].name; i++)
     {
-      asection *sect = bfd_get_section_by_name (abfd, addrs->other[i].name);
+      const char *sect_name = addrs->other[i].name;
+      asection *sect = bfd_get_section_by_name (abfd, sect_name);
 
       if (sect)
        {
@@ -609,8 +610,22 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
        }
       else
        {
-         warning (_("section %s not found in %s"), addrs->other[i].name,
-                  bfd_get_filename (abfd));
+         /* This section does not exist in ABFD, which is normally
+            unexpected and we want to issue a warning.
+
+            However, the ELF prelinker does create a couple of sections
+            (".gnu.liblist" and ".gnu.conflict") which are marked in the main
+            executable as loadable (they are loaded in memory from the
+            DYNAMIC segment) and yet are not present in separate debug info
+            files.  This is fine, and should not cause a warning.  Shared
+            libraries contain just the section ".gnu.liblist" but it is not
+            marked as loadable there.  */
+
+         if (!(strcmp (sect_name, ".gnu.liblist") == 0
+               || strcmp (sect_name, ".gnu.conflict") == 0))
+           warning (_("section %s not found in %s"), sect_name,
+                    bfd_get_filename (abfd));
+
          addrs->other[i].addr = 0;
 
          /* SECTINDEX is invalid if ADDR is zero.  */