[vmkit-commits] [vmkit] r106866 - in /vmkit/trunk/lib/J3/VMCore: JavaThread.h Jni.cpp Jnjvm.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h LockedMap.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Jun 25 11:00:09 PDT 2010


Author: geoffray
Date: Fri Jun 25 13:00:09 2010
New Revision: 106866

URL: http://llvm.org/viewvc/llvm-project?rev=106866&view=rev
Log:
More cleanups for GC.


Modified:
    vmkit/trunk/lib/J3/VMCore/JavaThread.h
    vmkit/trunk/lib/J3/VMCore/Jni.cpp
    vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/J3/VMCore/LockedMap.h

Modified: vmkit/trunk/lib/J3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaThread.h?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaThread.h Fri Jun 25 13:00:09 2010
@@ -122,6 +122,7 @@
 
 
   JavaObject** pushJNIRef(JavaObject* obj) {
+    llvm_gcroot(obj, 0);
     if (!obj) return 0;
    
     ++(*currentAddedReferences);
@@ -251,7 +252,7 @@
   /// currently pending.
   ///
   virtual void internalClearException() {
-    pendingException = 0;
+    pendingException = NULL;
   }
 
 public:

Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Fri Jun 25 13:00:09 2010
@@ -28,6 +28,7 @@
 
 static UserClass* getClassFromStaticMethod(Jnjvm* vm, JavaMethod* meth,
                                            JavaObject* clazz) {
+  llvm_gcroot(clazz, 0);
 #ifdef ISOLATE_SHARING
   return (UserClass*)UserCommonClass::resolvedImplClass(vm, clazz, false);
 #else

Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Fri Jun 25 13:00:09 2010
@@ -51,6 +51,10 @@
 /// initialiseClass - Java class initialisation. Java specification §2.17.5.
 
 void UserClass::initialiseClass(Jnjvm* vm) {
+  JavaObject* exc = NULL;
+  JavaObject* obj = NULL;
+  llvm_gcroot(exc, 0);
+  llvm_gcroot(obj, 0);
   
   // Primitives are initialized at boot time, arrays are initialized directly.
   
@@ -157,10 +161,6 @@
       }
     }
  
-    JavaObject* exc = 0;
-    JavaObject* obj = 0;
-    llvm_gcroot(exc, 0);
-    llvm_gcroot(obj, 0);
 #ifdef SERVICE
     if (classLoader == classLoader->bootstrapLoader || 
         classLoader->getIsolate() == vm) {
@@ -253,18 +253,23 @@
       
 void Jnjvm::errorWithExcp(UserClass* cl, JavaMethod* init,
                           const JavaObject* excp) {
-  JavaObject* obj = cl->doNew(this);
+  JavaObject* obj = NULL;
   llvm_gcroot(obj, 0);
+  llvm_gcroot(excp, 0);
+
+  obj = cl->doNew(this);
   init->invokeIntSpecial(this, cl, obj, &excp);
   JavaThread::get()->throwException(obj);
 }
 
 JavaObject* Jnjvm::CreateError(UserClass* cl, JavaMethod* init,
                                const char* asciiz) {
-  JavaObject* obj = cl->doNew(this);
-  JavaString* str = 0;
+  JavaObject* obj = NULL;
+  JavaString* str = NULL;
   llvm_gcroot(obj, 0);
   llvm_gcroot(str, 0);
+  obj = cl->doNew(this);
+
   if (asciiz) str = asciizToStr(asciiz);
 
   init->invokeIntSpecial(this, cl, obj, &str);
@@ -273,7 +278,7 @@
 
 JavaObject* Jnjvm::CreateError(UserClass* cl, JavaMethod* init,
                                JavaString* str) {
-  JavaObject* obj = 0;
+  JavaObject* obj = NULL;
   llvm_gcroot(str, 0);
   llvm_gcroot(obj, 0);
   obj = cl->doNew(this);
@@ -295,19 +300,21 @@
 }
 
 void Jnjvm::indexOutOfBounds(const JavaObject* obj, sint32 entry) {
-  JavaString* str = (JavaString*)
-    upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass,
-                                                 entry, 10);
+  JavaString* str = NULL;
+  llvm_gcroot(obj, 0);
   llvm_gcroot(str, 0);
+  str = (JavaString*)upcalls->IntToString->invokeJavaObjectStatic(
+      this, upcalls->intClass, entry, 10);
   error(upcalls->ArrayIndexOutOfBoundsException,
         upcalls->InitArrayIndexOutOfBoundsException, str);
 }
 
 void Jnjvm::negativeArraySizeException(sint32 size) {
-  JavaString* str = (JavaString*)
+  JavaString* str = NULL;
+  llvm_gcroot(str, 0);
+  str = (JavaString*)
     upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass,
                                                  size, 10);
-  llvm_gcroot(str, 0);
   error(upcalls->NegativeArraySizeException,
         upcalls->InitNegativeArraySizeException, str);
 }
@@ -318,10 +325,11 @@
 }
 
 JavaObject* Jnjvm::CreateIndexOutOfBoundsException(sint32 entry) {
-  JavaString* str = (JavaString*)
+  JavaString* str = NULL;
+  llvm_gcroot(str, 0);
+  str = (JavaString*)
     upcalls->IntToString->invokeJavaObjectStatic(this, upcalls->intClass,
                                                  entry, 10);
-  llvm_gcroot(str, 0);
   return CreateError(upcalls->ArrayIndexOutOfBoundsException,
                      upcalls->InitArrayIndexOutOfBoundsException, str);
 }
