[vmkit-commits] [vmkit] r86554 - in /vmkit/trunk: include/mvm/JIT.h lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h lib/Mvm/Compiler/JIT.cpp lib/Mvm/Compiler/LLVMRuntime.ll lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/GCMmap2/gc.cpp mmtk/mmtk-alloc/Selected.cpp mmtk/mmtk-fake/Selected.cpp mmtk/mmtk-j3/VM.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Nov 9 08:50:54 PST 2009


Author: geoffray
Date: Mon Nov  9 10:50:54 2009
New Revision: 86554

URL: http://llvm.org/viewvc/llvm-project?rev=86554&view=rev
Log:
Put addFinalizationCandidate out of gcmalloc.


Modified:
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
    vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll
    vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
    vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
    vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
    vmkit/trunk/mmtk/mmtk-j3/VM.cpp

Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Mon Nov  9 10:50:54 2009
@@ -124,6 +124,8 @@
   llvm::Function* conditionalSafePoint;
   llvm::Function* unconditionalSafePoint;
   llvm::Function* AllocateFunction;
+  llvm::Function* AllocateUnresolvedFunction;
+  llvm::Function* AddFinalizationCandidate;
 
    llvm::Constant* constantInt8Zero;
    llvm::Constant* constantZero;

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Nov  9 10:50:54 2009
@@ -1896,9 +1896,14 @@
   }
  
   VT = new BitCastInst(VT, module->ptrType, "", currentBlock);
-  Value* val = invoke(module->AllocateFunction, Size, VT, "",
-                      currentBlock);
- 
+  Value* val = invoke(cl ? module->AllocateFunction :
+                           module->AllocateUnresolvedFunction,
+                      Size, VT, "", currentBlock);
+
+  if (cl && cl->virtualVT->destructor) {
+    CallInst::Create(module->AddFinalizationCandidate, val, "", currentBlock);
+  }
+
   val = new BitCastInst(val, module->JavaObjectType, "", currentBlock);
   push(val, false);
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Mon Nov  9 10:50:54 2009
@@ -433,8 +433,10 @@
 public:
 
   static VMClassLoader* allocate(JnjvmClassLoader* J) {
-    VMClassLoader* res = 
-      (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
+    VMClassLoader* res = 0;
+    llvm_gcroot(res, 0);
+    res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
+    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
     res->JCL = J;
     return res;
   }

Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Mon Nov  9 10:50:54 2009
@@ -427,6 +427,10 @@
   conditionalSafePoint = module->getFunction("conditionalSafePoint");
   AllocateFunction = module->getFunction("gcmalloc");
   assert(AllocateFunction && "No allocate function");
+  AllocateUnresolvedFunction = module->getFunction("gcmallocUnresolved");
+  assert(AllocateUnresolvedFunction && "No allocateUnresolved function");
+  AddFinalizationCandidate = module->getFunction("addFinalizationCandidate");
+  assert(AddFinalizationCandidate && "No addFinalizationCandidate function");
 }
 
 
@@ -552,6 +556,7 @@
       F->setAttributes(SF->getAttributes());
     }
   }
+  
   Function* SF = Src->getFunction("gcmalloc");
   if (SF && !SF->isDeclaration()) {
     Function* F = Function::Create(SF->getFunctionType(),
@@ -563,6 +568,31 @@
       executionEngine->updateGlobalMapping(F, ptr);
     }
   }
+  
+  SF = Src->getFunction("gcmallocUnresolved");
+  if (SF && !SF->isDeclaration()) {
+    Function* F = Function::Create(SF->getFunctionType(),
+                                   GlobalValue::ExternalLinkage,
+                                   SF->getName(), Dst);
+    F->setAttributes(SF->getAttributes());
+    if (executionEngine) {
+      void* ptr = executionEngine->getPointerToFunction(SF);
+      executionEngine->updateGlobalMapping(F, ptr);
+    }
+  }
+  
+  SF = Src->getFunction("addFinalizationCandidate");
+  if (SF && !SF->isDeclaration()) {
+    Function* F = Function::Create(SF->getFunctionType(),
+                                   GlobalValue::ExternalLinkage,
+                                   SF->getName(), Dst);
+    F->setAttributes(SF->getAttributes());
+    if (executionEngine) {
+      void* ptr = executionEngine->getPointerToFunction(SF);
+      executionEngine->updateGlobalMapping(F, ptr);
+    }
+  }
+
 }
 
 void JITMethodInfo::scan(void* TL, void* ip, void* addr) {

Modified: vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll (original)
+++ vmkit/trunk/lib/Mvm/Compiler/LLVMRuntime.ll Mon Nov  9 10:50:54 2009
@@ -83,3 +83,5 @@
 
 declare void @llvm.gcroot(i8**, i8*)
 declare i8* @gcmalloc(i32, i8*)
+declare i8* @gcmallocUnresolved(i32, i8*)
+declare void @addFinalizationCandidate(i8*)

Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Mon Nov  9 10:50:54 2009
@@ -177,12 +177,6 @@
 
     unlock();
 
-#if !defined(WITHOUT_FINALIZER)
-    if (vt->destructor) {
-      mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p);
-    }
-#endif
-
     return p;
 #endif
   }

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Mon Nov  9 10:50:54 2009
@@ -23,6 +23,20 @@
   return res;
 }
 
