Index: llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp =================================================================== --- llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -423,7 +423,8 @@ std::vector> 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; Index: llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_local.s =================================================================== --- /dev/null +++ llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_local.s @@ -0,0 +1,16 @@ +# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -filetype=obj -o %t %s +# RUN: llvm-jitlink -noexec %t -show-graph | FileCheck %s + +# CHECK: linkage: weak, scope: local, live - _foo_weak + +# _foo_weak is weak and local. Make sure we can link it. + .section __TEXT,__text,regular,pure_instructions + .weak_definition _foo_weak + .p2align 4, 0x90 +_foo_weak: + retq + + .globl _main + .p2align 4, 0x90 +_main: + jmp _foo_weak