[vmkit-commits] [vmkit] r197891 - correctly handle virtual calls
Gael Thomas
gael.thomas at lip6.fr
Sun Dec 22 13:09:21 PST 2013
Author: gthomas
Date: Sun Dec 22 15:09:21 2013
New Revision: 197891
URL: http://llvm.org/viewvc/llvm-project?rev=197891&view=rev
Log:
correctly handle virtual calls
Modified:
vmkit/branches/mcjit/lib/j3/vm/j3options.cc
vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc
Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=197891&r1=197890&r2=197891&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Sun Dec 22 15:09:21 2013
@@ -19,7 +19,7 @@ J3Options::J3Options() {
debugLoad = 0;
debugResolve = 0;
debugIniting = 0;
- debugTranslate = 0;
+ debugTranslate = 1;
debugLinking = 0;
genDebugExecute = debugExecute ? 1 : 0;
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=197891&r1=197890&r2=197891&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc Sun Dec 22 15:09:21 2013
@@ -1,6 +1,8 @@
#include "j3/j3trampoline.h"
#include "j3/j3object.h"
#include "j3/j3method.h"
+#include "j3/j3thread.h"
+#include "j3/j3class.h"
#include "j3/j3.h"
using namespace j3;
@@ -10,23 +12,17 @@ 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();
J3ObjectHandle* handle = J3Thread::get()->push(obj);
+ J3ObjectType* cl = handle->vt()->type()->asObjectType();
+ J3Method* impl = cl == target->cl() ? target : cl->findVirtualMethod(target->name(), target->sign());
- fprintf(stderr, "target: %ls::%ls\n", target->cl()->name()->cStr(), target->name()->cStr());
-
- void* res = target->fnPtr();
-
- if(!J3Cst::isStatic(target->access()))
- handle->vt()->virtualMethods()[target->index()] = res;
+ void* res = impl->fnPtr();
+ handle->vt()->virtualMethods()[impl->index()] = res;
J3Thread::get()->restore(prev);
return res;
-#endif
}
void* J3Trampoline::buildTrampoline(vmkit::BumpAllocator* allocator, J3Method* m, void* tra) {
More information about the vmkit-commits
mailing list