[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