[vmkit-commits] [vmkit] r100929 - /vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Apr 10 09:15:40 PDT 2010


Author: geoffray
Date: Sat Apr 10 11:15:40 2010
New Revision: 100929

URL: http://llvm.org/viewvc/llvm-project?rev=100929&view=rev
Log:
Do a try catch on loadBootstrap so that we can debug if something went wrong.


Modified:
    vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp

Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=100929&r1=100928&r2=100929&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sat Apr 10 11:15:40 2010
@@ -1235,41 +1235,51 @@
   JavaString* str = 0;
   JavaObject* instrumenter = 0;
   ArrayObject* args = 0;
+  JavaObject* exc = 0;
 
   llvm_gcroot(str, 0);
   llvm_gcroot(instrumenter, 0);
   llvm_gcroot(args, 0);
+  llvm_gcroot(exc, 0);
 
   Jnjvm* vm = thread->getJVM();
   vm->mainThread = thread;
 
-  vm->loadBootstrap();
+  try {
+    vm->loadBootstrap();
+  } catch (...) {
+    exc = JavaThread::get()->pendingException;
+  }
 
+  if (exc != NULL) {
+    assert(exc && "No Java exception");
+    fprintf(stderr, "Exception %s while bootstraping VM",
+        UTF8Buffer(exc->getClass()->name).cString());
+  } else {
 #ifdef SERVICE
-  thread->ServiceException = vm->upcalls->newThrowable->doNew(vm);
+    thread->ServiceException = vm->upcalls->newThrowable->doNew(vm);
 #endif
 
-  ClArgumentsInfo& info = vm->argumentsInfo;
+    ClArgumentsInfo& info = vm->argumentsInfo;
   
-  if (info.agents.size()) {
-    assert(0 && "implement me");
-    instrumenter = 0;//createInstrumenter();
-    for (std::vector< std::pair<char*, char*> >::iterator i = 
-                                                info.agents.begin(),
-            e = info.agents.end(); i!= e; ++i) {
-      str = vm->asciizToStr(i->second);
-      vm->executePremain(i->first, str, instrumenter);
+    if (info.agents.size()) {
+      assert(0 && "implement me");
+      instrumenter = 0;//createInstrumenter();
+      for (std::vector< std::pair<char*, char*> >::iterator i = 
+           info.agents.begin(), e = info.agents.end(); i!= e; ++i) {
+        str = vm->asciizToStr(i->second);
+        vm->executePremain(i->first, str, instrumenter);
+      }
     }
-  }
     
-  UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfString;
-  args = (ArrayObject*)array->doNew(info.argc - 2, vm);
-  for (int i = 2; i < info.argc; ++i) {
-    args->elements[i - 2] = (JavaObject*)vm->asciizToStr(info.argv[i]);
-  }
+    UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfString;
+    args = (ArrayObject*)array->doNew(info.argc - 2, vm);
+    for (int i = 2; i < info.argc; ++i) {
+      args->elements[i - 2] = (JavaObject*)vm->asciizToStr(info.argv[i]);
+    }
 
-  vm->executeClass(info.className, args);
-  
+    vm->executeClass(info.className, args);
+  }
   vm->threadSystem.nonDaemonLock.lock();
   --(vm->threadSystem.nonDaemonThreads);
   if (vm->threadSystem.nonDaemonThreads == 0)





More information about the vmkit-commits mailing list