summaryrefslogtreecommitdiffstats
path: root/lld/COFF/SymbolTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/COFF/SymbolTable.cpp')
-rw-r--r--lld/COFF/SymbolTable.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index 55721f78528..8d6754e6e35 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -292,8 +292,26 @@ std::error_code SymbolTable::addCombinedLTOObject() {
}
Sym->Body = Body;
}
+
+ // We may see new references to runtime library symbols such as __chkstk
+ // here. These symbols must be wholly defined in non-bitcode files.
+ if (auto *B = dyn_cast<Lazy>(Sym->Body)) {
+ size_t NumBitcodeFiles = BitcodeFiles.size();
+ if (auto EC = addMemberFile(B))
+ return EC;
+ if (BitcodeFiles.size() != NumBitcodeFiles) {
+ llvm::errs()
+ << "LTO: late loaded symbol created new bitcode reference: " << Name
+ << "\n";
+ return make_error_code(LLDError::BrokenFile);
+ }
+ }
}
+ // New runtime library symbol references may have created undefined references.
+ if (reportRemainingUndefines())
+ return make_error_code(LLDError::BrokenFile);
+
return std::error_code();
}
OpenPOWER on IntegriCloud