[LLVMdev] Using MCJIT in a dynamic REPL environment

Yaron Keren yaron.keren at gmail.com
Wed Oct 30 12:20:11 PDT 2013


Hi,

I'm trying to transition from the JIT to MCJIT. The requirements are fast
response time and dynamic unloading/replacement of modified functions. Lazy
evaluation is *not* required: I expect all functions to be present at
runtime or else an error is fine.

With the JIT it's quite simple to unload and replace functions due to the
stubs (JMP instructions) that redirect the actual function calls.

With the MCJIT the equivalent implementation would be:

1) Place one function per IR module.
2) Load (compile) IR modules into Object code and cache the objects.
3) Upon running finalize (link) everything and run.
4) If a function is changed, kill its module and reload it. Then use the
cached objects and finalize everything.

Compared with the JIT, 4) isn't scalable, since it requires relinking of
possibly  many modules due to the change of just one function.

I wonder if it's possible to use the stub function mechanism in order to
save the relinking step. The dynamic linker can resolve everything to the
stub functions that jump to real functions but then the function
implementation could be replaced in a new module without relinking all
other modules but itself only.

We'd also need a way to modify the EH and Debug information without
recreating it.

That would provide a reasonable replacement for the JIT flexibility in
handling functions. Does it make any sense?

Yaron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131030/eaa52435/attachment.html>


More information about the llvm-dev mailing list