[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