ORC JIT Weekly #17

Hi All,

I may have to set the removable code work aside for a week or two to deal with some other bug fixes and feature work…

That break ended up lasting longer than intended, but I’m hoping to return to a more-or-less regular update schedule now.

Progress on ORC and JITLink mainline development has been slow, but there are a couple of things worth mentioning:

(1) Initial JITLink support for ELF/x86-64 has landed and continues to be developed on the mainline (thanks to Jared Wyles for that!). Only a few relocations have been added so far, so only basic programs can be executed, however at the current rate I expect us to pass RuntimeDyld’s level of support in the not-too-distant future.

(2) A new API, TargetProcessControl, has been introduced [1] with the aim of unifying access to the process executing JIT’d code (often the same process, but potentially a different process connected via IPC or RPC). Writing to this API allows clients to remain agnostic to which process the JIT’d code will execute in, minimizing the effort needed to implement new cross-process JITing implementations. The initial commit includes utilities for lazy compilation built on top of this API, and an initial implementation of TargetProcessControl for in-process JITing. An example of how to use these APIs can be found in llvm/examples/OrcV2Examples/LLJITWithTargetProcessControl.

Near term ORC work will focus on expanding TargetProcessControl, improving JITLink’s ELF support, and continuing development of the removable code feature.

Speaking of removable code: Unfortunately I was not able to get support for that ready in time for LLVM 11. I am continuing to work on it though, and I’ll provide more updates on that work as the patch takes shape.

Regarding the upcoming release: LLVM 11 will continue to support OrcV1, however it will be removed as soon as possible once the removable code feature lands. If you’re using OrcV1 (including OrcCBindings.h) I would encourage you to switch over to OrcV2 as soon as possible. If you encounter any difficulties doing so please let me know: We’ve got plenty of time to get the APIs into good shape for LLVM 12.


[1] https://github.com/llvm/llvm-project/commit/0e940d55f8a9388c42cc5998ea05212a983f05a7