LLVM抖动可以在连续内存地址中发出本机代码吗?

时间:2011-06-26 06:52:28

标签: compiler-construction llvm jit

我有关于LLVM抖动的问题: 我可以强制LLVM Jitter在连续的内存地址中发出本机代码吗? PIC是什么? 我想要做的是将JIT代码保存在文件中并加载它以便稍后执行..

我的意思是“加载”是简单地将文件中的位读取到缓冲区中我不想生成elf或类似的东西。

这是一个例子: 假设我有C源文件,其中包含:

Global variables
----------------
Function Foo()
----------------
Function Too()

当我请求JIT代码时,我希望JIT位于连续内存地址中:

0x100: Global Vars (take 16 Byte)
0x110: Foo() Code (take 32 Byte)
0x130: Too() Code (take 32 Byte)
0x150: end.

1 个答案:

答案 0 :(得分:7)

要将JIT代码存储在某个内存区域,您可以编写特殊版本的JITMemoryManager(include/llvm/ExecutionEngine/JITMemoryManager.h lib/ExecutionEngine/JIT/JITMemoryManager.cpp)。这里有自定义JIM MM的示例:unittests/ExecutionEngine/JIT/JITTest.cpp,它是一个RecordingJITMemoryManager,记录主要的JIT MM呼叫。

正如我所看到的(作为LLVM 2.9),ARM JIT将isPIC设置为False,X86 JIT能够生成PIC代码。

最大的问题似乎是加载预编译的代码。