[PATCH] D114210: [ORC] Fix materialization of weak local symbols
Ben Langmuir via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 18 16:55:26 PST 2021
benlangmuir created this revision.
benlangmuir added a reviewer: lhames.
Herald added a subscriber: hiraditya.
benlangmuir requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
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
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D114210
Files:
llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_local.s
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
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<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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114210.388355.patch
Type: text/x-patch
Size: 1385 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211119/3f29caa6/attachment.bin>
More information about the llvm-commits
mailing list