ld -r: Don't merge with member of output section group

When doing a relocatable link, members of input section group are
placed in their own output sections.  We need to make sure that no
input sections are merged with member of output section group.

	PR ld/24819
	* emultempl/elf32.em (elf_orphan_compatible): Return FALSE for
	member of output section group when doing a relocatable link.
	* testsuite/ld-elf/pr24819.d: New file.
	* testsuite/ld-elf/pr24819.s: Likewise.
This commit is contained in:
H.J. Lu
2019-07-18 08:01:45 -07:00
parent 71c4e95abe
commit 54d7dae59a
4 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2019-07-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/24819
* emultempl/elf32.em (elf_orphan_compatible): Return FALSE for
member of output section group when doing a relocatable link.
* testsuite/ld-elf/pr24819.d: New file.
* testsuite/ld-elf/pr24819.s: Likewise.
2019-07-13 Alan Modra <amodra@gmail.com> 2019-07-13 Alan Modra <amodra@gmail.com>
* testsuite/ld-powerpc/tlsso.r: Update. * testsuite/ld-powerpc/tlsso.r: Update.

View File

@ -2028,10 +2028,13 @@ elf_orphan_compatible (asection *in, asection *out)
if (elf_section_data (out)->this_hdr.sh_info if (elf_section_data (out)->this_hdr.sh_info
!= elf_section_data (in)->this_hdr.sh_info) != elf_section_data (in)->this_hdr.sh_info)
return FALSE; return FALSE;
/* We can't merge two sections with differing SHF_EXCLUDE when doing /* We can't merge with member of output section group nor merge two
a relocatable link. */ sections with differing SHF_EXCLUDE when doing a relocatable link.
*/
if (bfd_link_relocatable (&link_info) if (bfd_link_relocatable (&link_info)
&& ((elf_section_flags (out) ^ elf_section_flags (in)) & SHF_EXCLUDE) != 0) && (elf_next_in_group (out) != NULL
|| ((elf_section_flags (out) ^ elf_section_flags (in))
& SHF_EXCLUDE) != 0))
return FALSE; return FALSE;
return _bfd_elf_match_sections_by_type (link_info.output_bfd, out, return _bfd_elf_match_sections_by_type (link_info.output_bfd, out,
in->owner, in); in->owner, in);

View File

@ -0,0 +1,8 @@
#ld: -r
#readelf: -S --wide
#...
\[[ 0-9]+\] \.data\.foo[ \t]+PROGBITS[ \t0-9a-f]+WAG .*
#...
\[[ 0-9]+\] \.data\.foo[ \t]+PROGBITS[ \t0-9a-f]+WA .*
#pass

View File

@ -0,0 +1,4 @@
.section .data.foo,"awG",%progbits,.group1,comdat
.byte 0
.section .data.foo,"aw",%progbits
.byte 0