[LLVMdev] using -debug-ir to map identify IR mapping

560 views
Skip to first unread message

Muneeb Khan

unread,
Oct 15, 2014, 10:12:19 AM10/15/14
to llv...@cs.uiuc.edu
Hi,
I am using the -debug-ir pass in LLVM-3.5 opt tool to map binary information back to the IR instead of the source files.
I use the opt tool to  generate a .ll file. But when I run the llc tool on it to generate an assembly (or object) file, it gives me the following warning

warning: ignoring debug info with an invalid version (0) in 

How can I use the debug-ir functionality to achieve a mapping from the binary to the IR?
Thanks!

Muneeb Khan
PhD student
Department of Information Technology,
Uppsala University,
Sweden
Tel: +46 18 - 471 1049



David Blaikie

unread,
Oct 15, 2014, 11:18:06 AM10/15/14
to Muneeb Khan, Adrian Prantl, LLVM Developers Mailing List
On Wed, Oct 15, 2014 at 7:08 AM, Muneeb Khan <munee...@it.uu.se> wrote:
Hi,
I am using the -debug-ir pass in LLVM-3.5 opt tool to map binary information back to the IR instead of the source files.
I use the opt tool to  generate a .ll file. But when I run the llc tool on it to generate an assembly (or object) file, it gives me the following warning

warning: ignoring debug info with an invalid version (0) in 

Are you using opt and llc from the same LLVM version? (mixing and matching could produce this problem)

Or possibly debug-ir was never updated to produce the dubug info version - Adrian?
 

How can I use the debug-ir functionality to achieve a mapping from the binary to the IR?
Thanks!

Muneeb Khan
PhD student
Department of Information Technology,
Uppsala University,
Sweden
Tel: +46 18 - 471 1049




_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev


Muneeb Khan

unread,
Oct 15, 2014, 11:24:52 AM10/15/14
to David Blaikie, LLVM Developers Mailing List
Yes, I am using opt and llc from the same version (3.5).
I know that there were issues with debug-ir in 3.4. I have explored the source tree myself for 3.5 and I know that the pass -debug-ir does kick in with opt.
But I have no clue of what happens with the debug information in (and after) the llc pass.

/Muneeb

Adrian Prantl

unread,
Oct 15, 2014, 12:09:02 PM10/15/14
to Muneeb Khan, LLVM Developers Mailing List
I have no experience with debug-ir, but is it possible that the debug-ir pass never sets the debug info version? There should be a named metadata node 
  !llvm.module.flags = !{..., !123}
  !123 = metadata !{i32 1, metadata !"Debug Info Version", i32 2}
in the .ll output. If it is missing, just have a look at the clang sources for an example how to add a module flag.

-- adrian

David Blaikie

unread,
Oct 15, 2014, 12:25:48 PM10/15/14
to Adrian Prantl, LLVM Developers Mailing List, Muneeb Khan
On Wed, Oct 15, 2014 at 9:04 AM, Adrian Prantl <apr...@apple.com> wrote:
I have no experience with debug-ir, but is it possible that the debug-ir pass never sets the debug info version? There should be a named metadata node 
  !llvm.module.flags = !{..., !123}
  !123 = metadata !{i32 1, metadata !"Debug Info Version", i32 2}
in the .ll output. If it is missing, just have a look at the clang sources for an example how to add a module flag.

Perhaps this should be built into DIBuilder, but I'm not sure.

Yeah, looking at how it's implemented, this isn't ideal - we've got the string "Debug Info Version" written in Clang and in LLVM, not using a shared constant or common utility functions owned in the same place. This should probably be part of DIBuilder in some way or another so that clients don't have to duplicate this string, etc.

- David

David Blaikie

unread,
Oct 15, 2014, 12:30:20 PM10/15/14
to Adrian Prantl, LLVM Developers Mailing List, Muneeb Khan
(similarly for the dwarf version flag)

Muneeb Khan

unread,
Oct 15, 2014, 12:55:09 PM10/15/14
to David Blaikie, LLVM Developers Mailing List
Adding the flags in an opt pass seems to do the trick. I added the flags as follows

M.addModuleFlag(llvm::Module::Warning, "Dwarf Version", 3);

M.addModuleFlag(llvm::Module::Error, "Debug Info Version",
                             llvm::DEBUG_METADATA_VERSION);

llvm-dwarfdump and addr2line now point at a line in .ll files, not the source files.

Thanks!

/Muneeb

Adrian Prantl

unread,
Oct 15, 2014, 12:57:26 PM10/15/14
to Muneeb Khan, LLVM Developers Mailing List
Could I interest you in contributing a patch that fixes this for -debug-ir? Maybe even with the DIBuilder interface David mentioned? :-)

-- adrian

David Blaikie

unread,
Oct 15, 2014, 1:01:23 PM10/15/14
to Adrian Prantl, Malea, Daniel, LLVM Developers Mailing List, Muneeb Khan
+Daniel Malea, so he knows this is currently broken.

Muneeb Khan

unread,
Oct 15, 2014, 4:32:30 PM10/15/14
to David Blaikie, LLVM Developers Mailing List
After the initial success I tried compiling several benchmarks with the -debug-ir enabled, but failed on most of them.
In one of the benchmarks I get the following assertion error in llc (after the opt -debug-ir pass) 

llc: DwarfUnit.cpp:963: llvm::DIE* llvm::DwarfUnit::getOrCreateTypeDIE(const llvm::MDNode*): Assertion `ContextDIE’ failed

and in another benchmark I get this assertion error from opt (when using the -debug-ir) pass

opt: DataLayout.cpp:632: unsigned int llvm::DataLayout::getAlignment(llvm::Type*, bool) const: Assertion `Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!"’ failed

The -debug-ir pass does not work seamlessly. It may work for some applications if you’re lucky.

/Muneeb
Reply all
Reply to author
Forward
0 new messages