[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