Problem with m68k sysdepCallMethodV?

Stefan Burstroem f94sbu at efd.lth.se
Sat Feb 20 17:40:42 PST 1999


Hi Kiyo!
In article <199902210745.QAA23831 at snoopy.src.ricoh.co.jp> you wrote:

>But as far as netbsd is concerned, it has one serious bug. I
>mean, the jit version works fine for simple program like
>HelloWorld, but it does not work for pizza. And this is what
>I am currently debugging.

Try this:

Increase the default stack to 64k and fix this:


#define CALL_KAFFE_EXCEPTION(frame, info, obj)				\
	__asm__ __volatile__(						\
		"move%.l %0,%/a6\n\t"					\
		"move%.l %1,%/d0\n\t"					\
		"jmp %2@"						\
		: : "g"(frame->retbp), "g"(obj), "a"(info.handler)	\
		: "d0", "cc", "memory")



to

#define CALL_KAFFE_EXCEPTION(frame, info, obj)				\
	__asm__ __volatile__(						\
		"move%.l %1,%/d0\n\t"					\
		"move%.l %0,%/fp\n\t"					\
		"jmp %2@"						\
		: : "g"(frame->retfp), "g"(obj), "a"(info.handler)	\
		: "d0", "cc", "memory")

Note the change in order of the fp.
When the first one is compiled, the fp is used to get the 2nd parameter
(which is the exception object) but since the framepointer is already
changed, you can figure out the rest. gcc apparently doesn't see that the
fp is changed. It took me 12 hours of assembly debugging to figure this out
so I though I could help you a little here ;)


regards, Stefan Burstroem

-----------------------------------------------------------------------
>> Irl: Stefan Burstroem <<  >> Omnipresence Intl. <<  >> Irc: Yabba <<
 >> Phone: +46 (0)46-211 40 84 << >> EMail: stefan at omnipresence.com <<
-----------------------------------------------------------------------



More information about the kaffe mailing list