]> gcc.gnu.org Git - gcc.git/commitdiff
prims.cc (_Jv_Abort): Always print error message using fprintf, don't try to allocate.
authorBryce McKinlay <bryce@waitaki.otago.ac.nz>
Tue, 23 Oct 2001 05:42:03 +0000 (05:42 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Tue, 23 Oct 2001 05:42:03 +0000 (06:42 +0100)
        * prims.cc (_Jv_Abort): Always print error message using fprintf,
        don't try to allocate.
        (_Jv_CreateJavaVM): Set gcj::runTimeInitialized.
        * include/jvm.h (gcj::runTimeInitialized): New variable declaration.
        * java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault): Handle
        duplicate class registration with JvFail if the runtime hasn't been
        initialized yet.

From-SVN: r46424

libjava/ChangeLog
libjava/include/jvm.h
libjava/java/lang/natClassLoader.cc
libjava/prims.cc

index ba393cc9e697c5f86adf85defb682e4000f6a40c..8cb0dab502a3a4a19bbba0b13bcc594ebff7683f 100644 (file)
@@ -1,3 +1,13 @@
+2001-10-23  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+       * prims.cc (_Jv_Abort): Always print error message using fprintf,
+       don't try to allocate.
+       (_Jv_CreateJavaVM): Set gcj::runTimeInitialized.
+       * include/jvm.h (gcj::runTimeInitialized): New variable declaration.
+       * java/lang/natClassLoader.cc (_Jv_RegisterClassHookDefault): Handle
+       duplicate class registration with JvFail if the runtime hasn't been
+       initialized yet.
+
 2001-10-22  Tom Tromey  <tromey@redhat.com>
 
        * java/util/GregorianCalendar.java (getGregorianChange): Removed
index bb54c8b58d883bf929bf4393e7ef19c0f62cc1a7..858d960bf201685a93112efc904cbddf519f05e5 100644 (file)
@@ -131,6 +131,9 @@ namespace gcj
   extern _Jv_Utf8Const *clinit_name;    /* "<clinit>" */
   extern _Jv_Utf8Const *init_name;      /* "<init>" */
   extern _Jv_Utf8Const *finit_name;     /* "finit$", */
+  
+  /* Set to true by _Jv_CreateJavaVM. */
+  extern bool runtimeInitialized;
 };
 
 /* Type of pointer used as finalizer.  */
index 3c2679bd8b4367d78191a0c93ae15a6191657945..d92a90c8b8c618c02edc26c7a06d894f40c7830f 100644 (file)
@@ -14,6 +14,7 @@ details.  */
 
 #include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 
 #include <gcj/cni.h>
 #include <jvm.h>
@@ -452,7 +453,17 @@ _Jv_RegisterClassHookDefault (jclass klass)
        {
          // If you get this, it means you have the same class in two
          // different libraries.
-         throw new java::lang::VirtualMachineError (JvNewStringLatin1 ("class registered twice"));
+         char *message;
+         asprintf (&message, "Duplicate class registration: %s", 
+                   klass->name->data);
+         if (! gcj::runtimeInitialized)
+           JvFail (message);
+         else
+           {
+             java::lang::String *str = JvNewStringLatin1 (message);
+             free (message);
+             throw new java::lang::VirtualMachineError (str);
+           }
        }
 
       check_class = check_class->next;
index 7b3dd6c6a005e0ddbac6622ca7b1e79c43429d77..f2f2d6578a2378ecd5508a94306af030372a0982 100644 (file)
@@ -299,10 +299,7 @@ _Jv_Abort (const char *, const char *, int, const char *message)
           "libgcj failure: %s\n   in function %s, file %s, line %d\n",
           message, function, file, line);
 #else
-  java::io::PrintStream *err = java::lang::System::err;
-  err->print(JvNewStringLatin1 ("libgcj failure: "));
-  err->println(JvNewStringLatin1 (message));
-  err->flush();
+  fprintf (stderr, "libgcj failure: %s\n", message);
 #endif
   abort ();
 }
@@ -872,6 +869,8 @@ namespace gcj
   _Jv_Utf8Const *clinit_name;
   _Jv_Utf8Const *init_name;
   _Jv_Utf8Const *finit_name;
+  
+  bool runtimeInitialized = false;
 }
 
 jint
@@ -879,12 +878,10 @@ _Jv_CreateJavaVM (void* /*vm_args*/)
 {
   using namespace gcj;
   
-  static bool init = false;
-
-  if (init)
+  if (runtimeInitialized)
     return -1;
 
-  init = true;
+  runtimeInitialized = true;
 
   PROCESS_GCJ_PROPERTIES;
 
This page took 0.503295 seconds and 5 git commands to generate.