[binutils-gdb] Stop the BFD library from complaining if a segment has no sections attached to it.

Nick Clifton nickc@sourceware.org
Fri Feb 7 12:55:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9984857cfd9a85a5d1b99162f9838aba099d20a0

commit 9984857cfd9a85a5d1b99162f9838aba099d20a0
Author: Nick Clifton <nickc@redhat.com>
Date:   Fri Feb 7 12:55:05 2020 +0000

    Stop the BFD library from complaining if a segment has no sections attached to it.
    
    	PR 23932
    	* elf.c (rewrite_elf_program_header): Do not complain if no
    	sections are mapped to a segment.

Diff:
---
 bfd/ChangeLog |  6 ++++++
 bfd/elf.c     | 17 +++++++++--------
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e1a8412..584dd7f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-07  Nick Clifton  <nickc@redhat.com>
+
+	PR 23932
+	* elf.c (rewrite_elf_program_header): Do not complain if no
+	sections are mapped to a segment.
+
 2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR ld/25490
diff --git a/bfd/elf.c b/bfd/elf.c
index 5e6b9a0..c85face 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7360,14 +7360,9 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
 
 	  /* PR 23932.  A corrupt input file may contain sections that cannot
 	     be assigned to any segment - because for example they have a
-	     negative size - or segments that do not contain any sections.  */
-	  if (map->count == 0)
-	    {
-	    sorry:
-	      bfd_set_error (bfd_error_sorry);
-	      free (sections);
-	      return FALSE;
-	    }
+	     negative size - or segments that do not contain any sections.
+	     But there are also valid reasons why a segment can be empty.
+	     So allow a count of zero.  */
 
 	  /* Add the current segment to the list of built segments.  */
 	  *pointer_to_map = map;
@@ -7399,6 +7394,12 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
 	      map->includes_filehdr = 0;
 	      map->includes_phdrs = 0;
 	    }
+
+	  continue;
+	sorry:
+	  bfd_set_error (bfd_error_sorry);
+	  free (sections);
+	  return FALSE;
 	}
       while (isec < section_count);



More information about the Binutils-cvs mailing list