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.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index 015d7075dca..35042e5bad2 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -227,20 +227,17 @@ std::error_code SymbolTable::addCombinedLTOObject() {
return std::error_code();
llvm::LTOCodeGenerator CG;
- std::set<DefinedBitcode *> PreservedBitcodeSymbols;
// All symbols referenced by non-bitcode objects must be preserved.
for (std::unique_ptr<ObjectFile> &File : ObjectFiles)
for (SymbolBody *Body : File->getSymbols())
if (auto *S = dyn_cast<DefinedBitcode>(Body->getReplacement()))
- PreservedBitcodeSymbols.insert(S);
+ CG.addMustPreserveSymbol(S->getName());
- // Likewise for the linker-generated reference to the entry point.
- if (auto *S = dyn_cast<DefinedBitcode>(Symtab[Config->EntryName]->Body))
- PreservedBitcodeSymbols.insert(S);
-
- for (DefinedBitcode *S : PreservedBitcodeSymbols)
- CG.addMustPreserveSymbol(S->getName());
+ // Likewise for other symbols that must be preserved.
+ for (StringRef Name : Config->GCRoots)
+ if (isa<DefinedBitcode>(Symtab[Name]->Body))
+ CG.addMustPreserveSymbol(Name);
CG.setModule(BitcodeFiles[0]->releaseModule());
for (unsigned I = 1, E = BitcodeFiles.size(); I != E; ++I)
OpenPOWER on IntegriCloud