[CM] On FFI bindings
Christos Vagias
chris.actondev at gmail.com
Thu Oct 22 13:18:14 PDT 2020
If I understood correctly you get a segfault when having the C function
with 2 args (s7_scheme and s7_pointer)
but passing only s7_scheme.
This seems relevant:
https://stackoverflow.com/questions/12572575/i-can-call-a-function-imported-with-dlsym-with-a-wrong-signature-why
and particularly the answer saying
"C uses cdecl call conversion (so caller clears the stack) [..]
But actually behavior is undefined"
In any case, I'm really noob in this area so that's all I can contribute.
So my 2 cents:
- when not having passed init_args: calling the C init_func(s7_scheme)
(serving also as backwards compatibility)
- when init_args is present, calling init_func(s7_scheme, s7_pointer)
On Thu, 22 Oct 2020 at 21:57, <bil at ccrma.stanford.edu> wrote:
> > how does C behave if you assume that the called function has a
> > signature
> > of (s7_scheme* sc) and you try to pass (s7_scheme* sc, s7_pointer args)
> > ?
>
> I tried it with the tlib example, and if you declare args in C, but
> don't pass them in scheme (i.e. no init_args in the environment),
> I get a segfault. The other way (no args declared, but you pass and
> use them anyway) seems to work -- strange! This is in gcc 10.2
> in Linux.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cm-mail.stanford.edu/pipermail/cmdist/attachments/20201022/539b8572/attachment.html>
More information about the Cmdist
mailing list