Bug 21326 - seg fault in _Jv_Linker
Summary: seg fault in _Jv_Linker
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: libgcj (show other bugs)
Version: 4.0.0
: P2 normal
Target Milestone: 4.0.3
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks: 24251
  Show dependency treegraph
 
Reported: 2005-05-02 03:19 UTC by Reid Spencer
Modified: 2005-11-01 15:17 UTC (History)
3 users (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Reid Spencer 2005-05-02 03:19:37 UTC
gcc configured with:--prefix=/proj/install --enable-shared
--enable-threads=posix --enable-clocale=gnu --with-gnu-as --with-gnu-ld
--disable-nls --with-system-zlib
Operating System: Fedora Core 3

This is *not* the gcj that is installed with FC3, I compiled it separately. The
libgcj is *not* the one installed with FC3, its the one I compiled from GCC 4.0.0

Attempting to run JING (a Relax NG based XML validator) after compilation with
GCJ yields a SIGSEGV in _Jv_Linker::prepare_constant_time_tables in file
libjava/link.cc at line 519. The code in this method traverses a list. One of
the pointers (klass0) in that list has value 1 which when de-referenced causes
the SIGSEGV. 

To recreate:
1. wget http://www.thaiopensource.com/download/gcj/jing-20030619.tar.gz
2. tar zxf jing-20030619.tar.gz
3. configure
4. make (13 warnings about deprecated classes)
5. cd test
6. make

JING is 330K of Java source so I didn't attach it. But, you can get it from the
URL above. I don't really care if its against the "reporting rules" for GCC.
This is a runtime error, not a compilation error (that I can tell).

GDB produces this trace:

#0  _Jv_Linker::prepare_constant_time_tables (klass=0x81415e0)
    at ../../../gcc/libjava/link.cc:519
#1  0xb771c20a in _Jv_Linker::wait_for_state (klass=0x81415e0, state=9)
    at ../../../gcc/libjava/link.cc:1712
#2  0xb774c816 in java::lang::VMClassLoader::resolveClass (klass=0x81415e0)
    at ../../../gcc/libjava/java/lang/natVMClassLoader.cc:44
#3  0xb77438be in java::lang::Class::initializeClass (this=0x81415e0)
    at ../../../gcc/libjava/java/lang/natClass.cc:728
#4  0xb770dca0 in _Jv_AllocObjectNoFinalizer (klass=0x81415e0) at Class.h:576
#5  0x0807fb67 in
com.thaiopensource.validate.auto.AutoSchemaReceiver.installHandlers(org.xml.sax.XMLReader)
(this=0x2, xr=0xe3de8)
    at AutoSchemaReceiver.java:92
#6  0x0807ee0e in
com.thaiopensource.validate.auto.AutoSchemaReader.createSchema(org.xml.sax.InputSource,
com.thaiopensource.util.PropertyMap) (this=0x4add8,
    in=0xa79d8, properties=0xa5ca0) at AutoSchemaReader.java:65
#7  0x0807a566 in
com.thaiopensource.validate.ValidationDriver.loadSchema(org.xml.sax.InputSource)
(this=0x4d758, in=0x1) at ValidationDriver.java:148
#8  0x0808da5e in
com.thaiopensource.relaxng.util.TestDriver.loadSchema(java.io.File)
(this=0x4f570, schema=0x2) at TestDriver.java:133
#9  0x0808dbea in
com.thaiopensource.relaxng.util.TestDriver.runTestCase(java.io.File)
(this=0x4f570, dir=0x4adb0) at TestDriver.java:92
#10 0x0808de65 in
com.thaiopensource.relaxng.util.TestDriver.runTestSuite(java.io.File)
(this=0x4f570, dir=0x4adb8) at TestDriver.java:81
#11 0x0808d8b3 in
com.thaiopensource.relaxng.util.TestDriver.doMain(java.lang.String[])
(this=0x4f570, args=0x24d00) at TestDriver.java:60
#12 0x0808d5f8 in
com.thaiopensource.relaxng.util.TestDriver.main(java.lang.String[]) (args=0x2)
at TestDriver.java:21
#13 0xb773bdc3 in gnu::java::lang::MainThread::call_main (this=0x77f18)
    at ../../../gcc/libjava/gnu/java/lang/natMainThread.cc:47
#14 0xb77e10de in gnu.java.lang.MainThread.run() (this=0x77f18)

The output on the stderr is this:

Exception in thread "main" java.lang.LinkageError: unexpected exception during
linking: com.thaiopensource.validate.auto.AutoSchemaReceiver$Handler
   at java.lang.VMClassLoader.transformException(java.lang.Class,
java.lang.Throwable) (/proj/install/lib/libgcj.so.6.0.0)
   at java.lang.VMClassLoader.resolveClass(java.lang.Class)
(/proj/install/lib/libgcj.so.6.0.0)
   at java.lang.Class.initializeClass() (/proj/install/lib/libgcj.so.6.0.0)
   at
com.thaiopensource.validate.auto.AutoSchemaReceiver.installHandlers(org.xml.sax.XMLReader)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/validate/auto/AutoSchemaReceiver.java:92)
   at
