COFF: Use make() in SymbolTable and Writer.
llvm-svn: 289170
This commit is contained in:
parent
7904046c33
commit
7a0a076e40
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -119,7 +119,6 @@ private:
|
|||
|
||||
std::vector<BitcodeFile *> BitcodeFiles;
|
||||
std::vector<SmallString<0>> Objs;
|
||||
llvm::BumpPtrAllocator Alloc;
|
||||
};
|
||||
|
||||
} // namespace coff
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue