Support debuginfo files with empty group sections.
authorNick Clifton <nickc@redhat.com>
Fri, 9 Sep 2022 11:01:08 +0000 (12:01 +0100)
committerNick Clifton <nickc@redhat.com>
Fri, 9 Sep 2022 11:01:55 +0000 (12:01 +0100)
PR 29532
bfd * elf.c (setup_group): Do not return false if there is no group
information available.

bionutils* objcopy.c (setup_section): Leave group sections intact when
creating separate debuginfo files.

bfd/ChangeLog
bfd/elf.c
binutils/ChangeLog
binutils/objcopy.c

index a0e1e87ea26ff74641bb9086995e1a29d4ef9050..c618d817ff9138507437feec60da9cf0c0cb3773 100644 (file)
@@ -1,3 +1,9 @@
+2022-09-09  Nick Clifton  <nickc@redhat.com>
+
+       PR 29532
+       * elf.c (setup_group): Do not return false if there is no group
+       information available.
+
 2022-09-02  Aaron Merey  <amerey@redhat.com>
 
        * aout-target.h (MY_find_nearest_line_with_alt): New macro.
index 1f427e40a443eb94c629cab73ba5bf576caf5eea..2eb2a97370a5e81e98373e2477ec6ea0f769c55b 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -830,7 +830,11 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: no group info for section '%pA'"),
                          abfd, newsect);
-      return false;
+      /* PR 29532: Return true here, even though the group info has not been
+        read.  Separate debug info files can have empty group sections, but
+        we do not want this to prevent them from being loaded as otherwise
+        GDB will not be able to use them.  */
+      return true;
     }
   return true;
 }
index 5f8403b158b7b17c81576fed751a0c411a0d44fe..3cac2353e3bc55e06d53ee5b808274fbf35eb637 100644 (file)
@@ -1,3 +1,9 @@
+2022-09-09  Nick Clifton  <nickc@redhat.com>
+
+       PR 29532
+       * objcopy.c (setup_section): Leave group sections intact when
+       creating separate debuginfo files.
+
 2022-09-08  Nick Clifton  <nickc@redhat.com>
 
        PR 29523
index 1118a2256a4fe49e2a261a8fdd5143d15b75fa8e..75992e8a3f797609bcd81166f2e8f7c6d6eb623f 100644 (file)
@@ -4084,17 +4084,26 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
           && (flags & (SEC_ALLOC | SEC_GROUP)) != 0
           && !is_nondebug_keep_contents_section (ibfd, isection))
     {
-      flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP);
+      flagword remove = SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP;
+
       if (bfd_get_flavour (obfd) == bfd_target_elf_flavour)
        {
-         make_nobits = true;
+         /* PR 29532: Copy group sections intact as otherwise we end up with
+            empty groups.  This prevents separate debug info files from
+            being used with GDB, if they were based upon files that
+            originally contained groups.  */
+         if (flags & SEC_GROUP)
+           remove = SEC_LOAD;
+         else
+           make_nobits = true;
 
          /* Twiddle the input section flags so that it seems to
             elf.c:copy_private_bfd_data that section flags have not
             changed between input and output sections.  This hack
             prevents wholesale rewriting of the program headers.  */
-         isection->flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP);
+         isection->flags &= ~remove;
        }
+      flags &= ~remove;
     }
 
   osection = bfd_make_section_anyway_with_flags (obfd, name, flags);