[Vm-dev] There are something fishy with FFI plugin

Eliot Miranda eliot.miranda at gmail.com
Tue Apr 24 23:20:48 UTC 2012

On Tue, Apr 24, 2012 at 2:53 PM, Igor Stasenko <siguctua at gmail.com> wrote:

> On 24 April 2012 19:16, Torsten Bergmann <astares at gmx.de> wrote:
> >
> > Load latest from ConfigurationOfFFI from MetacellRepository:
> >
> > For me the FFIPluginTest fails with latest Pharo 1.4 VM
> > - so at least one has a reproducable case.
> >
> Esteban spent whole day today trying to find the offending bug.
> Source code match 1:1 with Eliot's code, because there was no any
> changes in it..
> still the results is that it refuses to work correctly on windoze.

You need to understand what the ThreadedFFIPlugin tries to do with alloca
and that various compilers may implement alloca in a number of different
ways.  You then need to look at what the compiler actually does and figure
out how to subvert it to do what you want to do.

1.  the ThreadedFFIPlugin uses alloca to stack-allocate the space for the
outgoing parameters of the FFI call.  Sicne on x86 all parameters are
passed on the stack and none in registers alloca is ideal.  Notionally the
plugin can call alloca to extend the stack downwards (stacks grow down, the
result answered by alloca is a pointer to the start of N bytes, hence it is
effectively the stack pointer. If this doesn't make sense to you *draw a
picture on a whiteboard* of what you expect alloca(29) to do)

2. some C compilers are nice and implement alloca(N) as effectively
stackPointer := stackPointer - roundUpTo(N,StackAlignment).  For these
compilers we don't need to do anything.  Some C compilers try and be clever
and answer stackPointer + 4, or something else.  In these cases we need to
get the actual stack pointer.  So see the code ThreadedFFIPlugin

3.  look at what the C compiler produces for the alloca call (and/or run
under gdb) to see what happens to the stack pointer and what ends up in the
allocation var in ffiCall:ArgArrayOrNil:NumArgs:.

4. update ThreadedFFIPlugin class>>preambleCCode. appropriately until
you've bent alloca and the C compiler to your will.

You will not make this work without trying to understand what is going on
and looking at what your C compiler produces.  This is low-level hackery
that aims to avoid having to write any assembler (outside of very few C asm


> > Thx
> > T.
> > --
> > NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!
> > Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a
> --
> Best regards,
> Igor Stasenko.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120424/d062929a/attachment.htm

More information about the Vm-dev mailing list