[vmkit-commits] [vmkit] r180318 - Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:56:06 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:54:35 2013
New Revision: 180318

URL: http://llvm.org/viewvc/llvm-project?rev=180318&view=rev
Log:
Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine.
(cherry picked from commit ce85ab001873eb33c5714f88688dd1e41db3c35c)

Modified:
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
    vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
    vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:54:35 2013
@@ -1379,7 +1379,12 @@ void Jnjvm::scanFinalizationQueue(word_t
 
 void Jnjvm::addFinalizationCandidate(gc* object) {
   llvm_gcroot(object, 0);
-  finalizerThread->addFinalizationCandidate(object);
+  if (object->getVirtualTable()->hasDestructor())
+  	finalizerThread->addFinalizationCandidate(object);
+}
+
+void Jnjvm::setType(gcHeader* header, void* type) {
+	header->toReference()->setVirtualTable((VirtualTable*)type);
 }
 
 // This method is called during GC so no llvm_gcroot needed.

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:54:35 2013
@@ -19,31 +19,40 @@ static vmkit::SpinLock lock;
 std::set<gc*> __InternalSet__;
 int Collector::verbose = 0;
 
-extern "C" void* gcmalloc(uint32_t sz, void* _VT) {
-  gc* res = 0;
+extern "C" void* prealloc(uint32_t sz) {
+	gc* res = 0;
   gcHeader* head = 0;
-  VirtualTable* VT = (VirtualTable*)_VT;
-  sz += gcHeader::hiddenHeaderSize();
+
   sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
-  head = (gcHeader*)malloc(sz);
+  head = (gcHeader*) malloc(sz);
   memset((void*)head, 0, sz);
   res = head->toReference();
 
   lock.acquire();
   __InternalSet__.insert(res);
   lock.release();
-  
-  res->setVirtualTable(VT);
+
   return res;
 }
 
-extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
-  gc* res = (gc*)gcmalloc(sz, VT);
-  if (VT->hasDestructor())
-    vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
+extern "C" void postalloc(gc* obj, void* type, uint32_t size) {
+	vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type);
+}
+
+extern "C" void* gcmalloc(uint32_t sz, void* type) {
+  gc* res = 0;
+  sz += gcHeader::hiddenHeaderSize();
+  res = (gc*) prealloc(sz);
+  postalloc(res, type, sz);
   return res;
 }
 
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) {
+	gc* res = (gc*)gcmalloc(sz, type);
+	vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
+	return res;
+}
+
 extern "C" void addFinalizationCandidate(gc* obj) {
   vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj);
 }

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 11:54:35 2013
@@ -52,8 +52,8 @@ class VirtualTable {
   static void emptyTracer(void*) {}
 };
 
-extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT);
-extern "C" void* gcmalloc(uint32_t sz, void* VT);
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* type);
+extern "C" void* gcmalloc(uint32_t sz, void* type);
 
 class gc : public gcRoot {
 public:

Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original)
+++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:54:35 2013
@@ -38,15 +38,20 @@ import org.vmutil.options.StringOption;
 
 
 public final class Bindings {
-  @Inline
-  private static Address gcmalloc(int size, ObjectReference virtualTable) {
-    Selected.Mutator mutator = Selected.Mutator.get();
-    int allocator = mutator.checkAllocator(size, 0, 0);
-    Address res = mutator.alloc(size, 0, 0, allocator, 0);
-    setVT(res, virtualTable);
-    mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator);
-    return res;
-  }
+	@Inline
+	private static Address prealloc(int size) {
+		Selected.Mutator mutator = Selected.Mutator.get();
+		int allocator = mutator.checkAllocator(size, 0, 0);
+		Address res = mutator.alloc(size, 0, 0, allocator, 0);
+		return res;
+	}
+	
+	@Inline
+	private static void postalloc(ObjectReference object, ObjectReference type, int size) {
+		Selected.Mutator mutator = Selected.Mutator.get();
+		int allocator = mutator.checkAllocator(size, 0, 0);
+		mutator.postAlloc(object, type, size, allocator);
+	}
 
   @Inline
   private static boolean isLive(TraceLocal closure, ObjectReference obj) {
@@ -132,9 +137,6 @@ public final class Bindings {
   }
 
   @Inline
-  private static native void setVT(Address addr , ObjectReference virtualTable);
-  
-  @Inline
   private static native int hiddenHeaderSize();
   
   @Inline

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:54:35 2013
@@ -62,21 +62,12 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai
   return (val == oldValue);
 }
 
-extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
-                    gcHeader* header, VirtualTable* VT) ALWAYS_INLINE;
-
-extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
-                    gcHeader* header, VirtualTable* VT) {
- 	header->toReference()->setVirtualTable(VT);
-}
-
 extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() ALWAYS_INLINE;
 
 extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() {
 	return gcHeader::hiddenHeaderSize();
 }
 
-
 extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
     void* res, void* src, int size) ALWAYS_INLINE;
 





More information about the vmkit-commits mailing list