[lld] r232646 - PECOFF: Do not copy all undefined symbols to a set. NFC.
Rui Ueyama
ruiu at google.com
Wed Mar 18 09:28:34 PDT 2015
Author: ruiu
Date: Wed Mar 18 11:28:33 2015
New Revision: 232646
URL: http://llvm.org/viewvc/llvm-project?rev=232646&view=rev
Log:
PECOFF: Do not copy all undefined symbols to a set. NFC.
Modified:
lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
Modified: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=232646&r1=232645&r2=232646&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp Wed Mar 18 11:28:33 2015
@@ -439,7 +439,6 @@ void FileCOFF::createAbsoluteAtoms(const
continue;
auto *atom = new (_alloc) SimpleAbsoluteAtom(*this, _symbolName[sym],
getScope(sym), sym.getValue());
-
result.push_back(atom);
_symbolAtom[sym] = atom;
}
@@ -455,15 +454,12 @@ void FileCOFF::createAbsoluteAtoms(const
std::error_code
FileCOFF::createUndefinedAtoms(const SymbolVectorT &symbols,
std::vector<const UndefinedAtom *> &result) {
- // Sort out undefined symbols from all symbols.
- std::set<llvm::object::COFFSymbolRef> undefines;
std::map<llvm::object::COFFSymbolRef, llvm::object::COFFSymbolRef>
weakExternal;
+ std::set<llvm::object::COFFSymbolRef> fallback;
for (llvm::object::COFFSymbolRef sym : symbols) {
if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_UNDEFINED)
continue;
- undefines.insert(sym);
-
// Create a mapping from sym1 to sym2, if the undefined symbol has
// auxiliary data.
auto iter = _auxSymbol.find(sym);
@@ -476,16 +472,16 @@ FileCOFF::createUndefinedAtoms(const Sym
if (std::error_code ec = sym2.getError())
return ec;
weakExternal[sym] = *sym2;
+ fallback.insert(*sym2);
}
- // Sort out sym1s from sym2s. Sym2s shouldn't be added to the undefined atom
- // list because they shouldn't be resolved unless sym1 is failed to
- // be resolved.
- for (auto i : weakExternal)
- undefines.erase(i.second);
-
// Create atoms for the undefined symbols.
- for (llvm::object::COFFSymbolRef sym : undefines) {
+ for (llvm::object::COFFSymbolRef sym : symbols) {
+ if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_UNDEFINED)
+ continue;
+ if (fallback.count(sym) > 0)
+ continue;
+
// If the symbol has sym2, create an undefiend atom for sym2, so that we
// can pass it as a fallback atom.
UndefinedAtom *fallback = nullptr;
More information about the llvm-commits
mailing list