[llvm-dev] [IR][AsmPrinter][MCJIT]: ensure every x64 "CALL" to Jit function uses relative address
Tim Northover via llvm-dev
llvm-dev at lists.llvm.org
Sat Feb 9 11:38:38 PST 2019
On Sat, 9 Feb 2019 at 17:38, Vivien Millet via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> Is it possible to tell LLVM somewhere that we prefer the asm printer to use x64 relative CALL (0xFF) instead of absolute one?
0xff is always absolute, isn't it? And for JITs the relative variants
are problematic because you normally can't guarantee your mmapped
region will be within 2GB of of what it's calling, so the offset may
be too big.
> The goal is to be able to move the entire JIT program memory somewhere else and still be able to run the program.
It sounds like you need to configure the ExecutionEngine to use PIC
mode with setRelocationModel. With that, LLVM do some GOT magic to get
the right address to jump to and then use an absolute jump to that
register. You still have to arrange for the GOT to contain the right
value (looks like it's the address of the function relative to the
start of the GOT at first glance), but that's more tractable than
monkey-patching all the callsites.
More information about the llvm-dev