Previously, we assumed that the fixed and variadic arguments of a variadic function were passed to the function in the same way. The arm64 calling convention used by iOS breaks this assumption by passing fixed arguments in registers or on the stack, depending on the position, while variadic arguments are always passed on the stack. Solving this problem while still allowing function redefinition at runtime requires introducing additional dispatch functions. These dispatch functions take no fixed arguments and pass all their arguments to the actual function. This dispatch is enabled by passing -DECL_C_COMPATIBLE_VARIADIC_DISPATCH to the C compiler. This problem was originally identified and a solution provided by thewhimer@gmail.com. This commit based on his work with minor improvements. |
||
|---|---|---|
| contrib | ||
| examples | ||
| msvc | ||
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| appveyor.yml | ||
| CHANGELOG | ||
| configure | ||
| COPYING | ||
| INSTALL | ||
| LICENSE | ||
| Makefile.in | ||
| README.md | ||
ECL stands for Embeddable Common-Lisp. The ECL project aims to produce an implementation of the Common-Lisp language which complies to the ANSI X3J13 definition of the language.
The term embeddable refers to the fact that ECL includes a Lisp to C compiler, which produces libraries (static or dynamic) that can be called from C programs. Furthermore, ECL can produce standalone executables from Lisp code and can itself be linked to your programs as a shared library. It also features an interpreter for situations when a C compiler isn't available.
ECL supports the operating systems Linux, FreeBSD, NetBSD, DragonFly BSD, OpenBSD, Solaris (at least v. 9), Microsoft Windows (MSVC, MinGW and Cygwin) and OSX, running on top of the Intel, Sparc, Alpha, ARM and PowerPC processors. Porting to other architectures should be rather easy.