Fix several mix up between octets and bytes in ELF program headers
authorChristian Eggers <ceggers@gmx.de>
Mon, 2 Mar 2020 20:17:00 +0000 (20:17 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 13 Mar 2020 05:18:01 +0000 (15:48 +1030)
commit666318230c54a348763927c80d085542d9890c42
tree8156ad937b488fb6a4377ade6beb0f1db36b0b7d
parent502794d4321dc17d5c9fb591bedc8761118b2943
Fix several mix up between octets and bytes in ELF program headers

Fixes additional locations not handled in the first patch.

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

include/
* bfdlink.h (struct bfd_link_order): Add unit (bytes/octets) to
offset and size members.
* elf/internal.h (struct elf_internal_phdr): Likewise for
p_align member.
(struct elf_segment_map): Likewise for p_paddr and p_size
members
bfd/
* bfd.c (bfd_record_phdr): New local "opb".  Fix assignment of
"p_paddr" from "at".
* elfcode.h (bfd_from_remote_memory): Add units to several
parameters.  New local "opb".  Fix usage of p_align.  Fix
calculation of "localbase" from "ehdr_vma" and "p_vaddr".  Fix
call of target_read_memory.
* elflink.c (elf_fixup_link_order): Fix scope of "s" local.  Fix
calculation of "offset" and "output_offset".
(bfd_elf_final_link): New local "opb".  Fix calculation of "size"
from "offset" and fix calculation of "end" from "vma+size".  Fix
comparison between "sh_addr" and "vma"/"output_offset".
(bfd_elf_discard_info): Fix calculation of "eh_alignment".
* elf-bfd.h (struct elf_link_hash_table): Add unit to tls_size
member.
* elf.c (_bfd_elf_map_sections_to_segments): Add unit (bytes/
octets) to "wrap_to2 and "phdr_size" locals.  Fix calculation of
"wrap_to" value.  Add unit (bytes) to phdr_lma variable.  Fix
assignment of p_paddr from phdr_lma.  Fix comparison between
"lma+size" and "next->lma".
(elf_sort_segments): Fix assignment from p_paddr to lma.
(assign_file_positions_for_load_sections): Add unit (bytes) to
local "align".  Fix calculation of local "off_adjust".  Fix
calculation of local "filehdr_vaddr".
(assign_file_positions_for_non_load_sections): New local "opb".
Fix calculation of "end" from "p_size". Fix comparison between
"vma+SECTION_SIZE" and "start".  Fix calculation of "p_memsz"
from "end" and "p_vaddr".
(rewrite_elf_program_header): Fix comparison between p_vaddr and
vma.  Fix assignment to p_paddr from lma.  Fix comparison between
p_paddr and lma.  Fix assignment to p_paddr from lma.
* merge.c (sec_merge_emit): New local "opb". Convert
"alignment_power" to octets.
(_bfd_add_merge_section): New locals "alignment_power" and
"opb".  Fix comparison between "alignment_power" and
"sizeof(align)".
(_bfd_merge_sections): New local "opb".  Divide size by opb
before checking align mask.
bfd/ChangeLog
bfd/bfd.c
bfd/elf-bfd.h
bfd/elf.c
bfd/elfcode.h
bfd/elflink.c
bfd/merge.c
include/ChangeLog
include/bfdlink.h
include/elf/internal.h