Fix PR12762 using linkonce sections in plugin bfd
H.J. Lu
hjl.tools@gmail.com
Sat Aug 13 14:31:00 GMT 2011
On Sat, Aug 13, 2011 at 2:59 AM, Alan Modra <amodra@gmail.com> wrote:
> Revised patch. This one gives the plugin comdat_key symbols sections
> named .gnu.linkonce.t.<comdat_key>, so that SEC_LINK_ONCE gets set for
> the sections when recreating them during bfd_make_readable().
>
> I've also given the COFF backend its own bfd_section_already_linked
> and tidied the existing bfd_section_already_linked functions. I'd
> appreciate someone familiar with our COFF support reviewing
> _bfd_coff_section_already_linked in case I've made some glaring
> mistakes.. The old code basically matched on section name, but if
> both sections had a comdat symbol then the symbols had to match too.
> That meant a comdat section could match a non-comdat section with the
> same name, something the new code specifically disallows, and anyway
> is a side-effect of hashing on the comdat key. COFF also gets the
> benefit of the ELF code for SEC_LINK_DUPLICATES_SAME_CONTENTS, so
> section contents are actually checked now.
>
> bfd/
> PR ld/12762
> * bfd-in.h (struct bfd_section_already_linked): Forward declare.
> (_bfd_handle_already_linked): Declare.
> * coff-alpha.c (_bfd_ecoff_section_already_linked): Define as
> _bfd_coff_section_already_linked.
> * coff-mips.c (_bfd_ecoff_section_already_linked): Likewise.
> * coffcode.h (coff_section_already_linked): Likewise.
> * cofflink.c (coff_link_add_symbols): Revert 2011-07-09 changes.
> * elf-bfd.h: Likewise.
> * libbfd-in.h: Likewise.
> * targets.c: Likewise.
> * linker.c (bfd_section_already_linked): Likewise.
> (bfd_section_already_linked_table_lookup): Likewise.
> (bfd_section_already_linked_table_insert): Likewise.
> (_bfd_generic_section_already_linked): Likewise. Call
> _bfd_handle_already_linked.
> (_bfd_handle_already_linked): New function, split out from..
> * elflink.c (_bfd_elf_section_already_linked): ..here. Revert
> 2011-07-09 changes. Avoid unnecessary strcmp when matching
> already_linked_list entries. Match plugin linkonce section.
> (section_signature): Delete.
> * coffgen.c (_bfd_coff_section_already_linked): New function.
> * libcoff-in.h (_bfd_coff_section_already_linked): Declare.
> * libbfd.h: Regenerate.
> * libcoff.h: Regenerate.
> * bfd-in2.h: Regenerate.
> ld/
> PR ld/12762
> * ldlang.c (section_already_linked): Revert 2011-07-09 changes.
> * plugin.c: Likewise.
> (asymbol_from_plugin_symbol): Create linkonce section for syms
> with comdat_key.
>
It works.
Thanks.
--
H.J.
More information about the Binutils
mailing list