diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-02 20:59:41 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-02 20:59:41 +0000 |
commit | 6f7d00dadbb6b75c3b73214a3b258a3f43b63258 (patch) | |
tree | 549b32af6b15702bf023898cb2c6638202d540ed /libjava | |
parent | 5d93b6ec3e3b11d61a7e92ed06ef480032f6ba60 (diff) |
PR libgcj/19681:
* Makefile.in: Rebuilt.
* Makefile.am (ordinary_java_source_files): Added new class.
* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
Use system_instance, not instance.
* gnu/gcj/runtime/SystemClassLoader.java: New file.
* gnu/gcj/runtime/VMClassLoader.java (init): Don't search
java.class.path.
(system_instance): New field.
(initialize): Initialize the system loader as well.
(VMClassLoader): Default to LIB_CACHE.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94611 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 14 | ||||
-rw-r--r-- | libjava/Makefile.am | 1 | ||||
-rw-r--r-- | libjava/Makefile.in | 8 | ||||
-rw-r--r-- | libjava/gnu/gcj/runtime/SystemClassLoader.java | 57 | ||||
-rw-r--r-- | libjava/gnu/gcj/runtime/VMClassLoader.java | 50 | ||||
-rw-r--r-- | libjava/java/lang/VMClassLoader.java | 4 | ||||
-rw-r--r-- | libjava/java/lang/natVMClassLoader.cc | 3 |
7 files changed, 101 insertions, 36 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 4ee35337ce1..31c14656ff6 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,19 @@ 2005-02-02 Tom Tromey <tromey@redhat.com> + PR libgcj/19681: + * Makefile.in: Rebuilt. + * Makefile.am (ordinary_java_source_files): Added new class. + * java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal): + Use system_instance, not instance. + * gnu/gcj/runtime/SystemClassLoader.java: New file. + * gnu/gcj/runtime/VMClassLoader.java (init): Don't search + java.class.path. + (system_instance): New field. + (initialize): Initialize the system loader as well. + (VMClassLoader): Default to LIB_CACHE. + +2005-02-02 Tom Tromey <tromey@redhat.com> + * gnu/gcj/runtime/PersistentByteMap.java: Fixed typo. * prims.cc: Fixed comment. diff --git a/libjava/Makefile.am b/libjava/Makefile.am index d7465d8a95c..a3ad469f3e1 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -2872,6 +2872,7 @@ gnu/gcj/runtime/SharedLibHelper.java \ gnu/gcj/runtime/SharedLibLoader.java \ gnu/gcj/runtime/StackTrace.java \ gnu/gcj/runtime/StringBuffer.java \ +gnu/gcj/runtime/SystemClassLoader.java \ gnu/gcj/runtime/VMClassLoader.java \ gnu/gcj/util/Debug.java \ gnu/java/io/ASN1ParsingException.java \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index ae0d981fd4c..cf43aceabbe 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -557,6 +557,7 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc exception.cc link.cc \ gnu/gcj/runtime/SharedLibLoader.java \ gnu/gcj/runtime/StackTrace.java \ gnu/gcj/runtime/StringBuffer.java \ + gnu/gcj/runtime/SystemClassLoader.java \ gnu/gcj/runtime/VMClassLoader.java gnu/gcj/util/Debug.java \ gnu/java/io/ASN1ParsingException.java \ gnu/java/io/Base64InputStream.java \ @@ -3863,6 +3864,7 @@ am__objects_15 = $(am__objects_9) gnu/classpath/ServiceFactory.lo \ gnu/gcj/runtime/SharedLibHelper.lo \ gnu/gcj/runtime/SharedLibLoader.lo \ gnu/gcj/runtime/StackTrace.lo gnu/gcj/runtime/StringBuffer.lo \ + gnu/gcj/runtime/SystemClassLoader.lo \ gnu/gcj/runtime/VMClassLoader.lo gnu/gcj/util/Debug.lo \ gnu/java/io/ASN1ParsingException.lo \ gnu/java/io/Base64InputStream.lo \ @@ -7064,6 +7066,7 @@ gnu/gcj/runtime/SharedLibHelper.java \ gnu/gcj/runtime/SharedLibLoader.java \ gnu/gcj/runtime/StackTrace.java \ gnu/gcj/runtime/StringBuffer.java \ +gnu/gcj/runtime/SystemClassLoader.java \ gnu/gcj/runtime/VMClassLoader.java \ gnu/gcj/util/Debug.java \ gnu/java/io/ASN1ParsingException.java \ @@ -9334,6 +9337,8 @@ gnu/gcj/runtime/StackTrace.lo: gnu/gcj/runtime/$(am__dirstamp) \ gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp) gnu/gcj/runtime/StringBuffer.lo: gnu/gcj/runtime/$(am__dirstamp) \ gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp) +gnu/gcj/runtime/SystemClassLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \ + gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp) gnu/gcj/runtime/VMClassLoader.lo: gnu/gcj/runtime/$(am__dirstamp) \ gnu/gcj/runtime/$(DEPDIR)/$(am__dirstamp) gnu/gcj/util/Debug.lo: gnu/gcj/util/$(am__dirstamp) \ @@ -15834,6 +15839,8 @@ mostlyclean-compile: -rm -f gnu/gcj/runtime/StackTrace.lo -rm -f gnu/gcj/runtime/StringBuffer.$(OBJEXT) -rm -f gnu/gcj/runtime/StringBuffer.lo + -rm -f gnu/gcj/runtime/SystemClassLoader.$(OBJEXT) + -rm -f gnu/gcj/runtime/SystemClassLoader.lo -rm -f gnu/gcj/runtime/VMClassLoader.$(OBJEXT) -rm -f gnu/gcj/runtime/VMClassLoader.lo -rm -f gnu/gcj/runtime/natFinalizerThread.$(OBJEXT) @@ -21293,6 +21300,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/SharedLibLoader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/StackTrace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/StringBuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/SystemClassLoader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/VMClassLoader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natFinalizerThread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/runtime/$(DEPDIR)/natNameFinder.Plo@am__quote@ diff --git a/libjava/gnu/gcj/runtime/SystemClassLoader.java b/libjava/gnu/gcj/runtime/SystemClassLoader.java new file mode 100644 index 00000000000..163d3dd84d7 --- /dev/null +++ b/libjava/gnu/gcj/runtime/SystemClassLoader.java @@ -0,0 +1,57 @@ +/* Copyright (C) 2005 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package gnu.gcj.runtime; + +import java.io.*; +import java.util.StringTokenizer; +import java.util.HashSet; +import java.net.URL; +import java.net.URLClassLoader; + +public final class SystemClassLoader extends URLClassLoader +{ + SystemClassLoader(ClassLoader parent) + { + super(new URL[0], parent); + } + + // We add the URLs to the system class loader late. The reason for + // this is that during bootstrap we don't want to parse URLs or + // create URL connections, since that will result in circularities + // causing a crash. + void init() + { + StringTokenizer st + = new StringTokenizer (System.getProperty ("java.class.path", "."), + File.pathSeparator); + while (st.hasMoreElements ()) + { + String e = st.nextToken (); + try + { + if ("".equals(e)) + e = "."; + + File path = new File(e); + // Ignore invalid paths. + if (!path.exists()) + continue; + if (!e.endsWith (File.separator) && path.isDirectory ()) + addURL(new URL("file", "", -1, e + File.separator)); + else + addURL(new URL("file", "", -1, e)); + } + catch (java.net.MalformedURLException x) + { + // This should never happen. + throw new RuntimeException(x); + } + } + } +} diff --git a/libjava/gnu/gcj/runtime/VMClassLoader.java b/libjava/gnu/gcj/runtime/VMClassLoader.java index 2d46ebcb770..1ded892a06d 100644 --- a/libjava/gnu/gcj/runtime/VMClassLoader.java +++ b/libjava/gnu/gcj/runtime/VMClassLoader.java @@ -14,8 +14,12 @@ import java.io.*; import java.util.StringTokenizer; import java.util.HashSet; import java.net.URL; +import java.net.URLClassLoader; -public final class VMClassLoader extends java.net.URLClassLoader +// Despite its name, this class is really the extension loader for +// libgcj. Class loader bootstrap is a bit tricky, see prims.cc and +// SystemClassLoader for some details. +public final class VMClassLoader extends URLClassLoader { private VMClassLoader () { @@ -28,44 +32,17 @@ public final class VMClassLoader extends java.net.URLClassLoader else if ("cache".equals(p)) lib_control = LIB_CACHE; else if ("full".equals(p)) - { - // In case we ever want to change the default. - lib_control = LIB_FULL; - } - else lib_control = LIB_FULL; + else + lib_control = LIB_CACHE; } private void init() { - StringTokenizer st - = new StringTokenizer (System.getProperty ("java.class.path", "."), - System.getProperty ("path.separator", ":")); - - while (st.hasMoreElements ()) - { - String e = st.nextToken (); - try - { - File path = new File(e); - // Ignore invalid paths. - if (!path.exists()) - continue; - if (!e.endsWith (File.separator) && path.isDirectory ()) - addURL(new URL("file", "", -1, e + File.separator)); - else - addURL(new URL("file", "", -1, e)); - } - catch (java.net.MalformedURLException x) - { - // This should never happen. - throw new RuntimeException(x); - } - } - // Add the contents of the extensions directories. - st = new StringTokenizer (System.getProperty ("java.ext.dirs"), - System.getProperty ("path.separator", ":")); + StringTokenizer st + = new StringTokenizer (System.getProperty ("java.ext.dirs"), + File.pathSeparator); try { @@ -91,8 +68,8 @@ public final class VMClassLoader extends java.net.URLClassLoader } } - // Add core:/ to the end of the java.class.path so any resources - // compiled into this executable may be found. + // Add core:/ to the end so any resources compiled into this + // executable may be found. addURL(new URL("core", "", -1, "/")); } catch (java.net.MalformedURLException x) @@ -116,6 +93,7 @@ public final class VMClassLoader extends java.net.URLClassLoader static void initialize () { instance.init(); + system_instance.init(); } // Define a package for something loaded natively. @@ -148,6 +126,8 @@ public final class VMClassLoader extends java.net.URLClassLoader // The only VMClassLoader that can exist. static VMClassLoader instance = new VMClassLoader(); + // The system class loader. + static SystemClassLoader system_instance = new SystemClassLoader(instance); private static final int LIB_FULL = 0; private static final int LIB_CACHE = 1; diff --git a/libjava/java/lang/VMClassLoader.java b/libjava/java/lang/VMClassLoader.java index 1afda4570ea..e21bb649542 100644 --- a/libjava/java/lang/VMClassLoader.java +++ b/libjava/java/lang/VMClassLoader.java @@ -40,15 +40,19 @@ package java.lang; import gnu.java.util.EmptyEnumeration; import java.lang.reflect.Constructor; +import java.io.File; import java.io.IOException; import java.net.URL; +import java.net.URLClassLoader; import java.security.AllPermission; import java.security.Permission; import java.security.Permissions; import java.security.ProtectionDomain; +import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; +import java.util.StringTokenizer; /** * java.lang.VMClassLoader is a package-private helper for VMs to implement diff --git a/libjava/java/lang/natVMClassLoader.cc b/libjava/java/lang/natVMClassLoader.cc index e34be99296d..cd98e7e4561 100644 --- a/libjava/java/lang/natVMClassLoader.cc +++ b/libjava/java/lang/natVMClassLoader.cc @@ -24,6 +24,7 @@ details. */ #include <java/lang/VMClassLoader.h> #include <java/lang/VMCompiler.h> #include <gnu/gcj/runtime/VMClassLoader.h> +#include <gnu/gcj/runtime/SystemClassLoader.h> #include <java/lang/ClassLoader.h> #include <java/lang/Class.h> #include <java/lang/Throwable.h> @@ -114,7 +115,7 @@ java::lang::ClassLoader * java::lang::VMClassLoader::getSystemClassLoaderInternal() { _Jv_InitClass (&gnu::gcj::runtime::VMClassLoader::class$); - return gnu::gcj::runtime::VMClassLoader::instance; + return gnu::gcj::runtime::VMClassLoader::system_instance; } jclass |