[LLVMdev] Any way get debug output of generated assembly from MCJIT without completely redoing CodeGen?

sathvik sathvikl at gmail.com
Tue Jun 24 18:09:12 PDT 2014


Hi Craig,

I am trying to JIT PHP code and this is a hack ..
https://github.com/sathvikl/llvm/blob/master/lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp

It writes out file of JITed methods in /tmp using the OProfileJIT interface
so if you register via the OProfile interface
+ JITEventListener *event_listener =
JITEventListener::createOProfileJITEventListener()
+ llvm_engine->RegisterJITEventListener(event_listener)

and run oprofile, it will dump out the file with JITed methods into a file.
If you use a disassembler, you can try libxed
https://github.com/facebook/hhvm/blob/10b2a6a3a8075b676ea167ea49e6bba5b8cca68e/hphp/util/disasm.cpp
shows how to use it.
libxed is packaged here -
https://software.intel.com/en-us/articles/pin-a-binary-instrumentation-tool-downloads

I plan to write a cleaner interface for this so you can view it via perf
but didn't get to it.

sathvik




On Tue, Jun 24, 2014 at 4:03 PM, Eric Christopher <echristo at gmail.com>
wrote:

> Yeah, that's probably how I'd do it.
>
> Might be useful if you guys want to contribute that as a command line
> option Kevin.
>
> -eric
>
> On Tue, Jun 24, 2014 at 3:03 PM, Kevin Modzelewski <kmod at dropbox.com>
> wrote:
> > We do this in Pyston using a JITEventListener that just disassembles the
> > output; it's "it works let's move on"-quality:
> > https://github.com/dropbox/pyston/blob/master/src/codegen/dis.cpp
> >
> > I'm not sure how efficient the disassembling is, but at least the
> process is
> > pretty self-contained.
> >
> >
> > On Tue, Jun 24, 2014 at 1:33 PM, Craig Smith <craig at ni.com> wrote:
> >>
> >>
> >> Hello all,
> >>
> >> I'm trying to hack MCJIT::emitObject to optionally output the
> >> corresponding text assembly associated with the object code being
> emitted
> >> (if a debug flag is set in the app/dev environment which is hosting
> LLVM).
> >> I attempted to do this by adding another AsmPrinter pass to the
> >> PassManager, but this runs into all sorts of problems because there's
> only
> >> once MCContext and one MachneModuleInfo pass maintaining various state
> >> information (MCSections, MCSymbols, etc.) and the two AsmPrinter passes
> >> interfere with each other.
> >>
> >> The only way I've been able to get this to work is to create an entirely
> >> separate PassManager, and use addPassesToEmitFile() on it, which will
> redo
> >> the entire CodeGen process again unnecessarily.
> >> Does anyone have any ideas/pointers on how I might do this efficiently?
> >> This is only for a debugging aid, but I'd like to not have to compile
> >> everything twice when it's enabled.
> >>
> >> Thanks
> >> Craig
> >>
> >>
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140624/f8de2f6b/attachment.html>


More information about the llvm-dev mailing list