[llvm-dev] ORC Assertion failure

Dibyendu Majumdar via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 16 15:23:22 PDT 2020


Interestingly this assertion failure occurs with ORC v2 but not ORC v1.

Regards

On Thu, 16 Apr 2020 at 22:56, Dibyendu Majumdar <mobile at majumdar.org.uk> wrote:
>
> Hi,
>
> Some more info:
>
> The values that are causing the failure are:
>
> I.second {TargetFlags=0 '\0' Flags=None (0 '\0') }
> KV.second {Address=1438723211264 Flags={TargetFlags=0 '\0'
> Flags=Callable (32 ' ') } }
>
> In line:
>
>     assert((KV.second.getFlags() & ~WeakFlags) == (I->second & ~WeakFlags) &&
>            "Resolving symbol with incorrect flags");
>
> On Thu, 16 Apr 2020 at 22:49, 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