[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