From: Nathan Bryant Date: Wed, 14 Jan 2004 22:49:58 +0000 (+0000) Subject: re PR libgcj/12001 (_Jv_FindClass dumps core when Oracle's classes12.zip in $CLASSPATH) X-Git-Tag: releases/gcc-3.4.0~971 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=092b50e2d7faa1cf0441da77a0d2d72a983276b1;p=thirdparty%2Fgcc.git re PR libgcj/12001 (_Jv_FindClass dumps core when Oracle's classes12.zip in $CLASSPATH) PR libgcj/12001: * gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Pass empty array to superclass. (init): Changed interface; add URLs here. (initialize): New static method. * prims.cc (_Jv_CreateJavaVM): Initialize ClassLoader here... (_Jv_RunMain): ... not here. Co-Authored-By: Tom Tromey From-SVN: r75889 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6481570d7e1d..93a8f8ba4e2e 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,14 @@ +2004-01-14 Nathan Bryant + Tom Tromey + + PR libgcj/12001: + * gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Pass empty + array to superclass. + (init): Changed interface; add URLs here. + (initialize): New static method. + * prims.cc (_Jv_CreateJavaVM): Initialize ClassLoader here... + (_Jv_RunMain): ... not here. + 2004-01-14 Michael Koch * java/text/MessageFormat.java: @@ -8,7 +19,7 @@ * java/awt/EventQueue.java (isDispatchThread): Do check on top of stack. (push): Make sure push is performed at the top of the thread stack. - + 2004-01-13 Thomas Fitzsimmons * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java, diff --git a/libjava/gnu/gcj/runtime/VMClassLoader.java b/libjava/gnu/gcj/runtime/VMClassLoader.java index c5cb056570fe..3eabd73d4318 100644 --- a/libjava/gnu/gcj/runtime/VMClassLoader.java +++ b/libjava/gnu/gcj/runtime/VMClassLoader.java @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation +/* Copyright (C) 1999, 2001, 2002, 2003, 2004 Free Software Foundation This file is part of libgcj. @@ -19,7 +19,7 @@ public final class VMClassLoader extends java.net.URLClassLoader { private VMClassLoader () { - super (init()); + super (new URL[0]); String p = System.getProperty ("gnu.gcj.runtime.VMClassLoader.library_control", ""); @@ -36,22 +36,21 @@ public final class VMClassLoader extends java.net.URLClassLoader lib_control = LIB_FULL; } - private static URL[] init() + private void init() { StringTokenizer st = new StringTokenizer (System.getProperty ("java.class.path", "."), System.getProperty ("path.separator", ":")); - java.util.Vector p = new java.util.Vector(); while (st.hasMoreElements ()) { String e = st.nextToken (); try { if (!e.endsWith (File.separator) && new File (e).isDirectory ()) - p.addElement (new URL("file", "", -1, e + File.separator)); + addURL(new URL("file", "", -1, e + File.separator)); else - p.addElement (new URL("file", "", -1, e)); + addURL(new URL("file", "", -1, e)); } catch (java.net.MalformedURLException x) { @@ -62,16 +61,12 @@ public final class VMClassLoader extends java.net.URLClassLoader // compiled into this executable may be found. try { - p.addElement (new URL("core", "", -1, "/")); + addURL(new URL("core", "", -1, "/")); } catch (java.net.MalformedURLException x) { // This should never happen. } - - URL[] urls = new URL[p.size()]; - p.copyInto (urls); - return urls; } /** This is overridden to search the internal hash table, which @@ -82,6 +77,13 @@ public final class VMClassLoader extends java.net.URLClassLoader protected native Class findClass(String name) throws java.lang.ClassNotFoundException; + // This can be package-private because we only call it from native + // code during startup. + static void initialize () + { + instance.init(); + } + // This keeps track of shared libraries we've already tried to load. private HashSet tried_libraries = new HashSet(); diff --git a/libjava/prims.cc b/libjava/prims.cc index 26e88329ed53..06791d388f39 100644 --- a/libjava/prims.cc +++ b/libjava/prims.cc @@ -1,6 +1,6 @@ // prims.cc - Code for core of runtime environment. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation This file is part of libgcj. @@ -927,15 +927,24 @@ _Jv_CreateJavaVM (void* /*vm_args*/) _Jv_InitClass (&java::lang::VMThrowable::class$); java::lang::VMThrowable::trace_enabled = 0; + // We have to initialize this fairly early, to avoid circular class + // initialization. In particular we want to start the + // initialization of ClassLoader before we start the initialization + // of VMClassLoader. + _Jv_InitClass (&java::lang::ClassLoader::class$); + // Once the bootstrap loader is in place, change it into a kind of + // system loader, by having it read the class path. + gnu::gcj::runtime::VMClassLoader::initialize(); + INIT_SEGV; #ifdef HANDLE_FPE INIT_FPE; #endif no_memory = new java::lang::OutOfMemoryError; - + java::lang::VMThrowable::trace_enabled = 1; - + #ifdef USE_LTDL LTDL_SET_PRELOADED_SYMBOLS (); #endif @@ -988,12 +997,6 @@ _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, arg_vec = JvConvertArgv (argc - 1, argv + 1); #endif - // We have to initialize this fairly early, to avoid circular - // class initialization. In particular we want to start the - // initialization of ClassLoader before we start the - // initialization of VMClassLoader. - _Jv_InitClass (&java::lang::ClassLoader::class$); - using namespace gnu::gcj::runtime; if (klass) main_thread = new FirstThread (klass, arg_vec);