PR29495, rewrite_elf_program_header looping
authorAlan Modra <amodra@gmail.com>
Tue, 16 Aug 2022 07:32:24 +0000 (17:02 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 16 Aug 2022 08:49:34 +0000 (18:19 +0930)
commit45d92439aebd0386ef8af76e1796d08cfe457e1d
tree39589520a9fe3ce0d50794648dc0c7b8acf3a831
parent390ddd6f6812474f1d0cfd5447bc12b8dcba2071
PR29495, rewrite_elf_program_header looping

This patch, in order of significance:
1) Replaces some macros with inline functions.
2) Those inline functions catch and avoid arithmetic overflows when
   comparing addresses.
3) When assigning sections to segments (IS_SECTION_IN_INPUT_SEGMENT)
   use bed->want_p_paddr_set_to_zero to decide whether lma vs p_paddr
   or vma vs p_vaddr should be tested.  When remapping, use the same
   test, and use is_note rather than the more restrictive
   IS_COREFILE_NOTE.

It's important that the later tests not be more restrictive.  If they
are it can lead to the situation triggered by the testcases, where a
section seemingly didn't fit and thus needed a new mapping.  It didn't
fit the new mapping either, and this repeated until memory exhausted.

PR 29495
* elf.c (SEGMENT_END, SECTION_SIZE, IS_CONTAINED_BY_VMA): Delete.
(IS_CONTAINED_BY_LMA, IS_NOTE, IS_COREFILE_NOTE): Delete.
(segment_size, segment_end, section_size): New inline function.
(is_contained_by, is_note): Likewise.
(rewrite_elf_program_header): Use new functions.
bfd/elf.c