Fred Gray wrote: > > I did a cvs update to get your changes, and I copied the native method > insertSystemProperties() from VMSystem to Runtime. ORP still crashed. > > > * Dictionary, Hashtable, and Properties have no dependencies > > This is the where the chain broke. Adding the properties to the Hashtable > calls Hashtable.hash(), which calls Math.abs(). That causes the static > initializer for Math to be run, and it calls System.loadLibrary(). > Kaboom.
Man, those dependencies are annoying. Would using StrictMath.abs() in place of Math.abs() work, since StrictMath doesn't use native methods? Then again, inlining the check for absolute value saves a method call. I'll go ahead and apply that patch you suggested. > The last problem is that the native method System.isWordsBigEndian() > is needed by the static initializer for System before the Classpath java.lang > JNI library is loaded. I enabled ORP's built-in version of this method > (which takes the super-portable "return false" approach to the problem). > At long last, "Hello world!" appeared. I thought, in my analysis yesterday, that System.isWordsBigEndian wouldn't be called until after System.loadLibrary("javalang"), called in Object.<clinit>, has completed. But thinking about it more, I guess you are right - Object.<clinit> invokes the System class initializer, which then executes to completion before returning to Object.<clinit>; and System.<clinit> does use the native method. My patch yesterday just deleted the line in System which called loadLibrary("javalang"), thinking it was redundant; I guess I was wrong, so I'll add it back in and document it this time. > > The last part of this message is a patch against the pristine ORP 1.0.9 release > @@ -344,7 +346,6 @@ > > //{ "java_lang_System_currentTimeMillis", (void *) >Java_java_lang_System_currentTimeMillis, NI_IS_JNI }, > { "java_lang_System_currentTimeMillis", (void *) >Java_java_lang_System_currentTimeMillis_no_extra_args, NI_IS_DIRECT }, > - { "java_lang_System_isWordsBigEndian", (void *) >Java_java_lang_System_isWordsBigEndian, NI_IS_JNI }, > { "java_lang_System_setErr", (void *) Java_java_lang_System_setErr, >NI_IS_JNI }, > { "java_lang_System_setIn", (void *) Java_java_lang_System_setIn, NI_IS_JNI >}, > { "java_lang_System_setOut", (void *) Java_java_lang_System_setOut, >NI_IS_JNI }, The last three methods in this section of the patch have been renamed java_lang_System_setErr0, setIn0, and setOut0, because there must be a security check in Java first. You should probably fix those as well, to avoid another linkage error. -- This signature intentionally left boring. Eric Blake [EMAIL PROTECTED] BYU student, free software programmer _______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/classpath