diff options
-rw-r--r-- | lld/COFF/SymbolTable.cpp | 12 | ||||
-rw-r--r-- | lld/COFF/SymbolTable.h | 1 | ||||
-rw-r--r-- | lld/COFF/Writer.cpp | 13 |
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)); } |