[vmkit-commits] [vmkit] r199011 - Cleanup of trampolines
Gael Thomas
gael.thomas at lip6.fr
Sat Jan 11 07:35:54 PST 2014
Author: gthomas
Date: Sat Jan 11 09:35:53 2014
New Revision: 199011
URL: http://llvm.org/viewvc/llvm-project?rev=199011&view=rev
Log:
Cleanup of trampolines
Modified:
vmkit/branches/mcjit/include/j3/j3arch-dep.h
vmkit/branches/mcjit/include/j3/j3trampoline.h
vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s
vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc
Modified: vmkit/branches/mcjit/include/j3/j3arch-dep.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3arch-dep.h?rev=199011&r1=199010&r2=199011&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3arch-dep.h (original)
+++ vmkit/branches/mcjit/include/j3/j3arch-dep.h Sat Jan 11 09:35:53 2014
@@ -5,8 +5,8 @@ namespace j3 {
class J3Method;
class J3TrampolineArg {
- uint64_t savee[8*2 + 6 + 2];
/* xmm0 - xmm7 + %rdi/%rsi/%rdx/%rcx/%r8/%r9 + %rbp, %rsp */
+ uint64_t registers[8*2 + 6 + 2];
};
}
Modified: vmkit/branches/mcjit/include/j3/j3trampoline.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3trampoline.h?rev=199011&r1=199010&r2=199011&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3trampoline.h (original)
+++ vmkit/branches/mcjit/include/j3/j3trampoline.h Sat Jan 11 09:35:53 2014
@@ -3,11 +3,12 @@
#include <stdint.h>
-extern "C" char trampoline_generic;
-extern "C" char trampoline_generic_method;
-extern "C" char trampoline_generic_resolver;
-extern "C" char trampoline_generic_end;
-extern "C" void trampoline_restart(void* ptr, void* saveZone);
+/* defined by j3arch-dep.s */
+extern "C" char trampoline_generic;
+extern "C" char trampoline_generic_method;
+extern "C" char trampoline_generic_resolver;
+extern "C" char trampoline_generic_end;
+extern "C" void trampoline_restart(void* ptr, void* saveZone);
namespace vmkit {
class BumpAllocator;
@@ -18,6 +19,9 @@ namespace j3 {
class J3Object;
class J3Trampoline {
+ /* used by j3arch-dep.s */
+ static uintptr_t argOffset;
+
static void interfaceTrampoline(J3Object* obj);
static void staticTrampoline(J3Object* obj, J3Method* ref);
static void virtualTrampoline(J3Object* obj, J3Method* ref);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s?rev=199011&r1=199010&r2=199011&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s Sat Jan 11 09:35:53 2014
@@ -1,5 +1,5 @@
.section __DATA,__data
- .globl _trampoline_offset, __ZN5vmkit15ThreadAllocator6_magicE
+ .globl __ZN2j312J3Trampoline9argOffsetE, __ZN5vmkit15ThreadAllocator6_magicE
.globl _trampoline_generic, _trampoline_generic_method, _trampoline_generic_resolver, _trampoline_generic_end
_trampoline_generic:
@@ -21,7 +21,7 @@ _trampoline_generic_end:
_trampoline_save:
mov %rsp, %rax
and __ZN5vmkit15ThreadAllocator6_magicE(%rip), %rax
- add _trampoline_offset(%rip), %rax
+ add __ZN2j312J3Trampoline9argOffsetE(%rip), %rax
mov %xmm0, 0(%rax)
mov %xmm1, 16(%rax)
Modified: vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc?rev=199011&r1=199010&r2=199011&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc Sat Jan 11 09:35:53 2014
@@ -5,13 +5,13 @@
#include "j3/j3class.h"
#include "j3/j3.h"
-
using namespace j3;
-extern "C" uintptr_t trampoline_offset = (uint64_t)&((J3Thread*)0)->_trampolineArg;
+uintptr_t J3Trampoline::argOffset = (uint64_t)&((J3Thread*)0)->_trampolineArg;
void J3Trampoline::interfaceTrampoline(J3Object* obj) {
J3TrampolineArg arg = J3Thread::get()->_trampolineArg;
+
J3ObjectHandle* prev = J3Thread::get()->tell();
J3ObjectHandle* handle = J3Thread::get()->push(obj);
J3ObjectType* type = obj->vt()->type()->asObjectType();
@@ -37,7 +37,9 @@ void J3Trampoline::interfaceTrampoline(J
void J3Trampoline::staticTrampoline(J3Object* obj, J3Method* target) {
J3TrampolineArg arg = J3Thread::get()->_trampolineArg;
+
target->ensureCompiled(0);
+
trampoline_restart(target->fnPtr(), &arg);
}
More information about the vmkit-commits
mailing list