[LLVMdev] LLVM ExecutionEngine/JIT trampoline question

Reid Kleckner reid.kleckner at gmail.com
Tue Feb 22 09:39:21 PST 2011


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
>
>




More information about the llvm-dev mailing list