This is likely going to be difficult if possible. I wouldn't bet on it working that way. We've not been trying to keep compatibility between versions for debug information metadata because the format has been in such flux and upgrading/multiple versions is a significant overhead.<br>
<br>You might be able to walk the instructions and grab the scope + line/column that way for each instruction. You can see the format of each metadata node by looking at DebugInfo.h. Hope this helps, feel free to send mail if you have any more questions.<div>
<br></div><div>-eric</div><br><div>On Wed Jan 22 2014 at 8:59:36 PM, James Stark <<a href="mailto:mrjamesstark@gmail.com">mrjamesstark@gmail.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Hi,</div><div><br></div><div>I have bitcode files built by LLVM v3.3 and need to process them using v3.4 tools. While I don't expect a lot of backward compatibility in LLVM, luckily it seems everything's working fine, except for reading source line information attached to instructions. I use this piece of code [0] to get source line information. For v3.4, <span style="font-family:'courier new',monospace">instruction.getMetadata </span><font face="arial, helvetica, sans-serif">returns NULL.</font></div>

<div><br></div><div>I used llvm-dis to see what's going on. For a sample program [1], llvm-dis v3.3, of course, didn't have problems and dumped [2], showing dbg info. However, llvm-dis v3.4 seemed to have problems grabbing the dbg info [3].</div>

<div><br></div><div>Any idea how I can modify the code [0] to solve the problem? Attached is the bitcode file used as an example in this mail. It was complied with clang v3.3 -g -O0. </div><div><br></div><div>Thanks,</div>

<div>James</div><div><br></div><div><p><font face="arial, helvetica, sans-serif">[0]</font></p><p><font face="courier new, monospace">llvm::LLVMContext llvmContext;</font></p><p><font face="courier new, monospace"><span>unsigned</span> dbgKind = llvmContext.getMDKindID(<span>"dbg"</span>);</font></p>

<p><font face="courier new, monospace"><span>if</span> (MDNode *N = instruction.getMetadata(dbgKind))</font><span style="font-family:'courier new',monospace">{</span></p><p><font face="courier new, monospace">    DILocation location(N);</font></p>

<p><font face="courier new, monospace">    fileDirectoryName = location.getDirectory();</font></p><p><font face="courier new, monospace">    fileName = location.getFilename();</font></p><p><font face="courier new, monospace">    lineNumber = location.getLineNumber();</font></p>

<p><font face="courier new, monospace">    columnNumber = location.getColumnNumber();</font></p><p></p><p><font face="courier new, monospace">}</font></p></div>[1]<br><div>







<p><font face="courier new, monospace">int main(int argc, char **argv)</font><font face="courier new, monospace">{</font><span style="font-family:'courier new',monospace">    </span></p><p><span style="font-family:'courier new',monospace">   return 0;</span></p>

<p><span style="font-family:'courier new',monospace">}</span></p><p>[2]</p></div><div>







<p><font face="courier new, monospace">define i32 @main(i32 %argc, i8** %argv) #0 {</font></p>
<p><font face="courier new, monospace">entry:</font></p>
<p><font face="courier new, monospace">  %retval = alloca i32, align 4</font></p>
<p><font face="courier new, monospace">  %argc.addr = alloca i32, align 4</font></p>
<p><font face="courier new, monospace">  %argv.addr = alloca i8**, align 8</font></p>
<p><font face="courier new, monospace">  store i32 0, i32* %retval</font></p>
<p><font face="courier new, monospace">  store i32 %argc, i32* %argc.addr, align 4</font></p>
<p><font face="courier new, monospace">  call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !12), !dbg !13</font></p>
<p><font face="courier new, monospace">  store i8** %argv, i8*** %argv.addr, align 8</font></p>
<p><font face="courier new, monospace">  call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !14), !dbg !13</font></p>
<p><font face="courier new, monospace">  ret i32 0, !dbg !15</font></p>
<p><font face="courier new, monospace">}</font></p><p>[3]<br></p><p><font face="courier new, monospace">define i32 @main(i32 %argc, i8** %argv) #0 {</font></p><p><font face="courier new, monospace">entry:</font></p>
<p><font face="courier new, monospace">  %retval = alloca i32, align 4</font></p><p><font face="courier new, monospace">  %argc.addr = alloca i32, align 4</font></p><p><font face="courier new, monospace">  %argv.addr = alloca i8**, align 8</font></p>

<p><font face="courier new, monospace">  store i32 0, i32* %retval</font></p><p><font face="courier new, monospace">  store i32 %argc, i32* %argc.addr, align 4</font></p><p><font face="courier new, monospace">  store i8** %argv, i8*** %argv.addr, align 8</font></p>

<p><font face="courier new, monospace">  ret i32 0</font></p><p>
















</p><p><font face="courier new, monospace">}</font></p></div></div>
</blockquote>