Noob: need help with go bindings

I have the following code to generate a really basic IR: http://gobin.io/LtdJ

And the output I get from it is: http://gobin.io/XgkH

That IR code which is dumped seems to work fine if I do llc then gcc on it, so I’m not sure why it won’t work through the engine. This is my first time using LLVM so I’m pretty new with all of it, any help would be greatly appreciated. Thanks!

  • Brian

Hi Brian,

The issue here is that “NewExecutionEngine” will create either an MCJIT- or an interpreter-based execution engine, and only the former will be able to resolve symbols in the parent process. MCJIT will only be used if you have called the appropriate initialisation functions first. If you add the following to the top of your main() function, it should work:

LinkInMCJIT() InitializeNativeTarget() InitializeNativeAsmPrinter()

Cheers,
Andrew

That did it, thanks for the help! For the future is there a set of documentation for these bindings, or their equivalent c functions? I tried looking but was having trouble finding anything that seemed to match.

That did it, thanks for the help! For the future is there a set of documentation for these bindings, or their equivalent c functions? I tried looking but was having trouble finding anything that seemed to match.

Sorry to say, the only docs we have for the Go bindings is https://godoc.org/llvm.org/llvm/bindings/go/llvm, which you can see is woefully inadequate. Contributions welcome. I’m not aware of docs for the C API (which Go wraps).

Cheers,
Andrew