aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
diff options
context:
space:
mode:
authorBen Langmuir <blangmuir@apple.com>2021-11-18 16:47:16 -0800
committerBen Langmuir <blangmuir@apple.com>2021-11-19 07:25:56 -0800
commit4c94760f360bd4e24519a61bea3bde0413aaf78a (patch)
tree71895695900b9f711b6630da1e6ee625e8861f85 /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
parent671f0930fe29913011df4eacc89ca19a78e8dbb0 (diff)
downloadllvm-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.cpp3
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;