libffi-ios provides an experimental port of libffi to Apple's iOS.
The libffi closure mechanism has previously required the use of executable data pages, however, iOS sandbox restrictions prevent their use.
The OS does, however, permit remapping of executable pages, allowing one to remap a single page to multiple locations. libffi-ios modifies
ffi_closure_alloc/ffi_closure_free APIs to make use of this functionality to implement dynamically allocated and configured closure
trampolines without requiring the use of executable data.
The implementation works by allocating a writable config page, and then remapping a page of pre-compiled trampolines directly
after the config page. The trampolines use PC-relative addressing to load their context from the config page, and so it is possible
to allocate as many of these trampolines tables as you have memory space.
Note that this implementation is *experimental* and has seen very limited testing.
A build-ios.sh script is provided to configure and build an iOS library; you may need to edit the SDK settings in the script.