[LLVMdev] llvm ocaml bindings

Ranjit Jhala jhala at cs.ucsd.edu
Tue Dec 30 18:07:13 PST 2008


Hi,


thanks Chris and Gordon for the fantasic infrastructure and ocaml 
bindings and Erick for the prompt response!

I'm looking to use LLVM to write program analyses for
C/C++ programs, but to use Ocaml to write the analyses.
I did see there were bindings for iterating over:

* functions    in a module	[iter_functions]
* basic blocks in a functions	[iter_blocks]
* instructions in a block	[iter_instrs]

The other things that i'd like are to know what kind of
instruction a given instruction was.

That is,

(a) some ML encoding of the different opcodes like
 	Instruction::Ret:
        	Instruction::Invoke:
        	Instruction::Call:
        	Instruction::Malloc:
        	Instruction::Alloca:
 	etc.
     e.g. encoded as an Ocaml type "llinstr" ?

(b) ML bindings for functions like Instruction::getOpcode
     e.g. functions like
         val instr_of_value : llvalue -> llinstr
 	val value_is_instr : llvalue -> bool
 	etc.

Are these available somewhere ?

Even if they are not, I am happy to try to add these bindings ...

Thanks!,

-Ranjit.


> (ccing llvmdev) Hi Ranjit! I only ported Chris's tutorial and Gordon
> did the vast majority of the    bindings, so they deserve most of the
> praise. I believe there are techniques for walking over the CFG. You
> can load up code using Llvm_bitreader, use things like
> Llvm.iter_globals, Llvm.iter_functions, and Llvm.iter_instrs to walk
> over the module, and write out a new llmodule using Llvm_bitwriter. Is
> there something more specific you want to do?
>
> On Mon, Dec 29, 2008 at 6:05 PM, Ranjit Jhala <jhala at cs.ucsd.edu> wrote:
>> Hi Erick --
>>
>> many thanks for writing the ocaml bindings and tutorial for LLVM !
>>
>> I had a question: i see there are bindings for _generating_ code, but are
>> there also bindings for _reading_ code (e.g. visitors that go over CFG do
>> different things depending on the kinds of instructions ?)
>>
>> Thanks!,
>>
>> -Ranjit.
>>
>>
>



More information about the llvm-dev mailing list