Hi Sean, thanks for the notes! I think I found the root-cause of the problem, which was that ConstantDataArray was being used as an operand when constructing an MDNode, which is not valid according to docs because CDA does some packing of the internal data and may mangle the actual Value* that MDNode expects.. In my experience, this happens at higher >O2 optimization levels.
In any case, the fix was simple enough, it should be in 183153. I'm surprised we didn't run into this crash before. Cheers, Dan From: Sean Callanan <[email protected]<mailto:[email protected]>> Date: Wednesday, 29 May, 2013 5:20 PM To: Daniel Malea <[email protected]<mailto:[email protected]>> Cc: "[email protected]<mailto:[email protected]>" <[email protected]<mailto:[email protected]>> Subject: Re: invalid LLVMContext during expression evaluation Daniel, On May 29, 2013, at 2:09 PM, "Malea, Daniel" <[email protected]<mailto:[email protected]>> wrote: I have just started looking into a problem that's happening with the Debian test runs (but interestingly not under manual configure/cmake builds) where the LLVMContext is coming up as uninitialized, thereby causing the internal LLDB segfault in the following stack trace. Any hints where I should start digging for the root-cause? I imagine LLDB attempts to use a global LLVMContext (?), but I have not yet found the code that initializes it... Each ClangExpressionParser sets up its own LLVMContext. See ClangExpressionParser.cpp:376 or thereabouts. The LLVMContext is then installed into the Clang code generator, but we retain ownership. Program received signal SIGSEGV, Segmentation fault. llvm::Value::getContext (this=0x10ea950) at /home/daniel/dev/llvm-toolchain-snapshots-automake/llvm-toolchain-snapshot-3.4~svn182852/lib/IR/Value.cpp:480 480 LLVMContext &Value::getContext() const { return VTy->getContext(); } (gdb) bt #0 llvm::Value::getContext (this=0x10ea950) at /home/daniel/dev/llvm-toolchain-snapshots-automake/llvm-toolchain-snapshot-3.4~svn182852/lib/IR/Value.cpp:480 If you’re dying in llvm::Value::getContext, it doesn’t sound to me like the context is bad, it’s VTy that’s bad. You’re in the code that prepares LLVM IR for running in the target. ResolveFunctionPointers changes by-name function references to literals cast to function pointers – essentially we’re pre-linking the code because we don’t trust the MCJIT to do so. RegisterFunctionMetadata attaches a little bit of metadata to each call to the function, letting later passes (in particular, the Objective-C checkers) know what the name of the called function is. Hope this helps, and happy debugging. Sean _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
