[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