> > > Godmar Back wrote: > > > Run it under gdb ("setenv KAFFE_DEBUG gdb; kaffe Main") > > and tell us what the backtrace says. Probably some assumption about the > > way in which classfiles are constructed that's biting us. > > Here's the output you asked for. I find it odd there is a Segmentation > Fault inside gdb, but not outside of gdb. I guess perhaps you are > catching it. > Yes. That's important for null pointer exceptions. > GNU gdb 4.17.m68k.objc.threads.hwwp.fpu.gnat > Copyright 1998 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you are > welcome to change it and/or distribute copies of it under certain conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for details. > This GDB was configured as "i486-pc-linux-gnu"... > (gdb) run > Starting program: /home/bkuhn/tmp/Kaffe/libexec/Kaffe Main > > Program received signal SIGSEGV, Segmentation fault. > 0x4003a74b in gcFree (gcif=0x40089a20, mem=0x4008c4e4) > at mem/gc-incremental.c:1046 > 1046 idx = GCMEM2IDX(info, unit); > (gdb) backtrace > #0 0x4003a74b in gcFree (gcif=0x40089a20, mem=0x4008c4e4) > at mem/gc-incremental.c:1046 > #1 0x4003aea3 in jfree (mem=0x4008c4e4) at gc.c:33 > #2 0x40035df7 in discardErrorInfo (einfo=0xbfffeda0) at exception.c:219 > #3 0x40035bef in error2Throwable (einfo=0xbfffeda0) at exception.c:110 > #4 0x40035e2e in throwError (einfo=0xbfffeda0) at exception.c:230 > #5 0x40052028 in soft_fixup_trampoline (_data=0x81c4b6d) at soft.c:561 > #6 0x40078e9d in i386_do_fixup_trampoline () at machine.c:1013 > #7 0x4005513f in callMethodV (meth=0x81bf0c0, func=0x81c4b68, obj=0x0, > args=0xbffff2d4, ret=0xbffff1d4) at support.c:706 > #8 0x40046ae8 in Kaffe_CallStaticVoidMethodV (env=0x40083fd0, cls=0x81715c8, > meth=0x81bf0c0, args=0xbffff2d0) at jni.c:2343 > #9 0x40046b8f in Kaffe_CallStaticVoidMethod (env=0x40083fd0, cls=0x81715c8, > meth=0x81bf0c0) at jni.c:2356 > #10 0x8048dda in main2 (env=0x40083fd0, argv=0xbffff794, farg=2, argc=0) > at main.c:195 > #11 0x8048c21 in main (argc=1, argv=0xbffff794) at main.c:115 > #12 0x400cd7e2 in () > I'd also like to see the content of that einfo. f 3 p/x *einfo also interesting might be this: p (char*)0x4008c4e4 My preliminary analysis: a) translation fails for unknown reasons. Normally, we would raise an exception. However b) somebody (the jit3, I bet) sets the FREE_MESSAGE flag in the errorInfo that contains the information necessary to throw the exception. When we process the error and are about to throw the exception, we get tripped up by the bogus error info. - Godmar