[vmkit-commits] [vmkit] r197890 - define a static and a virtual trampoline
Gael Thomas
gael.thomas at lip6.fr
Sun Dec 22 13:01:33 PST 2013
Author: gthomas
Date: Sun Dec 22 15:01:32 2013
New Revision: 197890
URL: http://llvm.org/viewvc/llvm-project?rev=197890&view=rev
Log:
define a static and a virtual trampoline
Modified:
vmkit/branches/mcjit/include/j3/j3method.h
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
vmkit/branches/mcjit/lib/j3/vm/j3object.cc
vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc
Modified: vmkit/branches/mcjit/include/j3/j3method.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3method.h?rev=197890&r1=197889&r2=197890&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3method.h (original)
+++ vmkit/branches/mcjit/include/j3/j3method.h Sun Dec 22 15:01:32 2013
@@ -120,7 +120,8 @@ namespace j3 {
J3Value invokeVirtual(J3ObjectHandle* obj, va_list va);
void* fnPtr();
- void* functionPointerOrTrampoline();
+ void* functionPointerOrStaticTrampoline();
+ void* functionPointerOrVirtualTrampoline();
void dump();
};
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=197890&r1=197889&r2=197890&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sun Dec 22 15:01:32 2013
@@ -70,14 +70,24 @@ void* J3Method::fnPtr() {
return _fnPtr;
}
-void* J3Method::functionPointerOrTrampoline() {
+void* J3Method::functionPointerOrStaticTrampoline() {
+ if(_fnPtr)
+ return _fnPtr;
if(!_staticTrampoline)
_staticTrampoline = J3Trampoline::buildStaticTrampoline(cl()->loader()->allocator(), this);
- return _fnPtr ? _fnPtr : _staticTrampoline;
+ return _staticTrampoline;
+}
+
+void* J3Method::functionPointerOrVirtualTrampoline() {
+ if(_fnPtr)
+ return _fnPtr;
+ if(!_virtualTrampoline)
+ _virtualTrampoline = J3Trampoline::buildVirtualTrampoline(cl()->loader()->allocator(), this);
+ return _virtualTrampoline;
}
void* J3MethodCode::getSymbolAddress() {
- return self->functionPointerOrTrampoline();
+ return self->functionPointerOrStaticTrampoline();
}
void* J3Method::getSymbolAddress() {
Modified: vmkit/branches/mcjit/lib/j3/vm/j3object.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3object.cc?rev=197890&r1=197889&r2=197890&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3object.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3object.cc Sun Dec 22 15:01:32 2013
@@ -72,7 +72,7 @@ J3VirtualTable* J3VirtualTable::create(J
memcpy(res->_virtualMethods, super->vt()->_virtualMethods, sizeof(void*)*super->vt()->nbVirtualMethods());
for(uint32_t i=0; i<cl->nbMethods(); i++)
- res->_virtualMethods[pm[i]->index()] = pm[i]->functionPointerOrTrampoline();
+ res->_virtualMethods[pm[i]->index()] = pm[i]->functionPointerOrVirtualTrampoline();
return res;
}
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=197890&r1=197889&r2=197890&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc Sun Dec 22 15:01:32 2013
@@ -10,6 +10,7 @@ void* J3Trampoline::staticTrampoline(J3O
}
void* J3Trampoline::virtualTrampoline(J3Object* obj, J3Method* target) {
+ return staticTrampoline(obj, target);
J3::internalError(L"implement me: virtualTrampoline");
#if 0
J3ObjectHandle* prev = J3Thread::get()->tell();
More information about the vmkit-commits
mailing list