[LLVMdev] crash in JIT when running the inliner
Nuno Lopes
nunoplopes at sapo.pt
Sat Aug 9 09:15:54 PDT 2008
>> Today I've been trying to debug a weird bug that makes JIT crash with
>> certain code and when using the inliner. This may sound weird, but if I
>> disable the inliner, it doesn't crash.
>> I include an example gdb dump below. Does something looks wrong? Do you
>> think it's a bug in JIT or it's just some other piece of code that is
>> writing on the JIT memory?.. I don't really know how to debug this..
>
> my guess is that the code you are jitting is scribbling over
> memory.
ok, so, my previous code was making bad things, because it was writing the
bitcode to file after each function translation. The problem is that
WriteBitcodeToFile() releases the memory and thus the 2nd compilation would
have pointers to IR that had been already freed.
After fixing this problem in my code, I still get the very same problem: the
program crashes when I run the inliner. Running valgrind on the program
without the inliner doesn't show any error. If I run the program with the
inliner (just uncoment 1 line), valgrind gives a few errors.
Example of one of the errors:
==11384== Invalid read of size 4
==11384== at 0x54B6F04: llvm::StringMapEntryBase::getKeyLength() const
(StringMap.h:47)
==11384== by 0x59C6CFD: llvm::Value::getNameStr() const (Value.cpp:162)
==11384== by 0x544FE54: llvm::Value::getName() const (Value.h:110)
==11384== by 0x55E7DA8: (anonymous
namespace)::JITResolver::JITCompilerFn(void*) (JITEmitter.cpp:269)
==11384== by 0x54AA47B: X86CompilationCallback2 (X86JITInfo.cpp:350)
==11384== by 0x54AA0C8: (within
/usr/local/lib/php/extensions/no-debug-non-zts-20071006/phpllvm.so)
==11384== by 0x8F74D78: ???
==11384== by 0x55E15BF: llvm::JIT::runFunction(llvm::Function*,
std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> > const&)
(JIT.cpp:323)
==11384== by 0x544D9B6: phpllvm::execute(_zend_op_array*)
(phpllvm_execute.cpp:200)
==11384== by 0x8FA3365: ???
==11384== by 0x55E15BF: llvm::JIT::runFunction(llvm::Function*,
std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> > const&)
(JIT.cpp:323)
==11384== by 0x544D9B6: phpllvm::execute(_zend_op_array*)
(phpllvm_execute.cpp:200)
==11384== Address 0x5ec7778 is 0 bytes inside a block of size 32 free'd
==11384== at 0x402266C: operator delete(void*) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==11384== by 0x54C5034:
__gnu_cxx::new_allocator<llvm::SDValue>::deallocate(llvm::SDValue*,
unsigned) (new_allocator.h:96)
==11384== by 0x54C505E: std::_Vector_base<llvm::SDValue,
std::allocator<llvm::SDValue> >::_M_deallocate(llvm::SDValue*, unsigned)
(stl_vector.h:133)
==11384== by 0x54C5097: std::_Vector_base<llvm::SDValue,
std::allocator<llvm::SDValue> >::~_Vector_base() (stl_vector.h:119)
==11384== by 0x54C50F9: std::vector<llvm::SDValue,
std::allocator<llvm::SDValue> >::~vector() (stl_vector.h:272)
==11384== by 0x5683471:
llvm::SelectionDAGLowering::~SelectionDAGLowering()
(SelectionDAGISel.cpp:496)
==11384== by 0x567683D:
llvm::SelectionDAGISel::BuildSelectionDAG(llvm::SelectionDAG&,
llvm::BasicBlock*, std::vector<std::pair<llvm::MachineInstr*, unsigned>,
std::allocator<std::pair<llvm::MachineInstr*, unsigned> > >&,
llvm::FunctionLoweringInfo&) (SelectionDAGISel.cpp:5252)
==11384== by 0x56768C0:
llvm::SelectionDAGISel::SelectBasicBlock(llvm::BasicBlock*,
llvm::MachineFunction&, llvm::FunctionLoweringInfo&,
std::vector<std::pair<llvm::MachineInstr*, unsigned>,
std::allocator<std::pair<llvm::MachineInstr*, unsigned> > >&,
llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::SDNode, 136, 4>&)
(SelectionDAGISel.cpp:5469)
==11384== by 0x5676A14:
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function&,
llvm::MachineFunction&, llvm::FunctionLoweringInfo&)
(SelectionDAGISel.cpp:5452)
==11384== by 0x5677609:
llvm::SelectionDAGISel::runOnFunction(llvm::Function&)
(SelectionDAGISel.cpp:4904)
==11384== by 0x54C4BCC: (anonymous
namespace)::X86DAGToDAGISel::runOnFunction(llvm::Function&)
(X86ISelDAGToDAG.cpp:123)
==11384== by 0x59A59CF:
llvm::FPPassManager::runOnFunction(llvm::Function&) (PassManager.cpp:1260)
Does this error makes sense to anyone?
Thanks,
Nuno
More information about the llvm-dev
mailing list