[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