I’ve set the ORC runtime aside for a week to try to land some improvements to JITLink’s ELF/x86-64 support before the upcoming LLVM 12 branch on Tuesday. JITLink for ELF/x86-64 can now:
- Skip debug sections
- Handle weak and hidden symbols
- Issue out-of-bounds errors on several relocation kinds
- Support exception handling
My hope is that by the time LLVM 12 is released, JITLink ELF/x86-64 will be able to handle most or all PIC / small-code-model code. If you want to test this out you should now be able to run:
% llvm-jitlink <objects…>
on Linux for objects compiled with -fPIC. (Note: static initializers and thread locals are not supported – these will have to wait for ELF support in the ORC runtime).
Many thanks again to Jared Wyles and Stefan Granitz for all their work on this – I’m very excited to see this up and running!
Looking forward: RuntimeDyld will remain the default JIT linker for LLJIT in LLVM 12, but we may switch to JITLink by default in LLVM 13 if enough progress is made (RuntimeDyld will remain available as an option either way).
Current tasks on the LLVM 13 todo list are:
- Broaden the set of supported relocations on ELF/x86-64 (supporting more code and relocation models)
- Refactor to make the development of new ELF targets easier
- Refactor to make sharing of format agnostic code easier (e.g. relocations specified on a per architecture basis, rather than for (arch, format) pairs, shared format-agnostic JITLink passes)
- Add ELF initializer support by building an ELFPlatform (LinuxPlatform? I’m not sure those two are as synonymous as Darwin/MachO) and adding ELF support to the runtime.
I’ll try to get this all in to the road map soon, but volunteers are welcome to put their hand up any time.
As always: Questions, comments and bug reports are very welcome.