PR ld/12762

bfd/
	* elflink.c (_bfd_elf_section_already_linked): Return matched
	status.  Remove COFF comdat section handling.
	* linker.c (_bfd_generic_section_already_linked): Return matched
	status.  Don't set SEC_GROUP in l_flags for plugin entries.
	(bfd_section_already_linked): Update prototype.
	* targets.c (_section_already_linked): Likewise.
	* elf-bfd.h (_bfd_elf_section_already_linked): Likewise.
	* libbfd-in.h (_bfd_generic_section_already_linked): Likewise.
	(_bfd_nolink_section_already_linked): Update.
	* libbfd.h: Regenerate.
	* bfd-in2.h: Regenerate.
ld/
	* plugin.c (add_symbols): Exclude comdat_key symbols from symbol
	table if already seen.
This commit is contained in:
Alan Modra
2011-08-05 03:17:12 +00:00
parent 6177242a84
commit 43e1669b2d
10 changed files with 67 additions and 42 deletions

View File

@@ -2888,13 +2888,13 @@ FUNCTION
bfd_section_already_linked
SYNOPSIS
void bfd_section_already_linked (bfd *abfd,
struct already_linked *data,
struct bfd_link_info *info);
bfd_boolean bfd_section_already_linked (bfd *abfd,
struct already_linked *data,
struct bfd_link_info *info);
DESCRIPTION
Check if @var{data} has been already linked during a reloceatable
or final link.
or final link. Return TRUE if it has.
.#define bfd_section_already_linked(abfd, data, info) \
. BFD_SEND (abfd, _section_already_linked, (abfd, data, info))
@@ -2990,7 +2990,7 @@ bfd_section_already_linked_table_free (void)
/* This is used on non-ELF inputs. */
void
bfd_boolean
_bfd_generic_section_already_linked (bfd *abfd,
struct already_linked *linked,
struct bfd_link_info *info)
@@ -3006,7 +3006,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
if (name)
{
sec = NULL;
flags = SEC_GROUP | SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
flags = SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
s_comdat = NULL;
}
else
@@ -3014,7 +3014,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
sec = linked->u.sec;
flags = sec->flags;
if ((flags & SEC_LINK_ONCE) == 0)
return;
return FALSE;
s_comdat = bfd_coff_get_comdat_section (abfd, sec);
@@ -3049,9 +3049,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
l_sec = NULL;
l_owner = l->linked.u.abfd;
l_comdat = NULL;
l_flags = (SEC_GROUP
| SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_DISCARD);
l_flags = SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
}
else
{
@@ -3100,7 +3098,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
&& (l_owner->flags & BFD_PLUGIN) != 0)
{
l->linked = *linked;
return;
return FALSE;
}
break;
@@ -3136,7 +3134,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
sec->kept_section = l_sec;
}
return;
return TRUE;
}
}
@@ -3144,6 +3142,7 @@ _bfd_generic_section_already_linked (bfd *abfd,
if (! bfd_section_already_linked_table_insert (already_linked_list,
linked))
info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
return FALSE;
}
/* Convert symbols in excluded output sections to use a kept section. */