diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 68527a31f0..15aa4ee174 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-02-26 Alan Modra + + * elf.c (assign_file_positions_except_relocs): Don't segfault + when actual number of phdrs is less than allocated. Delete + outdated comment. Formatting. + 2018-02-26 Alan Modra * elf-m10300.c, * elf-s390-common.c, * elf32-arc.c, * elf32-cris.c, diff --git a/bfd/elf.c b/bfd/elf.c index 184ab31f41..5d39a9881d 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -6127,9 +6127,7 @@ assign_file_positions_except_relocs (bfd *abfd, } /* Write out the program headers. */ - alloc = elf_program_header_size (abfd) / bed->s->sizeof_phdr; - - /* Sort the program headers into the ordering required by the ELF standard. */ + alloc = elf_elfheader (abfd)->e_phnum; if (alloc == 0) return TRUE; @@ -6151,14 +6149,14 @@ assign_file_positions_except_relocs (bfd *abfd, alloc)) && tdata->phdr[1].p_type == PT_LOAD && (tdata->phdr[1].p_vaddr > tdata->phdr[0].p_vaddr - || (tdata->phdr[1].p_vaddr + tdata->phdr[1].p_memsz) - < (tdata->phdr[0].p_vaddr + tdata->phdr[0].p_memsz))) + || (tdata->phdr[1].p_vaddr + tdata->phdr[1].p_memsz + < tdata->phdr[0].p_vaddr + tdata->phdr[0].p_memsz))) { /* The fix for this error is usually to edit the linker script being used and set up the program headers manually. Either that or leave room for the headers at the start of the SECTIONS. */ - _bfd_error_handler (_("\ -%pB: error: PHDR segment not covered by LOAD segment"), + _bfd_error_handler (_("%pB: error: PHDR segment not covered" + " by LOAD segment"), abfd); return FALSE; }