[Haskell-cafe] Re: LLVM -> Haskell

Aaron Tomb atomb at galois.com
Sun May 30 17:26:25 EDT 2010


On May 30, 2010, at 7:01 AM, Tom Hawkins wrote:

> Is there any work being done to read LLVM object code into Haskell?
> I've looked through the llvm library [1], but it appears focused on
> code generation.
> 
> -Tom

I was just looking through the Haddock pages for the llvm package with the same question in mind, and realized that there is some support for reading and dissecting bitcode files. It has a pretty low-level and un-Haskell-ish interface, though.

For instance, the LLVM.FFI.BitReader module has some functions that'll get you a ModuleRef from some bitcode. It looks as though getFirstGlobal and getNextGlobal will iterate through top-level things in a ModuleRef, including functions. Alternatively, it looks like getNamedFunction will give you a handle to a particular function. And there are functions to get the basic blocks of a function, and to get the instructions of a basic block.

All of these functions are in the IO monad, though, so they'd only really be pleasant to use if you immediately built up a new AST, perhaps in some special-purpose intermediate language, or perhaps in something resembling LLVM structure, before doing any analysis.

If anyone knows of a better way, I'm also very interested. Or, if anyone has made any attempt to build higher-level abstractions out of the low-level functions provided, I'm very interested. Maybe at some point I'll take a crack at the latter myself.

Aaron





More information about the Haskell-Cafe mailing list