@@ -333,16 +341,18 @@
 }
 
 JavaObject* Jnjvm::CreateUnsatisfiedLinkError(JavaMethod* meth) {
-  JavaString* str = constructString(meth->toString());
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = constructString(meth->toString());
   return CreateError(upcalls->UnsatisfiedLinkError,
                      upcalls->InitUnsatisfiedLinkError,
                      str);
 }
 
 JavaObject* Jnjvm::CreateArithmeticException() {
-  JavaString* str = asciizToStr("/ by zero");
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr("/ by zero");
   return CreateError(upcalls->ArithmeticException,
                      upcalls->InitArithmeticException, str);
 }
@@ -354,23 +364,26 @@
 }
 
 JavaObject* Jnjvm::CreateOutOfMemoryError() {
-  JavaString* str = asciizToStr("Java heap space");
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr("Java heap space");
   return CreateError(upcalls->OutOfMemoryError,
                      upcalls->InitOutOfMemoryError, str);
 }
 
 JavaObject* Jnjvm::CreateStackOverflowError() {
   // Don't call init, or else we'll get a new stack overflow error.
-  JavaObject* obj = upcalls->StackOverflowError->doNew(this);
+  JavaObject* obj = NULL;
   llvm_gcroot(obj, 0);
+  obj = upcalls->StackOverflowError->doNew(this);
   JavaObjectThrowable::fillInStackTrace((JavaObjectThrowable*)obj);
   return obj;
 }
 
 JavaObject* Jnjvm::CreateArrayStoreException(JavaVirtualTable* VT) {
-  JavaString* str = VT ? JavaString::internalToJava(VT->cl->name, this) : NULL;
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  if (VT != NULL) str = JavaString::internalToJava(VT->cl->name, this);
   return CreateError(upcalls->ArrayStoreException,
                      upcalls->InitArrayStoreException, str);
 }
@@ -384,15 +397,17 @@
 }
 
 JavaObject* Jnjvm::CreateLinkageError(const char* msg) {
-  JavaString* str = asciizToStr(msg);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr(msg);
   return CreateError(upcalls->LinkageError,
                      upcalls->InitLinkageError, str);
 }
 
 void Jnjvm::illegalAccessException(const char* msg) {
-  JavaString* str = asciizToStr(msg);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr(msg);
   error(upcalls->IllegalAccessException,
         upcalls->InitIllegalAccessException, str);
 }
