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
This commit is contained in:
parent
32cb8c9b61
commit
2de509c370
|
@ -167,7 +167,6 @@ public:
|
|||
}
|
||||
void flushSymbols();
|
||||
void flushSection();
|
||||
void finalize();
|
||||
|
||||
private:
|
||||
OutputSectionFactory<ELFT> &Factory;
|
||||
|
@ -236,16 +235,6 @@ template <class ELFT> void OutputSectionBuilder<ELFT>::flushSection() {
|
|||
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 @@ void LinkerScript<ELFT>::createSections(
|
|||
// 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 LinkerScript<ELFT>::filter() {
|
|||
}
|
||||
|
||||
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 @@ template <class ELFT> void LinkerScript<ELFT>::assignAddresses() {
|
|||
Dot += Sec->getSize();
|
||||
continue;
|
||||
}
|
||||
Sec->assignOffsets();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue