Remove OutputSectionBuilder::finalize.
The reason why we had to assign offsets only to sections that
don't contain layout sections were unclear. It turned out that
we can live without it.
llvm-svn: 278449
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 42b34e3..5fc7e35 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -167,7 +167,6 @@
}
void flushSymbols();
void flushSection();
- void finalize();
private:
OutputSectionFactory<ELFT> &Factory;
@@ -236,16 +235,6 @@
Current = nullptr;
}
-template <class ELFT> void OutputSectionBuilder<ELFT>::finalize() {
- // Assign offsets to all sections which don't contain symbols
- for (OutputSectionBase<ELFT> *S : *OutputSections)
- if (llvm::find_if(OwningSections,
- [&](std::unique_ptr<LayoutInputSection<ELFT>> &L) {
- return L->OutSec == S;
- }) == OwningSections.end())
- S->assignOffsets();
-}
-
template <class ELFT>
static bool compareName(InputSectionBase<ELFT> *A, InputSectionBase<ELFT> *B) {
return A->getSectionName() < B->getSectionName();
@@ -325,7 +314,6 @@
// Remove from the output all the sections which did not meet
// the optional constraints.
filter();
- Builder.finalize();
}
template <class R, class T>
@@ -357,11 +345,11 @@
}
template <class ELFT> void assignOffsets(OutputSectionBase<ELFT> *Sec) {
- // Non-zero size means we have assigned offsets earlier in
- // OutputSectionBuilder<ELFT>::finalize
auto *OutSec = dyn_cast<OutputSection<ELFT>>(Sec);
- if (Sec->getSize() || !OutSec)
+ if (!OutSec) {
+ Sec->assignOffsets();
return;
+ }
typedef typename ELFT::uint uintX_t;
uintX_t Off = 0;
@@ -448,6 +436,7 @@
Dot += Sec->getSize();
continue;
}
+ Sec->assignOffsets();
}
}