Xin Tong Utoronto
2011-Feb-22 17:03 UTC
[LLVMdev] LLVM ExecutionEngine/JIT trampoline question
I have a question on the LLVM JIT I did some brief memory reading one day and I found that a call to a non-library function is resolved by the X86CompilationCallback, but the X86CompilationCallback is reached through a trampoline. why can not the generated code jump to the X86CompilationCallback function directly ? 0x2b0a6a4d103b: mov $0x2b0a6a561010,%rax 0x2b0a6a4d1045: callq *%rax // call foo> > > ==> > > 0x2b0a6a561010: mov $0xa743a0,%r10 // some kind of > trampoline > 0x2b0a6a56101a: callq *%r10 > > ==> > > 0xa743a0 <X86CompilationCallback>: push %rbp > 0xa743a1 <X86CompilationCallback+1>: mov %rsp,%rbp > 0xa743a4 <X86CompilationCallback+4>: push %rdi > 0xa743a5 <X86CompilationCallback+5>: push %rsi-- Kind Regards Xin Tong -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110222/812862a9/attachment.html>
Reid Kleckner
2011-Feb-22 17:39 UTC
[LLVMdev] LLVM ExecutionEngine/JIT trampoline question
The address of the callee may be more than 2 GB away in memory, which cannot be encoded as an immediate offset in the call instruction. So, the value is first materialized with a mov instruction which can encode the immediate and then jumped to through a register. Reid On Tue, Feb 22, 2011 at 12:03 PM, Xin Tong Utoronto <x.tong at utoronto.ca> wrote:> I have a question on the LLVM JIT > > I did some brief memory reading one day and I found that a call to a > non-library function is resolved by the X86CompilationCallback, but the > X86CompilationCallback is reached through a trampoline. why can not the > generated code jump to the X86CompilationCallback function directly ? > > 0x2b0a6a4d103b: mov $0x2b0a6a561010,%rax > 0x2b0a6a4d1045: callq *%rax > // call foo >> >> >> ==> >> >> 0x2b0a6a561010: mov $0xa743a0,%r10 // some kind of >> trampoline >> 0x2b0a6a56101a: callq *%r10 >> >> ==> >> >> 0xa743a0 <X86CompilationCallback>: push %rbp >> 0xa743a1 <X86CompilationCallback+1>: mov %rsp,%rbp >> 0xa743a4 <X86CompilationCallback+4>: push %rdi >> 0xa743a5 <X86CompilationCallback+5>: push %rsi > > -- > Kind Regards > > Xin Tong > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
Xin Tong Utoronto
2011-Feb-23 01:14 UTC
[LLVMdev] LLVM ExecutionEngine/JIT trampoline question
I understand that we need to push the address to a register then branch using the register. But i am asking why there is a trampoline there such that a call to foo is first branched to an snippet and the snippet branches to the X86CompilationCallback. is this snippet necessary ? Thanks Xin On Tue, Feb 22, 2011 at 12:39 PM, Reid Kleckner <reid.kleckner at gmail.com>wrote:> The address of the callee may be more than 2 GB away in memory, which > cannot be encoded as an immediate offset in the call instruction. So, > the value is first materialized with a mov instruction which can > encode the immediate and then jumped to through a register. > > Reid > > On Tue, Feb 22, 2011 at 12:03 PM, Xin Tong Utoronto <x.tong at utoronto.ca> > wrote: > > I have a question on the LLVM JIT > > > > I did some brief memory reading one day and I found that a call to a > > non-library function is resolved by the X86CompilationCallback, but the > > X86CompilationCallback is reached through a trampoline. why can not the > > generated code jump to the X86CompilationCallback function directly ? > > > > 0x2b0a6a4d103b: mov $0x2b0a6a561010,%rax > > 0x2b0a6a4d1045: callq *%rax > > // call foo > >> > >> > >> ==> > >> > >> 0x2b0a6a561010: mov $0xa743a0,%r10 // some kind of > >> trampoline > >> 0x2b0a6a56101a: callq *%r10 > >> > >> ==> > >> > >> 0xa743a0 <X86CompilationCallback>: push %rbp > >> 0xa743a1 <X86CompilationCallback+1>: mov %rsp,%rbp > >> 0xa743a4 <X86CompilationCallback+4>: push %rdi > >> 0xa743a5 <X86CompilationCallback+5>: push %rsi > > > > -- > > Kind Regards > > > > Xin Tong > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > >-- Kind Regards Xin Tong -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110222/d97d7221/attachment.html>
Possibly Parallel Threads
- [LLVMdev] LLVM ExecutionEngine/JIT trampoline question
- [LLVMdev] LLVM ExecutionEngine/JIT trampoline question
- [LLVMdev] Build issues on Solaris
- [LLVMdev] X86ISelPattern.cpp:73: undefined reference to `X86CompilationCallback
- [LLVMdev] jit X86 target compilation callback bug