This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Eclipse vs gij/libgcj, unit-at-a-time, -O2 and -O


Hi all,

The good news: I got Eclipse 2.1 and Eclipse 3.0 (M4, beta) working with
gij again. And it does run very nicely and fast, even though it is
completely interpreted. It can spawn sub-work-benches to test newly
developed plugins with. And I was even able to mix and match gcj and
kaffe as alternative JREs. Which means that you can run eclipse with
either as standard JRE, but then use the other for running java
applications developed inside the Eclipse JDT. See the screenshot:
http://www.klomp.org/mark/classpath/eclipse-gcj-kaffe.png

The bad new: It took some fighting to get it to work.

- The easy part is to define the following two properties for making it
at least startup and detect gcj as standard JRE (for JDT work):

	java.vm.version=1.3
	org.eclipse.core.runtime.ignoreLockFile=true

I have the attached script as 'java' in my gcc34/bin install location.
That makes it possible to run eclipse as downloaded from the eclipse.org
site out of the box with just ./eclipse (when /usr/local/gcc34/bin is in
your path).

- The hard part was figuring out why it doesn't work with a default
libgcj compile. I don't have a reduced test case yet but it seems that
when libgcj is compiled with -O2 (which is standard) all kind of things
get miscompiled.

When trying to figure out when this broke for the first time I found the
introduction of unit-at-a-time as default with -O2 to make the problems
much worse, but even with this disabled eclipse wouldn't run. With
unit-at-a-time Method.invoke() seems to just break (suddenly the wrong
classloader is found/used), and even without unit-at-a-time it seems
that class initializers are not always run correctly (suddenly some
ClassLoaders have a null loadedClasses field).

So I just tried to compile everything with only -O. But with CVS head
this fails for the following files: Arc2D.java, Font.java,
TextField.java, ZipInputStream.java, Boolean.java, JarFile.java,
TreePath.java, natClass.cc. (Full error log attached.)

When you compile the above 8 files by hand with -O2 you can get a libgcj
that will be usable with gij to run eclipse (through the attached 'java'
script). Download either eclipse-SDK-2.1.1-linux-gtk.zip or
eclipse-SDK-3.0M4-linux-gtk.zip

I did disable the verifier in verify.cc. I don't know if that is
actually still necessary. Tom, is there a bug report for the issue you
had last time with Eclipse? If that cannot be easily fixed maybe we
should introduce a gij switch for disabling the verifier.

Jeff said that there were already bug reports for inlining issues and
maybe those are similar to what I see. I will try to come up with a
smaller example later this week.

Hopefully we can get these things fixed for 3.4 because having Eclipse
work out of the box would be very, very nice (even if it was just
interpreted for now).

Cheers,

Mark
#!/bin/sh
LD_LIBRARY_PATH=/usr/local/gcc34/lib gij -Djava.vm.version=1.3 -Dgnu.gcj.runtime.NameFinder.remove_unknown=true -Dsun.boot.class.path=/usr/local/gcc34/share/java/libgcj-3.4.jar -Dorg.eclipse.core.runtime.ignoreLockFile=true $*
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT javax/swing/tree/TreePath.lo -MF javax/swing/tree/TreePath.d -c -o javax/swing/tree/TreePath.lo ../../../gcc/libjava/javax/swing/tree/TreePath.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT javax/swing/tree/TreePath.lo -MF javax/swing/tree/TreePath.d -c ../../../gcc/libjava/javax/swing/tree/TreePath.java -fPIC -o javax/swing/tree/.libs/TreePath.o
../../../gcc/libjava/javax/swing/tree/TreePath.java: In class `javax.swing.tree.TreePath':
../../../gcc/libjava/javax/swing/tree/TreePath.java: In method `javax.swing.tree.TreePath.isDescendant(javax.swing.tree.TreePath)':
../../../gcc/libjava/javax/swing/tree/TreePath.java:280: error: unrecognizable insn:
(insn 161 105 162 14 ../../../gcc/libjava/javax/swing/tree/TreePath.java:274 (set (reg:CCZ %eflags)
        (compare:CCZ (mem/s/j:SI (plus:SI (mem/s/j:SI (plus:SI (reg/v/f:SI 59 [
this ])
                            (const_int 4 [0x4])) [0 <variable>.path+0 S4 A32])
                    (const_int 4 [0x4])) [0 <variable>.length+0 S4 A32])
            (reg/v:SI 61 [ index2 ]))) -1 (nil)
    (expr_list:REG_DEAD (reg/f:SI 82 [ <variable>.path ])
        (expr_list:REG_DEAD (reg/v:SI 61 [ index2 ])
            (nil))))
