[PATCH] D25545: ELF: Simplify handling of *_start/*_end symbols.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 24 13:55:47 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL285021: ELF: Simplify handling of *_start/*_end symbols. (authored by pcc).

Changed prior to commit:
  https://reviews.llvm.org/D25545?vs=74470&id=75648#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D25545

Files:
  lld/trunk/ELF/Writer.cpp
  lld/trunk/test/ELF/gc-sections.s


Index: lld/trunk/test/ELF/gc-sections.s
===================================================================
--- lld/trunk/test/ELF/gc-sections.s
+++ lld/trunk/test/ELF/gc-sections.s
@@ -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
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -559,14 +559,6 @@
   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>::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",


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25545.75648.patch
Type: text/x-patch
Size: 2285 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161024/65758e5f/attachment.bin>


More information about the llvm-commits mailing list