This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libgcj/13708] java program crashes at startup, UTF-8 environment
- From: "mec dot gnu at mindspring dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Jan 2004 10:11:51 -0000
- Subject: [Bug libgcj/13708] java program crashes at startup, UTF-8 environment
- References: <20040116155120.13708.mec.gnu@mindspring.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From mec dot gnu at mindspring dot com 2004-01-17 10:11 -------
Subject: Re: java program crashes at startup, UTF-8 environment
Some more info:
Did I mention that I configure my toolchains with --disable-shared?
I bet that's why I encountered the bug and nobody else has.
Try building gcc HEAD with "--disable-shared". Or just use a normal
toolchain and build the Java executable with "-static". Both ways
produce the segfault for me.
It appears that the initialization procedure is different for
shared libraries versus unshared archive libraries.
Also, I date-searched the regression to this patch:
2004-01-14 Nathan Bryant <nbryant@optonline.net>
Tom Tromey <tromey@redhat.com>
PR libgcj/12001:
* gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Pass empty
array to superclass.
(init): Changed interface; add URLs here.
(initialize): New static method.
* prims.cc (_Jv_CreateJavaVM): Initialize ClassLoader here...
(_Jv_RunMain): ... not here.
This matches the stack backtraces and the gdb traces that I saw:
VMClassLoader.getSystemClassLoader calls System.getProperty
class initialization for System constructs three standard PrintStream's.
java.io.PrintStream.PrintStream calls Unicode stuff
Unicode stuff wants to use a class loader
Have a look at _Jv_FindClass. _Jv_FindClass calls _Jv_FindClassInCache,
which returns a non-null klass if the class has been "loaded"
or "initiated". With a shared library, I suspect that all the classes
are getting "loaded" or "initiated" at the same time; with a static
library, the class "gnu.gcj.convertOutput_UTF8" is definitely not
"loaded" and not "initiated". I don't know the meanings of "loaded"
and "initiated" so I can't say more than that.
Anyways, link the program with "-static", and be sure to run with
LANG=en_US.UTF-8, and you ought to see the segfault in _Jv_FindClass.
Michael C
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13708