[LLVMdev] DIBuilder - what's with the null compile units?

Talin viridia at gmail.com
Thu Oct 27 22:39:53 PDT 2011


On Mon, Oct 24, 2011 at 9:17 AM, Devang Patel <dpatel at apple.com> wrote:

>
> On Oct 23, 2011, at 12:03 AM, Talin wrote:
>
> Just a follow up on this - I am still having problems, I never did figure
> out a solution. (I've been running with debug off for the last month so that
> I could get work done.)
>
> Here's what I am seeing: I am definitely calling DIBuilder::finalize(). I
> even put a debug print statement right after it, so that I could be sure
> that the code was being executed. I also insured that it was getting called
> before the module was written out, and that no additional debug information
> gets added after it has been called.
>
> Yet despite this, the second-to-last parameter for DW_TAG_subprogram
> metadata is in fact null in the module dissassembly.
>
> So essentially I am completely stumped.
>
>
> If you're using DIBuilder to create your subprogram then you'll see that it
> puts new node in AllSubprograms.
>
>   // Create a named metadata so that we do not lose this mdnode.
>
>
>   AllSubprograms.push_back(Node);
>
> And follow AllSubprograms in DIBuilder::finalize()
>
> I traced through the code in DIBuilder::finalize():

  *for* (*unsigned* i = 0, e = SPs.getNumElements(); i != e; ++i) {
    DISubprogram SP(SPs.getElement(i));
    *if* (NamedMDNode *NMD = getFnSpecificMDNode(M, SP)) {
      SmallVector<Value *, 4> Variables;
      *for* (*unsigned* ii = 0, ee = NMD->getNumOperands(); ii != ee; ++ii)


It looks as if getFnSpecificMDNode() is always returning NULL in my case -
 the body of the if statement never gets executed.

>
-- 
-- Talin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111027/84d8143e/attachment.html>


More information about the llvm-dev mailing list