[lld] r285021 - ELF: Simplify handling of *_start/*_end symbols.
Rafael EspĂndola via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 25 05:57:25 PDT 2016
Thanks!
On 24 October 2016 at 16:46, Peter Collingbourne via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: pcc
> Date: Mon Oct 24 15:46:21 2016
> New Revision: 285021
>
> URL: http://llvm.org/viewvc/llvm-project?rev=285021&view=rev
> Log:
> ELF: Simplify handling of *_start/*_end symbols.
>
> We were previously using the (static) addSynthetic function to create
> *_start/*_end symbols. This function was doing almost the same thing as
> addOptionalSynthetic, except that it would also create the symbol in the
> case where it is unreferenced. Because the symbol has hidden visibility,
> creating it in that case would have no effect other than adding another
> entry to the static symbol table. Remove addSynthetic and change callers to
> use addOptionalSynthetic instead.
>
> Differential Revision: https://reviews.llvm.org/D25545
>
> Modified:
> lld/trunk/ELF/Writer.cpp
> lld/trunk/test/ELF/gc-sections.s
>
> Modified: lld/trunk/ELF/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=285021&r1=285020&r2=285021&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Mon Oct 24 15:46:21 2016
> @@ -559,14 +559,6 @@ addOptionalSynthetic(StringRef Name, Out
> return Symtab<ELFT>::X->addSynthetic(Name, Sec, Val, StOther);
> }
>
> -template <class ELFT>
> -static void addSynthetic(StringRef Name, OutputSectionBase<ELFT> *Sec,
> - typename ELFT::uint Val) {
> - SymbolBody *S = Symtab<ELFT>::X->find(Name);
> - if (!S || S->isUndefined() || S->isShared())
> - Symtab<ELFT>::X->addSynthetic(Name, Sec, Val, STV_HIDDEN);
> -}
> -
> // The beginning and the ending of .rel[a].plt section are marked
> // with __rel[a]_iplt_{start,end} symbols if it is a statically linked
> // executable. The runtime needs these symbols in order to resolve
> @@ -953,13 +945,9 @@ template <class ELFT> void Writer<ELFT>:
> template <class ELFT> void Writer<ELFT>::addStartEndSymbols() {
> auto Define = [&](StringRef Start, StringRef End,
> OutputSectionBase<ELFT> *OS) {
> - if (OS) {
> - addSynthetic(Start, OS, 0);
> - addSynthetic(End, OS, DefinedSynthetic<ELFT>::SectionEnd);
> - } else {
> - addOptionalSynthetic(Start, (OutputSectionBase<ELFT> *)nullptr, 0);
> - addOptionalSynthetic(End, (OutputSectionBase<ELFT> *)nullptr, 0);
> - }
> + // These symbols resolve to the image base if the section does not exist.
> + addOptionalSynthetic(Start, OS, 0);
> + addOptionalSynthetic(End, OS, OS ? DefinedSynthetic<ELFT>::SectionEnd : 0);
> };
>
> Define("__preinit_array_start", "__preinit_array_end",
>
> Modified: lld/trunk/test/ELF/gc-sections.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/gc-sections.s?rev=285021&r1=285020&r2=285021&view=diff
> ==============================================================================
> --- lld/trunk/test/ELF/gc-sections.s (original)
> +++ lld/trunk/test/ELF/gc-sections.s Mon Oct 24 15:46:21 2016
> @@ -21,8 +21,6 @@
> # NOGC: Name: c
> # NOGC: Name: x
> # NOGC: Name: y
> -# NOGC: Name: __preinit_array_start
> -# NOGC: Name: __preinit_array_end
> # NOGC: Name: d
>
> # GC1: Name: .eh_frame
> @@ -38,8 +36,6 @@
> # GC1: Name: c
> # GC1-NOT: Name: x
> # GC1-NOT: Name: y
> -# GC1: Name: __preinit_array_start
> -# GC1: Name: __preinit_array_end
> # GC1-NOT: Name: d
>
> # GC2: Name: .eh_frame
> @@ -55,8 +51,6 @@
> # GC2: Name: c
> # GC2-NOT: Name: x
> # GC2-NOT: Name: y
> -# GC2: Name: __preinit_array_start
> -# GC2: Name: __preinit_array_end
> # GC2: Name: d
>
> .globl _start, d
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list