diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 39c0c789c3..71a46794e0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-03-08 Jan Kratochvil + + * 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 Memory error when reading wrong core file. diff --git a/gdb/symfile.c b/gdb/symfile.c index dbb396caff..aabb94580b 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -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. */