From 57c0d77c2ce5e583dab322e05f8291bcbad0ccd3 Mon Sep 17 00:00:00 2001 From: Alan Hayward Date: Thu, 21 Jun 2018 09:37:58 +0100 Subject: [PATCH] Use offsets instead of addresses in ELF_SECTION_IN_SEGMENT for non SHT_NOBITS MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- include/ChangeLog | 5 +++++ include/elf/internal.h | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/ChangeLog b/include/ChangeLog index b8a0a23..f5fdf43 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2018-06-21 Alan Hayward + + * elf/internal.h (ELF_SECTION_IN_SEGMENT): Don’t check addresses + for non SHT_NOBITS. + 2018-06-19 Simon Marchi Sync with GCC 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) \ -- 2.7.4