../../../gcc/libjava/javax/swing/tree/TreePath.java:280: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/geom/Arc2D.lo -MF java/awt/geom/Arc2D.d -c -o java/awt/geom/Arc2D.lo ../../../gcc/libjava/java/awt/geom/Arc2D.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/geom/Arc2D.lo -MF java/awt/geom/Arc2D.d -c ../../../gcc/libjava/java/awt/geom/Arc2D.java -fPIC -o java/awt/geom/.libs/Arc2D.o
../../../gcc/libjava/java/awt/geom/Arc2D.java: In class `java.awt.geom.Arc2D$ArcIterator':
../../../gcc/libjava/java/awt/geom/Arc2D.java: In method `java.awt.geom.Arc2D$ArcIterator.currentSegment(double[])':
../../../gcc/libjava/java/awt/geom/Arc2D.java:711: internal compiler error: tree check: expected class 'e', have 'c' (real_cst) in java_complete_lhs, at java/parse.y:12054
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/TextField.lo -MF java/awt/TextField.d -c -o java/awt/TextField.lo ../../../gcc/libjava/java/awt/TextField.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/TextField.lo -MF java/awt/TextField.d -c ../../../gcc/libjava/java/awt/TextField.java -fPIC -o java/awt/.libs/TextField.o
../../../gcc/libjava/java/awt/TextField.java: In class `java.awt.TextField':
../../../gcc/libjava/java/awt/TextField.java: In method `java.awt.TextField.echoCharIsSet()':
../../../gcc/libjava/java/awt/TextField.java:255: error: unrecognizable insn:
(insn 37 9 38 0 ../../../gcc/libjava/java/awt/TextField.java:252 (set (reg:CCZ %eflags)
        (compare:CCZ (mem/s/j:HI (plus:SI (mem/f:SI (reg/f:SI %eargp) [0 this+0
S4 A32])
                    (const_int 192 [0xc0])) [0 <variable>.echoChar+0 S2 A32])
            (const_int 0 [0x0]))) -1 (nil)
    (expr_list:REG_DEAD (reg/v/f:SI 59 [ this ])
        (nil)))
../../../gcc/libjava/java/awt/TextField.java:255: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/Font.lo -MF java/awt/Font.d -c -o java/awt/Font.lo ../../../gcc/libjava/java/awt/Font.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/awt/Font.lo -MF java/awt/Font.d -c ../../../gcc/libjava/java/awt/Font.java -fPIC -o java/awt/.libs/Font.o
../../../gcc/libjava/java/awt/Font.java: In class `java.awt.Font':
../../../gcc/libjava/java/awt/Font.java: In method `java.awt.Font.isPlain()':
../../../gcc/libjava/java/awt/Font.java:382: error: unrecognizable insn:
(insn 37 9 38 0 ../../../gcc/libjava/java/awt/Font.java:379 (set (reg:CCZ %eflags)
        (compare:CCZ (mem/s/j:SI (plus:SI (mem/f:SI (reg/f:SI %eargp) [0 this+0
S4 A32])
                    (const_int 8 [0x8])) [0 <variable>.style+0 S4 A32])
            (const_int 0 [0x0]))) -1 (nil)
    (expr_list:REG_DEAD (reg/v/f:SI 59 [ this ])
        (nil)))
