2010/12/29 majia gm <gmmajia@xxxxxxxxx>: > 2010/12/29 David Daney <ddaney@xxxxxxxxxxxxxxxxxx>: >> Adding java@... as this is where java questions are handled. >> >> On 12/28/2010 07:05 AM, majia gm wrote: >>> >>> Hi, everyone. >>> >>> I'm porting GCJ to a non-mainstream platform, which is a RISC machine >>> with some similarity to ARM. >>> The GCC I'm using is version 4.4.2. I start the porting from ARM's code. >>> >> >> There is quite a bit of work involved in getting libgcj running on a new >> target. One thing that is obvious from your stack trace is that the stack >> unwinding code is not decoding the instruction pointer properly. That would >> be one place to start. >> >> Unfortunatly, there isn't really one specific thing we can point you to. >> You will probably have to step through things with GDB and make sure that >> are the target specific code is doing the right thing. >> >> The boehm-gc may need porting as well. Actually I might start with >> boehm-gc, I think it has its own test suite, so it can be debugged >> separately. >> >> Then look at all the target specific code for a known working target (arm, >> mips, x86, etc...) and try to verify that your target code functions >> correctly. >> >> Good Luck, >> David Daney >> >> >> >>> When running the GCJ on the target platform, it mentioned that the ECJ >>> is needed. I don't know whether GCJ can live without ECJ, so I >>> donwload the latest ECJ jar file and recompiled. >>> >>> When running GCJ to compile a JAVA source file, I got the following error. >>> >>> [root@localhost pxx]# gcj -C HelloWorld.java -v >>> Using built-in specs. >>> Target: unicore32-linux >>> Configured with: /home/vhome/FengYi/pxx/mydir/gcc-4.4.2/configure >>> --host=unicore32-linux --target=unicore32-linux --prefix=/usr >>> --build=i686-redhat-linux-gnu --enable-clocale=gnu --enable-shared >>> --enable-threads=posix --enable-__cxa_atexit --enable-languages=java >>> --with-gnu-ld --disable-libstdcxx-pch --disable-multilib >>> --with-pkgversion=UC4_1.0_gama_20101228 >>> Thread model: posix >>> gcc version 4.4.2 (UC4_1.0_gama_20101228) >>> COLLECT_GCC_OPTIONS='-fsaw-java-file' '-C' '-v' >>> '-fbootclasspath=./:/usr/share/java/libgcj-4.4.2.jar' '-g1' >>> '-fsyntax-only' '-femit-class-files' '-S' '-o' 'NONE' '-shared-libgcc' >>> /usr/libexec/gcc/unicore32-linux/4.4.2/ecj1 HelloWorld.java -g1 >>> -fbootclasspath=./:/usr/share/java/libgcj-4.4.2.jar -g1 -fsource=1.5 >>> -ftarget=1.5 -fzip-dependency /tmp/ccTF9EKh.zip >>> Exception in thread "main" java.lang.ExceptionInInitializerError >>> at 0x1(Unknown Source) >>> at 0x3(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0xffffffffffffffff(Unknown Source) >>> at 0x2(Unknown Source) >>> at 0xffffffffffffffff(Unknown Source) >>> at 0xffffffffffffffff(Unknown Source) >>> Caused by: java.lang.NullPointerException >>> at 0x1(Unknown Source) >>> at 0x5(Unknown Source) >>> at 0x4(Unknown Source) >>> ...9 more >>> >>> >>> Could anyone give me some hints on how could this happen? >>> I really appreciate you patience. >>> >> >> > > Hi, David. > > Thank you for your reply. It's very nice of you. > > When metioned to the stack unwinding code, do you mean the file > backtrace.h in libjava/sysdeps/arch? It seems some archs don't have > this file. And ARM has this file, but seems it takes over little > works. > > Actually, the current status of my porting is as follows. I tried gij > successfully on the target to interpret a simple class file > HelloWorld.class which is compiled through a x86-gcj on a x86 machine. > And the gcj on the target also works well to compile the source file > HelloWorld.java into native executable file. But it fails to compile > HelloWorld.java into HelloWorld.class through gcj on the target. My > GCC version is 4.4.2, and the ecj I used is the latest. > > I found that when compiling Java sources into class file, the x86-gcj > use the jc1 instead of ecj. > The following two questions confusing me. Can gcj live without ecj? > What's the difference between ecj and jc1? I googled and got little. > > If you could give me some hints, I would really appreciate. > > Thank you. > Gmmajia > Sorry, I make a mistake in the last massege. The gcj on the target can compile the class file HelloWorld.class into native executable file, but cannot compile the source file HelloWorld.java.