[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Kaffe on GNU Hurd



Igor Khavkine wrote:

> Ok, I've just redid my Hurd installation and d/led a kaffe-snap tarball this 
> week. I've  tried building it as an interpreter, but apparently that doesn't 
> work. There is a link error at the end of the build (something to do with  
> missing softcall_methodlookup). I built it agian with the normal jit and tried 
> to do more tests. Unfortunately the 3 fails that i mentioned before were not 
> the only ones (i just didn't get to see them before).

Humm, kaffe-snap tarball generation is broken since Nov 1 :(  I had
create some tarball on http://egp.free.fr/kaffe.  Use them if you can't
use CVS Tree.

> > Could you check that SP_OFFSET is 2 in jmp_buf for i386-gnu ?  You
> > could use developers/sp_offset.c to guest that.
> 
> I tried that and it gives me SP_OFFSET 4.

Why did I ask you is SP_OFFSET was 2 ?  Default SP_OFFSET value is in
config/i386/thread.h and it's 4, no problems here.

> > #define EXCEPTIONPROTO	\
> > 	int sig, int code, struct sigcontext* ctx
> > 
> > I will commit this definition (and change of EXCEPTIONFRAME macro).

Did you use this definition ?

> >From what I can gather most (or all) of the failed tests have to do with 
> exception handling (or signal handling). Here's the  list so far:
> Preempt
Test thread system.
It work ONLY IF you have working SIGVTALRM and setitimer() and
ITIMER_VIRTUAL.  Could you check that theses are true on GNU Hurd ?

I had discover that kaffe -vmdebug JTHREADNOPREEMPT Preempt produce:
started 5 threads
thread 0
[and infinite loop, it's ``while(true) continue;'' from Preempt.java]

> StackDump
Test stack trace build, use SEGV.

> UncaughtException
Test SEGV in thread

> NullPointerTest
use SEGV

> LostFrame
use SEGV

> finalexc
use SEGV in finalize() [aka in finalizer thread]

> KffeVerifyBug
synchronize ?

> ExceptionInInitializer.
use SEGV

> I think there'll be more because i haven't gone through all the tests
> yet.  I'm not an expert as i've mentioned before, so i'll try to get
> more info about signal handling and see what i can  do about it or at
> least gather more information.

Okay, get last snapshot (or last CVS Tree) and precompiled regression
classes at http://egp.free.fr/kaffe/regression-classes.tar.bz2, if kaffe
don't work, classes could not be compiled by kjc :(.

Then, build Kaffe with --enable-debug, install it and extract precompiled
regression classes.

For signals, use LostFrame, I write this test when I proting Kaffe to
NCR MP-RAS.  I discover that page 0 [NULL] was readable so 
((Object)null).hashCode() was detected to late, Kaffe lost one frame
context.  Use it to check that your EXCEPTIONPROTO is set correct for
GNU Hurd.

In regression directory, export KAFFE_DEBUG=gdb and run kaffe LostFrame,
you will see usual (gdb) prompt.

(gdb) run
Program received signal SIGSEGV, Segmentation fault.
[ it's normal, set some breakpoints, get $pc and $bp, and continue]
(gdb) break signal.c:nullException
(gdb) print /x $eip
(gdb) print /x $ebp
(gdb) continue

[ you should be in nullException(EXCEPTIONPROTO), check that eip and ebp
registers in signal context struct have same values that before]
(gdb) print /x ctx->sc_eip
(gdb) print /x ctx->sc_ebp

If they don't have the same value, EXCEPTIONPROTO is not defined as
expected on GNU Hurd (or sigcontext is not correctly supported).

For further debugging, you could source KAFFE/developers/gdbinit, it
contains useful macros as JITwhere that lookup current frame in jitted
methods.
-- 
Edouard G. Parmelan
http://egp.free.fr


Reply to: