namespace coff {
SymbolTable::SymbolTable() {
- addSymbol(new DefinedAbsolute("__ImageBase", Config->ImageBase));
+ resolve(new (Alloc) DefinedAbsolute("__ImageBase", Config->ImageBase));
if (!Config->EntryName.empty())
- addUndefined(Config->EntryName);
+ resolve(new (Alloc) Undefined(Config->EntryName));
}
std::error_code SymbolTable::addFile(std::unique_ptr<InputFile> File) {
return StringRef(E[1]);
if (!find(E[0]))
continue;
- if (auto EC = addSymbol(new Undefined(E[1])))
+ if (auto EC = resolve(new (Alloc) Undefined(E[1])))
return EC;
return StringRef(E[1]);
}
}
std::error_code SymbolTable::addUndefined(StringRef Name) {
- return addSymbol(new Undefined(Name));
+ return resolve(new (Alloc) Undefined(Name));
}
// Resolve To, and make From an alias to To.
return std::error_code();
}
-std::error_code SymbolTable::addSymbol(SymbolBody *Body) {
- OwningSymbols.push_back(std::unique_ptr<SymbolBody>(Body));
- return resolve(Body);
-}
-
void SymbolTable::dump() {
for (auto &P : Symtab) {
Symbol *Ref = P.second;
std::error_code resolve(SymbolBody *Body);
std::error_code addMemberFile(Lazy *Body);
- std::error_code addSymbol(SymbolBody *Body);
std::unordered_map<StringRef, Symbol *> Symtab;
std::vector<std::unique_ptr<ArchiveFile>> ArchiveFiles;
std::vector<std::unique_ptr<BitcodeFile>> BitcodeFiles;
- std::vector<std::unique_ptr<SymbolBody>> OwningSymbols;
std::unique_ptr<MemoryBuffer> LTOObjectFile;
llvm::BumpPtrAllocator Alloc;
};