Skip to content

Commit c0ebc18

Browse files
authored
[orc] Fix asan error in RTDyldObjectLinkingLayer.cpp (llvm#106300)
`JITDylibSearchOrderResolver` local variable can be destroyed before completion of all callbacks. Capture it together with `Deps` in `OnEmitted` callback. Original error: ``` ==2035==ERROR: AddressSanitizer: stack-use-after-return on address 0x7bebfa155b70 at pc 0x7ff2a9a88b4a bp 0x7bec08d51980 sp 0x7bec08d51978 READ of size 8 at 0x7bebfa155b70 thread T87 (tf_xla-cpu-llvm) #0 0x7ff2a9a88b49 in operator() llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:55:58 #1 0x7ff2a9a88b49 in __invoke<(lambda at llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:55:9) &, const llvm::DenseMap<llvm::orc::JITDylib *, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib *, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib *, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > > &> libcxx/include/__type_traits/invoke.h:149:25 #2 0x7ff2a9a88b49 in __call<(lambda at llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp:55:9) &, const llvm::DenseMap<llvm::orc::JITDylib *, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib *, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib *, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > > &> libcxx/include/__type_traits/invoke.h:224:5 #3 0x7ff2a9a88b49 in operator() libcxx/include/__functional/function.h:210:12 llvm#4 0x7ff2a9a88b49 in void std::__u::__function::__policy_invoker<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, ```
1 parent c1a4896 commit c0ebc18

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#include <memory>
10+
911
#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
1012
#include "llvm/Object/COFF.h"
1113

@@ -184,19 +186,22 @@ void RTDyldObjectLinkingLayer::emit(
184186
std::shared_ptr<MaterializationResponsibility> SharedR(std::move(R));
185187
auto Deps = std::make_unique<SymbolDependenceMap>();
186188

187-
JITDylibSearchOrderResolver Resolver(*SharedR, *Deps);
189+
auto Resolver =
190+
std::make_unique<JITDylibSearchOrderResolver>(*SharedR, *Deps);
191+
auto *ResolverPtr = Resolver.get();
188192

189193
jitLinkForORC(
190194
object::OwningBinary<object::ObjectFile>(std::move(*Obj), std::move(O)),
191-
MemMgrRef, Resolver, ProcessAllSections,
195+
MemMgrRef, *ResolverPtr, ProcessAllSections,
192196
[this, SharedR, &MemMgrRef, InternalSymbols](
193197
const object::ObjectFile &Obj,
194198
RuntimeDyld::LoadedObjectInfo &LoadedObjInfo,
195199
std::map<StringRef, JITEvaluatedSymbol> ResolvedSymbols) {
196200
return onObjLoad(*SharedR, Obj, MemMgrRef, LoadedObjInfo,
197201
ResolvedSymbols, *InternalSymbols);
198202
},
199-
[this, SharedR, MemMgr = std::move(MemMgr), Deps = std::move(Deps)](
203+
[this, SharedR, MemMgr = std::move(MemMgr), Deps = std::move(Deps),
204+
Resolver = std::move(Resolver)](
200205
object::OwningBinary<object::ObjectFile> Obj,
201206
std::unique_ptr<RuntimeDyld::LoadedObjectInfo> LoadedObjInfo,
202207
Error Err) mutable {

0 commit comments

Comments
 (0)