diff options
author | Christian Eggers <ceggers@gmx.de> | 2020-03-02 20:17:00 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-03-13 15:48:01 +1030 |
commit | 666318230c54a348763927c80d085542d9890c42 (patch) | |
tree | 8156ad937b488fb6a4377ade6beb0f1db36b0b7d /include | |
parent | 502794d4321dc17d5c9fb591bedc8761118b2943 (diff) | |
download | binutils-666318230c54a348763927c80d085542d9890c42.zip binutils-666318230c54a348763927c80d085542d9890c42.tar.gz binutils-666318230c54a348763927c80d085542d9890c42.tar.bz2 |
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.
Diffstat (limited to 'include')
-rw-r--r-- | include/ChangeLog | 9 | ||||
-rw-r--r-- | include/bfdlink.h | 4 | ||||
-rw-r--r-- | include/elf/internal.h | 7 |
3 files changed, 15 insertions, 5 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index aa2c551..2fefb46 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,5 +1,14 @@ 2020-03-13 Christian Eggers <ceggers@gmx.de> + * 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 + +2020-03-13 Christian Eggers <ceggers@gmx.de> + * elf/internal.h (struct elf_internal_phdr): Add unit (octets) to several member field comments. (Elf_Internal_Shdr): likewise. diff --git a/include/bfdlink.h b/include/bfdlink.h index 8d85530..40a6d4d 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -801,9 +801,9 @@ struct bfd_link_order struct bfd_link_order *next; /* Type of link_order. */ enum bfd_link_order_type type; - /* Offset within output section. */ + /* Offset within output section in bytes. */ bfd_vma offset; - /* Size within output section. */ + /* Size within output section in octets. */ bfd_size_type size; /* Type specific information. */ union diff --git a/include/elf/internal.h b/include/elf/internal.h index d626ade..9692028 100644 --- a/include/elf/internal.h +++ b/include/elf/internal.h @@ -91,7 +91,8 @@ struct elf_internal_phdr { bfd_vma p_paddr; /* Segment physical address in octets. */ bfd_vma p_filesz; /* Segment size in file in octets. */ bfd_vma p_memsz; /* Segment size in memory in octets. */ - bfd_vma p_align; /* Segment alignment, file & memory. */ + bfd_vma p_align; /* Segment alignment in bytes, file + & memory */ }; typedef struct elf_internal_phdr Elf_Internal_Phdr; @@ -266,13 +267,13 @@ struct elf_segment_map unsigned long p_type; /* Program segment flags. */ unsigned long p_flags; - /* Program segment physical address. */ + /* Program segment physical address in octets. */ bfd_vma p_paddr; /* Program segment virtual address offset from section vma in bytes. */ bfd_vma p_vaddr_offset; /* Program segment alignment. */ bfd_vma p_align; - /* Segment size in file and memory */ + /* Segment size in file and memory in octets. */ bfd_vma p_size; /* Whether the p_flags field is valid; if not, the flags are based on the section flags. */ |