Can LLVM jitter emit the native code in continuous memory addresses ?


I have question relating to LLVM Jitter: Can i obligue the LLVM Jitter to emit the native code in continuous memory addresses ? and to be PIC ? what i want to do is to move the JIT code to another process in order to execute it, my approach is to save the JIT code in buffer i will save it to file and pass it to the execution process.

what i mean by “load” is to simply read the bits from file into buffer i don’t want to generate elf or something like this.

Here’s an example: suppose i have C source file which contain:

<br>Global variables<br>----------------<br>Function Foo()<br>----------------<br>Function Too()<br><br>

when i request the JIT code i want the JIT to be in continuous memory addresses (with 4-bytes aligment):

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

<br>So i can save the JIT code (form 0x100 -> 0x150) and i can load it in the execution process in any virtual address, <br>assume (0x300 -> 0x350) and execute it by jump to the ep. <br><br>


It is possible to subclass JITMemoryManager and pass in a custom memory manager, but I don’t believe you’ll be able to convince the JIT to emit PIC code without hacking on LLVM a bit.


Suppose that i have may own implementation for the JITMemoryManager which takes care of that the allocated chunks of memory to be continus.
So i don’t understand is the generated JIT code is position-independed ? or at least can i obligue the jitter to emit PIC code only with something like options flag ?