[vmkit-commits] [vmkit] r84143 - in /vmkit/trunk/lib/N3: Mono/MonoMSCorlib.cpp PNetLib/PNetLib.cpp PNetLib/PNetMSCorlib.cpp VMCore/VMClass.cpp VMCore/VMClass.h VMCore/VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Wed Oct 14 14:36:58 PDT 2009


Author: gthomas
Date: Wed Oct 14 16:36:58 2009
New Revision: 84143

URL: http://llvm.org/viewvc/llvm-project?rev=84143&view=rev
Log:
Safe access to the gc object VMCommonClass::delegatee


Modified:
    vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
    vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp
    vmkit/trunk/lib/N3/VMCore/VMClass.cpp
    vmkit/trunk/lib/N3/VMCore/VMClass.h
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp (original)
+++ vmkit/trunk/lib/N3/Mono/MonoMSCorlib.cpp Wed Oct 14 16:36:58 2009
@@ -148,8 +148,9 @@
 }
 
 VMObject* VMCommonClass::getClassDelegatee() {
+	declare_gcroot(VMObject*, delegatee) = ooo_delegatee;
   if (!delegatee) {
-    delegatee = (*MSCorlib::clrType)();
+    ooo_delegatee = delegatee = (*MSCorlib::clrType)();
     (*MSCorlib::typeClrType)(delegatee, (VMObject*)this);
   }
   return delegatee;

Modified: vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetLib.cpp Wed Oct 14 16:36:58 2009
@@ -252,7 +252,8 @@
     VMThread::get()->getVM()->error("implement me");
     return 0;
   } else {
-    return ((VMClassArray*)cl)->baseClass->getClassDelegatee();
+		declare_gcroot(VMObject *, delegatee) = ((VMClassArray*)cl)->baseClass->getClassDelegatee();
+    return delegatee;
   }
 }
 
@@ -619,7 +620,8 @@
   ++index;
   VMCommonClass* cl = ass->loadTypeFromName(vm->asciizToUTF8(index), vm->asciizToUTF8(asciiz), true, true, true, onError);
   if (!cl) VMThread::get()->getVM()->error("implement me");
-  return cl->getClassDelegatee();
+	declare_gcroot(VMObject *, delegatee) = cl->getClassDelegatee();
+  return delegatee;
 }
 
 static bool parameterMatch(std::vector<VMCommonClass*> params, ArrayObject* types, bool virt) {

Modified: vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp (original)
+++ vmkit/trunk/lib/N3/PNetLib/PNetMSCorlib.cpp Wed Oct 14 16:36:58 2009
@@ -150,8 +150,10 @@
 }
 
 VMObject* VMCommonClass::getClassDelegatee() {
+	declare_gcroot(VMObject*, delegatee) = ooo_delegatee;
+
   if (!delegatee) {
-    delegatee = (*MSCorlib::clrType)();
+    ooo_delegatee = delegatee = (*MSCorlib::clrType)();
     (*MSCorlib::ctorClrType)(delegatee);
     (*MSCorlib::typeClrType)(delegatee, (VMObject*)this);
   }
@@ -162,7 +164,7 @@
 	declare_gcroot(VMObject*, delegatee) = ooo_delegatee;
 
   if (!delegatee) {
-    delegatee = (*MSCorlib::assemblyReflection)();
+    ooo_delegatee = delegatee = (*MSCorlib::assemblyReflection)();
     (*MSCorlib::ctorAssemblyReflection)(delegatee);
     (*MSCorlib::assemblyAssemblyReflection)(delegatee, (VMObject*)this);
   }

Modified: vmkit/trunk/lib/N3/VMCore/VMClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.cpp?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.cpp Wed Oct 14 16:36:58 2009
@@ -162,7 +162,7 @@
 void VMCommonClass::initialise(N3* vm, bool isArray) {
   this->lockVar = new mvm::LockRecursive();
   this->condVar = new mvm::Cond();
-  this->delegatee = 0;
+  this->ooo_delegatee = 0;
   this->status = hashed;
   this->vm = vm;
   this->isArray = isArray;

Modified: vmkit/trunk/lib/N3/VMCore/VMClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.h?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.h Wed Oct 14 16:36:58 2009
@@ -65,7 +65,7 @@
   const UTF8* nameSpace;
   mvm::Lock* lockVar;
   mvm::Cond* condVar;
-  VMObject* delegatee;
+  VMObject* ooo_delegatee;
   std::vector<VMCommonClass*> display;
   Assembly* assembly;
   std::vector<Property*, gc_allocator<Property*> > properties;

Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=84143&r1=84142&r2=84143&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Wed Oct 14 16:36:58 2009
@@ -67,7 +67,7 @@
 }
 
 void VMCommonClass::TRACER {
-  delegatee->MARK_AND_TRACE;
+  ooo_delegatee->MARK_AND_TRACE;
 	CALL_TRACER_VECTOR(VMMethod*, virtualMethods, std::allocator);
 	CALL_TRACER_VECTOR(VMMethod*, staticMethods, std::allocator);
   CALL_TRACER_VECTOR(Property*, properties, gc_allocator);





More information about the vmkit-commits mailing list