[vmkit-commits] [vmkit] r120703 - in /vmkit/branches/multi-vm: include/mvm/GC.h lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h lib/J3/VMCore/JnjvmClassLoader.cpp lib/J3/VMCore/JnjvmClassLoader.h lib/J3/VMCore/VirtualTables.cpp lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/MMTk/MvmGC.h

Gael Thomas gael.thomas at lip6.fr
Thu Dec 2 04:59:46 PST 2010


Author: gthomas
Date: Thu Dec  2 06:59:46 2010
New Revision: 120703

URL: http://llvm.org/viewvc/llvm-project?rev=120703&view=rev
Log:
fill in the new field vm of virtualtable

Modified:
    vmkit/branches/multi-vm/include/mvm/GC.h
    vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
    vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h
    vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp
    vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h
    vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h

Modified: vmkit/branches/multi-vm/include/mvm/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/GC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/GC.h (original)
+++ vmkit/branches/multi-vm/include/mvm/GC.h Thu Dec  2 06:59:46 2010
@@ -51,15 +51,6 @@
 			return &destructor;
 		}
 
-		CommonVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) {
-			destructor = d;
-			operatorDelete = o;
-			tracer = t;
-			vm = v;
-		}
-
-		CommonVirtualTable() {}
-
 		static int numberOfCommonEntries() { return 4; }
 
 		static void emptyTracer(void*) {}
@@ -73,11 +64,7 @@
 	class gc : public collectable {
 	};
 
-	class VirtualTable : public GCVirtualTable {
-	public:
-		VirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) : GCVirtualTable(d, o, t, v) {}
-		VirtualTable() {}
-	};
+	class VirtualTable : public GCVirtualTable {};
 
   static const uint32_t HashBits = 8;
   static const uint64_t GCBitMask = ((1 << GCBits) - 1);

