summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2015-03-24 04:27:02 +0000
committerLang Hames <lhames@gmail.com>2015-03-24 04:27:02 +0000
commitcd118e7632383c431c24c11168c61c12ce43d645 (patch)
treee2af1f5e7d8b92e8faca9e8b2ee9080ab5887655 /llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
parent96a1004db289d0572d51a762953b302947c3fa13 (diff)
downloadbcm5719-llvm-cd118e7632383c431c24c11168c61c12ce43d645.tar.gz
bcm5719-llvm-cd118e7632383c431c24c11168c61c12ce43d645.zip
[Orc] Move delta-handling for trampoline sizes into the resolver block.
This is the first step towards adding a target-independent callback handler API. llvm-svn: 233049
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp b/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
index b5dda8e4ee5..4932ec16bb0 100644
--- a/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
@@ -53,6 +53,7 @@ const char* OrcX86_64::ResolverBlockName = "orc_resolver_block";
void OrcX86_64::insertResolverBlock(
Module &M, JITCompileCallbackManagerBase<OrcX86_64> &JCBM) {
+ const unsigned X86_64_TrampolineLength = 6;
auto CallbackPtr = executeCompileCallback<OrcX86_64>;
uint64_t CallbackAddr =
static_cast<uint64_t>(reinterpret_cast<uintptr_t>(CallbackPtr));
@@ -77,6 +78,7 @@ void OrcX86_64::insertResolverBlock(
AsmStream << " leaq jit_callback_manager_addr(%rip), %rdi\n"
<< " movq (%rdi), %rdi\n"
<< " movq " << ReturnAddrOffset << "(%rsp), %rsi\n"
+ << " subq $" << X86_64_TrampolineLength << ", %rsi\n"
<< " movabsq $" << CallbackAddr << ", %rax\n"
<< " callq *%rax\n"
<< " movq %rax, " << ReturnAddrOffset << "(%rsp)\n";
OpenPOWER on IntegriCloud