Mapping bitcode to source code

Hi,

I'm looking for a way to map bitcode to the source code (C/C++) from which it was generated. For example, the Java class file format has an optional LineNumberTable attribute that maps each bytecode instruction to a source code line number:

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#22856

Is there something analogous in the LLVM environment? Thanks,

Trevor

Hi Trevor,

I'm looking for a way to map bitcode to the source code (C/C++) from which it was generated. For example, the Java class file format has an optional LineNumberTable attribute that maps each bytecode instruction to a source code line number:

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#22856

Is there something analogous in the LLVM environment? Thanks,

this can be done using debug info. Check out
   Source Level Debugging with LLVM — LLVM 18.0.0git documentation

Ciao,

Duncan.

Wow, that threw me for a loop. I'm using the 2.6 release, thinking I was up to date, but its debug output doesn't look anything like what's described in the above link. It appears to document the upcoming 2.7 version, which for some reason produces different debug syntax than 2.6. For example, the llvm.dbg.stoppoint intrinsic function no longer exists in 2.7, and 2.6 has no "metadata" descriptors. Is there any information about these changes and why they were necessary?

Also, is there an API for accessing the debug info? I looked through the Programmer's Manual but didn't see anything.

Thanks,

Trevor

I think I found it:

http://nondot.org/~sabre/LLVMNotes/EmbeddedMetadata.txt

Still looking for an API to access the metadata...

Trevor

Does http://llvm.org/doxygen/DebugInfo_8h.html help?

If you want to map llvm instruction to the source location then try

if (MDNode *N = I->getMetadata("dbg")) { // Where I is an LLVM instruction
   DILocation Loc(N); // DILocation is
in DebugInfo.h
   unsigned Line = Loc.getLineNumber();
   StringRef File = Loc.getFilename();
   StringRef Dir = Loc.getDirectory();
}

Note, this is new and it won't work in llvm2.6.