elf: Remove zero-sized relocation section from section group

Remove zero-sized relocation section from a section group since it has
been removed from the output.

	PR ld/25767
	* elf.c (_bfd_elf_fixup_group_sections): Remove zero-sized
	relocation section from section group.
This commit is contained in:
H.J. Lu 2020-04-03 19:06:29 -07:00
parent 2612e26d4d
commit 3349112e38
2 changed files with 32 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2020-04-03 H.J. Lu <hongjiu.lu@intel.com>
PR ld/25767
* elf.c (_bfd_elf_fixup_group_sections): Remove zero-sized
relocation section from section group.
2020-04-02 Jan W. Jagersma <jwjagersma@gmail.com>
* bfdio.c (bfd_bread, bfd_tell, bfd_seek, bfd_mmap): Always add

View File

@ -7929,19 +7929,34 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
elf_section_flags (s->output_section) &= ~SHF_GROUP;
elf_group_name (s->output_section) = NULL;
}
/* Conversely, if the member section is not being output
but the SHT_GROUP section is, then adjust its size. */
else if (s->output_section == discarded
&& isec->output_section != discarded)
else
{
struct bfd_elf_section_data *elf_sec = elf_section_data (s);
removed += 4;
if (elf_sec->rel.hdr != NULL
&& (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
removed += 4;
if (elf_sec->rela.hdr != NULL
&& (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
removed += 4;
if (s->output_section == discarded
&& isec->output_section != discarded)
{
/* Conversely, if the member section is not being
output but the SHT_GROUP section is, then adjust
its size. */
removed += 4;
if (elf_sec->rel.hdr != NULL
&& (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
removed += 4;
if (elf_sec->rela.hdr != NULL
&& (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
removed += 4;
}
else
{
/* Also adjust for zero-sized relocation member
section. */
if (elf_sec->rel.hdr != NULL
&& elf_sec->rel.hdr->sh_size == 0)
removed += 4;
if (elf_sec->rela.hdr != NULL
&& elf_sec->rela.hdr->sh_size == 0)
removed += 4;
}
}
s = elf_next_in_group (s);
if (s == first)