[vmkit-commits] [vmkit] r55592 - in /vmkit/branches/isolate: include/mvm/Object.h lib/JnJVM/VMCore/JnjvmModule.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Aug 31 13:43:03 PDT 2008


Author: geoffray
Date: Sun Aug 31 15:43:03 2008
New Revision: 55592

URL: http://llvm.org/viewvc/llvm-project?rev=55592&view=rev
Log:
Major bugfix when copying virtual tables. The java/lang/object had
11 entries, not 12.


Modified:
    vmkit/branches/isolate/include/mvm/Object.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp

Modified: vmkit/branches/isolate/include/mvm/Object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/include/mvm/Object.h?rev=55592&r1=55591&r2=55592&view=diff

==============================================================================
--- vmkit/branches/isolate/include/mvm/Object.h (original)
+++ vmkit/branches/isolate/include/mvm/Object.h Sun Aug 31 15:43:03 2008
@@ -23,6 +23,7 @@
 #define VT_TRACER_OFFSET 2
 #define VT_PRINT_OFFSET 3
 #define VT_HASHCODE_OFFSET 4
+#define VT_NB_FUNCS 5
 #define VT_SIZE 5 * sizeof(void*)
 
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=55592&r1=55591&r2=55592&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp Sun Aug 31 15:43:03 2008
@@ -264,13 +264,12 @@
     if (cl->super) {
       cl->virtualTableSize = cl->super->virtualTableSize;
     } else {
-      cl->virtualTableSize = VT_SIZE / sizeof(void*);
+      cl->virtualTableSize = VT_NB_FUNCS;
     }
     res = allocateVT(cl, cl->virtualMethods.begin());
   
     if (!(cl->super)) {
-      // 12 = number of virtual methods in java/lang/Object (!!!)
-      uint32 size = 12 * sizeof(void*);
+      uint32 size =  (cl->virtualTableSize - VT_NB_FUNCS) * sizeof(void*);
 #define COPY(CLASS) \
     memcpy((void*)((unsigned)CLASS::VT + VT_SIZE), \
            (void*)((unsigned)res + VT_SIZE), size);





More information about the vmkit-commits mailing list