diff options
author | Ben Langmuir <blangmuir@apple.com> | 2021-11-18 16:47:16 -0800 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2021-11-19 07:25:56 -0800 |
commit | 4c94760f360bd4e24519a61bea3bde0413aaf78a (patch) | |
tree | 71895695900b9f711b6630da1e6ee625e8861f85 /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | |
parent | 671f0930fe29913011df4eacc89ca19a78e8dbb0 (diff) | |
download | llvm-4c94760f360bd4e24519a61bea3bde0413aaf78a.zip llvm-4c94760f360bd4e24519a61bea3bde0413aaf78a.tar.gz llvm-4c94760f360bd4e24519a61bea3bde0413aaf78a.tar.bz2 |
[ORC] Fix materialization of weak local symbols
We were adding all defined weak symbols to the materialization
responsibility, but local symbols will not be in the symbol table, so it
failed to materialize due to the "missing" symbol.
Local weak symbols come up in practice when using `ld -r` with a hidden
weak symbol.
rdar://85574696
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp index 92da672..6f840a0 100644 --- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -423,7 +423,8 @@ private: std::vector<std::pair<SymbolStringPtr, Symbol *>> NameToSym; auto ProcessSymbol = [&](Symbol *Sym) { - if (Sym->hasName() && Sym->getLinkage() == Linkage::Weak) { + if (Sym->hasName() && Sym->getLinkage() == Linkage::Weak && + Sym->getScope() != Scope::Local) { auto Name = ES.intern(Sym->getName()); if (!MR->getSymbols().count(ES.intern(Sym->getName()))) { JITSymbolFlags SF = JITSymbolFlags::Weak; |