com.thaiopensource.validate.auto.AutoSchemaReader.createSchema(org.xml.sax.InputSource,
com.thaiopensource.util.PropertyMap)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/validate/auto/AutoSchemaReader.java:65)
   at
com.thaiopensource.validate.ValidationDriver.loadSchema(org.xml.sax.InputSource)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/validate/ValidationDriver.java:148)
   at com.thaiopensource.relaxng.util.TestDriver.loadSchema(java.io.File)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/relaxng/util/TestDriver.java:133)
   at com.thaiopensource.relaxng.util.TestDriver.runTestCase(java.io.File)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/relaxng/util/TestDriver.java:92)
   at com.thaiopensource.relaxng.util.TestDriver.runTestSuite(java.io.File)
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/relaxng/util/TestDriver.java:82)
   at com.thaiopensource.relaxng.util.TestDriver.doMain(java.lang.String[])
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/relaxng/util/TestDriver.java:61)
   at com.thaiopensource.relaxng.util.TestDriver.main(java.lang.String[])
(/proj/jing/jing-20030619/test/./src/com/thaiopensource/relaxng/util/TestDriver.java:21)
   at gnu.java.lang.MainThread.call_main() (/proj/install/lib/libgcj.so.6.0.0)
   at gnu.java.lang.MainThread.run() (/proj/install/lib/libgcj.so.6.0.0)
Caused by: java.lang.NullPointerException
   at java.lang.VMClassLoader.resolveClass(java.lang.Class)
(/proj/install/lib/libgcj.so.6.0.0)
   ...11 more
Comment 1 Tom Tromey 2005-05-03 18:29:10 UTC
I didn't download the source to try this out.
But based on the stack trace, I think the problem is probably that
a class compiled with the C++ ABI is referring to an org.xml class.
This doesn't work, as these classes are compiled with the BC ABI
(i.e., -findirect-dispatch).

This is unfortunate, but necessary to support java.endorsed.dirs.
The restriction that a C++ ABI class can't directly refer to a BC ABI class
is unlikely to be lifted.

The fix is to compile your program with -findirect-dispatch.
(But note that at the moment this only works when compiling from .class)
Comment 2 Reid Spencer 2005-05-03 22:16:41 UTC
I don't see how that is possible on the application side as the source code is
100% Java and it is all compiled with the same options (there's only one
compilation command that compiles all sources). Perhaps you are suggesting that
libgcj is compiled differently from the application?  If so, shouldn't the
default compilation flags automatically work correctly with libgcj? The only
flags given are "-g -02".

So, I tried your suggestion. I compiled JING with HotSpot 1.4.2. It compiled
fine to .class files via javac 1.4.2.  I compiled the .class files (one command
line again) with GCJ using the -findirect-dispatch option. GCJ gave hundreds of
errors. Most of the errors were about "finalized field 'xyz' may not have been
initialized".  That sounds more like a warning to me, but I wouldn't know. I
take it that GCJ doesn't like foreign compiled .class files?

I'm not sure where to go from here except to give up on GCJ. Any other suggestions?
Comment 3 Reid Spencer 2005-05-04 16:55:33 UTC
One other note. Shouldn't the segfault in _Jv_Linker be fixed anyway?
Dereferencing a point of value 0x01 isn't likely to be valid in any circumstances?
Comment 4 Reid Spencer 2005-05-04 19:48:03 UTC
Okay, after fixing some makefile bugs, the workaround suggested by Tom worked.

Feel free to close this now unless you want to track down the SIGSEGV.

Reid
Comment 5 Andrew Pinski 2005-10-13 18:41:46 UTC
I think this a dup of bug 24251 which was just fixed on the mainline, if you want to try again, that would be nice.
Comment 6 Tom Tromey 2005-11-01 15:17:06 UTC
Fixed.