<div dir="ltr"><div dir="ltr">Hi Dibyendu,<div><br></div><div>Are you using LLJIT?</div><div><br></div><div>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.</div><div><br></div><div>-- Lang.</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Apr 16, 2020 at 2:50 PM Dibyendu Majumdar <<a href="mailto:mobile@majumdar.org.uk">mobile@majumdar.org.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi<br>
<br>
On Windows 10 when using a debug build of LLVM 10, I get this assertion failure:<br>
<br>
Assertion failed: (KV.second.getFlags() & ~WeakFlags) == (I->second &<br>
~WeakFlags) && "Resolving symbol with incorrect flags", file<br>
C:\work\github\llvm-10.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line<br>
450<br>
<br>
The same failure occurred in LLVM 9 too:<br>
<br>
Assertion failed: I->second == KV.second.getFlags() && "Resolving<br>
symbol with incorrect flags", file<br>
C:\work\github\llvm-9.0.0.src\lib\ExecutionEngine\Orc\Core.cpp, line<br>
384<br>
<br>
I am unsure what this assertion means and how I can debug this.<br>
<br>
The assertion seems to occur just after JIT compiling a function, when<br>
my code is trying to get the compiled function's address using<br>
something like this:<br>
<br>
return ES->lookup({MainJD}, (*Mangle)(Name.str()));<br>
<br>
Here is the call stack:<br>
<br>
     libravi.dll!llvm::orc::MaterializationResponsibility::notifyResolved(const<br>
llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>><br>
& Symbols) Line 449    C++<br>
     libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::onObjLoad(unsigned<br>
__int64 K, llvm::orc::MaterializationResponsibility & R,<br>
llvm::object::ObjectFile & Obj,<br>
std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>><br>
LoadedObjInfo, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef<br>
const ,llvm::JITEvaluatedSymbol>>> Resolved,<br>
std::set<llvm::StringRef,std::less<llvm::StringRef>,std::allocator<llvm::StringRef>><br>
& InternalSymbols) Line 232    C++<br>
>    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++<br>
     libravi.dll!llvm::unique_function<llvm::Error<br>
__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<br>
const ,llvm::JITEvaluatedSymbol>>>)>::CallImpl<llvm::Error<br>
<lambda>(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>>,<br>
std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef<br>
const ,llvm::JITEvaluatedSymbol>>>)>(void * CallableAddr,<br>
std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>><br>
& <Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef<br>
const ,llvm::JITEvaluatedSymbol>>> & <Params_1>) Line 157    C++<br>
     libravi.dll!llvm::unique_function<llvm::Error<br>
__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<br>
const ,llvm::JITEvaluatedSymbol>>>)>::operator()(std::unique_ptr<llvm::RuntimeDyld::LoadedObjectInfo,std::default_delete<llvm::RuntimeDyld::LoadedObjectInfo>><br>
<Params_0>, std::map<llvm::StringRef,llvm::JITEvaluatedSymbol,std::less<llvm::StringRef>,std::allocator<std::pair<llvm::StringRef<br>
const ,llvm::JITEvaluatedSymbol>>> <Params_1>) Line 280    C++<br>
     libravi.dll!llvm::jitLinkForORC(llvm::object::ObjectFile & Obj,<br>
std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>><br>
UnderlyingBuffer, llvm::RuntimeDyld::MemoryManager & MemMgr,<br>
llvm::JITSymbolResolver & Resolver, bool ProcessAllSections,<br>
llvm::unique_function<llvm::Error<br>
__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<br>
const ,llvm::JITEvaluatedSymbol>>>)> OnLoaded,<br>
llvm::unique_function<void __cdecl(llvm::Error)> OnEmitted) Line 1427<br>
  C++<br>
     libravi.dll!llvm::orc::RTDyldObjectLinkingLayer::emit(llvm::orc::MaterializationResponsibility<br>
R, std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer>><br>
O) Line 155    C++<br>
     libravi.dll!llvm::orc::IRCompileLayer::emit(llvm::orc::MaterializationResponsibility<br>
R, llvm::orc::ThreadSafeModule TSM) Line 41    C++<br>
     libravi.dll!llvm::orc::IRTransformLayer::emit(llvm::orc::MaterializationResponsibility<br>
R, llvm::orc::ThreadSafeModule TSM) Line 25    C++<br>
     libravi.dll!llvm::orc::BasicIRLayerMaterializationUnit::materialize(llvm::orc::MaterializationResponsibility<br>
R) Line 132    C++<br>
     libravi.dll!llvm::orc::MaterializationUnit::doMaterialize(llvm::orc::JITDylib<br>
& JD) Line 570    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::materializeOnCurrentThread(llvm::orc::JITDylib<br>
& JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>><br>
MU) Line 1218    C++<br>
     [External Code]<br>
     libravi.dll!llvm::orc::ExecutionSession::dispatchMaterialization(llvm::orc::JITDylib<br>
& JD, std::unique_ptr<llvm::orc::MaterializationUnit,std::default_delete<llvm::orc::MaterializationUnit>><br>
MU) Line 1204    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::runOutstandingMUs() Line<br>
2188    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind<br>
K, const std::vector<std::pair<llvm::orc::JITDylib *,enum<br>
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib<br>
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,<br>
llvm::orc::SymbolLookupSet Symbols, llvm::orc::SymbolState<br>
RequiredState, llvm::unique_function<void<br>
__cdecl(llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>,llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr,llvm::JITEvaluatedSymbol>>>)><br>
NotifyComplete, std::function<void<br>
__cdecl(llvm::DenseMap<llvm::orc::JITDylib<br>
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib<br>
*>,llvm::detail::DenseMapPair<llvm::orc::JITDylib<br>
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>><br>
const &)> RegisterDependencies) Line 2084    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::lookup(const<br>
std::vector<std::pair<llvm::orc::JITDylib *,enum<br>
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib<br>
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder, const<br>
llvm::orc::SymbolLookupSet & Symbols, llvm::orc::LookupKind K,<br>
llvm::orc::SymbolState RequiredState, std::function<void<br>
__cdecl(llvm::DenseMap<llvm::orc::JITDylib<br>
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>,llvm::DenseMapInfo<llvm::orc::JITDylib<br>
*>,llvm::detail::DenseMapPair<llvm::orc::JITDylib<br>
*,llvm::DenseSet<llvm::orc::SymbolStringPtr,llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>>>><br>
const &)> RegisterDependencies) Line 2124    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::lookup(const<br>
std::vector<std::pair<llvm::orc::JITDylib *,enum<br>
llvm::orc::JITDylibLookupFlags>,std::allocator<std::pair<llvm::orc::JITDylib<br>
*,enum llvm::orc::JITDylibLookupFlags>>> & SearchOrder,<br>
llvm::orc::SymbolStringPtr Name) Line 2145    C++<br>
     libravi.dll!llvm::orc::ExecutionSession::lookup(llvm::ArrayRef<llvm::orc::JITDylib<br>
*> SearchOrder, llvm::orc::SymbolStringPtr Name) Line 2157    C++<br>
     libravi.dll!ravi::RaviJITState::findSymbol(llvm::StringRef Name)<br>
Line 523    C++<br>
<br>
<br>
Thanks and Regards<br>
Dibyendu<br>
</blockquote></div>