gcj.texi (Code Generation): Document -fbootstrap-classes.

gcc/java:
	* gcj.texi (Code Generation): Document -fbootstrap-classes.
	* decl.c (GCJ_BOOTSTRAP_LOADER_ADDITION): New macro.
	(parse_version): Use it.
	* lang.opt (-fbootstrap-classes): New option.
libjava:
	* external/w3c_dom/Makefile.in: Rebuilt.
	* external/w3c_dom/Makefile.am (libw3c_gcj_la_GCJFLAGS): Added
	-fbootstrap-classes.
	* external/sax/Makefile.in: Rebuilt.
	* external/sax/Makefile.am (libsax_gcj_la_GCJFLAGS): Added
	-fbootstrap-classes.
	* java/lang/Class.h (_Jv_CopyClassesToSystemLoader): Declare as
	friend.
	* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
	Call _Jv_CopyClassesToSystemLoader.
	* java/lang/natClassLoader.cc (system_class_list): New global.
	(_Jv_RegisterClassHookDefault): Handle bootstrap and system
	classes differently.
	(_Jv_CopyClassesToSystemLoader): New function.
	(SYSTEM_LOADER_INITIALIZED): New define.
	* include/jvm.h (GCJ_BOOTSTRAP_LOADER_ADDITION): New define.
	(_Jv_CheckABIVersion): Use it.
	(_Jv_ClassForBootstrapLoader): New function.
	* Makefile.in: Rebuilt.
	* Makefile.am (AM_GCJFLAGS): Added -fbootstrap-classes.

