diff options
author | Rui Ueyama <ruiu@google.com> | 2015-07-03 01:52:33 +0300 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2015-07-03 01:52:33 +0300 |
commit | 6be9099140df35cb308ac883db3183221cf7ed15 (patch) | |
tree | 8942a14fc44fb4cb2da9995a04ea781f97801fdd /lld/COFF | |
parent | 0cd9248d9e1c4a35ea7633a11de3fb394b48f452 (diff) |
COFF: Define SymbolTable::insert to simplify. NFC.
llvm-svn: 241311
Diffstat (limited to 'lld/COFF')
-rw-r--r-- | lld/COFF/SymbolTable.cpp | 42 | ||||
-rw-r--r-- | lld/COFF/SymbolTable.h | 1 |
2 files changed, 21 insertions, 22 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index 53e4ee8c88f0..832c5f05cfff 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -164,12 +164,9 @@ bool SymbolTable::reportRemainingUndefines() { } void SymbolTable::addLazy(Lazy *New, std::vector<Symbol *> *Accum) { - Symbol *&Sym = Symtab[New->getName()]; - if (!Sym) { - Sym = new (Alloc) Symbol(New); - New->setBackref(Sym); + Symbol *Sym = insert(New); + if (Sym->Body == New) return; - } SymbolBody *Existing = Sym->Body; if (!isa<Undefined>(Existing)) return; @@ -181,17 +178,13 @@ void SymbolTable::addLazy(Lazy *New, std::vector<Symbol *> *Accum) { std::error_code SymbolTable::addSymbol(SymbolBody *New) { // Find an existing symbol or create and insert a new one. assert(isa<Defined>(New) || isa<Undefined>(New)); - Symbol *&Sym = Symtab[New->getName()]; - if (!Sym) { - Sym = new (Alloc) Symbol(New); - New->setBackref(Sym); + Symbol *Sym = insert(New); + if (Sym->Body == New) return std::error_code(); - } - New->setBackref(Sym); + SymbolBody *Existing = Sym->Body; // If we have an undefined symbol and a lazy symbol, // let the lazy symbol to read a member file. - SymbolBody *Existing = Sym->Body; if (auto *L = dyn_cast<Lazy>(Existing)) { // Undefined symbols with weak aliases need not to be resolved, // since they would be replaced with weak aliases if they remain @@ -216,6 +209,17 @@ std::error_code SymbolTable::addSymbol(SymbolBody *New) { return std::error_code(); } +Symbol *SymbolTable::insert(SymbolBody *New) { + Symbol *&Sym = Symtab[New->getName()]; + if (Sym) { + New->setBackref(Sym); + return Sym; + } + Sym = new (Alloc) Symbol(New); + New->setBackref(Sym); + return Sym; +} + // Reads an archive member file pointed by a given symbol. std::error_code SymbolTable::addMemberFile(Lazy *Body) { auto FileOrErr = Body->getMember(); @@ -304,17 +308,11 @@ std::error_code SymbolTable::addCombinedLTOObject() { // Find an existing Symbol. We should not see any new undefined symbols at // this point. StringRef Name = Body->getName(); - Symbol *&Sym = Symtab[Name]; - if (!Sym) { - if (!isa<Defined>(Body)) { - llvm::errs() << "LTO: undefined symbol: " << Name << '\n'; - return make_error_code(LLDError::BrokenFile); - } - Sym = new (Alloc) Symbol(Body); - Body->setBackref(Sym); - continue; + Symbol *Sym = insert(Body); + if (Sym->Body == Body && !isa<Defined>(Body)) { + llvm::errs() << "LTO: undefined symbol: " << Name << '\n'; + return make_error_code(LLDError::BrokenFile); } - Body->setBackref(Sym); if (isa<DefinedBitcode>(Sym->Body)) { // The symbol should now be defined. diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h index 996732296aa9..4b22f3d1451c 100644 --- a/lld/COFF/SymbolTable.h +++ b/lld/COFF/SymbolTable.h @@ -89,6 +89,7 @@ private: std::error_code addSymbol(SymbolBody *New); void addLazy(Lazy *New, std::vector<Symbol *> *Accum); + Symbol *insert(SymbolBody *New); std::error_code addMemberFile(Lazy *Body); ErrorOr<ObjectFile *> createLTOObject(llvm::LTOCodeGenerator *CG); |