COFF: Use make() in SymbolTable and Writer.

llvm-svn: 289170
This commit is contained in:
Rui Ueyama 2016-12-09 02:13:12 +00:00
parent 7904046c33
commit 7a0a076e40
3 changed files with 11 additions and 15 deletions

View File

@ -139,7 +139,7 @@ void SymbolTable::reportRemainingUndefines(bool Resolve) {
if (!Resolve) if (!Resolve)
continue; continue;
auto *D = cast<Defined>(Imp->Body); auto *D = cast<Defined>(Imp->Body);
auto *S = new (Alloc) DefinedLocalImport(Name, D); auto *S = make<DefinedLocalImport>(Name, D);
LocalImportChunks.push_back(S->getChunk()); LocalImportChunks.push_back(S->getChunk());
Sym->Body = S; Sym->Body = S;
continue; continue;
@ -148,7 +148,7 @@ void SymbolTable::reportRemainingUndefines(bool Resolve) {
// Remaining undefined symbols are not fatal if /force is specified. // Remaining undefined symbols are not fatal if /force is specified.
// They are replaced with dummy defined symbols. // They are replaced with dummy defined symbols.
if (Config->Force && Resolve) if (Config->Force && Resolve)
Sym->Body = new (Alloc) DefinedAbsolute(Name, 0); Sym->Body = make<DefinedAbsolute>(Name, 0);
Undefs.insert(Sym->Body); Undefs.insert(Sym->Body);
} }
if (Undefs.empty()) if (Undefs.empty())
@ -223,7 +223,7 @@ Symbol *SymbolTable::insert(SymbolBody *New) {
New->setBackref(Sym); New->setBackref(Sym);
return Sym; return Sym;
} }
Sym = new (Alloc) Symbol(New); Sym = make<Symbol>(New);
New->setBackref(Sym); New->setBackref(Sym);
return Sym; return Sym;
} }
@ -299,7 +299,7 @@ void SymbolTable::mangleMaybe(Undefined *U) {
} }
Undefined *SymbolTable::addUndefined(StringRef Name) { Undefined *SymbolTable::addUndefined(StringRef Name) {
auto *New = new (Alloc) Undefined(Name); auto *New = make<Undefined>(Name);
addSymbol(New); addSymbol(New);
if (auto *U = dyn_cast<Undefined>(New->repl())) if (auto *U = dyn_cast<Undefined>(New->repl()))
return U; return U;
@ -307,13 +307,13 @@ Undefined *SymbolTable::addUndefined(StringRef Name) {
} }
DefinedRelative *SymbolTable::addRelative(StringRef Name, uint64_t VA) { DefinedRelative *SymbolTable::addRelative(StringRef Name, uint64_t VA) {
auto *New = new (Alloc) DefinedRelative(Name, VA); auto *New = make<DefinedRelative>(Name, VA);
addSymbol(New); addSymbol(New);
return New; return New;
} }
DefinedAbsolute *SymbolTable::addAbsolute(StringRef Name, uint64_t VA) { DefinedAbsolute *SymbolTable::addAbsolute(StringRef Name, uint64_t VA) {
auto *New = new (Alloc) DefinedAbsolute(Name, VA); auto *New = make<DefinedAbsolute>(Name, VA);
addSymbol(New); addSymbol(New);
return New; return New;
} }

View File

@ -119,7 +119,6 @@ private:
std::vector<BitcodeFile *> BitcodeFiles; std::vector<BitcodeFile *> BitcodeFiles;
std::vector<SmallString<0>> Objs; std::vector<SmallString<0>> Objs;
llvm::BumpPtrAllocator Alloc;
}; };
} // namespace coff } // namespace coff

View File

@ -16,6 +16,7 @@
#include "SymbolTable.h" #include "SymbolTable.h"
#include "Symbols.h" #include "Symbols.h"
#include "lld/Core/Parallel.h" #include "lld/Core/Parallel.h"
#include "lld/Support/Memory.h"
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/StringSwitch.h"
@ -135,8 +136,6 @@ private:
SymbolTable *Symtab; SymbolTable *Symtab;
std::unique_ptr<FileOutputBuffer> Buffer; std::unique_ptr<FileOutputBuffer> Buffer;
SpecificBumpPtrAllocator<OutputSection> CAlloc;
SpecificBumpPtrAllocator<BaserelChunk> BAlloc;
std::vector<OutputSection *> OutputSections; std::vector<OutputSection *> OutputSections;
std::vector<char> Strtab; std::vector<char> Strtab;
std::vector<llvm::object::coff_symbol16> OutputSymtab; std::vector<llvm::object::coff_symbol16> OutputSymtab;
@ -342,7 +341,7 @@ void Writer::createSections() {
StringRef Name = getOutputSection(Pair.first); StringRef Name = getOutputSection(Pair.first);
OutputSection *&Sec = Sections[Name]; OutputSection *&Sec = Sections[Name];
if (!Sec) { if (!Sec) {
Sec = new (CAlloc.Allocate()) OutputSection(Name); Sec = make<OutputSection>(Name);
OutputSections.push_back(Sec); OutputSections.push_back(Sec);
} }
std::vector<Chunk *> &Chunks = Pair.second; std::vector<Chunk *> &Chunks = Pair.second;
@ -866,7 +865,7 @@ OutputSection *Writer::createSection(StringRef Name) {
.Default(0); .Default(0);
if (!Perms) if (!Perms)
llvm_unreachable("unknown section name"); llvm_unreachable("unknown section name");
auto Sec = new (CAlloc.Allocate()) OutputSection(Name); auto Sec = make<OutputSection>(Name);
Sec->addPermissions(Perms); Sec->addPermissions(Perms);
OutputSections.push_back(Sec); OutputSections.push_back(Sec);
return Sec; return Sec;
@ -897,13 +896,11 @@ void Writer::addBaserelBlocks(OutputSection *Dest, std::vector<Baserel> &V) {
uint32_t P = V[J].RVA & Mask; uint32_t P = V[J].RVA & Mask;
if (P == Page) if (P == Page)
continue; continue;
BaserelChunk *Buf = BAlloc.Allocate(); Dest->addChunk(make<BaserelChunk>(Page, &V[I], &V[0] + J));
Dest->addChunk(new (Buf) BaserelChunk(Page, &V[I], &V[0] + J));
I = J; I = J;
Page = P; Page = P;
} }
if (I == J) if (I == J)
return; return;
BaserelChunk *Buf = BAlloc.Allocate(); Dest->addChunk(make<BaserelChunk>(Page, &V[I], &V[0] + J));
Dest->addChunk(new (Buf) BaserelChunk(Page, &V[I], &V[0] + J));
} }