[kaffe] questions about 1.0.6 on embedded mips
Brad Parker
brad@parker.boston.ma.us
Thu, 06 Jun 2002 11:08:47 -0400
Hi,
I'm new here, so please forgive any ignorance on my part.
I'm been cross compiling 1.0.6 for an Alchemy AU1000 MIP board running
linux, using Montavista's HHL 2.0 (journeyman tools).
the au1000 is a MIPS32 cpu
the gcc/binutils are :
gcc version 2.95.3 20010315 (release/MontaVista)
GNU ld version 2.10.91 (with BFD 2.10.91.0.2)
on the target the kernel is 2.4.17
libc.so.6 -> libc-2.2.3.so
It has floating point emulation built in.
I initially build with the jit turned on but the VM would crash, so I backed
off to a static build and the interpreter only. Here's how I config:
CC=/opt/hardhat/devkit/mips/fp_le/bin/mips_fp_le-gcc \
CPP=/opt/hardhat/devkit/mips/fp_le/bin/mips_fp_le-cpp \
AR=/opt/hardhat/devkit/mips/fp_le/bin/mips_fp_le-ar \
LD=/opt/hardhat/devkit/mips/fp_le/bin/mips_fp_le-ld \
RANLIB=/opt/hardhat/devkit/mips/fp_le/bin/mips_fp_le-ranlib \
ac_cv_c_bigendian=no \
ac_cv_sizeof_short=2 \
ac_cv_sizeof_int=4 \
ac_cv_sizeof_long=4 \
ac_cv_sizeof_long_long=8 \
ac_cv_sizeof___int64=8 \
ac_cv_sizeof_voidp=4 \
KAFFEH=/work3/kaffe/x86/kaffe/kaffeh/kaffeh \
../kaffe-1.0.6/configure --prefix=/opt/kaffe/mips --host=mips-spartacus-linux-gnu --target=mips-spartacus-linux-gnu --with-includes= --without-x --with-staticvm --with-engine=intrp
This almost works but I crash with an unhandle exception
init-2.04# /opt/kaffe/mips/bin/java HelloWorld
Internal error: caught an unexpected exception.
Please check your CLASSPATH and your installation.
java/lang/ArithmeticException
at java.util.HashMap.put(HashMap.java:116)
at java.util.Hashtable.put(Hashtable.java:106)
at java.lang.System.initProperties(System.java:native)
at java.lang.System.<clinit>(System.java:47)
at java.lang.ThreadGroup.add(ThreadGroup.java:86)
Aborted
I tracked this down to kaffe.def:define_insn(FDIV)
I added printf's of the args, and it's not dividing by zero. And, sometimes
it works and sometimes it doesn't. It's as if something is not initialized.
If I force the argument to int's and do an int divide the hello world works,
but caffine failes...
One thing has me puzzled. In intrp/slots.c
...
#define stack(N) (&sp[-(N)])
#define stack_long(N) (&sp[-(N)-1])
...
What's with the "-1"? The slots struct is a union and 8 bytes on my
machine. So, it looks like all of the entries will be the same size -
this "-1" code looks like a vestige of an implementation where int's
and long's took up a different amount of space on the stack (but,
since the slot struct is a union, it seems like they will always take
up the same amount of space, 8 bytes).
This may have nothing to do with the fdiv problem, but I thought I'd
mention it.
am I lost in space? Any advise on how to debug this?
-brad