[vmkit-commits] [vmkit] r56335 - in /vmkit/branches/isolate/lib/JnJVM: Isolate/IsolateCommonClass.cpp VMCore/JavaJIT.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Sep 19 00:13:03 PDT 2008
Author: geoffray
Date: Fri Sep 19 02:13:03 2008
New Revision: 56335
URL: http://llvm.org/viewvc/llvm-project?rev=56335&view=rev
Log:
Enable virtual table for isolate environments.
Modified:
vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp?rev=56335&r1=56334&r2=56335&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp Fri Sep 19 02:13:03 2008
@@ -106,19 +106,26 @@
status = prepared;
def->classLoader->TheModule->resolveVirtualClass(def);
virtualSize = def->virtualSize;
- /*uint64 vtSize = def->virtualTableSize * sizeof(void*);
+
+ uint64 vtSize = def->virtualTableSize * sizeof(void*);
+
virtualVT = (VirtualTable*)malloc(2 * vtSize);
- memcpy(virtualVT, (void*)((uint64)def->virtualVT + vtSize), vtSize);
+
+ memcpy((void*)((uint64)virtualVT + vtSize), def->virtualVT, vtSize);
if (super) {
memcpy(virtualVT, (void*)((uint64)super->virtualVT - vtSize),
vtSize);
}
+
+ virtualVT = (VirtualTable*)((uint64)virtualVT + vtSize);
+
for (CommonClass::method_iterator i = def->virtualMethods.begin(),
e = def->virtualMethods.end(); i != e; ++i) {
- ((void**)virtualVT)[i->second->offset] = ctpInfo;
+ if (i->second->offset > 0) {
+ ((void**)virtualVT)[-(i->second->offset)] = ctpInfo;
+ }
}
- virtualVT = (VirtualTable*)((uint64)virtualVT + vtSize);*/
- virtualVT = def->virtualVT;
+
def->status = resolved;
status = resolved;
classDef->broadcastClass();
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp?rev=56335&r1=56334&r2=56335&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp Fri Sep 19 02:13:03 2008
@@ -62,7 +62,7 @@
return invokeSpecial(index);
-#if !defined(WITHOUT_VTABLE) && !defined(MULTIPLE_VM)
+#if !defined(WITHOUT_VTABLE)
Signdef* signature = ctpInfo->infoOfInterfaceOrVirtualMethod(index);
std::vector<Value*> args; // size = [signature->nbIn + 3];
LLVMSignatureInfo* LSI = module->getSignatureInfo(signature);
More information about the vmkit-commits
mailing list