[vmkit-commits] [vmkit] r76552 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaRuntimeJIT.cpp JavaString.cpp JavaThread.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Jul 21 01:52:21 PDT 2009


Author: geoffray
Date: Tue Jul 21 03:52:02 2009
New Revision: 76552

URL: http://llvm.org/viewvc/llvm-project?rev=76552&view=rev
Log:
Add llvm_gcroot's.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=76552&r1=76551&r2=76552&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Jul 21 03:52:02 2009
@@ -28,6 +28,8 @@
 // Throws if the method is not found.
 extern "C" void* jnjvmInterfaceLookup(CacheNode* cache, JavaObject *obj) {
 
+  llvm_gcroot(obj, 0);
+
   void* res = 0;
 
   BEGIN_NATIVE_EXCEPTION(1)
@@ -285,6 +287,7 @@
 // Calls Java code.
 extern "C" JavaObject* jnjvmRuntimeDelegatee(UserCommonClass* cl) {
   JavaObject* res = 0;
+  llvm_gcroot(res, 0);
 
   BEGIN_NATIVE_EXCEPTION(1)
   Jnjvm* vm = JavaThread::get()->getJVM();
@@ -303,9 +306,14 @@
 static JavaArray* multiCallNewIntern(UserClassArray* cl, uint32 len,
                                      sint32* dims, Jnjvm* vm) {
   assert(len > 0 && "Negative size given by VMKit");
+ 
   JavaArray* _res = cl->doNew(dims[0], vm);
+  ArrayObject* res = 0;
+  llvm_gcroot(_res, 0);
+  llvm_gcroot(res, 0);
+
   if (len > 1) {
-    ArrayObject* res = (ArrayObject*)_res;
+    res = (ArrayObject*)_res;
     UserCommonClass* _base = cl->baseClass();
     assert(_base->isArray() && "Base class not an array");
     UserClassArray* base = (UserClassArray*)_base;
@@ -327,6 +335,7 @@
 // Throws if one of the dimension is negative.
 extern "C" JavaArray* jnjvmMultiCallNew(UserClassArray* cl, uint32 len, ...) {
   JavaArray* res = 0;
+  llvm_gcroot(res, 0);
 
   BEGIN_NATIVE_EXCEPTION(1)
 
@@ -414,11 +423,13 @@
 
 // Never throws.
 extern "C" void jnjvmJavaObjectAquire(JavaObject* obj) {
+  llvm_gcroot(obj, 0);
   obj->acquire();
 }
 
 // Never throws.
 extern "C" void jnjvmJavaObjectRelease(JavaObject* obj) {
+  llvm_gcroot(obj, 0);
   obj->release();
 }
 
@@ -537,6 +548,9 @@
 extern "C" JavaObject* jnjvmClassCastException(JavaObject* obj,
                                                UserCommonClass* cl) {
   JavaObject *exc = 0;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(exc, 0);
+  
   JavaThread *th = JavaThread::get();
 
   BEGIN_NATIVE_EXCEPTION(1)
@@ -558,6 +572,9 @@
 extern "C" JavaObject* jnjvmIndexOutOfBoundsException(JavaObject* obj,
                                                       sint32 index) {
   JavaObject *exc = 0;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(exc, 0);
+  
   JavaThread *th = JavaThread::get();
 
   BEGIN_NATIVE_EXCEPTION(1)

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp?rev=76552&r1=76551&r2=76552&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp Tue Jul 21 03:52:02 2009
@@ -20,6 +20,8 @@
 JavaVirtualTable* JavaString::internStringVT = 0;
 
 JavaString* JavaString::stringDup(const ArrayUInt16*& array, Jnjvm* vm) {
+  llvm_gcroot(array, 0);
+
   UserClass* cl = vm->upcalls->newString;
   JavaString* res = (JavaString*)cl->doNew(vm);
   
@@ -47,6 +49,8 @@
 }
 
 const ArrayUInt16* JavaString::strToArray(Jnjvm* vm) {
+  llvm_gcroot(this, 0);
+
   assert(value && "String without an array?");
   if (offset || (count != value->size)) {
     ArrayUInt16* array = 
@@ -63,14 +67,20 @@
 }
 
 void JavaString::stringDestructor(JavaString* str) {
+  llvm_gcroot(str, 0);
+  
   Jnjvm* vm = JavaThread::get()->getJVM();
   assert(vm && "No vm when destroying a string");
   if (str->value) vm->hashStr.removeUnlocked(str->value, str);
 }
 
 JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) {
-  ArrayUInt16* array = 
-    (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
+  
+  ArrayUInt16* array = 0;
+  llvm_gcroot(this, 0);
+  llvm_gcroot(array, 0);
+
+  array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
   
   uint16* java = array->elements;
   for (sint32 i = 0; i < name->size; i++) {
@@ -83,6 +93,8 @@
 }
 
 const UTF8* JavaString::javaToInternal(UTF8Map* map) const {
+  llvm_gcroot(this, 0);
+  
   uint16* java = (uint16*)alloca(sizeof(uint16) * count);
 
   for (sint32 i = 0; i < count; ++i) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=76552&r1=76551&r2=76552&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Tue Jul 21 03:52:02 2009
@@ -24,6 +24,9 @@
 const unsigned int JavaThread::StateInterrupted = 2;
 
 JavaThread::JavaThread(JavaObject* thread, JavaObject* vmth, Jnjvm* isolate) {
+  llvm_gcroot(thread, 0);
+  llvm_gcroot(vmth, 0);
+  
   javaThread = thread;
   vmThread = vmth;
   MyVM = isolate;
@@ -58,6 +61,7 @@
 extern "C" void __cxa_throw(void*, void*, void*);
 
 void JavaThread::throwException(JavaObject* obj) {
+  llvm_gcroot(obj, 0);
   JavaThread* th = JavaThread::get();
   assert(th->pendingException == 0 && "pending exception already there?");
   th->pendingException = obj;
@@ -195,6 +199,10 @@
 }
 
 JavaObject* JavaThread::getNonNullClassLoader() {
+  
+  JavaObject* obj = 0;
+  llvm_gcroot(obj, 0);
+
   std::vector<void*>::iterator it = addresses.end();
 
   // Loop until we cross the first Java frame.
@@ -210,7 +218,7 @@
       void* ip = FRAME_IP(addr);
       JavaMethod* meth = getJVM()->IPToMethod<JavaMethod>(ip);
       JnjvmClassLoader* loader = meth->classDef->classLoader;
-      JavaObject* obj = loader->getJavaClassLoader();
+      obj = loader->getJavaClassLoader();
       if (obj) return obj;
       addr = (void**)addr[0];
       // We end walking the stack when we cross a native -> Java call. Here
@@ -298,6 +306,8 @@
 
 JavaObject** JNILocalReferences::addJNIReference(JavaThread* th,
                                                  JavaObject* obj) {
+  llvm_gcroot(obj, 0);
+  
   if (length == MAXIMUM_REFERENCES) {
     JNILocalReferences* next = new JNILocalReferences();
     th->localJNIRefs = next;





More information about the vmkit-commits mailing list