[binutils-gdb] Don't merge sections with differing MASKPROC or MASKOS flags

Alan Modra amodra@sourceware.org
Wed Mar 11 05:21:33 GMT 2020


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

commit 1db6f990303ab6c45909f8e133641ef6c24a04d2
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Mar 11 10:04:53 2020 +1030

    Don't merge sections with differing MASKPROC or MASKOS flags
    
    Not just SHF_EXCLUDE but any of these flags ought to prevent merging
    of sections for ld -r.
    
            * ldelf.c (elf_orphan_compatible): Return false when two sections
            have differing SHF_MASKPROC or SHF_MASKOS flags.

Diff:
---
 ld/ChangeLog | 5 +++++
 ld/ldelf.c   | 8 ++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 666ce5cb7de..5b8db22775d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2020-03-11  Alan Modra  <amodra@gmail.com>
+
+	* ldelf.c (elf_orphan_compatible): Return false when two sections
+	have differing SHF_MASKPROC or SHF_MASKOS flags.
+
 2020-03-05  Alan Modra  <amodra@gmail.com>
 
 	PR 25570
diff --git a/ld/ldelf.c b/ld/ldelf.c
index b055929d02a..fa4bf9f7278 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -1865,13 +1865,13 @@ elf_orphan_compatible (asection *in, asection *out)
   if (elf_section_data (out)->this_hdr.sh_info
       != elf_section_data (in)->this_hdr.sh_info)
     return FALSE;
-  /* We can't merge with member of output section group nor merge two
-     sections with differing SHF_EXCLUDE when doing a relocatable link.
-   */
+  /* We can't merge with a member of an output section group or merge
+     two sections with differing SHF_EXCLUDE or other processor and OS
+     specific flags when doing a relocatable link.  */
   if (bfd_link_relocatable (&link_info)
       && (elf_next_in_group (out) != NULL
 	  || ((elf_section_flags (out) ^ elf_section_flags (in))
-	      & SHF_EXCLUDE) != 0))
+	      & (SHF_MASKPROC | SHF_MASKOS)) != 0))
     return FALSE;
   return _bfd_elf_match_sections_by_type (link_info.output_bfd, out,
 					  in->owner, in);


More information about the Binutils-cvs mailing list