re PR libgcj/19681 (extension loading currently incorrect)
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. From-SVN: r94611
This commit is contained in:
parent
7ded35b4c2
commit
6d27fe75d0
7 changed files with 101 additions and 36 deletions
|
@ -1,3 +1,17 @@
|
|||
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.
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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@
|
||||
|
|
57
libjava/gnu/gcj/runtime/SystemClassLoader.java
Normal file
57
libjava/gnu/gcj/runtime/SystemClassLoader.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue