[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