A question with using ORC RPC for remote JIT-ing.


We plan to use ORC to JIT compile hot-paths, optimizing them to fully utilize the currently running architecture.

To do this, we extract the hot-paths’ code section (including external linkages, functions, variables, etc) and embed them into the host program. These embedded information are then pass to orc to be compiled and executed.

However, the JIT process may fail and may corrupt the host program. Therefore, we would like to launch a different program to run this JIT process (including linking symbols that resides in the host program) and stream the JIT symbol back to the main program for execution.

In short, the main program request the JIT program to compile some IR and return the JIT symbol back to the main program for execution.


Is there any tool support for this use-case?
Or, do we have to use our own IPC methods (shared memory) and JIT compile the IR onto the shared memory, and lookup the JIT symbol in the shared memory?



There is remote JITing support ( https://llvm.org/docs/tutorial/BuildingAJIT5.html )- though it mostly/only supports the “from the JITing process, push code to the remote/executing process” - the first piece of your situation, “from the executing process, make a remote request to JIT some code” isn’t implemented as far as I know, but you could use the same RPC primitives that LLVM/ORC provides to do that.

Thanks for the head-ups.