From 7a0a076e40358d76c1e0398c381b789cfcf65c83 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 9 Dec 2016 02:13:12 +0000 Subject: [PATCH] COFF: Use make() in SymbolTable and Writer. llvm-svn: 289170 --- lld/COFF/SymbolTable.cpp | 12 ++++++------ lld/COFF/SymbolTable.h | 1 - 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 e80442ce49d2..9bc705e7a064 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(Imp->Body); - auto *S = new (Alloc) DefinedLocalImport(Name, D); + auto *S = make(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(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(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(Name); addSymbol(New); if (auto *U = dyn_cast(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(Name, VA); addSymbol(New); return New; } DefinedAbsolute *SymbolTable::addAbsolute(StringRef Name, uint64_t VA) { - auto *New = new (Alloc) DefinedAbsolute(Name, VA); + auto *New = make(Name, VA); addSymbol(New); return New; } diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h index 9c5264d777a8..1d11fa76db32 100644 --- a/lld/COFF/SymbolTable.h +++ b/lld/COFF/SymbolTable.h @@ -119,7 +119,6 @@ private: std::vector BitcodeFiles; std::vector> Objs; - llvm::BumpPtrAllocator Alloc; }; } // namespace coff diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 72fc5226a047..4c5eb22cf311 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 Buffer; - SpecificBumpPtrAllocator CAlloc; - SpecificBumpPtrAllocator BAlloc; std::vector OutputSections; std::vector Strtab; std::vector 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(Name); OutputSections.push_back(Sec); } std::vector &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(Name); Sec->addPermissions(Perms); OutputSections.push_back(Sec); return Sec; @@ -897,13 +896,11 @@ void Writer::addBaserelBlocks(OutputSection *Dest, std::vector &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(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(Page, &V[I], &V[0] + J)); }