2011-03-14 19 views

回答

3

這似乎是很容易的東西。在JIT中,您可以在任何外部函數與任意地址之間提供映射。所以,基本上你只需在你的IR中定義一些被JITed的函數,將它綁定到外部世界的地址,這對你來說就是一個竅門。

特別是,http://llvm.org/doxygen/classllvm_1_1ExecutionEngine.html#a805704b52a327cc6b37aebf9cba14169是你應該在這裏使用的功能。

+0

I.e.我將不得不構建自定義的解釋器/ JIT編譯器,它將從JIT API中爲我的在VM下運行的軟件公開所需的方法?此外,這隻綁定了1個全局變量,但JIT API是面向對象的,我不確定我們可以使它工作如此簡單: - | – BarsMonster 2011-03-15 10:13:29

+0

這是一個GlobalValue,而不是GlobalVariable。 GlobalValue是Function和GlobalVariable的基類,所以你可以綁定這兩個(和任意數量 - 只需要調用你想要綁定的所有對象的函數)。而且,LLVM是用C++編寫的,因此您需要使用C++ ABI。或者,您可以使用C綁定並綁定它們。查看http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/ExecutionEngine.h?view=markup以瞭解它正在發生什麼。 – 2011-03-15 10:30:17