summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/SymbolTable.cpp12
-rw-r--r--lld/COFF/SymbolTable.h1
-rw-r--r--lld/COFF/Writer.cpp13
3 files changed, 11 insertions, 15 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index e80442ce49d..9bc705e7a06 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -139,7 +139,7 @@ void SymbolTable::reportRemainingUndefines(bool Resolve) {
if (!Resolve)
continue;
auto *D = cast<Defined>(Imp->Body);
- auto *S = new (Alloc) DefinedLocalImport(Name, D);
+ auto *S = make<DefinedLocalImport>(Name, D);
LocalImportChunks.push_back(S->getChunk());
Sym->Body = S;
continue;
@@ -148,7 +148,7 @@ void SymbolTable::reportRemainingUndefines(bool Resolve) {
// Remaining undefined symbols are not fatal if /force is specified.
// They are replaced with dummy defined symbols.
if (Config->Force && Resolve)
- Sym->Body = new (Alloc) DefinedAbsolute(Name, 0);
+ Sym->Body = make<DefinedAbsolute>(Name, 0);
Undefs.insert(Sym->Body);
}
if (Undefs.empty())
@@ -223,7 +223,7 @@ Symbol *SymbolTable::insert(SymbolBody *New) {
New->setBackref(Sym);
return Sym;
}
- Sym = new (Alloc) Symbol(New);
+ Sym = make<Symbol>(New);
New->setBackref(Sym);
return Sym;
}
@@ -299,7 +299,7 @@ void SymbolTable::mangleMaybe(Undefined *U) {
}
Undefined *SymbolTable::addUndefined(StringRef Name) {
- auto *New = new (Alloc) Undefined(Name);
+ auto *New = make<Undefined>(Name);
addSymbol(New);
if (auto *U = dyn_cast<Undefined>(New->repl()))
return U;
@@ -307,13 +307,13 @@ Undefined *SymbolTable::addUndefined(StringRef Name) {
}
DefinedRelative *SymbolTable::addRelative(StringRef Name, uint64_t VA) {
- auto *New = new (Alloc) DefinedRelative(Name, VA);
+ auto *New = make<DefinedRelative>(Name, VA);
addSymbol(New);
return New;
}
DefinedAbsolute *SymbolTable::addAbsolute(StringRef Name, uint64_t VA) {
- auto *New = new (Alloc) DefinedAbsolute(Name, VA);
+ auto *New = make<DefinedAbsolute>(Name, VA);
addSymbol(New);
return New;
}
diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h
index 9c5264d777a..1d11fa76db3 100644
--- a/lld/COFF/SymbolTable.h
+++ b/lld/COFF/SymbolTable.h
@@ -119,7 +119,6 @@ private:
std::vector<BitcodeFile *> BitcodeFiles;
std::vector<SmallString<0>> Objs;
- llvm::BumpPtrAllocator Alloc;
};
} // namespace coff
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 72fc5226a04..4c5eb22cf31 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -16,6 +16,7 @@
#include "SymbolTable.h"
#include "Symbols.h"
#include "lld/Core/Parallel.h"
+#include "lld/Support/Memory.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h"
@@ -135,8 +136,6 @@ private:
SymbolTable *Symtab;
std::unique_ptr<FileOutputBuffer> Buffer;
- SpecificBumpPtrAllocator<OutputSection> CAlloc;
- SpecificBumpPtrAllocator<BaserelChunk> BAlloc;
std::vector<OutputSection *> OutputSections;
std::vector<char> Strtab;
std::vector<llvm::object::coff_symbol16> OutputSymtab;
@@ -342,7 +341,7 @@ void Writer::createSections() {
StringRef Name = getOutputSection(Pair.first);
OutputSection *&Sec = Sections[Name];
if (!Sec) {
- Sec = new (CAlloc.Allocate()) OutputSection(Name);
+ Sec = make<OutputSection>(Name);
OutputSections.push_back(Sec);
}
std::vector<Chunk *> &Chunks = Pair.second;
@@ -866,7 +865,7 @@ OutputSection *Writer::createSection(StringRef Name) {
.Default(0);
if (!Perms)
llvm_unreachable("unknown section name");
- auto Sec = new (CAlloc.Allocate()) OutputSection(Name);
+ auto Sec = make<OutputSection>(Name);
Sec->addPermissions(Perms);
OutputSections.push_back(Sec);
return Sec;
@@ -897,13 +896,11 @@ void Writer::addBaserelBlocks(OutputSection *Dest, std::vector<Baserel> &V) {
uint32_t P = V[J].RVA & Mask;
if (P == Page)
continue;
- BaserelChunk *Buf = BAlloc.Allocate();
- Dest->addChunk(new (Buf) BaserelChunk(Page, &V[I], &V[0] + J));
+ Dest->addChunk(make<BaserelChunk>(Page, &V[I], &V[0] + J));
I = J;
Page = P;
}
if (I == J)
return;
- BaserelChunk *Buf = BAlloc.Allocate();
- Dest->addChunk(new (Buf) BaserelChunk(Page, &V[I], &V[0] + J));
+ Dest->addChunk(make<BaserelChunk>(Page, &V[I], &V[0] + J));
}
OpenPOWER on IntegriCloud