[vmkit-commits] [vmkit] r71948 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaRuntimeJIT.cpp Jni.cpp Jnjvm.cpp Jnjvm.h JnjvmClassLoader.cpp Reader.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat May 16 07:02:40 PDT 2009


Author: geoffray
Date: Sat May 16 09:02:40 2009
New Revision: 71948

URL: http://llvm.org/viewvc/llvm-project?rev=71948&view=rev
Log:
No more unknown errors! Just aborts because we haven't verified the
class file when it's loaded and that's bad.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sat May 16 09:02:40 2009
@@ -651,8 +651,10 @@
       const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]);
       InitField(obj, (JavaObject*)ctpInfo->resolveString(utf8, idx));
     } else {
-      JavaThread::get()->getJVM()->
-        unknownError("unknown constant %s\n", type->printString());
+      fprintf(stderr, "I haven't verified your class file and it's malformed:"
+                      " unknown constant %s!\n",
+                      type->printString());
+      abort();
     }
   } 
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Sat May 16 09:02:40 2009
@@ -295,26 +295,23 @@
 // Throws if one of the dimension is negative.
 static JavaArray* multiCallNewIntern(UserClassArray* cl, uint32 len,
                                      sint32* dims, Jnjvm* vm) {
-  if (len <= 0) JavaThread::get()->getJVM()->unknownError("Can not happen");
+  assert(len <= 0 && "Negative size given by VMKit");
   JavaArray* _res = cl->doNew(dims[0], vm);
   if (len > 1) {
     ArrayObject* res = (ArrayObject*)_res;
     UserCommonClass* _base = cl->baseClass();
-    if (_base->isArray()) {
-      UserClassArray* base = (UserClassArray*)_base;
-      if (dims[0] > 0) {
-        for (sint32 i = 0; i < dims[0]; ++i) {
-          res->elements[i] = multiCallNewIntern(base, (len - 1),
-                                                &dims[1], vm);
-        }
-      } else {
-        for (uint32 i = 1; i < len; ++i) {
-          sint32 p = dims[i];
-          if (p < 0) JavaThread::get()->getJVM()->negativeArraySizeException(p);
-        }
+    assert(_base->isArray() && "Base class not an array");
+    UserClassArray* base = (UserClassArray*)_base;
+    if (dims[0] > 0) {
+      for (sint32 i = 0; i < dims[0]; ++i) {
+        res->elements[i] = multiCallNewIntern(base, (len - 1),
+                                              &dims[1], vm);
       }
     } else {
-      JavaThread::get()->getJVM()->unknownError("Can not happen");
+      for (uint32 i = 1; i < len; ++i) {
+        sint32 p = dims[i];
+        if (p < 0) JavaThread::get()->getJVM()->negativeArraySizeException(p);
+      }
     }
   }
   return _res;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Sat May 16 09:02:40 2009
@@ -92,9 +92,6 @@
     return (jmethodID)((JavaObjectMethod*)meth)->getInternalMethod();
   } else if (cl == upcalls->newMethod) {
     return (jmethodID)((JavaObjectConstructor*)meth)->getInternalMethod();
-  } else {
-    vm->unknownError("Not a constructor or a method: %s",
-                     meth->getClass()->printString());
   }
   
   END_JNI_EXCEPTION
@@ -217,7 +214,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   UserCommonClass* cl = 
     UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
-  if (cl->isArray()) JavaThread::get()->getJVM()->unknownError("implement me");
+  if (cl->isArray()) return 0;
+
   return (jobject)((UserClass*)cl)->doNew(JavaThread::get()->getJVM());
 
   END_JNI_EXCEPTION

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Sat May 16 09:02:40 2009
@@ -574,12 +574,6 @@
 }
 
 
-void Jnjvm::unknownError(const char* fmt, ...) {
-  error(upcalls->UnknownError,
-        upcalls->InitUnknownError,  
-        fmt);
-}
-
 void Jnjvm::classFormatError(const char* msg, ...) {
   error(upcalls->ClassFormatError,
         upcalls->InitClassFormatError,

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=71948&r1=71947&r2=71948&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Sat May 16 09:02:40 2009
@@ -275,7 +275,6 @@
   void noClassDefFoundError(const UTF8* name);
   void classNotFoundException(JavaString* str);
 
-  void unknownError(const char* fmt, ...); 
   void classFormatError(const char* fmt, ...);
   
   /// asciizToStr - Constructs a java/lang/String object from the given asciiz.

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sat May 16 09:02:40 2009
@@ -378,7 +378,8 @@
   if (!cl && doThrow) {
     Jnjvm* vm = JavaThread::get()->getJVM();
     if (name->equals(bootstrapLoader->NoClassDefFoundError)) {
-      vm->unknownError("Unable to load NoClassDefFoundError");
+      fprintf(stderr, "Unable to load NoClassDefFoundError");
+      abort();
     }
     vm->noClassDefFoundError(name);
   }
@@ -686,12 +687,11 @@
 
 static void typeError(const UTF8* name, short int l) {
   if (l != 0) {
-    JavaThread::get()->getJVM()->
-      unknownError("wrong type %d in %s", l, name->printString());
+    fprintf(stderr, "wrong type %d in %s", l, name->printString());
   } else {
-    JavaThread::get()->getJVM()->
-      unknownError("wrong type %s", name->printString());
+    fprintf(stderr, "wrong type %s", name->printString());
   }
+  abort();
 }
 
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Sat May 16 09:02:40 2009
@@ -65,8 +65,7 @@
   else if (from == SeekEnd) n = end + pos;
   
 
-  if ((n < start) || (n > end))
-    JavaThread::get()->getJVM()->unknownError("out of range %d %d", n, end);
+  assert(n >= start && n <= end && "out of range");
 
   cursor = n;
 }





More information about the vmkit-commits mailing list