Fix several mix up between octets and bytes in ELF program headers
authorChristian Eggers <ceggers@gmx.de>
Mon, 2 Mar 2020 20:11:00 +0000 (20:11 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 13 Mar 2020 05:07:11 +0000 (15:37 +1030)
commit502794d4321dc17d5c9fb591bedc8761118b2943
tree626a0ece2f89964ed943c8ebe689573e522734f1
parentfd486f32d15e3299b905084a697fac6349c43f76
Fix several mix up between octets and bytes in ELF program headers

When converting between addresses in ELF headers [octets] and bfd
LMA/VMA [bytes], the number of octets per byte needs to be
incorporated.

In ld, the SIZEOF_HEADERS linker script statement must be resolved to
bytes instead of octets.

include/
* elf/internal.h (struct elf_internal_phdr): Add unit (octets)
to several member field comments.
(Elf_Internal_Shdr): likewise.
bfd/
* elf.c (_bfd_elf_make_section_from_shdr): Introduce new temp
opb.  Divide Elf_Internal_Shdr::sh_addr by opb when setting
section LMA/VMA.
(_bfd_elf_make_section_from_phdr): Similarly.
(elf_fake_sections): Fix calculation of
Elf_Internal_shdr::sh_addr from section VMA.
(_bfd_elf_map_sections_to_segments): Fix mixup between octets
and bytes.
(assign_file_positions_for_load_sections): Fix calculations of
Elf_Internal_shdr::p_vaddr and p_paddr from section LMA/VMA.  Fix
comparison between program header address and section LMA.
(assign_file_positions_for_non_load_sections): Likewise.
(rewrite_elf_program_header): Likewise.  Introduce new temp opb.
(IS_CONTAINED_BY_VMA): Add parameter opb.
(IS_CONTAINED_BY_LMA,IS_SECTION_IN_INPUT_SEGMENT,
INCLUDE_SECTION_IN_SEGMENT): Likewise.
(copy_elf_program_header): Update call to ELF_SECTION_IN_SEGMENT.
Fix calculations of p_addr_valid and p_vaddr_offset.
* elflink.c (elf_link_add_object_symbols): Multiply section VMA
with octets per byte when comparing against p_vaddr.
ld/
* ldexp.c (fold_name): Return SIZEOF_HEADERS in bytes.
bfd/ChangeLog
bfd/elf.c
bfd/elflink.c
include/ChangeLog
include/elf/internal.h
ld/ChangeLog
ld/ldexp.c