[binutils-gdb] Use offsets instead of addresses in ELF_SECTION_IN_SEGMENT for non SHT_NOBITS

Alan Hayward alahay01@sourceware.org
Thu Jun 21 08:42:00 GMT 2018


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=57c0d77c2ce5e583dab322e05f8291bcbad0ccd3

commit 57c0d77c2ce5e583dab322e05f8291bcbad0ccd3
Author: Alan Hayward <alan.hayward@arm.com>
Date:   Thu Jun 21 09:37:58 2018 +0100

    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.

Diff:
---
 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  <alan.hayward@arm.com>
+
+	* elf/internal.h (ELF_SECTION_IN_SEGMENT): Don’t check addresses
+	for non SHT_NOBITS.
+
 2018-06-19  Simon Marchi  <simon.marchi@ericsson.com>
 
 	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)						\



More information about the Binutils-cvs mailing list