[LLVMdev] LLVM bytecode simulator/emulator?
Robert L. Bocchino Jr.
bocchino at uiuc.edu
Fri Jul 14 07:08:44 PDT 2006
Hi,
I have done something like this. I wrote a simple pass that
instrumented LLVM instructions with external calls into a library of
instrumentation functions (in my case, I was printing out a trace of
dynamic load, store, and other data). To analyze a program, I
compiled the program to LLVM, ran the analyze pass on it, then linked
the instrumented program with the library (also compiled to LLVM).
To generate the trace, I just ran the instrumented program. For
something very simple, like counting dynamic instructions, you could
dispense with the library and modify the LLVM directly to do the
following: declare a static global counter, initialize it to zero in
main, and increment it after every LLVM instruction in the original
program.
Rob
On Jul 13, 2006, at 10:26 PM, Kenneth Hoste wrote:
> Chris Lattner wrote:
>> On Thu, 13 Jul 2006, Kenneth Hoste wrote:
>>> After browsing through the docs, at a first glance I think I
>>> should write a plugin for the 'analyze' tool. I think http://
>>> llvm.org/docs/WritingAnLLVMPass.html is where I should start from.
>>> The only problem I see now is that there doesn't seem to be a way
>>> to get information on a single instruction while being able to
>>> keep state over all instructions... Is that possible, and if it
>>> is, can oyu tell me how (or where I can find an example of it?).
>> I don't really understand what you mean by this, but a ModulePass
>> is fully general, it can do anything. Can you explain what you're
>> trying to do?
>
> The way we're characterizing programs now, is adding our own code
> after every instruction. When that instruction gets executed (which
> can happen several times, for example inside a loop), we update our
> state. A simple example is counting the number of dynamic
> instructions executed, or the instruction mix (% loads, %
> stores, ...) in the dynamic execution.
> If I was able to do that using LLVM, we would have characteristics
> on a higher level of abstraction. The documentation on the
> BasicBlock pass mentions not to keep state over different basic
> blocks, but I do want that. Also, I need a way to iterate over the
> _dynamic_ instruction stream. Is there a way to do that?
>
> Example static vs dynamic:
>
> static:
> L: add x, y
> sub y, z
> jmpif z>100
> mul x, z
>
> dynamic:
> add x, y
> sub y, z
> jmpif z>100
> add x, y
> sub y, z
> jmpif z>100
> ...
> jmpif z>100
> mul x, z
>
>
> If my problem still isn't clear, it's because I didn't explain it
> well. Feel free to ask further questions. I'll look into the
> documentation/examples today, to see if I can find some kind of
> dynamic analysis.
>
> greetings,
>
> Kennneth
>
>
> --
> Statistics are like a bikini. What they reveal is suggestive, but
> what they conceal is vital (Aaron Levenstein)
>
> Kenneth Hoste
> ELIS - Ghent University
> kenneth.hoste at elis.ugent.be
> http://www.elis.ugent.be/~kehoste
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Robert L. Bocchino Jr.
Ph.D. Student
University of Illinois, Urbana-Champaign
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20060714/09175395/attachment.html>
More information about the llvm-dev
mailing list