PR ld/12365

bfd/
	* elfcode.h (elf_slurp_symbol_table): Put common plugin IR symbols
	in their own common section.
	* elflink.c (elf_link_add_object_symbols): Likewise.
	* linker.c (generic_link_check_archive_element): Don't lose flags
	if common section is pre-existing.
	(_bfd_generic_link_add_one_symbol): Likewise.
ld/
	* ldfile.c (ldfile_try_open_bfd): Move code creating and switching
	to plugin IR BFD..
	* ldmain.c (add_archive_element): ..and similar code here..
	* plugin.c (plugin_maybe_claim): ..to here.  New function.
	(plugin_call_claim_file): Make static.
	(asymbol_from_plugin_symbol): Set ELF st_shndx for common syms.
	(plugin_multiple_common): New function.
	(plugin_call_all_symbols_read): Hook in plugin_multiple_common.
	* plugin.h (plugin_call_claim_file): Don't declare.
	(plugin_maybe_claim): Declare.
This commit is contained in:
Alan Modra
2011-04-20 00:22:08 +00:00
parent 24f58f47de
commit 02d002477b
9 changed files with 138 additions and 62 deletions

View File

@ -1296,7 +1296,7 @@ generic_link_check_archive_element (bfd *abfd,
else
h->u.c.p->section = bfd_make_section_old_way (symbfd,
p->section->name);
h->u.c.p->section->flags = SEC_ALLOC;
h->u.c.p->section->flags |= SEC_ALLOC;
}
else
{
@ -1756,13 +1756,13 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
if (section == bfd_com_section_ptr)
{
h->u.c.p->section = bfd_make_section_old_way (abfd, "COMMON");
h->u.c.p->section->flags = SEC_ALLOC;
h->u.c.p->section->flags |= SEC_ALLOC;
}
else if (section->owner != abfd)
{
h->u.c.p->section = bfd_make_section_old_way (abfd,
section->name);
h->u.c.p->section->flags = SEC_ALLOC;
h->u.c.p->section->flags |= SEC_ALLOC;
}
else
h->u.c.p->section = section;
@ -1803,13 +1803,13 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
{
h->u.c.p->section
= bfd_make_section_old_way (abfd, "COMMON");
h->u.c.p->section->flags = SEC_ALLOC;
h->u.c.p->section->flags |= SEC_ALLOC;
}
else if (section->owner != abfd)
{
h->u.c.p->section
= bfd_make_section_old_way (abfd, section->name);
h->u.c.p->section->flags = SEC_ALLOC;
h->u.c.p->section->flags |= SEC_ALLOC;
}
else
h->u.c.p->section = section;