../../../gcc/libjava/java/awt/Font.java:382: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/util/zip/ZipInputStream.lo -MF java/util/zip/ZipInputStream.d -c -o java/util/zip/ZipInputStream.lo
../../../gcc/libjava/java/util/zip/ZipInputStream.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/util/zip/ZipInputStream.lo -MF java/util/zip/ZipInputStream.d -c ../../../gcc/libjava/java/util/zip/ZipInputStream.java -fPIC -o java/util/zip/.libs/ZipInputStream.o
../../../gcc/libjava/java/util/zip/ZipInputStream.java: In class `java.util.zip.ZipInputStream':
../../../gcc/libjava/java/util/zip/ZipInputStream.java: In method `java.util.zip.ZipInputStream.available()':
../../../gcc/libjava/java/util/zip/ZipInputStream.java:265: error: unrecognizable insn:
(insn 34 9 35 0 ../../../gcc/libjava/java/util/zip/ZipInputStream.java:264 (set
(reg:CCZ %eflags)
        (compare:CCZ (mem/s/j:QI (plus:SI (mem/f:SI (reg/f:SI %eargp) [0 this+0
S4 A32])
                    (const_int 48 [0x30])) [0 <variable>.entryAtEOF+0 S1 A32])
            (const_int 0 [0x0]))) -1 (nil)
    (expr_list:REG_DEAD (reg/v/f:SI 59 [ this ])
        (nil)))
../../../gcc/libjava/java/util/zip/ZipInputStream.java:265: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/util/jar/JarFile.lo
-MF java/util/jar/JarFile.d -c -o java/util/jar/JarFile.lo ../../../gcc/libjava/java/util/jar/JarFile.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/util/jar/JarFile.lo -MF java/util/jar/JarFile.d -c ../../../gcc/libjava/java/util/jar/JarFile.java -fPIC -o java/util/jar/.libs/JarFile.o
../../../gcc/libjava/java/util/jar/JarFile.java: In class `java.util.jar.JarFile':
../../../gcc/libjava/java/util/jar/JarFile.java: In method `java.util.jar.JarFile.verify()':
../../../gcc/libjava/java/util/jar/JarFile.java:201: error: unrecognizable insn:(insn 35 9 36 0 ../../../gcc/libjava/java/util/jar/JarFile.java:195 (set (reg:CCZ %eflags)
        (compare:CCZ (mem/s/j:SI (plus:SI (mem/f:SI (reg/f:SI %eargp) [0 this+0
S4 A32])
                    (const_int 24 [0x18])) [0 <variable>.manifest+0 S4 A32])
            (const_int 0 [0x0]))) -1 (nil)
    (nil))
../../../gcc/libjava/java/util/jar/JarFile.java:201: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=GCJ --mode=compile /home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/lang/Boolean.lo -MF
java/lang/Boolean.d -c -o java/lang/Boolean.lo ../../../gcc/libjava/java/lang/Boolean.java
/home/mark/src/gcc-obj/gcc/gcj -B/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava/ -B/home/mark/src/gcc-obj/gcc/ --encoding=UTF-8 -Wno-deprecated -fclasspath= -fbootclasspath=/home/mark/src/gcc-obj/i686-pc-linux-gnu/libjava -ffloat-store -g -O -MD -MT java/lang/Boolean.lo -MF java/lang/Boolean.d -c ../../../gcc/libjava/java/lang/Boolean.java -fPIC -o java/lang/.libs/Boolean.o
../../../gcc/libjava/java/lang/Boolean.java: In class `java.lang.Boolean':
../../../gcc/libjava/java/lang/Boolean.java: In method `java.lang.Boolean.hashCode()':
../../../gcc/libjava/java/lang/Boolean.java:193: error: unrecognizable insn:
(insn 35 9 36 0 ../../../gcc/libjava/java/lang/Boolean.java:192 (set (reg:CC %eflags)
        (compare:CC (mem/s/j:QI (plus:SI (mem/f:SI (reg/f:SI %eargp) [0 this+0 S4 A32])
                    (const_int 4 [0x4])) [0 <variable>.value+0 S1 A32])
            (const_int 1 [0x1]))) -1 (nil)
    (expr_list:REG_DEAD (reg/v/f:SI 59 [ this ])
        (nil)))
