Exclude debuginfo files from "outside of ELF segments" warning
authorKeith Seitz <keiths@redhat.com>
Fri, 13 Nov 2020 17:31:49 +0000 (09:31 -0800)
committerKeith Seitz <keiths@redhat.com>
Fri, 13 Nov 2020 17:31:49 +0000 (09:31 -0800)
When GDB loads an ELF file, it will warn when a section is not located
in an ELF segment:

$ ./gdb -q -iex "set build-id-verbose 0" --ex "b systemctl_main" -ex "r" -batch --args systemctl kexec
Breakpoint 1 at 0xc24d: file ../src/systemctl/systemctl.c, line 8752.
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libgcc_s.so.1
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libcap.so.2
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libacl.so.1
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libcryptsetup.so.12
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libgcrypt.so.20
warning: Loadable section ".note.gnu.property" outside of ELF segments
  in .gnu_debugdata for /lib64/libip4tc.so.2
[snip]
This has feature has also been reported by various users, most notably
the Fedora-EOL'd bug 1553086.

Mark Wielaard explains the issue quite nicely in

   https://sourceware.org/bugzilla/show_bug.cgi?id=24717#c2

The short of it is, the ELF program headers for debuginfo files are
not suited to this particular use case. Consequently, the warning
generated above really is useless and should be ignored.

This patch follows the same heuristic that BFD itself uses.

gdb/ChangeLog
2020-11-13  Keith Seitz  <keiths@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1553086
* elfread.c (elf_symfile_segments): Omit "Loadable section ...
outside of ELF segments" warning for debugin

gdb/ChangeLog
gdb/elfread.c

index f8f6993a45c64e8cdd6ea9990f995a8b7833ba78..652f20a5875d3da173a7e67e8c43acb3a64d22b9 100644 (file)
@@ -1,3 +1,9 @@
+2020-11-13  Keith Seitz  <keiths@redhat.com>
+
+       https://bugzilla.redhat.com/show_bug.cgi?id=1553086
+       * elfread.c (elf_symfile_segments): Omit "Loadable section ...
+       outside of ELF segments" warning for debugin
+
 2020-11-13  Keith Seitz  <keiths@redhat.com>
 
        PR gdb/23034
index 7915dcdcce9bd97d17320c7357cc4360eb4c1053..ccd7ce50d5102dfe1472a76318b03910e9a0cdff 100644 (file)
@@ -147,7 +147,12 @@ elf_symfile_segments (bfd *abfd)
         RealView) use SHT_NOBITS for uninitialized data.  Since it is
         uninitialized, it doesn't need a program header.  Such
         binaries are not relocatable.  */
-      if (bfd_section_size (sect) > 0 && j == num_segments
+
+      /* Exclude debuginfo files from this warning, too, since those
+        are often not strictly compliant with the standard. See, e.g.,
+        ld/24717 for more discussion.  */
+      if (!is_debuginfo_file (abfd)
+         && bfd_section_size (sect) > 0 && j == num_segments
          && (bfd_section_flags (sect) & SEC_LOAD) != 0)
        warning (_("Loadable section \"%s\" outside of ELF segments\n  in %s"),
                 bfd_section_name (sect), bfd_get_filename (abfd));