bugs in stackTrace.c
Godmar Back
kaffe@rufus.w3.org
Thu, 27 Aug 1998 09:56:48 -0600 (MDT)
>
> Sorry to say, but you were wrong :)
>
You're right. I just tried starting kaffe with a non-existing
class and it said ClassNotFoundException, just like it should, so I wondered.
I think that's because the seg violation is caught, handled, and
ignored somehow. One can see the failure by running the interpreter with
-vmdebug EXCEPTION or under gdb.
I assume you mean STACKTRACEMETH(trace)!=1 in the code below?
- Godmar
> if the top stackframe contains a meth = (Method*)1 then Tnext is never
> called. A possible patch would be to have STACKTRACEINIT() loop until it
> has found a valid frame. Or another one would be to have buildStackTrace
> look like this instead:
>
> STACKTRACEINIT(trace, base, base);
> cnt = 0;
> while(!STACKTRACEEND(trace)) { /* <<<--- new code */
> if(STACKTRACEMETH(trace)!=-1)
> break;
> STACKTRACESTEP(trace);
> }
>
> while(!STACKTRACEEND(trace)) {
> STACKTRACESTEP(trace);
> cnt++;
> } /* <<<--- end new code */
>
> /* Build an array of stackTraceInfo */
> info = gc_malloc(sizeof(stackTraceInfo) * (cnt+1), GC_ALLOC_NOWALK);
>
> cnt = 0;
>
> STACKTRACEINIT(trace,base,base);
> while(!STACKTRACEEND(trace)) { /* <<<--- new code */
> if(STACKTRACEMETH(trace)!=-1)
> break;
> STACKTRACESTEP(trace);
> } /* <<<--- new code */
>
> for(; !STACKTRACEEND(trace); STACKTRACESTEP(trace)) {
> info[cnt].pc = STACKTRACEPC(trace);
> #if defined(INTERPRETER)
> info[cnt].meth = STACKTRACEMETH(trace);
> #endif
> #if defined(TRANSLATOR)
> info[cnt].meth = 0; /* We do this lazily */
> #endif
> cnt++;
> }
>
>
>
> regards, Stefan Burstroem
>
> -----------------------------------------------------------------------
> >> Irl: Stefan Burstroem << >> Omnipresence Intl. << >> Irc: Yabba <<
> >> Phone: +46 (0)46-211 40 84 << >> EMail: stefan@omnipresence.com <<
> -----------------------------------------------------------------------
>
>