PR16690, objcopy/strip ELF program header p_vaddr confusion

Alan Modra amodra@gmail.com
Wed Mar 12 00:23:00 GMT 2014


copy_elf_program_header has logic to reject non-alloc sections when
calculating p_vaddr offset for padding, but blithely assumed the
first section in a segment was allocated.
    
    	PR 16690
    	* elf.c (copy_elf_program_header): Ignore first section lma if
    	non-alloc.

diff --git a/bfd/elf.c b/bfd/elf.c
index ce7878c..3ded683 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6259,7 +6259,7 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
 	    phdr_included = TRUE;
 	}
 
-      lowest_section = first_section;
+      lowest_section = NULL;
       if (section_count != 0)
 	{
 	  unsigned int isec = 0;
@@ -6276,7 +6276,8 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
 		    {
 		      bfd_vma seg_off;
 
-		      if (section->lma < lowest_section->lma)
+		      if (lowest_section == NULL
+			  || section->lma < lowest_section->lma)
 			lowest_section = section;
 
 		      /* Section lmas are set up from PT_LOAD header

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list