[squeak-dev] Re: x86 linux VM FFI FPU stack overflow

bryce at kampjes.demon.co.uk bryce at kampjes.demon.co.uk
Tue Jan 13 22:19:44 UTC 2009


nicolas cellier writes:
 > nicolas cellier a écrit :
 > > 
 > > Apologies for the cryptic subject...
 > > 
 > > I have some news about http://bugs.squeak.org/view.php?id=3929
 > > I detected with gdb that the example I provided triggers a FPU stack 
 > > overflow. When this occurs, a qNan is placed on FPU stack top.
 > > 
 > > Thus, though ffiFloatReturnValue == 0.0, testing in Smalltalk (self 
 > > myFFICall = 0.0) will result in 0.0==Nan due to stack overflow.
 > > primitive which execute special send #= will incorrectly return false...
 > > 
 > > Don't tell me to not use = on Floats, this is not the problem, you can 
 > > replace the test with (self myFFICall < 1.0), you will get (0.0<qNan) -> 
 > > false all the same.
 > > 
 > > At this point, I see two possibilities:
 > > - either I totally messed up with calling conventions
 > > - or the FFI glue ffiCallAddressOf is broken
 > > ($VM/Squeak-3.10-1/platforms/unix/plugins/SqueakFFIPrims/x86-sysv-asm)
 > > 
 > > I have no knowledge about IA-32 and don't wish to learn further, using 
 > > gdb at instruction level was already painfull enough for me.
 > > Can somebody aware of x86 and calling convention check my guess?
 > > 
 > > Nicolas
 > > 
 > > 
 > 
 > Any one that can provide light on this subject?
 > Or just get a contact with Ian Piumarta?
 > 
 > I feel a bit alone

Try creating your own mock call with the same prototype that just
logs it's arguments. Or place a gdb call inside the called function
or mock.

I'd guess that floats work for FFI as it's used for OpenGL in Croquet.

I haven't looked at floating point calling conventions so can't help
more.

Bryce



More information about the Squeak-dev mailing list