[PATCH] D28430: ELF: Implement support for .gnu.linkonce.t.*.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 9 12:29:33 PST 2017


LGTM, thanks.

Peter Collingbourne via Phabricator <reviews at reviews.llvm.org> writes:

> pcc updated this revision to Diff 83662.
> pcc added a comment.
>
> - Simpler fix
>
>
> https://reviews.llvm.org/D28430
>
> Files:
>   lld/ELF/InputFiles.cpp
>   lld/test/ELF/comdat-linkonce.s
>
>
> Index: lld/test/ELF/comdat-linkonce.s
> ===================================================================
> --- /dev/null
> +++ lld/test/ELF/comdat-linkonce.s
> @@ -0,0 +1,9 @@
> +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
> +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat.s -o %t2.o
> +// RUN: ld.lld -shared %t.o %t2.o -o %t
> +// RUN: ld.lld -shared %t2.o %t.o -o %t
> +
> +.section .gnu.linkonce.t.zed
> +.globl abc
> +abc:
> +nop
> Index: lld/ELF/InputFiles.cpp
> ===================================================================
> --- lld/ELF/InputFiles.cpp
> +++ lld/ELF/InputFiles.cpp
> @@ -399,6 +399,14 @@
>    if (Config->Strip != StripPolicy::None && Name.startswith(".debug"))
>      return &InputSection<ELFT>::Discarded;
>  
> +  // The linkonce feature is a sort of proto-comdat. Some glibc i386 object
> +  // files contain definitions of symbol "__x86.get_pc_thunk.bx" in linkonce
> +  // sections. Drop those sections to avoid duplicate symbol errors.
> +  // FIXME: This is glibc PR20543, we should remove this hack once that has been
> +  // fixed for a while.
> +  if (Name.startswith(".gnu.linkonce."))
> +    return &InputSection<ELFT>::Discarded;
> +
>    // The linker merges EH (exception handling) frames and creates a
>    // .eh_frame_hdr section for runtime. So we handle them with a special
>    // class. For relocatable outputs, they are just passed through.
>
>
> Index: lld/test/ELF/comdat-linkonce.s
> ===================================================================
> --- /dev/null
> +++ lld/test/ELF/comdat-linkonce.s
> @@ -0,0 +1,9 @@
> +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
> +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat.s -o %t2.o
> +// RUN: ld.lld -shared %t.o %t2.o -o %t
> +// RUN: ld.lld -shared %t2.o %t.o -o %t
> +
> +.section .gnu.linkonce.t.zed
> +.globl abc
> +abc:
> +nop
> Index: lld/ELF/InputFiles.cpp
> ===================================================================
> --- lld/ELF/InputFiles.cpp
> +++ lld/ELF/InputFiles.cpp
> @@ -399,6 +399,14 @@
>    if (Config->Strip != StripPolicy::None && Name.startswith(".debug"))
>      return &InputSection<ELFT>::Discarded;
>  
> +  // The linkonce feature is a sort of proto-comdat. Some glibc i386 object
> +  // files contain definitions of symbol "__x86.get_pc_thunk.bx" in linkonce
> +  // sections. Drop those sections to avoid duplicate symbol errors.
> +  // FIXME: This is glibc PR20543, we should remove this hack once that has been
> +  // fixed for a while.
> +  if (Name.startswith(".gnu.linkonce."))
> +    return &InputSection<ELFT>::Discarded;
> +
>    // The linker merges EH (exception handling) frames and creates a
>    // .eh_frame_hdr section for runtime. So we handle them with a special
>    // class. For relocatable outputs, they are just passed through.


More information about the llvm-commits mailing list