[llvm-dev] ORC Assertion failure

Lang Hames via llvm-dev llvm-dev at lists.llvm.org
Sun Apr 26 20:36:44 PDT 2020


Hi Dibyendu,

Are you using LLJIT?

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.

-- Lang.

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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200426/97bcb4bb/attachment.html>


More information about the llvm-dev mailing list