wide function pointer type

Florian Weimer fweimer@redhat.com
Wed Oct 20 09:10:00 GMT 2021


* Martin Uecker:

> One (of several) use cases is for language interoperability.
>
> A common problem is to pass a function of a high-level
> language as a callback to an C API.  This now often
> requires special boiler plate code for each case and
> there is no automatic way to do this. The fundamental
> problem is that the C type can not express that a data
> pointer belongs to a function pointer.
>
> void foo(
>   void (cb1)(void* data, int a), void* data1,
>   void* other_data);  
>
> Here a human (and maybe also a machine) could guess
> that data1 belongs to cb1 but not other_data.  But
> it is not clear and in more complicated cases
> even less so.
>
> void foo(void (_Wide cb1)(int a), void* other_data);
>
>
> With the new type that would be unambiguous (and 
> wrappers could then often be created automatically).
> At least for the C API one would also expect ABI
> stability.

I don't expect a lot of uptake for this.  One problem is the suggested
aggregate representation of wide function pointers.  It's not exactly
common for non-C implementations to implement those aspects of the
platform C ABI.  For many targets, even C and C++ compilers do not
always agree completely on the finer points.  Passing code and data
pointer in separate arguments is much more robust, and safely within the
interoperable ABI subset.

Perhaps a set of standard attributes to describe the explicit closure
argument would be useful, though.

Thanks,
Florian



More information about the Libffi-discuss mailing list