[PATCH] Debugging LLVM IR with LLDB (and gdb)

Nadav Rotem nrotem at apple.com
Sat Apr 13 20:00:36 PDT 2013


Hi Daniel, 

You forgot to attache the patch. 

Thanks,
Nadav

On Apr 11, 2013, at 1:53 PM, "Malea, Daniel" <daniel.malea at intel.com> wrote:

> Hi all,
> 
> There has been some talk about debugging LLVM IR on the lists and on IRC, so I implemented a transform pass that allows just that! Here's a screenshot of me stepping through the IR generated by clang to catch an exception: http://i.imgur.com/OG6rUIE.png
> 
> Before I get into the details, here are some limitations:
> 
>  *   It is a requirement (for now) that the input module have debug metadata (that is, it was generated with clang –g or equivalent)
>  *   By running the pass, metadata that correlates machine code back to the original source file are lost. Until debuggers know about IR, this will remain a limitation.
>  *   Printing variables that exist in the original source works, but LLVM temporaries not so much (in the current implementation)
> 
> That said, the patch includes a few test cases that use opt to modify code with debug metadata decorators to allow debugging of IR. If you'd like to give it a shot, add the pass to your PassManager by calling createDebugIRPass()!
> 
> I'd be appreciative of testing and/or review comments! The patch is available on phabricator http://llvm-reviews.chandlerc.com/D659and the details from the review request follow.
> 
> 
> I plan to commit it as 4 separate patches, here's what they do:
> 
> 
> Part #1: FormattedStream -- Add line tracking
> - previously formatted_raw_ostream tracked columns, now it tracks lines too
> - used by DebugIR pass to know the line number to connect to each IR instruction
> 
> Part #2: Pull up AssemblyWriter interface into header to allow subclassing
> - made all functions virtual so that subclasses can specialize them
> - add printInstructionLine so that subclasses can choose whether or not to
> print the newline character (without having to implement printBasicBlock()
> 
> Part #3: DebugIR -- emit IR file and replace source lines with IR lines in MD
> - requires existing debug information to be present
> - fixes up file name and line number information
> - emits a "<orig_filename>-debug.ll" succinct IR file (without !dbg metadata
> or debug intrinsics) that can be read by a debugger
> 
> Part #4: DebugIR tests -- lit tests for the line number transform
> - simple one-function case
> - function-calling case
> - external function calling case
> - exception throwing case
> - vector case
> - O3 (vector) case
> 
> 
> 
> Thanks,
> 
> 
> --
> 
> Daniel Malea <daniel.malea at intel.com<mailto:daniel.malea at intel.com>>
> 
> Intel Waterloo
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130413/09ebb95b/attachment.html>


More information about the llvm-commits mailing list