Modified: vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp Thu Dec  2 06:59:46 2010
@@ -2224,7 +2224,7 @@
 
   for (; I != E; ++I) {
     JavaObject* obj = (JavaObject*)(*I);
-    if (!VMClassLoader::isVMClassLoader(obj) && JavaObject::instanceOf(obj, cl)) {
+    if (!VMClassLoader::isVMClassLoader(cl->classLoader->getIsolate(), obj) && JavaObject::instanceOf(obj, cl)) {
       if (currentClass != NULL) {
         if (JavaObject::getClass(obj) != currentClass) {
           return 0;

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Thu Dec  2 06:59:46 2010
@@ -1346,7 +1346,12 @@
 }
 
 Jnjvm::Jnjvm(mvm::BumpPtrAllocator& Alloc, mvm::VMKit* vmkit, JnjvmBootstrapLoader* loader) : 
-  VirtualMachine(Alloc, vmkit), lockSystem(Alloc) {
+	VirtualMachine(Alloc, vmkit), 
+	lockSystem(Alloc) {
+
+	loader->isolate = this;
+
+	initialiseInternalVTs();
 
   classpath = getenv("CLASSPATH");
   if (!classpath) classpath = ".";
@@ -1433,7 +1438,7 @@
   // in this case.
   size_t size = 0;
   JavaObject* src = (JavaObject*)object;
-  if (VMClassLoader::isVMClassLoader(src)) {
+  if (VMClassLoader::isVMClassLoader(this, src)) {
     size = sizeof(VMClassLoader);
   } else {
     CommonClass* cl = JavaObject::getClass(src);
@@ -1455,7 +1460,7 @@
 
 const char* Jnjvm::getObjectTypeName(mvm::gc* object) {
   JavaObject* src = (JavaObject*)object;
-  if (VMClassLoader::isVMClassLoader(src)) {
+  if (VMClassLoader::isVMClassLoader(this, src)) {
     return "VMClassLoader";
   } else {
     CommonClass* cl = JavaObject::getClass(src);

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h Thu Dec  2 06:59:46 2010
@@ -258,7 +258,11 @@
 
 	/// javaReferenceThread - the java reference thread
 	JavaThread* javaReferenceThread;
- 
+
+
+	mvm::VirtualTable* VMClassLoader__VT;
+
+	void initialiseInternalVTs();
 public:
   
   /// CreateExceptions - These are the runtime exceptions thrown by Java code

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp Thu Dec  2 06:59:46 2010
@@ -884,13 +884,13 @@
   Classpath* upcalls = vm->bootstrapLoader->upcalls;
   vmdata = 
     (VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
-  
+
   if (vmdata == NULL) {
     JavaObject::acquire(loader);
     vmdata = 
       (VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
     if (!vmdata) {
-      vmdata = VMClassLoader::allocate();
+      vmdata = VMClassLoader::allocate(vm);
       mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator();
       JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
                                                      loader, vmdata, vm);
@@ -1197,6 +1197,7 @@
 extern "C" void vmjcAddPreCompiledClass(JnjvmClassLoader* JCL,
                                         CommonClass* cl) {
   cl->classLoader = JCL;
+	cl->virtualVT->vm = JCL->getIsolate();
   
   JCL->hashUTF8->insert(cl->name);
 
@@ -1269,6 +1270,19 @@
   return res;
 }
 
+VMClassLoader* VMClassLoader::allocate(Jnjvm *vm) {
+	VMClassLoader* res = 0;
+	llvm_gcroot(res, 0);
+	res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), vm->VMClassLoader__VT);
+	return res;
+}
+
+bool VMClassLoader::isVMClassLoader(Jnjvm *vm, JavaObject* obj) {
+	llvm_gcroot(obj, 0);
+	// not safe: must verify that obj belongs to a jvm
+	return obj->getVirtualTable() == vm->VMClassLoader__VT;
+}
+
 extern "C" void staticCallback() {
   fprintf(stderr, "Implement me");
   abort();

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h Thu Dec  2 06:59:46 2010
@@ -87,6 +87,7 @@
 
 protected:
   
+	friend class Jnjvm;
   JnjvmClassLoader(mvm::BumpPtrAllocator& Alloc) : allocator(Alloc) {}
   
   /// TheCompiler - The Java compiler for this class loader.
@@ -443,23 +444,13 @@
 
 public:
 
-  static VMClassLoader* allocate() {
-    VMClassLoader* res = 0;
-    llvm_gcroot(res, 0);
-    res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
-    return res;
-  }
-
-  /// VT - The VirtualTable for this GC-class.
+  /// Allocate a VMClassLoader
   ///
-  static mvm::VirtualTable VT;
+  static VMClassLoader* allocate(Jnjvm *vm);
 
   /// Is the object a VMClassLoader object?
   ///
-  static bool isVMClassLoader(JavaObject* obj) {
-    llvm_gcroot(obj, 0);
-    return obj->getVirtualTable() == &VT;
-  }
+  static bool isVMClassLoader(Jnjvm *vm, JavaObject* obj);
 
   /// staticTracer - Trace the internal class loader.
   ///

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp Thu Dec  2 06:59:46 2010
@@ -53,10 +53,13 @@
 // Classpath with the vmdata field).
 //===----------------------------------------------------------------------===//
 
-mvm::VirtualTable VMClassLoader::VT((uintptr_t)VMClassLoader::staticDestructor,
-																		(uintptr_t)VMClassLoader::staticDestructor,
-																		(uintptr_t)VMClassLoader::staticTracer,
-																		0);
+void Jnjvm::initialiseInternalVTs() {
+	VMClassLoader__VT = (mvm::VirtualTable*)allocator.Allocate(sizeof(mvm::VirtualTable), "Virtual table");
+	VMClassLoader__VT->destructor     = (uintptr_t)VMClassLoader::staticDestructor;
+	VMClassLoader__VT->operatorDelete = 0;
+	VMClassLoader__VT->tracer         = (uintptr_t)VMClassLoader::staticTracer;
+	VMClassLoader__VT->vm             = this;
+}
 
 //===----------------------------------------------------------------------===//
 // Trace methods for Java objects. There are four types of objects:

Modified: vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h Thu Dec  2 06:59:46 2010
@@ -32,9 +32,6 @@
   static uint32_t numberOfSpecializedTracers() {
     return 0;
   }
-
-  GCVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine *v) : CommonVirtualTable(d, o, t, v) {}
-  GCVirtualTable() {}
 };
 
 class Collector {

Modified: vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h Thu Dec  2 06:59:46 2010
@@ -28,9 +28,6 @@
   static uint32_t numberOfSpecializedTracers() {
     return 1;
   }
-
-  GCVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) : CommonVirtualTable(d, o, t, v) {}
-  GCVirtualTable() {}
 };
 
 extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT);





More information about the vmkit-commits mailing list