I am working on porting an application that uses LLVM MCJIT (RPCS3) to macOS. I have run into an issue when calling existing functions from the JIT: calling such functions results in a segfault, as an offset of 0x100000000 is added to the address of each function. llvm::ExecutionEngine::addGlobalMapping is used to add the mappings for these existing functions. To confirm this, I tried replacing the address of one of these functions with 0x1234. When calling the function from the JIT, the application now segfaults at 0x100001234 (not 0x1234 as expected). This behaved as expected (segfault at 0x1234) on Linux. Where could this offset be coming from? Is it possible to manually specify the image base in MCJIT? I am not too familiar with LLVM MCJIT internals.
llvm::ExecutionEngine::addGlobalMapping
2.1m questions
2.1m answers
60 comments
57.0k users