@@ -427,15 +442,17 @@
 }
 
 void Jnjvm::outOfMemoryError() {
-  JavaString* str = asciizToStr("Java heap space");
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr("Java heap space");
   error(upcalls->OutOfMemoryError,
         upcalls->InitOutOfMemoryError, str);
 }
 
 void Jnjvm::illegalArgumentException(const char* msg) {
-  JavaString* str = asciizToStr(msg);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr(msg);
   error(upcalls->IllegalArgumentException,
         upcalls->InitIllegalArgumentException, str);
 }
@@ -455,26 +472,29 @@
 }
 
 void Jnjvm::instantiationException(UserCommonClass* cl) {
-  JavaString* str = internalUTF8ToStr(cl->name);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = internalUTF8ToStr(cl->name);
   error(upcalls->InstantiationException, upcalls->InitInstantiationException,
         str);
 }
 
 void Jnjvm::instantiationError(UserCommonClass* cl) {
-  JavaString* str = internalUTF8ToStr(cl->name);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = internalUTF8ToStr(cl->name);
   error(upcalls->InstantiationError, upcalls->InitInstantiationError, str);
 }
   
 
 static JavaString* CreateNoSuchMsg(CommonClass* cl, const UTF8* name,
                                    Jnjvm* vm) {
-  ArrayUInt16* msg = (ArrayUInt16*)
-    vm->upcalls->ArrayOfChar->doNew(19 + cl->name->size + name->size, vm);
-  JavaString* str = 0;
+  ArrayUInt16* msg = NULL;
+  JavaString* str = NULL;
   llvm_gcroot(msg, 0);
   llvm_gcroot(str, 0);
+  msg = (ArrayUInt16*)
+    vm->upcalls->ArrayOfChar->doNew(19 + cl->name->size + name->size, vm);
 
   uint32 i = 0;
 
@@ -521,32 +541,36 @@
 }
 
 void Jnjvm::noSuchFieldError(CommonClass* cl, const UTF8* name) { 
-  JavaString* str = CreateNoSuchMsg(cl, name, this);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = CreateNoSuchMsg(cl, name, this);
   error(upcalls->NoSuchFieldError,
         upcalls->InitNoSuchFieldError, str);
 }
 
 void Jnjvm::noSuchMethodError(CommonClass* cl, const UTF8* name) {
-  JavaString* str = CreateNoSuchMsg(cl, name, this);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = CreateNoSuchMsg(cl, name, this);
   error(upcalls->NoSuchMethodError,
         upcalls->InitNoSuchMethodError, str);
 }
 
 void Jnjvm::abstractMethodError(CommonClass* cl, const UTF8* name) {
-  JavaString* str = CreateNoSuchMsg(cl, name, this);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = CreateNoSuchMsg(cl, name, this);
   error(upcalls->AbstractMethodError,
         upcalls->InitAbstractMethodError, str);
 }
 
 static JavaString* CreateUnableToLoad(const UTF8* name, Jnjvm* vm) {
-  ArrayUInt16* msg = (ArrayUInt16*)
-    vm->upcalls->ArrayOfChar->doNew(15 + name->size, vm);
-  JavaString* str = 0;
+  ArrayUInt16* msg = NULL;
+  JavaString* str = NULL;
   llvm_gcroot(msg, 0);
   llvm_gcroot(str, 0);
+
+  msg = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(15 + name->size, vm);
   uint32 i = 0;
 
 
@@ -580,13 +604,13 @@
 }
 
 static JavaString* CreateUnableToLoad(JavaString* name, Jnjvm* vm) {
-  JavaString* str = 0;
-  ArrayUInt16* msg = (ArrayUInt16*)
-    vm->upcalls->ArrayOfChar->doNew(15 + name->count, vm);
+  JavaString* str = NULL;
+  ArrayUInt16* msg = NULL;
   llvm_gcroot(msg, 0);
   llvm_gcroot(str, 0);
-  uint32 i = 0;
 
+  msg = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(15 + name->count, vm);
+  uint32 i = 0;
 
   ArrayUInt16::setElement(msg, 'u', i); i++;
   ArrayUInt16::setElement(msg, 'n', i); i++;
@@ -620,25 +644,29 @@
 
 
 void Jnjvm::noClassDefFoundError(const UTF8* name) {
-  JavaString* str = CreateUnableToLoad(name, this);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = CreateUnableToLoad(name, this);
   error(upcalls->NoClassDefFoundError,
         upcalls->InitNoClassDefFoundError, str);
 }
 
 void Jnjvm::classNotFoundException(JavaString* name) {
-  JavaString* str = CreateUnableToLoad(name, this);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = CreateUnableToLoad(name, this);
   error(upcalls->ClassNotFoundException,
         upcalls->InitClassNotFoundException, str);
 }
 
 void Jnjvm::noClassDefFoundError(UserClass* cl, const UTF8* name) {
-  uint32 size = 35 + name->size + cl->name->size;
-  ArrayUInt16* msg = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
-  JavaString* str = 0;
+  ArrayUInt16* msg = NULL;
+  JavaString* str = NULL;
   llvm_gcroot(msg, 0);
   llvm_gcroot(str, 0);
+
+  uint32 size = 35 + name->size + cl->name->size;
+  msg = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
   uint32 i = 0;
 
 
@@ -703,15 +731,17 @@
 
 
 void Jnjvm::classFormatError(const char* msg) {
-  JavaString* str = asciizToStr(msg);
+  JavaString* str = NULL;
   llvm_gcroot(str, 0);
+  str = asciizToStr(msg);
   error(upcalls->ClassFormatError, upcalls->InitClassFormatError, str);
 }
 
 JavaString* Jnjvm::internalUTF8ToStr(const UTF8* utf8) {
-  uint32 size = utf8->size;
-  ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
+  ArrayUInt16* tmp = NULL;
   llvm_gcroot(tmp, 0);
+  uint32 size = utf8->size;
+  tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
   
   for (uint32 i = 0; i < size; i++) {
     ArrayUInt16::setElement(tmp, utf8->elements[i], i);
@@ -722,15 +752,17 @@
 }
 
 JavaString* Jnjvm::constructString(const ArrayUInt16* array) { 
+  JavaString* res = NULL;
   llvm_gcroot(array, 0);
-  JavaString* res = hashStr.lookupOrCreate(array, this, JavaString::stringDup);
+  llvm_gcroot(res, 0);
+  res = hashStr.lookupOrCreate(array, this, JavaString::stringDup);
   return res;
 }
 
 JavaString* Jnjvm::asciizToStr(const char* asciiz) {
-  assert(asciiz && "No asciiz given");
-  ArrayUInt16* var = 0;
+  ArrayUInt16* var = NULL;
   llvm_gcroot(var, 0);
+  assert(asciiz && "No asciiz given");
   var = asciizToArray(asciiz);
   return constructString(var);
 }
@@ -747,11 +779,11 @@
   llvm_gcroot(delegatee, 0);
   llvm_gcroot(base, 0);
 
-  if (!getDelegatee()) {
+  if (getDelegatee() == NULL) {
     UserClass* cl = vm->upcalls->newClass;
     delegatee = (JavaObjectClass*)cl->doNew(vm);
     JavaObjectClass::setClass(delegatee, this);
-    if (!pd && isArray()) {
+    if (pd == NULL && isArray()) {
       base = (JavaObjectClass*)
         asArrayClass()->baseClass()->getClassDelegatee(vm, pd);
       JavaObjectClass::setProtectionDomain(
@@ -771,11 +803,6 @@
   return getDelegateePtr();
 }
 
-//===----------------------------------------------------------------------===//
-// The command line parsing tool does not manipulate any GC-allocated objects.
-// The ArrayUInt8 is allocated with malloc and free'd after parsing.
-//===----------------------------------------------------------------------===//
-
 #define PATH_MANIFEST "META-INF/MANIFEST.MF"
 #define MAIN_CLASS "Main-Class: "
 #define MAIN_LOWER_CLASS "Main-class: "
@@ -841,17 +868,18 @@
   ZipArchive archive(&bytes, vm->allocator);
   if (archive.getOfscd() != -1) {
     ZipFile* file = archive.getFile(PATH_MANIFEST);
-    if (file) {
+    if (file != NULL) {
       UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte;
       res = (ArrayUInt8*)array->doNew(file->ucsize, vm);
       int ok = archive.readFile(res, file);
       if (ok) {
         char* mainClass = findInformation(vm, res, MAIN_CLASS,
                                           LENGTH_MAIN_CLASS);
-        if (!mainClass)
+        if (mainClass == NULL) {
           mainClass = findInformation(vm, res, MAIN_LOWER_CLASS,
                                       LENGTH_MAIN_CLASS);
-        if (mainClass) {
+        }
+        if (mainClass != NULL) {
           className = mainClass;
         } else {
           printf("No Main-Class:  in Manifest of archive %s.\n", jarFile);
@@ -1031,21 +1059,26 @@
   JavaObject* loader = 0;
   llvm_gcroot(loader, 0);
   
-  if (appClassLoader == 0) {
+  if (appClassLoader == NULL) {
     UserClass* cl = upcalls->newClassLoader;
     loader = upcalls->getSystemClassLoader->invokeJavaObjectStatic(this, cl);
     appClassLoader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader,
                                                                     this);
-    if (argumentsInfo.jarFile)
+    if (argumentsInfo.jarFile) {
       appClassLoader->loadLibFromJar(this, argumentsInfo.jarFile,
                                      argumentsInfo.className);
-    else if (argumentsInfo.className)
+    } else if (argumentsInfo.className) {
       appClassLoader->loadLibFromFile(this, argumentsInfo.className);
+    }
   }
   return appClassLoader;
 }
 
 void Jnjvm::loadBootstrap() {
+  JavaObject* obj = NULL;
+  JavaObject* javaLoader = NULL;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(javaLoader, 0);
   JnjvmClassLoader* loader = bootstrapLoader;
   
   // First create system threads.
@@ -1057,8 +1090,9 @@
   
   // Initialise the bootstrap class loader if it's not
   // done already.
-  if (!bootstrapLoader->upcalls->newString)
+  if (bootstrapLoader->upcalls->newString == NULL) {
     bootstrapLoader->upcalls->initialiseClasspath(bootstrapLoader);
+  }
   
 #define LOAD_CLASS(cl) \
   cl->resolveClass(); \
@@ -1069,7 +1103,7 @@
   // placed in the hashmap. This VT will have its destructor set so
   // that the string is removed when deallocated.
   upcalls->newString->resolveClass();
-  if (!JavaString::internStringVT) {
+  if (JavaString::internStringVT == NULL) {
     JavaVirtualTable* stringVT = upcalls->newString->getVirtualVT();
     uint32 size = upcalls->newString->virtualTableSize * sizeof(uintptr_t);
     
@@ -1145,8 +1179,8 @@
 #undef LOAD_CLASS
 
   loadAppClassLoader();
-  JavaObject* obj = JavaThread::get()->currentThread();
-  JavaObject* javaLoader = appClassLoader->getJavaClassLoader();
+  obj = JavaThread::get()->currentThread();
+  javaLoader = appClassLoader->getJavaClassLoader();
 
 #ifdef SERVICE
   if (!IsolateID)
@@ -1161,9 +1195,9 @@
 }
 
 void Jnjvm::executeClass(const char* className, ArrayObject* args) {
-  JavaObject* exc = 0;
-  JavaObject* obj = 0;
-  JavaObject* group = 0;
+  JavaObject* exc = NULL;
+  JavaObject* obj = NULL;
+  JavaObject* group = NULL;
   
   llvm_gcroot(args, 0);
   llvm_gcroot(exc, 0);
@@ -1175,7 +1209,7 @@
     UserClass* cl = appClassLoader->loadClassFromSelf(this, className);
     
     // If not, load the class.
-    if (!cl) {
+    if (cl == NULL) {
       const UTF8* name = appClassLoader->asciizConstructUTF8(className);
       cl = (UserClass*)appClassLoader->loadName(name, true, true);
     }
@@ -1195,7 +1229,7 @@
   } END_CATCH;
 
   exc = JavaThread::get()->pendingException;
-  if (exc) {
+  if (exc != NULL) {
     JavaThread* th = JavaThread::get();
     th->clearException();
     obj = th->currentThread();
@@ -1212,6 +1246,7 @@
 
 void Jnjvm::executePremain(const char* className, JavaString* args,
                              JavaObject* instrumenter) {
+  llvm_gcroot(args, 0);
   llvm_gcroot(instrumenter, 0);
   TRY {
     const UTF8* name = appClassLoader->asciizConstructUTF8(className);
@@ -1242,10 +1277,10 @@
 
 void Jnjvm::mainJavaStart(JavaThread* thread) {
 
-  JavaString* str = 0;
-  JavaObject* instrumenter = 0;
-  ArrayObject* args = 0;
-  JavaObject* exc = 0;
+  JavaString* str = NULL;
+  JavaObject* instrumenter = NULL;
+  ArrayObject* args = NULL;
+  JavaObject* exc = NULL;
 
   llvm_gcroot(str, 0);
   llvm_gcroot(instrumenter, 0);
@@ -1420,8 +1455,11 @@
 }
   
 ArrayUInt16* Jnjvm::asciizToArray(const char* asciiz) {
+  ArrayUInt16* tmp = NULL;
+  llvm_gcroot(tmp, 0);
+
   uint32 size = strlen(asciiz);
-  ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
+  tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
   
   for (uint32 i = 0; i < size; i++) {
     ArrayUInt16::setElement(tmp, asciiz[i], i);

Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Fri Jun 25 13:00:09 2010
@@ -315,13 +315,15 @@
 }
 
 ArrayUInt8* JnjvmBootstrapLoader::openName(const UTF8* utf8) {
+  ArrayUInt8* res = 0;
+  llvm_gcroot(res, 0);
+
   char* asciiz = (char*)alloca(utf8->size + 1);
   for (sint32 i = 0; i < utf8->size; ++i) 
     asciiz[i] = utf8->elements[i];
   asciiz[utf8->size] = 0;
   
   uint32 alen = utf8->size;
-  ArrayUInt8* res = 0;
   
   for (std::vector<const char*>::iterator i = bootClasspath.begin(),
        e = bootClasspath.end(); i != e; ++i) {
@@ -353,15 +355,15 @@
 UserClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name,
                                               bool doResolve,
                                               JavaString* strName) {
- 
+  ArrayUInt8* bytes = NULL;
+  llvm_gcroot(bytes, 0);
   llvm_gcroot(strName, 0);
 
   UserCommonClass* cl = lookupClass(name);
   
   if (!cl) {
-    // This array is not allocated by the GC.
-    ArrayUInt8* bytes = openName(name);
-    if (bytes) {
+    bytes = openName(name);
+    if (bytes != NULL) {
       cl = constructClass(name, bytes);
     }
   }
@@ -384,7 +386,7 @@
   
   if (!cl) {
     UserClass* forCtp = loadClass;
-    if (!strName) {
+    if (strName == NULL) {
       strName = JavaString::internalToJava(name, isolate);
     }
     obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader,
@@ -843,8 +845,7 @@
   llvm_gcroot(loader, 0);
   llvm_gcroot(vmdata, 0);
   
-  if (loader == 0)
-    return vm->bootstrapLoader;
+  if (loader == NULL) return vm->bootstrapLoader;
  
   JnjvmClassLoader* JCL = 0;
   Classpath* upcalls = vm->bootstrapLoader->upcalls;
@@ -920,20 +921,24 @@
 }
 
 JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) {
-  JavaString* res = isolate->internalUTF8ToStr(val);
+  JavaString* res = NULL;
+  llvm_gcroot(res, 0);
+  res = isolate->internalUTF8ToStr(val);
   return strings->addString(this, res);
 }
 
 JavaString** JnjvmBootstrapLoader::UTF8ToStr(const UTF8* val) {
+  JavaString* res = NULL;
+  llvm_gcroot(res, 0);
   Jnjvm* vm = JavaThread::get()->getJVM();
-  JavaString* res = vm->internalUTF8ToStr(val);
+  res = vm->internalUTF8ToStr(val);
   return strings->addString(this, res);
 }
 
 void JnjvmBootstrapLoader::analyseClasspathEnv(const char* str) {
   if (str != 0) {
     unsigned int len = strlen(str);
-    char* buf = (char*)alloca(len + 1);
+    char* buf = new char[len + 1];
     const char* cur = str;
     int top = 0;
     char c = 1;
@@ -972,6 +977,7 @@
       cur = cur + top + 1;
       top = 0;
     }
+    delete[] buf;
   }
 }
 

Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h Fri Jun 25 13:00:09 2010
@@ -451,19 +451,22 @@
   /// Is the object a VMClassLoader object?
   ///
   static bool isVMClassLoader(JavaObject* obj) {
+    llvm_gcroot(obj, 0);
     return obj->getVirtualTable() == &VT;
   }
 
   /// staticTracer - Trace the internal class loader.
   ///
   static void staticTracer(VMClassLoader* obj, uintptr_t closure) {
-    if (obj->JCL) obj->JCL->tracer(closure);
+    llvm_gcroot(obj, 0);
+    if (obj->JCL != NULL) obj->JCL->tracer(closure);
   }
 
   /// ~VMClassLoader - Delete the internal class loader.
   ///
   static void staticDestructor(VMClassLoader* obj) {
-    if (obj->JCL) {
+    llvm_gcroot(obj, 0);
+    if (obj->JCL != NULL) {
       obj->JCL->~JnjvmClassLoader();
       delete &(obj->JCL->allocator);
     }

Modified: vmkit/trunk/lib/J3/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/LockedMap.h?rev=106866&r1=106865&r2=106866&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/J3/VMCore/LockedMap.h Fri Jun 25 13:00:09 2010
@@ -48,6 +48,8 @@
 {
   bool operator()(const ArrayUInt16* s1, const ArrayUInt16* s2) const
   {
+    llvm_gcroot(s1, 0);
+    llvm_gcroot(s2, 0);
     if (ArrayUInt16::getSize(s1) < ArrayUInt16::getSize(s2)) return true;
     else if (ArrayUInt16::getSize(s1) > ArrayUInt16::getSize(s2)) return false;
     else return memcmp((const char*)ArrayUInt16::getElements(s1),
@@ -87,11 +89,12 @@
   inline Container lookupOrCreate(Key& V, Meta meta, funcCreate func) {
     Container res = 0;
     IsGC::gcroot(res, 0);
+    IsGC::gcroot((void*)V, 0);
     lock.lock();
     iterator End = map.end();
     iterator I = map.find(V);
     if (I == End) {
-      Container res = func(V, meta);
+      res = func(V, meta);
       map.insert(std::make_pair(V, res));
       lock.unlock();
       return res;
@@ -102,6 +105,7 @@
   }
   
   inline void remove(Key V) {
+    IsGC::gcroot(V, 0);
     lock.lock();
     map.erase(V);
     lock.unlock();
@@ -109,6 +113,7 @@
   
   inline void remove(Key V, Container C) {
     IsGC::gcroot(C, 0);
+    IsGC::gcroot(V, 0);
     lock.lock();
     removeUnlocked(V, C); 
     lock.unlock();
@@ -116,6 +121,7 @@
   
   inline void removeUnlocked(Key V, Container C) {
     IsGC::gcroot(C, 0);
+    IsGC::gcroot((void*)V, 0);
     iterator End = map.end();
     iterator I = map.find(V);
     
@@ -124,6 +130,7 @@
   }
 
   inline Container lookup(Key V) {
+    IsGC::gcroot((void*)V, 0);
     lock.lock();
     iterator End = map.end();
     iterator I = map.find(V);
@@ -133,6 +140,7 @@
 
   inline void hash(Key k, Container c) {
     IsGC::gcroot(c, 0);
+    IsGC::gcroot(k, 0);
     lock.lock();
     map.insert(std::make_pair(k, c));
     lock.unlock();





More information about the vmkit-commits mailing list