From 1db6f990303ab6c45909f8e133641ef6c24a04d2 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 11 Mar 2020 10:04:53 +1030 Subject: [PATCH] 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. --- 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 + + * ldelf.c (elf_orphan_compatible): Return false when two sections + have differing SHF_MASKPROC or SHF_MASKOS flags. + 2020-03-05 Alan Modra 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); -- 2.30.2