objcopy/strip ELF program header p_vaddr confusion

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.
This commit is contained in:
Alan Modra 2014-03-12 10:33:26 +10:30
parent 32ed590d7e
commit bbefd0a926
2 changed files with 9 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2014-03-12 Alan Modra <amodra@gmail.com>
PR 16690
* elf.c (copy_elf_program_header): Ignore first section lma if
non-alloc.
2014-03-11 Alan Modra <amodra@gmail.com>
PR 16686

View file

@ -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