[LLVMdev] Resolving a function symbol using JIT.
sumeeth kc
sumeethkc at gmail.com
Sun Oct 6 10:54:01 PDT 2013
Hey,
I have a situation where in I need to intercept a call to a particular
function and return a pointer to a separate implementation of that function
using JIT. The scenario is like this:
1. A test code or client code calls a function A() for which a dummy
implementation is provided in a library which the test code/client links
with during compilation.
2. I create the .bc using -emit-llvm and run it with lli.
3. Now, in the JIT, I have provided the concrete implementation of the
function A(). I have to intercept this call to function A() and return a
pointer to the concrete implementation in JIT.
I tried the way external library symbols are being resolved in
JITMemoryManager.cpp but the error I get is as follows:
pseudo instructions should be removed before code emission
UNREACHABLE executed at /llvm/lib/Target/X86/X86CodeEmitter.cpp:1175!
0 lli 0x00000000011fa92e llvm::sys::PrintStackTrace(_IO_FILE*)
+ 46
1 lli 0x00000000011fabeb
2 lli 0x00000000011fae4a
3 libpthread.so.0 0x00007f08378cecb0
4 libc.so.6 0x00007f0836915425 gsignal + 53
5 libc.so.6 0x00007f0836918b8b abort + 379
6 lli 0x00000000011e1726
7 lli 0x0000000000688f83
8 lli 0x0000000000688700
9 lli 0x0000000000b5789e
llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 110
10 lli 0x0000000001168e7b
llvm::FPPassManager::runOnFunction(llvm::Function&) + 427
11 lli 0x0000000001168777
llvm::FunctionPassManagerImpl::run(llvm::Function&) + 119
12 lli 0x00000000011686e7
llvm::FunctionPassManager::run(llvm::Function&) + 167
13 lli 0x0000000000ac478f
llvm::JIT::jitTheFunction(llvm::Function*, llvm::MutexGuard const&) + 63
14 lli 0x0000000000ac467e
llvm::JIT::runJITOnFunctionUnlocked(llvm::Function*, llvm::MutexGuard
const&) + 94
15 lli 0x0000000000ac4a9e
llvm::JIT::getPointerToFunction(llvm::Function*) + 734
16 lli 0x0000000000ad7e18
17 lli 0x000000000077eb85
18 lli 0x000000000077e9ca X86CompilationCallback + 74
Stack dump:
0. Program arguments: lli -jit-emit-debug test
1. Running pass 'X86 Machine Code Emitter' on function
'@_ZN4llvm5APInt15clearUnusedBitsEv'
Aborted
If this approach is not proper, where else can I intercept the call to that
symbol and return a pointer to the concrete implementation?
Thanks in advance.
-Sumeeth
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131006/b31c4ecf/attachment.html>
More information about the llvm-dev
mailing list