// we do that in batch using parallel-for.
static DenseMap<Symbol *, std::string>
getSymbolStrings(ArrayRef<Defined *> syms) {
- std::vector<std::string> str(syms.size());
+ auto strs = std::make_unique<std::string[]>(syms.size());
parallelForEachN(0, syms.size(), [&](size_t i) {
- raw_string_ostream os(str[i]);
+ raw_string_ostream os(strs[i]);
OutputSection *osec = syms[i]->getOutputSection();
uint64_t vma = syms[i]->getVA();
uint64_t lma = osec ? osec->getLMA() + vma - osec->getVA(0) : 0;
DenseMap<Symbol *, std::string> ret;
for (size_t i = 0, e = syms.size(); i < e; ++i)
- ret[syms[i]] = std::move(str[i]);
+ ret[syms[i]] = std::move(strs[i]);
return ret;
}
if (!(osec->flags & SHF_EXECINSTR))
continue;
SmallVector<InputSection *, 0> sections = getInputSections(*osec);
- std::vector<unsigned> result(sections.size());
+ size_t numDeleted = 0;
// Delete all fall through jump instructions. Also, check if two
// consecutive jump instructions can be flipped so that a fall
// through jmp instruction can be deleted.
for (size_t i = 0, e = sections.size(); i != e; ++i) {
InputSection *next = i + 1 < sections.size() ? sections[i + 1] : nullptr;
InputSection &sec = *sections[i];
- result[i] = target->deleteFallThruJmpInsn(sec, sec.file, next) ? 1 : 0;
+ numDeleted += target->deleteFallThruJmpInsn(sec, sec.file, next);
}
- size_t numDeleted = std::count(result.begin(), result.end(), 1);
if (numDeleted > 0) {
script->assignAddresses();
LLVM_DEBUG(llvm::dbgs()