[lld] r315125 - Simplify LinkerScript::addOrphanSections. NFCI.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 6 16:06:55 PDT 2017
Author: ruiu
Date: Fri Oct 6 16:06:55 2017
New Revision: 315125
URL: http://llvm.org/viewvc/llvm-project?rev=315125&view=rev
Log:
Simplify LinkerScript::addOrphanSections. NFCI.
This patch moves a std::find to a new function. It also removes
the following piece of code. I believe it should be fine because all
tests still pass.
unsigned Index = std::distance(Opt.Commands.begin(), I);
assert(Sec->SectionIndex == INT_MAX || Sec->SectionIndex == Index);
Sec->SectionIndex = Index;
Modified:
lld/trunk/ELF/LinkerScript.cpp
Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=315125&r1=315124&r2=315125&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Fri Oct 6 16:06:55 2017
@@ -443,29 +443,32 @@ void LinkerScript::fabricateDefaultComma
make<SymbolAssignment>(".", Expr, ""));
}
+static OutputSection *findByName(ArrayRef<BaseCommand *> Vec,
+ StringRef Name) {
+ for (BaseCommand *Base : Vec)
+ if (auto *Sec = dyn_cast<OutputSection>(Base))
+ if (Sec->Name == Name)
+ return Sec;
+ return nullptr;
+}
+
// Add sections that didn't match any sections command.
void LinkerScript::addOrphanSections(OutputSectionFactory &Factory) {
- unsigned NumCommands = Opt.Commands.size();
+ unsigned End = Opt.Commands.size();
+
for (InputSectionBase *S : InputSections) {
if (!S->Live || S->Parent)
continue;
+
StringRef Name = getOutputSectionName(S->Name);
- auto End = Opt.Commands.begin() + NumCommands;
- auto I = std::find_if(Opt.Commands.begin(), End, [&](BaseCommand *Base) {
- if (auto *Sec = dyn_cast<OutputSection>(Base))
- return Sec->Name == Name;
- return false;
- });
log(toString(S) + " is being placed in '" + Name + "'");
- if (I == End) {
+
+ if (OutputSection *Sec = findByName(
+ makeArrayRef(Opt.Commands).slice(0, End), Name)) {
+ Factory.addInputSec(S, Name, Sec);
+ } else {
Factory.addInputSec(S, Name, nullptr);
assert(S->getOutputSection()->SectionIndex == INT_MAX);
- } else {
- OutputSection *Sec = cast<OutputSection>(*I);
- Factory.addInputSec(S, Name, Sec);
- unsigned Index = std::distance(Opt.Commands.begin(), I);
- assert(Sec->SectionIndex == INT_MAX || Sec->SectionIndex == Index);
- Sec->SectionIndex = Index;
}
}
}
More information about the llvm-commits
mailing list