* elf.c (_bfd_elf_init_private_section_data): Tweak union copy.

(bfd_section_from_shdr): Don't change SHT_GROUP section name.
	* elflink.c (section_signature): New function.
	(_bfd_elf_section_already_linked): Use it.
This commit is contained in:
Alan Modra
2008-09-28 13:30:35 +00:00
parent 119f424500
commit 9659de1cb3
3 changed files with 24 additions and 10 deletions

View File

@@ -11997,8 +11997,21 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
return ret;
}
/* For a SHT_GROUP section, return the group signature. For other
sections, return the normal section name. */
static const char *
section_signature (asection *sec)
{
if ((sec->flags & SEC_GROUP) != 0
&& elf_next_in_group (sec) != NULL
&& elf_group_name (elf_next_in_group (sec)) != NULL)
return elf_group_name (elf_next_in_group (sec));
return sec->name;
}
void
_bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec,
_bfd_elf_section_already_linked (bfd *abfd, asection *sec,
struct bfd_link_info *info)
{
flagword flags;
@@ -12038,7 +12051,7 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec,
causes trouble for MIPS ELF, which relies on link once semantics
to handle the .reginfo section correctly. */
name = bfd_get_section_name (abfd, sec);
name = section_signature (sec);
if (CONST_STRNEQ (name, ".gnu.linkonce.")
&& (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
@@ -12053,7 +12066,7 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec,
/* We may have 2 different types of sections on the list: group
sections and linkonce sections. Match like sections. */
if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
&& strcmp (name, l->sec->name) == 0
&& strcmp (name, section_signature (l->sec)) == 0
&& bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
{
/* The section has already been linked. See if we should