This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix PR12762 using linkonce sections in plugin bfd


On Tue, Aug 16, 2011 at 11:03 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sat, Aug 13, 2011 at 7:31 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> 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.
>>
>
> I got:
>
> ld: BFD (Linux/GNU Binutils) 2.21.53.0.3.20110813 assertion fail
> /net/gnu-6/export/linux/src/binutils/binutils/bfd/elflink.c:12634
>
> on a Linux/x86-64 kernel driver build.
>

It is

http://www.sourceware.org/bugzilla/show_bug.cgi?id=13099

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]