From-SVN: r99604
This commit is contained in:
Tom Tromey
2005-05-12 01:27:15 +00:00
committed by Tom Tromey
parent cd0b240bf1
commit cca1655eab
15 changed files with 112 additions and 12 deletions
+23
View File
@@ -1,3 +1,26 @@
2005-05-11 Tom Tromey <tromey@redhat.com>
* external/w3c_dom/Makefile.in: Rebuilt.
* external/w3c_dom/Makefile.am (libw3c_gcj_la_GCJFLAGS): Added
-fbootstrap-classes.
* external/sax/Makefile.in: Rebuilt.
* external/sax/Makefile.am (libsax_gcj_la_GCJFLAGS): Added
-fbootstrap-classes.
* java/lang/Class.h (_Jv_CopyClassesToSystemLoader): Declare as
friend.
* java/lang/natVMClassLoader.cc (getSystemClassLoaderInternal):
Call _Jv_CopyClassesToSystemLoader.
* java/lang/natClassLoader.cc (system_class_list): New global.
(_Jv_RegisterClassHookDefault): Handle bootstrap and system
classes differently.
(_Jv_CopyClassesToSystemLoader): New function.
(SYSTEM_LOADER_INITIALIZED): New define.
* include/jvm.h (GCJ_BOOTSTRAP_LOADER_ADDITION): New define.
(_Jv_CheckABIVersion): Use it.
(_Jv_ClassForBootstrapLoader): New function.
* Makefile.in: Rebuilt.
* Makefile.am (AM_GCJFLAGS): Added -fbootstrap-classes.
2005-05-10 Tom Tromey <tromey@redhat.com>
* gcj/javaprims.h: Updated.
+1 -1
View File
@@ -204,7 +204,7 @@ AM_GCJFLAGS = \
@LIBGCJ_JAVAFLAGS@ \
-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
--encoding=UTF-8 \
-Wno-deprecated
-Wno-deprecated -fbootstrap-classes
if USING_GCC
AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
+1 -1
View File
@@ -4634,7 +4634,7 @@ AM_GCJFLAGS = \
@LIBGCJ_JAVAFLAGS@ \
-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
--encoding=UTF-8 \
-Wno-deprecated
-Wno-deprecated -fbootstrap-classes
@USING_GCC_FALSE@AM_CFLAGS = @LIBGCJ_CFLAGS@
@USING_GCC_TRUE@AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
+1 -1
View File
@@ -35,7 +35,7 @@ mostlyclean-local:
noinst_LTLIBRARIES = libsax-gcj.la
libsax_gcj_la_SOURCES = sax.jar
libsax_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
libsax_gcj_la_GCJFLAGS = -findirect-dispatch -fbootstrap-classes $(AM_GCJFLAGS)
source_files = \
org/xml/sax/SAXNotSupportedException.java \
+1 -1
View File
@@ -314,7 +314,7 @@ AM_GCJFLAGS = \
BUILT_SOURCES = classes.stamp
noinst_LTLIBRARIES = libsax-gcj.la
libsax_gcj_la_SOURCES = sax.jar
libsax_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
libsax_gcj_la_GCJFLAGS = -findirect-dispatch -fbootstrap-classes $(AM_GCJFLAGS)
source_files = \
org/xml/sax/SAXNotSupportedException.java \
org/xml/sax/helpers/NamespaceSupport.java \
+1 -1
View File
@@ -35,7 +35,7 @@ mostlyclean-local:
noinst_LTLIBRARIES = libw3c-gcj.la
libw3c_gcj_la_SOURCES = w3c.jar
libw3c_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
libw3c_gcj_la_GCJFLAGS = -findirect-dispatch -fbootstrap-classes $(AM_GCJFLAGS)
source_files = \
org/w3c/dom/xpath/XPathNamespace.java \
+1 -1
View File
@@ -314,7 +314,7 @@ AM_GCJFLAGS = \
BUILT_SOURCES = classes.stamp
noinst_LTLIBRARIES = libw3c-gcj.la
libw3c_gcj_la_SOURCES = w3c.jar
libw3c_gcj_la_GCJFLAGS = -findirect-dispatch $(AM_GCJFLAGS)
libw3c_gcj_la_GCJFLAGS = -findirect-dispatch -fbootstrap-classes $(AM_GCJFLAGS)
source_files = \
org/w3c/dom/xpath/XPathNamespace.java \
org/w3c/dom/xpath/XPathResult.java \
+12 -3
View File
@@ -565,6 +565,7 @@ extern void _Jv_RegisterBootstrapPackages ();
// This is used to find ABI versions we recognize.
#define GCJ_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 10)
#define GCJ_BINARYCOMPAT_ADDITION 5
#define GCJ_BOOTSTRAP_LOADER_ADDITION 1
// At present we know we are compatible with the BC ABI as used in GCC
// 4.0.
@@ -573,10 +574,18 @@ extern void _Jv_RegisterBootstrapPackages ();
inline bool
_Jv_CheckABIVersion (unsigned long value)
{
// Recognize our defined C++ ABI.
// Recognize our defined C++ ABIs.
return (value == GCJ_VERSION
// At the moment this is the only BC ABI we recognize.
|| value == GCJ_40_BC_ABI_VERSION);
|| value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|| value == GCJ_40_BC_ABI_VERSION
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
}
inline bool
_Jv_ClassForBootstrapLoader (unsigned long value)
{
return (value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
}
// It makes the source cleaner if we simply always define this
+4
View File
@@ -236,6 +236,8 @@ jclass _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader);
jboolean _Jv_IsInterpretedClass (jclass);
void _Jv_CopyClassesToSystemLoader (java::lang::ClassLoader *);
#ifdef INTERPRETER
void _Jv_InitField (jobject, jclass, int);
@@ -494,6 +496,8 @@ private:
friend void *::_Jv_ResolvePoolEntry (jclass this_class, jint index);
friend void ::_Jv_CopyClassesToSystemLoader (java::lang::ClassLoader *);
// Chain for class pool. This also doubles as the ABI version
// number. It is only used for this purpose at class registration
// time, and only for precompiled classes.
+40 -3
View File
@@ -52,6 +52,15 @@ details. */
static jclass loaded_classes[HASH_LEN];
// This records classes which will be registered with the system class
// loader when it is initialized.
static jclass system_class_list;
// This is used as the value of system_class_list after we have
// initialized the system class loader; it lets us know that we should
// no longer pay attention to the system abi flag.
#define SYSTEM_LOADER_INITIALIZED ((jclass) -1)
// This is the root of a linked list of classes
static jclass stack_head;
@@ -165,6 +174,22 @@ _Jv_RegisterClasses_Counted (const jclass * classes, size_t count)
void
_Jv_RegisterClassHookDefault (jclass klass)
{
// This is bogus, but there doesn't seem to be a better place to do
// it.
if (! klass->engine)
klass->engine = &_Jv_soleCompiledEngine;
if (system_class_list != SYSTEM_LOADER_INITIALIZED)
{
unsigned long abi = (unsigned long) klass->next_or_version;
if (! _Jv_ClassForBootstrapLoader (abi))
{
klass->next_or_version = system_class_list;
system_class_list = klass;
return;
}
}
jint hash = HASH_UTF (klass->name);
// If the class is already registered, don't re-register it.
@@ -193,9 +218,6 @@ _Jv_RegisterClassHookDefault (jclass klass)
}
}
// FIXME: this is really bogus!
if (! klass->engine)
klass->engine = &_Jv_soleCompiledEngine;
klass->next_or_version = loaded_classes[hash];
loaded_classes[hash] = klass;
}
@@ -216,6 +238,21 @@ _Jv_RegisterClass (jclass klass)
_Jv_RegisterClasses (classes);
}
// This is used during initialization to register all compiled-in
// classes that are not part of the core with the system class loader.
void
_Jv_CopyClassesToSystemLoader (java::lang::ClassLoader *loader)
{
for (jclass klass = system_class_list;
klass;
klass = klass->next_or_version)
{
klass->loader = loader;
loader->loadedClasses->put(klass->name->toString(), klass);
}
system_class_list = SYSTEM_LOADER_INITIALIZED;
}
jclass
_Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader)
{
+1
View File
@@ -99,6 +99,7 @@ java::lang::ClassLoader *
java::lang::VMClassLoader::getSystemClassLoaderInternal()
{
_Jv_InitClass (&gnu::gcj::runtime::ExtensionClassLoader::class$);
_Jv_CopyClassesToSystemLoader (gnu::gcj::runtime::ExtensionClassLoader::system_instance);
return gnu::gcj::runtime::ExtensionClassLoader::system_instance;
}