[binutils-gdb/binutils-2_34-branch] PR25585, PHDR segment not covered by LOAD segment

Alan Modra amodra@sourceware.org
Sat Feb 22 03:05:00 GMT 2020


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

commit acc4a8b8ac83077819948126bc7501d35eb1ea74
Author: Alan Modra <amodra@gmail.com>
Date:   Sat Feb 22 12:46:33 2020 +1030

    PR25585, PHDR segment not covered by LOAD segment
    
    I closed this bug as invalid, but I think it is worth mentioning in NEWS
    that older linkers didn't check PT_PHDR very well.  The patch also allows
    people to force an output file with --noinhibit-exec after the error.
    
    bfd/
    	PR 25585
    	* elf.c (assign_file_positions_for_load_sections): Continue linking
    	on "PHDR segment not covered by LOAD segment" errors.
    ld/
    	PR 25585
    	* NEWS: Mention better "PHDR segment not covered by LOAD segment"
    	checking.
    
    (cherry picked from commit 7b3c27152b5695177a2cd5adc0d7b0255f99aca0)

Diff:
---
 bfd/ChangeLog | 6 ++++++
 bfd/elf.c     | 6 +++++-
 ld/ChangeLog  | 6 ++++++
 ld/NEWS       | 6 ++++++
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 17cb977..e5da1b4 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-22  Alan Modra  <amodra@gmail.com>
+
+	PR 25585
+	* elf.c (assign_file_positions_for_load_sections): Continue linking
+	on "PHDR segment not covered by LOAD segment" errors.
+
 2020-02-19  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR binutils/25355
diff --git a/bfd/elf.c b/bfd/elf.c
index a8d98a6..f02b724 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -5934,7 +5934,11 @@ assign_file_positions_for_load_sections (bfd *abfd,
 	  _bfd_error_handler (_("%pB: error: PHDR segment not covered"
 				" by LOAD segment"),
 			      abfd);
-	  return FALSE;
+	  if (link_info == NULL)
+	    return FALSE;
+	  /* Arrange for the linker to exit with an error, deleting
+	     the output file unless --noinhibit-exec is given.  */
+	  link_info->callbacks->info ("%X");
 	}
 
       /* Check that all sections are in a PT_LOAD segment.
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 999e0f4..ebbf64e 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-22  Alan Modra  <amodra@gmail.com>
+
+	PR 25585
+	* NEWS: Mention better "PHDR segment not covered by LOAD segment"
+	checking.
+
 2020-02-14  Nick Clifton  <nickc@redhat.com>
 
 	Import from the mainline:
diff --git a/ld/NEWS b/ld/NEWS
index f659ccf..7734d23 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -2,6 +2,12 @@
 
 Changes in 2.34:
 
+* The ld check for "PHDR segment not covered by LOAD segment" is more
+  effective, catching cases that were wrongly allowed by previous versions of
+  ld.  If you see this error it is likely you are linking with a bad linker
+  script or the binary you are building is not intended to be loaded by a
+  dynamic loader.  In the latter case --no-dynamic-linker is appropriate.
+
 * cr16c support removed.
 
 * Add support for z80-elf.



More information about the Binutils-cvs mailing list