[llvm-dev] ORC Assertion failure
Dibyendu Majumdar via llvm-dev
llvm-dev at lists.llvm.org
Mon Apr 27 13:01:28 PDT 2020
Hi Lang,
Thanks for looking at this.
On Mon, 27 Apr 2020 at 04:36, Lang Hames <lhames at gmail.com> wrote:
>
>
> Are you using LLJIT?
No.
>
> If you're using a custom JIT class you will need to call 'ObjLinkingLayer->setOverrideObjectFlagsWithResponsibilityFlags(true);' when running on Windows, as RuntimeDyldCOFF does not correctly report symbol flags yet.
>
I tried this but I still get the assertion failure.
>
> On Thu, Apr 16, 2020 at 2:50 PM Dibyendu Majumdar <mobile at majumdar.org.uk> wrote:
>>
>> Hi
>>
>> On Windows 10 when using a debug build of LLVM 10, I get this assertion failure:
>>
>> Assertion failed: (KV.second.getFlags() & ~WeakFlags) == (I->second &
>> ~WeakFlags) && "Resolving symbol with incorrect flags", file
>> C:\work\github\llvm-10.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line
>> 450
>>
>> The same failure occurred in LLVM 9 too:
>>
>> Assertion failed: I->second == KV.second.getFlags() && "Resolving
>> symbol with incorrect flags", file
>> C:\work\github\llvm-9.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line
>> 384
>>
>> I am unsure what this assertion means and how I can debug this.
>>
>> The assertion seems to occur just after JIT compiling a function, when
>> my code is trying to get the compiled function's address using
>> something like this:
>>
>> return ES->lookup({MainJD}, (*Mangle)(Name.str()));
>>
>> Here is the call stack:
>>
>> libravi.dll!llvm::orc::MaterializationResponsibility::notifyResolved(const
>> llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>>
>> & Symbols) Line 449 C++
>> libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::onObjLoad(unsigned
>> __int64 K, llvm::orc::MaterializationResponsibility & R,
>> llvm::object::ObjectFile & Obj,
>> std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
>> LoadedObjInfo, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>> Resolved,
>> std::set<llvm::StringRef,std::less<llvm::StringRef>,std::allocator<llvm::StringRef>>
>> & InternalSymbols) Line 232 C++
>> > libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::emit::__l2::<lambda>(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>> LoadedObjInfo, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef const ,llvm::JITEvaluatedSymbol>>> ResolvedSymbols) Line 149 C++
>> libravi.dll!llvm::unique_function<llvm::Error
>> __cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>>)>::CallImpl<llvm::Error
>> <lambda>(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,
>> std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>>)>(void * CallableAddr,
>> std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
>> & <Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>> & <Params_1>) Line 157 C++
>> libravi.dll!llvm::unique_function<llvm::Error
>> __cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>>)>::operator()(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>
>> <Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>> <Params_1>) Line 280 C++
>> libravi.dll!llvm::jitLinkForORC(llvm::object::ObjectFile & Obj,
>> std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>>
>> UnderlyingBuffer, llvm::RuntimeDyld::MemoryManager & MemMgr,
>> llvm::JITSymbolResolver & Resolver, bool ProcessAllSections,
>> llvm::unique_function<llvm::Error
>> __cdecl(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef
>> const ,llvm::JITEvaluatedSymbol>>>)> OnLoaded,
>> llvm::unique_function<void __cdecl(llvm::Error)> OnEmitted) Line 1427
>> C++
>> libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::emit(llvm::orc::MaterializationResponsibility
>> R, std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>>
>> O) Line 155 C++
>> libravi.dll!llvm::orc::IRCompileLayer::emit(llvm::orc::MaterializationResponsibility
>> R, llvm::orc::ThreadSafeModule TSM) Line 41 C++
>> libravi.dll!llvm::orc::IRTransformLayer::emit(llvm::orc::MaterializationResponsibility
>> R, llvm::orc::ThreadSafeModule TSM) Line 25 C++
>> libravi.dll!llvm::orc::BasicIRLayerMaterializationUnit::materialize(llvm::orc::MaterializationResponsibility
>> R) Line 132 C++
>> libravi.dll!llvm::orc::MaterializationUnit::doMaterialize(llvm::orc::JITDylib
>> & JD) Line 570 C++
>> libravi.dll!llvm::orc::ExecutionSession::materializeOnCurrentThread(llvm::orc::JITDylib
>> & JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>>
>> MU) Line 1218 C++
>> [External Code]
>> libravi.dll!llvm::orc::ExecutionSession::dispatchMaterialization(llvm::orc::JITDylib
>> & JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>>
>> MU) Line 1204 C++
>> libravi.dll!llvm::orc::ExecutionSession::runOutstandingMUs() Line
>> 2188 C++
>> libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind
>> K, const std::vector<std::pair<llvm::orc::JITDylib *,enum
>> llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
>> *,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,
>> llvm::orc::SymbolLookupSet Symbols, llvm::orc::SymbolState
>> RequiredState, llvm::unique_function<void
>> __cdecl(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>>>)>
>> NotifyComplete, std::function<void
>> __cdecl(llvm::DenseMap<llvm::orc::JITDylib
>> *,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib
>> *>,llvm::detail::DenseMapPair<llvm::orc::JITDylib
>> *,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>>
>> const &)> RegisterDependencies) Line 2084 C++
>> libravi.dll!llvm::orc::ExecutionSession::lookup(const
>> std::vector<std::pair<llvm::orc::JITDylib *,enum
>> llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
>> *,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder, const
>> llvm::orc::SymbolLookupSet & Symbols, llvm::orc::LookupKind K,
>> llvm::orc::SymbolState RequiredState, std::function<void
>> __cdecl(llvm::DenseMap<llvm::orc::JITDylib
>> *,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib
>> *>,llvm::detail::DenseMapPair<llvm::orc::JITDylib
>> *,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>>
>> const &)> RegisterDependencies) Line 2124 C++
>> libravi.dll!llvm::orc::ExecutionSession::lookup(const
>> std::vector<std::pair<llvm::orc::JITDylib *,enum
>> llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib
>> *,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,
>> llvm::orc::SymbolStringPtr Name) Line 2145 C++
>> libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::ArrayRef<llvm::orc::JITDylib
>> *> SearchOrder, llvm::orc::SymbolStringPtr Name) Line 2157 C++
>> libravi.dll!ravi::RaviJITState::findSymbol(llvm::StringRef Name)
>> Line 523 C++
>>
>>
>> Thanks and Regards
>> Dibyendu
More information about the llvm-dev
mailing list