ml at dadommas.de
2012-Jul-09 16:19 UTC
[LLVMdev] ExecutionEngine fails to use MCJIT, non-unique static member variables
I see very strange behaviour. I am linking to LLVMMCJIT and I #include MCJIT.h. I can see in the debugger that MCJIT::Register is being called. If I break in ExecutionEngine::create, I can see that UseMCJIT is true and ExecutionEngine::MCJITCtor is non-zero. Still at this point (lines after 481): if (UseMCJIT && ExecutionEngine::MCJITCtor) { ExecutionEngine *EE ExecutionEngine::MCJITCtor(M, ErrorStr, JMM, AllocateGVsWithCode, TheTM.take()); if (EE) return EE; } else if (ExecutionEngine::JITCtor) { ExecutionEngine *EE ExecutionEngine::JITCtor(M, ErrorStr, JMM, AllocateGVsWithCode, TheTM.take()); if (EE) return EE; } The second if-branch is being executed, i.e. ExecutionEngine::JITCtor is being called. I can see in gdb that the breakpoint in EngineBuilder::create is present at two different addresses, I can also see that ExecutionEngine::MCJITCtor is present twice in memory. &ExecutionEngine::MCJITCtor in MCJIT::Register: 0x9bfff0 &ExecutionEngine::MCJITCtor in ExecutionEngine::create: 0x7ffff7bd4390 Is this a linking issue? For more info, here the linking command: g++ -Wl,-O1 -o qling main.o widget.o util.o consoleoutput.o codeinput.o codewidget.o moc_widget.o moc_consoleoutput.o moc_codeinput.o moc_codewidget.o -L/usr/lib64/qt4 - L/home/thomas/opt/llvm-debug/lib -lm -ldl -fPIC -rdynamic qt-hack/qatomic_sun.o -lcling -lclingInterpreter -lclingUtils -lclangFrontend -lclangFrontendTool -lclangSerialization - lclangDriver -lclangCodeGen -lclangParse -lclangSema -lclangEdit -lclangAnalysis -lclangRewrite -lclangAST -lclangLex -lclangBasic -lLLVMTableGen -lLLVMMCJIT - lLLVMRuntimeDyld -lLLVMObject -lLLVMMCDisassembler -lLLVMLinker -lLLVMipo -lLLVMInterpreter -lLLVMInstrumentation -lLLVMJIT -lLLVMExecutionEngine -lLLVMDebugInfo - lLLVMBitWriter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMSelectionDAG -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMX86Info - lLLVMAsmPrinter -lLLVMMCParser -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAsmParser -lLLVMArchive -lLLVMBitReader - lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMCore -lLLVMSupport -lQtGui -L/usr/lib64 -L/usr/lib64/qt4 -L/usr/X11R6/lib -lQtCore -lgthread-2.0 -lrt -lglib-2.0 -lpthread Any help is appreciated, Thomas