diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 18 | ||||
-rw-r--r-- | lld/test/ELF/gc-sections.s | 6 |
2 files changed, 3 insertions, 21 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 6ca49918947..417060fa2d9 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -559,14 +559,6 @@ addOptionalSynthetic(StringRef Name, OutputSectionBase<ELFT> *Sec, 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>::addPredefinedSections() { 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", diff --git a/lld/test/ELF/gc-sections.s b/lld/test/ELF/gc-sections.s index b00d915da1b..f100153ec35 100644 --- a/lld/test/ELF/gc-sections.s +++ b/lld/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 |