<div><div dir="auto">Hi Dan,</div><div dir="auto"><br></div><div dir="auto">Having missed this functionality myself in the past I’m excited to see this gain traction. Let me know if there’s anything I can do to help this along. </div><div dir="auto"><br></div><div dir="auto">Cheers,</div><div dir="auto">Jonas</div><br><div class="gmail_quote"><div>On Wed, 21 Mar 2018 at 18:19, Dan Liew via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I recently had the need to see the correspondence between some Clang<br>
generated LLVM IR and the compiled machine code within a debugger<br>
(lldb in this case). Unfortunately it looks like the functionality to<br>
do this used to be in a pass called 'DebugIR' but was removed due to<br>
the lack of a maintainer [1].<br>
<br>
It appears an attempt was made [2] to revive this but it appears to<br>
have stalled.<br>
<br>
I am very keen to see this feature land back in LLVM, so I'd either<br>
like to take over [2] (only if the original author is no longer<br>
interested) or rewrite the feature from scratch based on feedback on<br>
what the community needs.<br>
<br>
The use cases for this feature I see are:<br>
<br>
* Debugging instrumentation inserted by LLVM passes. This is my use<br>
case. I need to debug ASan instrumentation so looking at the original<br>
source code in lldb is pretty useless because I can't see the<br>
instrumentation. Looking at the LLVM IR on the otherhand is very<br>
useful because I can see the ASan instrumentation at a (slightly)<br>
higher level than the native machine code assembly.<br>
<br>
* Debugging JIT'ed code. The LLVM IR that is JIT'ed might not come<br>
from a higher level language and might be generated directly. In this<br>
case the only debug information that makes sense is the LLVM IR<br>
representation of the JIT'ed LLVM IR. This might be a bit tricky<br>
though because there might not be an on disk representation of the<br>
LLVM IR.<br>
<br>
* Writing portions of a runtime in LLVM IR. This is not something I<br>
advise doing but sometimes its necessary to write parts of a compiler<br>
runtime in LLVM IR when it is difficult to write the equivalent code<br>
in a higher level language. This is something I've had to do in KLEE<br>
before because I couldn't get Clang to emit the LLVM IR in the precise<br>
form that I wanted.<br>
<br>
Debug information is not really my expertise but I'm happy to become<br>
the code owner/maintainer of whatever implementation we end up with<br>
(so that it doesn't get removed again) if necessary.<br>
<br>
This work could also be used to fix [3]. Although this probably needs<br>
more though because there's the question of whether we should preserve<br>
existing debug information in an LLVM IR file or write over it when it<br>
is given to Clang.<br>
<br>
Any thoughts on this?<br>
<br>
[1] <a href="https://reviews.llvm.org/rL222945" rel="noreferrer" target="_blank">https://reviews.llvm.org/rL222945</a><br>
[2] <a href="https://reviews.llvm.org/D40778" rel="noreferrer" target="_blank">https://reviews.llvm.org/D40778</a><br>
[3] <a href="https://bugs.llvm.org/show_bug.cgi?id=35770" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=35770</a><br>
<br>
Thanks,<br>
Dan.<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Sent from my iPhone</div>