PR4499, assign file positions assumes segment offsets increasing

H.J. Lu hjl.tools@gmail.com
Fri Feb 21 13:10:00 GMT 2020


On Thu, Oct 24, 2019 at 8:17 PM Alan Modra <amodra@gmail.com> wrote:
>
> This rewrites much of assign_file_positions_for_non_load_sections to
> allow objcopy and strip to handle cases like that in PR4499 where
> program headers were not in their usual position immediately after the
> ELF file header, and PT_LOAD headers were not sorted by paddr.
>
> Sorting headers as done here broke nacl targets and spu overlay tests,
> so we have a way to partially disable the sorting via no_sort_lma.
>
>         PR 4499
> include/
>         * elf/internal.h (struct elf_segment_map): Delete header_size.
>         Add no_sort_lma and idx.
> bfd/
>         * elf-nacl.c (nacl_modify_segment_map): Set no_sort_lma for all
>         PT_LOAD segments.
>         * elf32-spu.c (spu_elf_modify_segment_map): Likewise on overlay
>         PT_LOAD segments.
>         * elf.c (elf_sort_segments): New function.
>         (assign_file_positions_except_relocs): Use shortcuts to elfheader
>         and elf_tdata.  Seek to e_phoff not sizeof_ehdr to write program
>         headers.  Move PT_PHDR check..
>         (assign_file_positions_for_non_load_sections): ..and code setting
>         PT_PHDR p_vaddr and p_paddr, and code setting __ehdr_start value..
>         (assign_file_positions_for_load_sections): ..to here.  Sort
>         PT_LOAD headers.  Delete header_pad code.  Use actual number of
>         headers rather than allocated in calculating size for program
>         headers.  Don't assume program headers follow ELF file header.
>         Simplify pt_load_count code.  Only set "off" for PT_LOAD or
>         PT_NOTE in cores.
>         (rewrite_elf_program_header): Set p_vaddr_offset for segments
>         that include file and program headers.
>         (copy_elf_program_header): Likewise, replacing header_size code.
>

This caused:

https://sourceware.org/bugzilla/show_bug.cgi?id=25585

-- 
H.J.



More information about the Binutils mailing list