../../../gcc/libjava/java/lang/Boolean.java:193: internal compiler error: in extract_insn, at recog.c:2061
/bin/sh ./libtool --tag=CXX --mode=compile /home/mark/src/gcc-obj/gcc/xgcc -shared-libgcc -B/home/mark/src/gcc-obj/gcc/ -nostdinc++  -L/home/mark/src/gcc-obj/i686-pc-linux-gnu/libstdc++-v3/src -L/home/mark/src/gcc-obj/i686-pc-linux-gnu/libstdc++-v3/src/.libs -B/usr/local/gcc34/i686-pc-linux-gnu/bin/ -B/usr/local/gcc34/i686-pc-linux-gnu/lib/ -isystem /usr/local/gcc34/i686-pc-linux-gnu/include -isystem /usr/local/gcc34/i686-pc-linux-gnu/sys-include -DHAVE_CONFIG_H -I. -I../../../gcc/libjava -I./include -I./gcj -I../../../gcc/libjava -Iinclude -I../../../gcc/libjava/include -I/home/mark/src/gcc/boehm-gc/include  -DGC_LINUX_THREADS=1 -D_REENTRANT=1 -DTHREAD_LOCAL_ALLOC=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1   -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/libltdl -I../libstdc++-v3/include -I../libstdc++-v3/include/i686-pc-linux-gnu -I../../../gcc/libjava/../libstdc++-v3/libsupc++ -I../../../gcc/libjava/.././libjava/../gcc -I../../../gcc/libjava/../zlib -I../../../gcc/libjava/../libffi/include -I../libffi/include  -O -g -fno-rtti -fnon-call-exceptions  -fdollars-in-identifiers -Wswitch-enum -ffloat-store  -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX="\"/usr/local/gcc34\"" -DLIBDIR="\"/usr/local/gcc34/lib\"" -DBOOT_CLASS_PATH="\"/usr/local/gcc34/share/java/libgcj-3.4.jar\"" -g -O -D_GNU_SOURCE -MD -MT java/lang/natClass.lo -MF java/lang/natClass.pp -c -o java/lang/natClass.lo ../../../gcc/libjava/java/lang/natClass.cc
/home/mark/src/gcc-obj/gcc/xgcc -shared-libgcc -B/home/mark/src/gcc-obj/gcc/ -nostdinc++ -L/home/mark/src/gcc-obj/i686-pc-linux-gnu/libstdc++-v3/src -L/home/mark/src/gcc-obj/i686-pc-linux-gnu/libstdc++-v3/src/.libs -B/usr/local/gcc34/i686-pc-linux-gnu/bin/ -B/usr/local/gcc34/i686-pc-linux-gnu/lib/ -isystem /usr/local/gcc34/i686-pc-linux-gnu/include -isystem /usr/local/gcc34/i686-pc-linux-gnu/sys-include -DHAVE_CONFIG_H -I. -I../../../gcc/libjava -I./include -I./gcj -I../../../gcc/libjava -Iinclude -I../../../gcc/libjava/include -I/home/mark/src/gcc/boehm-gc/include -DGC_LINUX_THREADS=1 -D_REENTRANT=1 -DTHREAD_LOCAL_ALLOC=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/libltdl -I../libstdc++-v3/include -I../libstdc++-v3/include/i686-pc-linux-gnu -I../../../gcc/libjava/../libstdc++-v3/libsupc++ -I../../../gcc/libjava/.././libjava/../gcc -I../../../gcc/libjava/../zlib -I../../../gcc/libjava/../libffi/include -I../libffi/include -O -g -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -ffloat-store -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/usr/local/gcc34\" -DLIBDIR=\"/usr/local/gcc34/lib\" -DBOOT_CLASS_PATH=\"/usr/local/gcc34/share/java/libgcj-3.4.jar\" -g -O -D_GNU_SOURCE -MD -MT java/lang/natClass.lo -MF java/lang/natClass.pp -c ../../../gcc/libjava/java/lang/natClass.cc  -fPIC -DPIC -o java/lang/.libs/natClass.o
../../../gcc/libjava/java/lang/natClass.cc: In function `void _Jv_InitClass(java::lang::Class*)':
../../../gcc/libjava/java/lang/natClass.cc:92: internal compiler error: in gen_subprogram_die, at dwarf2out.c:10607

Index: verify.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/verify.cc,v
retrieving revision 1.56
diff -u -r1.56 verify.cc
--- verify.cc	24 Jul 2003 17:18:00 -0000	1.56
+++ verify.cc	3 Nov 2003 21:46:54 -0000
@@ -3304,7 +3304,9 @@
 void
 _Jv_VerifyMethod (_Jv_InterpMethod *meth)
 {
+#if 0
   _Jv_BytecodeVerifier v (meth);
   v.verify_instructions ();
+#endif
 }
 #endif	/* INTERPRETER */

Attachment: signature.asc
Description: This is a digitally signed message part


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]