aboutsummaryrefslogtreecommitdiff
path: root/include/elf/internal.h
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2018-06-21 09:37:58 +0100
committerAlan Hayward <alan.hayward@arm.com>2018-06-21 09:37:58 +0100
commit57c0d77c2ce5e583dab322e05f8291bcbad0ccd3 (patch)
tree285687451f3e8b296f404aa8990b95df36472835 /include/elf/internal.h
parent0d0b0ea29af6abc0790d22f843a3d0cb09424a3a (diff)
downloadfsf-binutils-gdb-57c0d77c2ce5e583dab322e05f8291bcbad0ccd3.zip
fsf-binutils-gdb-57c0d77c2ce5e583dab322e05f8291bcbad0ccd3.tar.gz
fsf-binutils-gdb-57c0d77c2ce5e583dab322e05f8291bcbad0ccd3.tar.bz2
Use offsets instead of addresses in ELF_SECTION_IN_SEGMENT for non SHT_NOBITS
For sections that are not SHT_NOBITS, use sh_offset and p_offset instead of sh_addr and p_vaddr when calculating if a section fits in a segment. Both methods are valid when using the GNU linker. include/ * elf/internal.h (ELF_SECTION_IN_SEGMENT): Don’t check addresses for non SHT_NOBITS.
Diffstat (limited to 'include/elf/internal.h')
-rw-r--r--include/elf/internal.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/elf/internal.h b/include/elf/internal.h
index 05f9fab..b012820 100644
--- a/include/elf/internal.h
+++ b/include/elf/internal.h
@@ -342,8 +342,10 @@ struct elf_segment_map
&& (((sec_hdr)->sh_offset - (segment)->p_offset \
+ ELF_SECTION_SIZE(sec_hdr, segment)) \
<= (segment)->p_filesz))) \
- /* SHF_ALLOC sections must have VMAs within the segment. */ \
+ /* SHT_NOBITS sections with SHF_ALLOC must have VMAs within the \
+ segment. */ \
&& (!(check_vma) \
+ || (sec_hdr)->sh_type != SHT_NOBITS \
|| ((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
|| ((sec_hdr)->sh_addr >= (segment)->p_vaddr \
&& (!(strict) \