summaryrefslogtreecommitdiffstats
path: root/lld/ELF/SymbolTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/SymbolTable.cpp')
-rw-r--r--lld/ELF/SymbolTable.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 6177e91d438..25ba584d45b 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -143,21 +143,24 @@ template <class ELFT> void SymbolTable::init(uint16_t EMachine) {
}
template <class ELFT> void SymbolTable::addELFFile(ELFFileBase *File) {
- if (const ELFFileBase *Old = getFirstELF()) {
- if (!Old->isCompatibleWith(*File))
- error(Twine(Old->getName() + " is incompatible with " + File->getName()));
- } else {
+ const ELFFileBase *Old = getFirstELF();
+ if (Old && !Old->isCompatibleWith(*File))
+ error(Twine(Old->getName() + " is incompatible with " + File->getName()));
+
+ if (auto *O = dyn_cast<ObjectFileBase>(File))
+ ObjectFiles.emplace_back(O);
+ else if (auto *S = dyn_cast<SharedFile<ELFT>>(File))
+ SharedFiles.emplace_back(S);
+
+ if (!Old)
init<ELFT>(File->getEMachine());
- }
if (auto *O = dyn_cast<ObjectFileBase>(File)) {
- ObjectFiles.emplace_back(O);
for (SymbolBody *Body : O->getSymbols())
resolve<ELFT>(Body);
}
if (auto *S = dyn_cast<SharedFile<ELFT>>(File)) {
- SharedFiles.emplace_back(S);
for (SharedSymbol<ELFT> &Body : S->getSharedSymbols())
resolve<ELFT>(&Body);
}
OpenPOWER on IntegriCloud