Minor CheckJNI tweak.

Check for "L;" class names, e.g. "Ljava/lang/String;", in CheckJNI.  If
we see one passed in, give a specific failure message instead of just
allowing the inevitable NoClassDefFoundError to propagate back.

Also, add a message string to the pre-formed NoClassDefFoundError used
by the bootstrap class loader so that it's obvious where it comes from.
diff --git a/vm/CheckJni.c b/vm/CheckJni.c
index c87e20e..ff75770 100644
--- a/vm/CheckJni.c
+++ b/vm/CheckJni.c
@@ -682,10 +682,12 @@
     /* quick check for illegal chars */
     cp = className;
     while (*cp != '\0') {
-        if (*cp == '.')
+        if (*cp == '.')     /* catch "java.lang.String" */
             goto fail;
         cp++;
     }
+    if (*(cp-1) == ';' && *className == 'L')
+        goto fail;         /* catch "Ljava/lang/String;" */
 
     // TODO: need a more rigorous check here
 
@@ -693,6 +695,7 @@
 
 fail:
     LOGW("JNI WARNING: illegal class name '%s' (%s)\n", className, func);
+    LOGW("             (should be formed like 'java/lang/String')\n");
     abortMaybe();
 }
 
diff --git a/vm/alloc/Alloc.c b/vm/alloc/Alloc.c
index 0961520..1bbf679 100644
--- a/vm/alloc/Alloc.c
+++ b/vm/alloc/Alloc.c
@@ -140,7 +140,8 @@
         "[pre-allocated]");
     dvmReleaseTrackedAlloc(gDvm.internalErrorObj, NULL);
     gDvm.noClassDefFoundErrorObj =
-        createStockException("Ljava/lang/NoClassDefFoundError;", NULL);
+        createStockException("Ljava/lang/NoClassDefFoundError;",
+            "[generic]");
     dvmReleaseTrackedAlloc(gDvm.noClassDefFoundErrorObj, NULL);
 
     if (gDvm.outOfMemoryObj == NULL || gDvm.internalErrorObj == NULL ||