<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><span></span></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><span></span></div><div><div dir="ltr">Hi All,<div><br></div><div>> <span style="font-family:arial,sans-serif;font-size:13px">I think this ignores the real problem with the MCJIT debugging interface: it doesn't give MCJIT clients any way of directly accessing and parsing the debug metadata.</span></div>
<div><br></div><div>Sorry - it wasn't clear from my original post, but I'm hoping to improve debugging APIs in general, not just for the system debugger. </div><div><br></div><div>I think there are two orthogonal concerns here - (1) the debug info format (and tools for parsing it), and (2) the APIs for getting the debug info to the people who need it.</div><div><br></div><div>I want to keep these two things separate to allow for clients passing through debug-info or other annotations that LLVM/LLDB has no idea how to parse.</div><div><br></div><div>So, here's a sketch of a partial solution for MCJIT clients (we'll leave the system debugger to a follow-up email):</div><div><br></div><div>On point one, my inclination is that we should use an existing stable debug info format. Dwarf seems an obvious candidate, given the level of support in LLVM. As noted, this shouldn't matter to the client - I think there's general agreement that the debug info parsing support should be available in LLVM/LLDB. The client shouldn't have to care about debug-info format specifics unless they want to. (If anybody has a use-case where that wouldn't work, please speak up).</div><div><br></div><div>Regarding the second point, my current (vague) plan is to introduce a utility class that, when attached to the execution engine, records the relocated debug info sections for each JIT'd object. Clients should be able to query this object to access the debug info sections. We would provide, either in LLVM or LLDB, debug info parsers that wrap this class to parse the contained debug info.</div><div><br></div><div>My intent is that use of this API would look something like:</div><div><br></div><div>ExecutionEngine EE = ...;</div><div>DebugInfoListener DI = new DebugInfoListener(...);</div><div>EE->addEventListener(DI);</div><div>EE->addModule(Foo);</div><div>EE->addModule(Bar);</div><div><br></div><div>MCJITDebugInfoParser DIP = createMCJITDebugInfoParser(DI);</div><div>DIP...;</div><div><br></div><div>Any thoughts/comments on this (admittedly very vague) proposal are very welcome. Assuming it sounds reasonable so far, I'm going to start hacking up some patches and basic use cases to serve as a basis for further discussion (and a tutorial if the eventual proposal is adopted).</div><div><br></div><div>Cheers,</div><div>Lang.</div><div><br></div></div><div class="gmail_extra"><div class="gmail_quote">On Mon, Aug 11, 2014 at 2:02 PM, David Chisnall <span dir="ltr"><<a href="mailto:David.Chisnall@cl.cam.ac.uk" target="_blank">David.Chisnall@cl.cam.ac.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 11 Aug 2014, at 18:06, Eric Christopher <<a href="mailto:echristo@gmail.com">echristo@gmail.com</a>> wrote:<br>

<br>
> There's some support (originally forked from lldb) already in llvm to<br>
> do this. Look at lib/DebugInfo, it's what llvm-dwarfdump, etc are<br>
> based upon.<br>
<br>
</div>Now that lldb is following trunk, it would be really great if some of this could be unified.  Every time we find a bug, we end up fixing it in both places (sometimes we remember, sometimes we find the same bug twice).<br>

<span class="HOEnZb"><font color="#888888"><br>
David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br></div>
</div></div></body></html>