Thanks to you both for working on this issue. This works for now, but I hope you won't mind if we rip it out again for 0.13. One Thing I don't like about this is that it creates a new compile time constant which makes it harder to share an GNU Classpath glibj.zip class byte code between runtimes installed on the same system. I would like to see something like the following for breaking up the initialization of java.lang.System into two phases in the future:
boolean explicitly_initialize = VMSystem.explicitlyInitializeStatics(); if (explicitly_initialize) { initLoadLibrary(); initProperties(); }
That way a runtime could introduce its own VMSystem, but still share the system installed glibj.zip.
I have made a patch to accomplish this. Works with Jikes RVM. It includes the new method in VMSystem, so other users would have to add that before they could run with this version.
--Steve A
--- classpath.base/configure.ac 2004-11-12 11:05:50.000000000 -0500 +++ classpath/configure.ac 2004-11-13 11:45:52.000000000 -0500 @@ -289,22 +289,6 @@ dnl ----------------------------------------------------------- -dnl Should the VM explicitly run class initialization subfunctions for -dnl java.lang.System? (default is false -- the subfunctions will be run -dnl automatically by the class initializer) -dnl ----------------------------------------------------------- -AC_ARG_ENABLE([java-lang-system-explicit-initialization], - [AS_HELP_STRING(--enable-java-lang-system-explicit-initialization,will the VM explicitly invoke java.lang.System's static initialization methods [default=no])], - [case "${enableval}" in - yes|true) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="true" ;; - no|false) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false" ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-java-lang-system-explicit-initialization) ;; - esac], - [JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false"]) -AC_SUBST(JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION) - - -dnl ----------------------------------------------------------- dnl avoiding automake complaints dnl ----------------------------------------------------------- REMOVE="" --- classpath.base/ChangeLog 2004-11-12 11:55:12.000000000 -0500 +++ classpath/ChangeLog 2004-11-13 12:36:22.000000000 -0500 @@ -1,3 +1,15 @@ +2004-11-13 Steven Augart <[EMAIL PROTECTED]> + + * vm/reference/java/lang/VMSystem.java (explicitlyInitializeStatics): + New method. + * java/lang/System.java: Test + VMSystem.explicitlyInitializeStatics() instead of + Configuration.JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION. + * gnu/classpath/Configuration.java.in: Remove + JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION. + * configure.ac: Remove + --enable-java-lang-system-explicit-initialization. + 2004-11-12 Steven Augart <[EMAIL PROTECTED]> * gnu/classpath/Configuration.java.in: Added @@ -7,7 +19,6 @@ * java/lang/System.java: Added support for JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION. - 2004-11-12 Sven de Marothy <[EMAIL PROTECTED]> * java/awt/Polygon.java (contains): Reimplemented. --- classpath.base/java/lang/System.java 2004-11-12 11:02:42.000000000 -0500 +++ classpath/java/lang/System.java 2004-11-13 11:51:18.000000000 -0500 @@ -122,7 +122,7 @@ */ static { - if (! Configuration.JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION) { + if (! VMSystem.explicitlyInitializeStatics()) { initLoadLibrary(); initProperties(); } @@ -132,7 +132,7 @@ out = VMSystem.makeStandardOutputStream(); err = VMSystem.makeStandardErrorStream(); - if (! Configuration.JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION) { + if (! VMSystem.explicitlyInitializeStatics()) { initSystemClassLoader(); initSecurityManager(); // Includes getting the class loader. } --- classpath.base/vm/reference/java/lang/VMSystem.java 2004-10-02 11:19:16.000000000 -0400 +++ classpath/vm/reference/java/lang/VMSystem.java 2004-11-13 12:29:07.000000000 -0500 @@ -181,4 +181,19 @@ * environment variable is not defined. */ static native String getenv(String name); + + /** + * Whether to automatically run the init* methods in java.lang.System + * (the default) at class initialization time or whether to have the VM + * explicitly invoke them. + * + * With the default implementation, returning false, the VM does not + * explicitly run the initializers; instead, they're automatically + * run when java.lang.System is initialized. This reflects historic + * behavior. + */ + static boolean explicitlyInitializeStatics() + { + return false; + } } --- classpath.base/gnu/classpath/Configuration.java.in 2004-11-12 10:40:58.000000000 -0500 +++ classpath/gnu/classpath/Configuration.java.in 2004-11-13 11:49:17.000000000 -0500 @@ -111,16 +111,4 @@ * Name of default AWT peer library. */ String default_awt_peer_toolkit = "gnu.java.awt.peer.gtk.GtkToolkit"; - - /** - * Whether to automatically run the init* methods in java.lang.System - * (the default) at class initialization time or whether to have the VM - * explicitly invoke them. - * - * The default is false, meaning the VM does not explicitly run the - * initializers. - * - */ - boolean JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = - @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@; }
_______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://lists.gnu.org/mailman/listinfo/classpath