+extern "C" void* gcmallocUnresolved(size_t sz, VirtualTable* VT) {
+  void* res = 0;
+  llvm_gcroot(res, 0);
+  res = Collector::gcmalloc(VT, sz);
+  if (VT->destructor)
+    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
+  return res;
+}
+
+extern "C" void addFinalizationCandidate(gc* obj) {
+  llvm_gcroot(obj, 0);
+  mvm::Thread::get()->MyVM->addFinalizationCandidate(obj);
+}
+
 void Collector::scanObject(void** val) {
   void* obj = *val;
   if (obj) {

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Mon Nov  9 10:50:54 2009
@@ -20,7 +20,7 @@
 extern "C" void JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(uintptr_t Mutator, uintptr_t ref, uintptr_t typeref,
     int32_t bytes, int32_t allocator) __attribute__((always_inline));
 
-extern "C" void* gcmalloc(size_t sz, void* _VT) {
+extern "C" void* gcmalloc(uint32_t sz, void* _VT) {
   gc* res = 0;
   llvm_gcroot(res, 0);
   VirtualTable* VT = (VirtualTable*)_VT;
@@ -30,9 +30,23 @@
   res = (gc*)JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(Mutator, sz, 0, 0, allocator, 0);
   res->setVirtualTable(VT);
   JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(Mutator, (uintptr_t)res, (uintptr_t)VT, sz, allocator);
-    
-  if (VT->destructor) {
-    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
-  }
   return res;
 }
+
+extern "C" void addFinalizationCandidate(void* obj) __attribute__((always_inline));
+
+extern "C" void addFinalizationCandidate(void* obj) {
+  llvm_gcroot(obj, 0);
+  mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)obj);
+}
+
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* _VT) {
+  gc* res = 0;
+  llvm_gcroot(res, 0);
+  VirtualTable* VT = (VirtualTable*)_VT;
+  res = (gc*)gcmalloc(sz, VT);
+  if (VT->destructor) addFinalizationCandidate(res);
+  return res;
+}
+
+

Modified: vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-fake/Selected.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-fake/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-fake/Selected.cpp Mon Nov  9 10:50:54 2009
@@ -28,9 +28,17 @@
   sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
   res = internalMalloc(0, sz, 0, 0, 0, 0);
   res->setVirtualTable(VT);
-    
-  if (VT->destructor) {
+  return res;
+}
+
+extern "C" void* gcmallocUnresolved(size_t sz, VirtualTable* VT) {
+  gc* res = (gc*)gcmalloc(sz, VT);
+  if (VT->destructor)
     mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
-  }
   return res;
 }
+
+extern "C" void addFinalizationCandidate(gc* obj) {
+  mvm::Thread::get()->MyVM->addFinalizationCandidate(obj);
+}
+

Modified: vmkit/trunk/mmtk/mmtk-j3/VM.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/VM.cpp?rev=86554&r1=86553&r2=86554&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/VM.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/VM.cpp Mon Nov  9 10:50:54 2009
@@ -19,9 +19,28 @@
 extern "C" void Java_org_j3_runtime_VM_sysWrite__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_runtime_VM_sysWriteln__ () { JavaThread::get()->printBacktrace(); abort(); }
 extern "C" void Java_org_j3_runtime_VM_sysWriteln__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM__1assert__ZLjava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM_sysExit__I () { JavaThread::get()->printBacktrace(); abort(); }
-extern "C" void Java_org_j3_runtime_VM_sysFail__Ljava_lang_String_2 () { JavaThread::get()->printBacktrace(); abort(); }
+
+extern "C" void Java_org_j3_runtime_VM__1assert__ZLjava_lang_String_2 () {
+#ifdef DEBUG
+  JavaThread::get()->printBacktrace();
+#endif
+  abort();
+}
+
+extern "C" void Java_org_j3_runtime_VM_sysExit__I () {
+#ifdef DEBUG
+  JavaThread::get()->printBacktrace();
+#endif
+  abort();
+}
+
+
+extern "C" void Java_org_j3_runtime_VM_sysFail__Ljava_lang_String_2 () { 
+#ifdef DEBUG
+  JavaThread::get()->printBacktrace();
+#endif
+  abort();
+}
 
 extern "C" void Java_org_j3_runtime_VM__1assert__Z (bool cond) {
   





More information about the vmkit-commits mailing list