You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Even when not using LLVMOrcAddLazilyCompiledIR() Orc crashes on platforms without indirect stub support. The reason for that is that its constructor dereferences a nullptr functor (IndirectStubsMgrBuilder):
So, if any orc is used on a platform (e.g. powerpc) without stub support, orc can't be used in eager support either.
It's not hard to fix this. We can either make createLocalIndirectSubsManagerBuilder() return orc::LocalIndirectStubsManagerorc::OrcGenericABI>(); or have the C stack not construct IndirectStubsMgr until necessary. Any preference?
I'd be awesome if we could get this fixed for 6.1, this is currently breaking postgres' JIT on PPC.
I'm planning to update the orc unittests so a) they actually test aarch64, given that that should now be fully supported. b) split the tests into indirect / no jit at all capability, so crashes like this can be detected automatically in the future.
The text was updated successfully, but these errors were encountered:
Extended Description
Hi,
Even when not using LLVMOrcAddLazilyCompiledIR() Orc crashes on platforms without indirect stub support. The reason for that is that its constructor dereferences a nullptr functor (IndirectStubsMgrBuilder):
OrcCBindingsStack(TargetMachine &TM,
std::unique_ptr CCMgr,
IndirectStubsManagerBuilder IndirectStubsMgrBuilder)
: ES(SSP), DL(TM.createDataLayout()),
IndirectStubsMgr(IndirectStubsMgrBuilder()), CCMgr(std::move(CCMgr)),
which is invoked by:
LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM) {
TargetMachine *TM2(unwrap(TM));
Triple T(TM2->getTargetTriple());
auto CompileCallbackMgr = orc::createLocalCompileCallbackManager(T, 0);
auto IndirectStubsMgrBuilder =
orc::createLocalIndirectStubsManagerBuilder(T);
OrcCBindingsStack *JITStack = new OrcCBindingsStack(
*TM2, std::move(CompileCallbackMgr), IndirectStubsMgrBuilder);
return wrap(JITStack);
}
std::function<std::unique_ptr()>
createLocalIndirectStubsManagerBuilder(const Triple &T) {
switch (T.getArch()) {
default: return nullptr;
...
}
So, if any orc is used on a platform (e.g. powerpc) without stub support, orc can't be used in eager support either.
It's not hard to fix this. We can either make createLocalIndirectSubsManagerBuilder() return orc::LocalIndirectStubsManagerorc::OrcGenericABI>(); or have the C stack not construct IndirectStubsMgr until necessary. Any preference?
I'd be awesome if we could get this fixed for 6.1, this is currently breaking postgres' JIT on PPC.
I'm planning to update the orc unittests so a) they actually test aarch64, given that that should now be fully supported. b) split the tests into indirect / no jit at all capability, so crashes like this can be detected automatically in the future.
The text was updated successfully, but these errors were encountered: