xref: /aosp_15_r20/external/libffi/README.md (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth SwaminathanStatus
2*1fd5a2e1SPrashanth Swaminathan======
3*1fd5a2e1SPrashanth Swaminathan
4*1fd5a2e1SPrashanth Swaminathan[![Build Status](https://travis-ci.org/libffi/libffi.svg?branch=master)](https://travis-ci.org/libffi/libffi)
5*1fd5a2e1SPrashanth Swaminathan[![Build status](https://ci.appveyor.com/api/projects/status/8lko9vagbx4w2kxq?svg=true)](https://ci.appveyor.com/project/atgreen/libffi)
6*1fd5a2e1SPrashanth Swaminathan
7*1fd5a2e1SPrashanth Swaminathanlibffi-3.3 was released on November 23, 2019.  Check the libffi web
8*1fd5a2e1SPrashanth Swaminathanpage for updates: <URL:http://sourceware.org/libffi/>.
9*1fd5a2e1SPrashanth Swaminathan
10*1fd5a2e1SPrashanth Swaminathan
11*1fd5a2e1SPrashanth SwaminathanWhat is libffi?
12*1fd5a2e1SPrashanth Swaminathan===============
13*1fd5a2e1SPrashanth Swaminathan
14*1fd5a2e1SPrashanth SwaminathanCompilers for high level languages generate code that follow certain
15*1fd5a2e1SPrashanth Swaminathanconventions. These conventions are necessary, in part, for separate
16*1fd5a2e1SPrashanth Swaminathancompilation to work. One such convention is the "calling
17*1fd5a2e1SPrashanth Swaminathanconvention". The "calling convention" is essentially a set of
18*1fd5a2e1SPrashanth Swaminathanassumptions made by the compiler about where function arguments will
19*1fd5a2e1SPrashanth Swaminathanbe found on entry to a function. A "calling convention" also specifies
20*1fd5a2e1SPrashanth Swaminathanwhere the return value for a function is found.
21*1fd5a2e1SPrashanth Swaminathan
22*1fd5a2e1SPrashanth SwaminathanSome programs may not know at the time of compilation what arguments
23*1fd5a2e1SPrashanth Swaminathanare to be passed to a function. For instance, an interpreter may be
24*1fd5a2e1SPrashanth Swaminathantold at run-time about the number and types of arguments used to call
25*1fd5a2e1SPrashanth Swaminathana given function. Libffi can be used in such programs to provide a
26*1fd5a2e1SPrashanth Swaminathanbridge from the interpreter program to compiled code.
27*1fd5a2e1SPrashanth Swaminathan
28*1fd5a2e1SPrashanth SwaminathanThe libffi library provides a portable, high level programming
29*1fd5a2e1SPrashanth Swaminathaninterface to various calling conventions. This allows a programmer to
30*1fd5a2e1SPrashanth Swaminathancall any function specified by a call interface description at run
31*1fd5a2e1SPrashanth Swaminathantime.
32*1fd5a2e1SPrashanth Swaminathan
33*1fd5a2e1SPrashanth SwaminathanFFI stands for Foreign Function Interface.  A foreign function
34*1fd5a2e1SPrashanth Swaminathaninterface is the popular name for the interface that allows code
35*1fd5a2e1SPrashanth Swaminathanwritten in one language to call code written in another language. The
36*1fd5a2e1SPrashanth Swaminathanlibffi library really only provides the lowest, machine dependent
37*1fd5a2e1SPrashanth Swaminathanlayer of a fully featured foreign function interface. A layer must
38*1fd5a2e1SPrashanth Swaminathanexist above libffi that handles type conversions for values passed
39*1fd5a2e1SPrashanth Swaminathanbetween the two languages.
40*1fd5a2e1SPrashanth Swaminathan
41*1fd5a2e1SPrashanth Swaminathan
42*1fd5a2e1SPrashanth SwaminathanSupported Platforms
43*1fd5a2e1SPrashanth Swaminathan===================
44*1fd5a2e1SPrashanth Swaminathan
45*1fd5a2e1SPrashanth SwaminathanLibffi has been ported to many different platforms.
46*1fd5a2e1SPrashanth Swaminathan
47*1fd5a2e1SPrashanth SwaminathanAt the time of release, the following basic configurations have been
48*1fd5a2e1SPrashanth Swaminathantested:
49*1fd5a2e1SPrashanth Swaminathan
50*1fd5a2e1SPrashanth Swaminathan| Architecture    | Operating System | Compiler                |
51*1fd5a2e1SPrashanth Swaminathan| --------------- | ---------------- | ----------------------- |
52*1fd5a2e1SPrashanth Swaminathan| AArch64 (ARM64) | iOS              | Clang                   |
53*1fd5a2e1SPrashanth Swaminathan| AArch64         | Linux            | GCC                     |
54*1fd5a2e1SPrashanth Swaminathan| AArch64         | Windows          | MSVC                    |
55*1fd5a2e1SPrashanth Swaminathan| Alpha           | Linux            | GCC                     |
56*1fd5a2e1SPrashanth Swaminathan| Alpha           | Tru64            | GCC                     |
57*1fd5a2e1SPrashanth Swaminathan| ARC             | Linux            | GCC                     |
58*1fd5a2e1SPrashanth Swaminathan| ARM             | Linux            | GCC                     |
59*1fd5a2e1SPrashanth Swaminathan| ARM             | iOS              | GCC                     |
60*1fd5a2e1SPrashanth Swaminathan| ARM             | Windows          | MSVC                    |
61*1fd5a2e1SPrashanth Swaminathan| AVR32           | Linux            | GCC                     |
62*1fd5a2e1SPrashanth Swaminathan| Blackfin        | uClinux          | GCC                     |
63*1fd5a2e1SPrashanth Swaminathan| HPPA            | HPUX             | GCC                     |
64*1fd5a2e1SPrashanth Swaminathan| IA-64           | Linux            | GCC                     |
65*1fd5a2e1SPrashanth Swaminathan| M68K            | FreeMiNT         | GCC                     |
66*1fd5a2e1SPrashanth Swaminathan| M68K            | Linux            | GCC                     |
67*1fd5a2e1SPrashanth Swaminathan| M68K            | RTEMS            | GCC                     |
68*1fd5a2e1SPrashanth Swaminathan| M88K            | OpenBSD/mvme88k  | GCC                     |
69*1fd5a2e1SPrashanth Swaminathan| Meta            | Linux            | GCC                     |
70*1fd5a2e1SPrashanth Swaminathan| MicroBlaze      | Linux            | GCC                     |
71*1fd5a2e1SPrashanth Swaminathan| MIPS            | IRIX             | GCC                     |
72*1fd5a2e1SPrashanth Swaminathan| MIPS            | Linux            | GCC                     |
73*1fd5a2e1SPrashanth Swaminathan| MIPS            | RTEMS            | GCC                     |
74*1fd5a2e1SPrashanth Swaminathan| MIPS64          | Linux            | GCC                     |
75*1fd5a2e1SPrashanth Swaminathan| Moxie           | Bare metal       | GCC                     |
76*1fd5a2e1SPrashanth Swaminathan| Nios II         | Linux            | GCC                     |
77*1fd5a2e1SPrashanth Swaminathan| OpenRISC        | Linux            | GCC                     |
78*1fd5a2e1SPrashanth Swaminathan| PowerPC 32-bit  | AIX              | IBM XL C                |
79*1fd5a2e1SPrashanth Swaminathan| PowerPC 64-bit  | AIX              | IBM XL C                |
80*1fd5a2e1SPrashanth Swaminathan| PowerPC         | AMIGA            | GCC                     |
81*1fd5a2e1SPrashanth Swaminathan| PowerPC         | Linux            | GCC                     |
82*1fd5a2e1SPrashanth Swaminathan| PowerPC         | Mac OSX          | GCC                     |
83*1fd5a2e1SPrashanth Swaminathan| PowerPC         | FreeBSD          | GCC                     |
84*1fd5a2e1SPrashanth Swaminathan| PowerPC 64-bit  | FreeBSD          | GCC                     |
85*1fd5a2e1SPrashanth Swaminathan| PowerPC 64-bit  | Linux ELFv1      | GCC                     |
86*1fd5a2e1SPrashanth Swaminathan| PowerPC 64-bit  | Linux ELFv2      | GCC                     |
87*1fd5a2e1SPrashanth Swaminathan| RISC-V 32-bit   | Linux            | GCC                     |
88*1fd5a2e1SPrashanth Swaminathan| RISC-V 64-bit   | Linux            | GCC                     |
89*1fd5a2e1SPrashanth Swaminathan| S390            | Linux            | GCC                     |
90*1fd5a2e1SPrashanth Swaminathan| S390X           | Linux            | GCC                     |
91*1fd5a2e1SPrashanth Swaminathan| SPARC           | Linux            | GCC                     |
92*1fd5a2e1SPrashanth Swaminathan| SPARC           | Solaris          | GCC                     |
93*1fd5a2e1SPrashanth Swaminathan| SPARC           | Solaris          | Oracle Solaris Studio C |
94*1fd5a2e1SPrashanth Swaminathan| SPARC64         | Linux            | GCC                     |
95*1fd5a2e1SPrashanth Swaminathan| SPARC64         | FreeBSD          | GCC                     |
96*1fd5a2e1SPrashanth Swaminathan| SPARC64         | Solaris          | Oracle Solaris Studio C |
97*1fd5a2e1SPrashanth Swaminathan| TILE-Gx/TILEPro | Linux            | GCC                     |
98*1fd5a2e1SPrashanth Swaminathan| VAX             | OpenBSD/vax      | GCC                     |
99*1fd5a2e1SPrashanth Swaminathan| X86             | FreeBSD          | GCC                     |
100*1fd5a2e1SPrashanth Swaminathan| X86             | GNU HURD         | GCC                     |
101*1fd5a2e1SPrashanth Swaminathan| X86             | Interix          | GCC                     |
102*1fd5a2e1SPrashanth Swaminathan| X86             | kFreeBSD         | GCC                     |
103*1fd5a2e1SPrashanth Swaminathan| X86             | Linux            | GCC                     |
104*1fd5a2e1SPrashanth Swaminathan| X86             | Mac OSX          | GCC                     |
105*1fd5a2e1SPrashanth Swaminathan| X86             | OpenBSD          | GCC                     |
106*1fd5a2e1SPrashanth Swaminathan| X86             | OS/2             | GCC                     |
107*1fd5a2e1SPrashanth Swaminathan| X86             | Solaris          | GCC                     |
108*1fd5a2e1SPrashanth Swaminathan| X86             | Solaris          | Oracle Solaris Studio C |
109*1fd5a2e1SPrashanth Swaminathan| X86             | Windows/Cygwin   | GCC                     |
110*1fd5a2e1SPrashanth Swaminathan| X86             | Windows/MingW    | GCC                     |
111*1fd5a2e1SPrashanth Swaminathan| X86-64          | FreeBSD          | GCC                     |
112*1fd5a2e1SPrashanth Swaminathan| X86-64          | Linux            | GCC                     |
113*1fd5a2e1SPrashanth Swaminathan| X86-64          | Linux/x32        | GCC                     |
114*1fd5a2e1SPrashanth Swaminathan| X86-64          | OpenBSD          | GCC                     |
115*1fd5a2e1SPrashanth Swaminathan| X86-64          | Solaris          | Oracle Solaris Studio C |
116*1fd5a2e1SPrashanth Swaminathan| X86-64          | Windows/Cygwin   | GCC                     |
117*1fd5a2e1SPrashanth Swaminathan| X86-64          | Windows/MingW    | GCC                     |
118*1fd5a2e1SPrashanth Swaminathan| X86-64          | Mac OSX          | GCC                     |
119*1fd5a2e1SPrashanth Swaminathan| Xtensa          | Linux            | GCC                     |
120*1fd5a2e1SPrashanth Swaminathan
121*1fd5a2e1SPrashanth SwaminathanPlease send additional platform test results to
122*1fd5a2e1SPrashanth Swaminathan[email protected].
123*1fd5a2e1SPrashanth Swaminathan
124*1fd5a2e1SPrashanth SwaminathanInstalling libffi
125*1fd5a2e1SPrashanth Swaminathan=================
126*1fd5a2e1SPrashanth Swaminathan
127*1fd5a2e1SPrashanth SwaminathanFirst you must configure the distribution for your particular
128*1fd5a2e1SPrashanth Swaminathansystem. Go to the directory you wish to build libffi in and run the
129*1fd5a2e1SPrashanth Swaminathan"configure" program found in the root directory of the libffi source
130*1fd5a2e1SPrashanth Swaminathandistribution.  Note that building libffi requires a C99 compatible
131*1fd5a2e1SPrashanth Swaminathancompiler.
132*1fd5a2e1SPrashanth Swaminathan
133*1fd5a2e1SPrashanth SwaminathanIf you're building libffi directly from git hosted sources, configure
134*1fd5a2e1SPrashanth Swaminathanwon't exist yet; run ./autogen.sh first.  This will require that you
135*1fd5a2e1SPrashanth Swaminathaninstall autoconf, automake and libtool.
136*1fd5a2e1SPrashanth Swaminathan
137*1fd5a2e1SPrashanth SwaminathanYou may want to tell configure where to install the libffi library and
138*1fd5a2e1SPrashanth Swaminathanheader files. To do that, use the ``--prefix`` configure switch.  Libffi
139*1fd5a2e1SPrashanth Swaminathanwill install under /usr/local by default.
140*1fd5a2e1SPrashanth Swaminathan
141*1fd5a2e1SPrashanth SwaminathanIf you want to enable extra run-time debugging checks use the the
142*1fd5a2e1SPrashanth Swaminathan``--enable-debug`` configure switch. This is useful when your program dies
143*1fd5a2e1SPrashanth Swaminathanmysteriously while using libffi.
144*1fd5a2e1SPrashanth Swaminathan
145*1fd5a2e1SPrashanth SwaminathanAnother useful configure switch is ``--enable-purify-safety``. Using this
146*1fd5a2e1SPrashanth Swaminathanwill add some extra code which will suppress certain warnings when you
147*1fd5a2e1SPrashanth Swaminathanare using Purify with libffi. Only use this switch when using
148*1fd5a2e1SPrashanth SwaminathanPurify, as it will slow down the library.
149*1fd5a2e1SPrashanth Swaminathan
150*1fd5a2e1SPrashanth SwaminathanIf you don't want to build documentation, use the ``--disable-docs``
151*1fd5a2e1SPrashanth Swaminathanconfigure switch.
152*1fd5a2e1SPrashanth Swaminathan
153*1fd5a2e1SPrashanth SwaminathanIt's also possible to build libffi on Windows platforms with
154*1fd5a2e1SPrashanth SwaminathanMicrosoft's Visual C++ compiler.  In this case, use the msvcc.sh
155*1fd5a2e1SPrashanth Swaminathanwrapper script during configuration like so:
156*1fd5a2e1SPrashanth Swaminathan
157*1fd5a2e1SPrashanth Swaminathan    path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL"
158*1fd5a2e1SPrashanth Swaminathan
159*1fd5a2e1SPrashanth SwaminathanFor 64-bit Windows builds, use ``CC="path/to/msvcc.sh -m64"`` and
160*1fd5a2e1SPrashanth Swaminathan``CXX="path/to/msvcc.sh -m64"``.  You may also need to specify
161*1fd5a2e1SPrashanth Swaminathan``--build`` appropriately.
162*1fd5a2e1SPrashanth Swaminathan
163*1fd5a2e1SPrashanth SwaminathanIt is also possible to build libffi on Windows platforms with the LLVM
164*1fd5a2e1SPrashanth Swaminathanproject's clang-cl compiler, like below:
165*1fd5a2e1SPrashanth Swaminathan
166*1fd5a2e1SPrashanth Swaminathan    path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP"
167*1fd5a2e1SPrashanth Swaminathan
168*1fd5a2e1SPrashanth SwaminathanWhen building with MSVC under a MingW environment, you may need to
169*1fd5a2e1SPrashanth Swaminathanremove the line in configure that sets 'fix_srcfile_path' to a 'cygpath'
170*1fd5a2e1SPrashanth Swaminathancommand.  ('cygpath' is not present in MingW, and is not required when
171*1fd5a2e1SPrashanth Swaminathanusing MingW-style paths.)
172*1fd5a2e1SPrashanth Swaminathan
173*1fd5a2e1SPrashanth SwaminathanTo build static library for ARM64 with MSVC using visual studio solution, msvc_build folder have
174*1fd5a2e1SPrashanth Swaminathan   aarch64/Ffi_staticLib.sln
175*1fd5a2e1SPrashanth Swaminathan   required header files in aarch64/aarch64_include/
176*1fd5a2e1SPrashanth Swaminathan
177*1fd5a2e1SPrashanth Swaminathan
178*1fd5a2e1SPrashanth SwaminathanSPARC Solaris builds require the use of the GNU assembler and linker.
179*1fd5a2e1SPrashanth SwaminathanPoint ``AS`` and ``LD`` environment variables at those tool prior to
180*1fd5a2e1SPrashanth Swaminathanconfiguration.
181*1fd5a2e1SPrashanth Swaminathan
182*1fd5a2e1SPrashanth SwaminathanFor iOS builds, the ``libffi.xcodeproj`` Xcode project is available.
183*1fd5a2e1SPrashanth Swaminathan
184*1fd5a2e1SPrashanth SwaminathanConfigure has many other options. Use ``configure --help`` to see them all.
185*1fd5a2e1SPrashanth Swaminathan
186*1fd5a2e1SPrashanth SwaminathanOnce configure has finished, type "make". Note that you must be using
187*1fd5a2e1SPrashanth SwaminathanGNU make.  You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
188*1fd5a2e1SPrashanth Swaminathan
189*1fd5a2e1SPrashanth SwaminathanTo ensure that libffi is working as advertised, type "make check".
190*1fd5a2e1SPrashanth SwaminathanThis will require that you have DejaGNU installed.
191*1fd5a2e1SPrashanth Swaminathan
192*1fd5a2e1SPrashanth SwaminathanTo install the library and header files, type ``make install``.
193*1fd5a2e1SPrashanth Swaminathan
194*1fd5a2e1SPrashanth Swaminathan
195*1fd5a2e1SPrashanth SwaminathanHistory
196*1fd5a2e1SPrashanth Swaminathan=======
197*1fd5a2e1SPrashanth Swaminathan
198*1fd5a2e1SPrashanth SwaminathanSee the git log for details at http://github.com/libffi/libffi.
199*1fd5a2e1SPrashanth Swaminathan
200*1fd5a2e1SPrashanth Swaminathan    3.3 Nov-23-19
201*1fd5a2e1SPrashanth Swaminathan        Add RISC-V support.
202*1fd5a2e1SPrashanth Swaminathan        New API in support of GO closures.
203*1fd5a2e1SPrashanth Swaminathan        Add IEEE754 binary128 long double support for 64-bit Power
204*1fd5a2e1SPrashanth Swaminathan        Default to Microsoft's 64 bit long double ABI with Visual C++.
205*1fd5a2e1SPrashanth Swaminathan        GNU compiler uses 80 bits (128 in memory) FFI_GNUW64 ABI.
206*1fd5a2e1SPrashanth Swaminathan        Add Windows on ARM64 (WOA) support.
207*1fd5a2e1SPrashanth Swaminathan        Add Windows 32-bit ARM support.
208*1fd5a2e1SPrashanth Swaminathan        Raw java (gcj) API deprecated.
209*1fd5a2e1SPrashanth Swaminathan	Add pre-built PDF documentation to source distribution.
210*1fd5a2e1SPrashanth Swaminathan        Many new tests cases and bug fixes.
211*1fd5a2e1SPrashanth Swaminathan
212*1fd5a2e1SPrashanth Swaminathan    3.2.1 Nov-12-14
213*1fd5a2e1SPrashanth Swaminathan        Build fix for non-iOS AArch64 targets.
214*1fd5a2e1SPrashanth Swaminathan
215*1fd5a2e1SPrashanth Swaminathan    3.2 Nov-11-14
216*1fd5a2e1SPrashanth Swaminathan        Add C99 Complex Type support (currently only supported on
217*1fd5a2e1SPrashanth Swaminathan          s390).
218*1fd5a2e1SPrashanth Swaminathan        Add support for PASCAL and REGISTER calling conventions on x86
219*1fd5a2e1SPrashanth Swaminathan          Windows/Linux.
220*1fd5a2e1SPrashanth Swaminathan        Add OpenRISC and Cygwin-64 support.
221*1fd5a2e1SPrashanth Swaminathan        Bug fixes.
222*1fd5a2e1SPrashanth Swaminathan
223*1fd5a2e1SPrashanth Swaminathan    3.1 May-19-14
224*1fd5a2e1SPrashanth Swaminathan        Add AArch64 (ARM64) iOS support.
225*1fd5a2e1SPrashanth Swaminathan        Add Nios II support.
226*1fd5a2e1SPrashanth Swaminathan        Add m88k and DEC VAX support.
227*1fd5a2e1SPrashanth Swaminathan        Add support for stdcall, thiscall, and fastcall on non-Windows
228*1fd5a2e1SPrashanth Swaminathan          32-bit x86 targets such as Linux.
229*1fd5a2e1SPrashanth Swaminathan        Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi
230*1fd5a2e1SPrashanth Swaminathan          fixes.
231*1fd5a2e1SPrashanth Swaminathan        Make the testsuite more robust: eliminate several spurious
232*1fd5a2e1SPrashanth Swaminathan          failures, and respect the $CC and $CXX environment variables.
233*1fd5a2e1SPrashanth Swaminathan        Archive off the manually maintained ChangeLog in favor of git
234*1fd5a2e1SPrashanth Swaminathan          log.
235*1fd5a2e1SPrashanth Swaminathan
236*1fd5a2e1SPrashanth Swaminathan    3.0.13 Mar-17-13
237*1fd5a2e1SPrashanth Swaminathan        Add Meta support.
238*1fd5a2e1SPrashanth Swaminathan        Add missing Moxie bits.
239*1fd5a2e1SPrashanth Swaminathan        Fix stack alignment bug on 32-bit x86.
240*1fd5a2e1SPrashanth Swaminathan        Build fix for m68000 targets.
241*1fd5a2e1SPrashanth Swaminathan        Build fix for soft-float Power targets.
242*1fd5a2e1SPrashanth Swaminathan        Fix the install dir location for some platforms when building
243*1fd5a2e1SPrashanth Swaminathan          with GCC (OS X, Solaris).
244*1fd5a2e1SPrashanth Swaminathan        Fix Cygwin regression.
245*1fd5a2e1SPrashanth Swaminathan
246*1fd5a2e1SPrashanth Swaminathan    3.0.12 Feb-11-13
247*1fd5a2e1SPrashanth Swaminathan        Add Moxie support.
248*1fd5a2e1SPrashanth Swaminathan        Add AArch64 support.
249*1fd5a2e1SPrashanth Swaminathan        Add Blackfin support.
250*1fd5a2e1SPrashanth Swaminathan        Add TILE-Gx/TILEPro support.
251*1fd5a2e1SPrashanth Swaminathan        Add MicroBlaze support.
252*1fd5a2e1SPrashanth Swaminathan        Add Xtensa support.
253*1fd5a2e1SPrashanth Swaminathan        Add support for PaX enabled kernels with MPROTECT.
254*1fd5a2e1SPrashanth Swaminathan        Add support for native vendor compilers on
255*1fd5a2e1SPrashanth Swaminathan          Solaris and AIX.
256*1fd5a2e1SPrashanth Swaminathan        Work around LLVM/GCC interoperability issue on x86_64.
257*1fd5a2e1SPrashanth Swaminathan
258*1fd5a2e1SPrashanth Swaminathan    3.0.11 Apr-11-12
259*1fd5a2e1SPrashanth Swaminathan        Lots of build fixes.
260*1fd5a2e1SPrashanth Swaminathan        Add support for variadic functions (ffi_prep_cif_var).
261*1fd5a2e1SPrashanth Swaminathan        Add Linux/x32 support.
262*1fd5a2e1SPrashanth Swaminathan        Add thiscall, fastcall and MSVC cdecl support on Windows.
263*1fd5a2e1SPrashanth Swaminathan        Add Amiga and newer MacOS support.
264*1fd5a2e1SPrashanth Swaminathan        Add m68k FreeMiNT support.
265*1fd5a2e1SPrashanth Swaminathan        Integration with iOS' xcode build tools.
266*1fd5a2e1SPrashanth Swaminathan        Fix Octeon and MC68881 support.
267*1fd5a2e1SPrashanth Swaminathan        Fix code pessimizations.
268*1fd5a2e1SPrashanth Swaminathan
269*1fd5a2e1SPrashanth Swaminathan    3.0.10 Aug-23-11
270*1fd5a2e1SPrashanth Swaminathan        Add support for Apple's iOS.
271*1fd5a2e1SPrashanth Swaminathan        Add support for ARM VFP ABI.
272*1fd5a2e1SPrashanth Swaminathan        Add RTEMS support for MIPS and M68K.
273*1fd5a2e1SPrashanth Swaminathan        Fix instruction cache clearing problems on
274*1fd5a2e1SPrashanth Swaminathan          ARM and SPARC.
275*1fd5a2e1SPrashanth Swaminathan        Fix the N64 build on mips-sgi-irix6.5.
276*1fd5a2e1SPrashanth Swaminathan        Enable builds with Microsoft's compiler.
277*1fd5a2e1SPrashanth Swaminathan        Enable x86 builds with Oracle's Solaris compiler.
278*1fd5a2e1SPrashanth Swaminathan        Fix support for calling code compiled with Oracle's Sparc
279*1fd5a2e1SPrashanth Swaminathan          Solaris compiler.
280*1fd5a2e1SPrashanth Swaminathan        Testsuite fixes for Tru64 Unix.
281*1fd5a2e1SPrashanth Swaminathan        Additional platform support.
282*1fd5a2e1SPrashanth Swaminathan
283*1fd5a2e1SPrashanth Swaminathan    3.0.9 Dec-31-09
284*1fd5a2e1SPrashanth Swaminathan        Add AVR32 and win64 ports.  Add ARM softfp support.
285*1fd5a2e1SPrashanth Swaminathan        Many fixes for AIX, Solaris, HP-UX, *BSD.
286*1fd5a2e1SPrashanth Swaminathan        Several PowerPC and x86-64 bug fixes.
287*1fd5a2e1SPrashanth Swaminathan        Build DLL for windows.
288*1fd5a2e1SPrashanth Swaminathan
289*1fd5a2e1SPrashanth Swaminathan    3.0.8 Dec-19-08
290*1fd5a2e1SPrashanth Swaminathan        Add *BSD, BeOS, and PA-Linux support.
291*1fd5a2e1SPrashanth Swaminathan
292*1fd5a2e1SPrashanth Swaminathan    3.0.7 Nov-11-08
293*1fd5a2e1SPrashanth Swaminathan        Fix for ppc FreeBSD.
294*1fd5a2e1SPrashanth Swaminathan        (thanks to Andreas Tobler)
295*1fd5a2e1SPrashanth Swaminathan
296*1fd5a2e1SPrashanth Swaminathan    3.0.6 Jul-17-08
297*1fd5a2e1SPrashanth Swaminathan        Fix for closures on sh.
298*1fd5a2e1SPrashanth Swaminathan        Mark the sh/sh64 stack as non-executable.
299*1fd5a2e1SPrashanth Swaminathan        (both thanks to Kaz Kojima)
300*1fd5a2e1SPrashanth Swaminathan
301*1fd5a2e1SPrashanth Swaminathan    3.0.5 Apr-3-08
302*1fd5a2e1SPrashanth Swaminathan        Fix libffi.pc file.
303*1fd5a2e1SPrashanth Swaminathan        Fix #define ARM for IcedTea users.
304*1fd5a2e1SPrashanth Swaminathan        Fix x86 closure bug.
305*1fd5a2e1SPrashanth Swaminathan
306*1fd5a2e1SPrashanth Swaminathan    3.0.4 Feb-24-08
307*1fd5a2e1SPrashanth Swaminathan        Fix x86 OpenBSD configury.
308*1fd5a2e1SPrashanth Swaminathan
309*1fd5a2e1SPrashanth Swaminathan    3.0.3 Feb-22-08
310*1fd5a2e1SPrashanth Swaminathan        Enable x86 OpenBSD thanks to Thomas Heller, and
311*1fd5a2e1SPrashanth Swaminathan          x86-64 FreeBSD thanks to Björn König and Andreas Tobler.
312*1fd5a2e1SPrashanth Swaminathan        Clean up test instruction in README.
313*1fd5a2e1SPrashanth Swaminathan
314*1fd5a2e1SPrashanth Swaminathan    3.0.2 Feb-21-08
315*1fd5a2e1SPrashanth Swaminathan        Improved x86 FreeBSD support.
316*1fd5a2e1SPrashanth Swaminathan        Thanks to Björn König.
317*1fd5a2e1SPrashanth Swaminathan
318*1fd5a2e1SPrashanth Swaminathan    3.0.1 Feb-15-08
319*1fd5a2e1SPrashanth Swaminathan        Fix instruction cache flushing bug on MIPS.
320*1fd5a2e1SPrashanth Swaminathan        Thanks to David Daney.
321*1fd5a2e1SPrashanth Swaminathan
322*1fd5a2e1SPrashanth Swaminathan    3.0.0 Feb-15-08
323*1fd5a2e1SPrashanth Swaminathan        Many changes, mostly thanks to the GCC project.
324*1fd5a2e1SPrashanth Swaminathan        Cygnus Solutions is now Red Hat.
325*1fd5a2e1SPrashanth Swaminathan
326*1fd5a2e1SPrashanth Swaminathan      [10 years go by...]
327*1fd5a2e1SPrashanth Swaminathan
328*1fd5a2e1SPrashanth Swaminathan    1.20 Oct-5-98
329*1fd5a2e1SPrashanth Swaminathan        Raffaele Sena produces ARM port.
330*1fd5a2e1SPrashanth Swaminathan
331*1fd5a2e1SPrashanth Swaminathan    1.19 Oct-5-98
332*1fd5a2e1SPrashanth Swaminathan        Fixed x86 long double and long long return support.
333*1fd5a2e1SPrashanth Swaminathan        m68k bug fixes from Andreas Schwab.
334*1fd5a2e1SPrashanth Swaminathan        Patch for DU assembler compatibility for the Alpha from Richard
335*1fd5a2e1SPrashanth Swaminathan          Henderson.
336*1fd5a2e1SPrashanth Swaminathan
337*1fd5a2e1SPrashanth Swaminathan    1.18 Apr-17-98
338*1fd5a2e1SPrashanth Swaminathan        Bug fixes and MIPS configuration changes.
339*1fd5a2e1SPrashanth Swaminathan
340*1fd5a2e1SPrashanth Swaminathan    1.17 Feb-24-98
341*1fd5a2e1SPrashanth Swaminathan        Bug fixes and m68k port from Andreas Schwab. PowerPC port from
342*1fd5a2e1SPrashanth Swaminathan        Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
343*1fd5a2e1SPrashanth Swaminathan
344*1fd5a2e1SPrashanth Swaminathan    1.16 Feb-11-98
345*1fd5a2e1SPrashanth Swaminathan        Richard Henderson produces Alpha port.
346*1fd5a2e1SPrashanth Swaminathan
347*1fd5a2e1SPrashanth Swaminathan    1.15 Dec-4-97
348*1fd5a2e1SPrashanth Swaminathan        Fixed an n32 ABI bug. New libtool, auto* support.
349*1fd5a2e1SPrashanth Swaminathan
350*1fd5a2e1SPrashanth Swaminathan    1.14 May-13-97
351*1fd5a2e1SPrashanth Swaminathan        libtool is now used to generate shared and static libraries.
352*1fd5a2e1SPrashanth Swaminathan        Fixed a minor portability problem reported by Russ McManus
353*1fd5a2e1SPrashanth Swaminathan        <[email protected]>.
354*1fd5a2e1SPrashanth Swaminathan
355*1fd5a2e1SPrashanth Swaminathan    1.13 Dec-2-96
356*1fd5a2e1SPrashanth Swaminathan        Added --enable-purify-safety to keep Purify from complaining
357*1fd5a2e1SPrashanth Swaminathan          about certain low level code.
358*1fd5a2e1SPrashanth Swaminathan        Sparc fix for calling functions with < 6 args.
359*1fd5a2e1SPrashanth Swaminathan        Linux x86 a.out fix.
360*1fd5a2e1SPrashanth Swaminathan
361*1fd5a2e1SPrashanth Swaminathan    1.12 Nov-22-96
362*1fd5a2e1SPrashanth Swaminathan        Added missing ffi_type_void, needed for supporting void return
363*1fd5a2e1SPrashanth Swaminathan          types. Fixed test case for non MIPS machines. Cygnus Support
364*1fd5a2e1SPrashanth Swaminathan          is now Cygnus Solutions.
365*1fd5a2e1SPrashanth Swaminathan
366*1fd5a2e1SPrashanth Swaminathan    1.11 Oct-30-96
367*1fd5a2e1SPrashanth Swaminathan        Added notes about GNU make.
368*1fd5a2e1SPrashanth Swaminathan
369*1fd5a2e1SPrashanth Swaminathan    1.10 Oct-29-96
370*1fd5a2e1SPrashanth Swaminathan        Added configuration fix for non GNU compilers.
371*1fd5a2e1SPrashanth Swaminathan
372*1fd5a2e1SPrashanth Swaminathan    1.09 Oct-29-96
373*1fd5a2e1SPrashanth Swaminathan        Added --enable-debug configure switch. Clean-ups based on LCLint
374*1fd5a2e1SPrashanth Swaminathan        feedback. ffi_mips.h is always installed. Many configuration
375*1fd5a2e1SPrashanth Swaminathan        fixes. Fixed ffitest.c for sparc builds.
376*1fd5a2e1SPrashanth Swaminathan
377*1fd5a2e1SPrashanth Swaminathan    1.08 Oct-15-96
378*1fd5a2e1SPrashanth Swaminathan        Fixed n32 problem. Many clean-ups.
379*1fd5a2e1SPrashanth Swaminathan
380*1fd5a2e1SPrashanth Swaminathan    1.07 Oct-14-96
381*1fd5a2e1SPrashanth Swaminathan        Gordon Irlam rewrites v8.S again. Bug fixes.
382*1fd5a2e1SPrashanth Swaminathan
383*1fd5a2e1SPrashanth Swaminathan    1.06 Oct-14-96
384*1fd5a2e1SPrashanth Swaminathan        Gordon Irlam improved the sparc port.
385*1fd5a2e1SPrashanth Swaminathan
386*1fd5a2e1SPrashanth Swaminathan    1.05 Oct-14-96
387*1fd5a2e1SPrashanth Swaminathan        Interface changes based on feedback.
388*1fd5a2e1SPrashanth Swaminathan
389*1fd5a2e1SPrashanth Swaminathan    1.04 Oct-11-96
390*1fd5a2e1SPrashanth Swaminathan        Sparc port complete (modulo struct passing bug).
391*1fd5a2e1SPrashanth Swaminathan
392*1fd5a2e1SPrashanth Swaminathan    1.03 Oct-10-96
393*1fd5a2e1SPrashanth Swaminathan        Passing struct args, and returning struct values works for
394*1fd5a2e1SPrashanth Swaminathan        all architectures/calling conventions. Expanded tests.
395*1fd5a2e1SPrashanth Swaminathan
396*1fd5a2e1SPrashanth Swaminathan    1.02 Oct-9-96
397*1fd5a2e1SPrashanth Swaminathan        Added SGI n32 support. Fixed bugs in both o32 and Linux support.
398*1fd5a2e1SPrashanth Swaminathan        Added "make test".
399*1fd5a2e1SPrashanth Swaminathan
400*1fd5a2e1SPrashanth Swaminathan    1.01 Oct-8-96
401*1fd5a2e1SPrashanth Swaminathan        Fixed float passing bug in mips version. Restructured some
402*1fd5a2e1SPrashanth Swaminathan        of the code. Builds cleanly with SGI tools.
403*1fd5a2e1SPrashanth Swaminathan
404*1fd5a2e1SPrashanth Swaminathan    1.00 Oct-7-96
405*1fd5a2e1SPrashanth Swaminathan        First release. No public announcement.
406*1fd5a2e1SPrashanth Swaminathan
407*1fd5a2e1SPrashanth SwaminathanAuthors & Credits
408*1fd5a2e1SPrashanth Swaminathan=================
409*1fd5a2e1SPrashanth Swaminathan
410*1fd5a2e1SPrashanth Swaminathanlibffi was originally written by Anthony Green <[email protected]>.
411*1fd5a2e1SPrashanth Swaminathan
412*1fd5a2e1SPrashanth SwaminathanThe developers of the GNU Compiler Collection project have made
413*1fd5a2e1SPrashanth Swaminathaninnumerable valuable contributions.  See the ChangeLog file for
414*1fd5a2e1SPrashanth Swaminathandetails.
415*1fd5a2e1SPrashanth Swaminathan
416*1fd5a2e1SPrashanth SwaminathanSome of the ideas behind libffi were inspired by Gianni Mariani's free
417*1fd5a2e1SPrashanth Swaminathangencall library for Silicon Graphics machines.
418*1fd5a2e1SPrashanth Swaminathan
419*1fd5a2e1SPrashanth SwaminathanThe closure mechanism was designed and implemented by Kresten Krab
420*1fd5a2e1SPrashanth SwaminathanThorup.
421*1fd5a2e1SPrashanth Swaminathan
422*1fd5a2e1SPrashanth SwaminathanMajor processor architecture ports were contributed by the following
423*1fd5a2e1SPrashanth Swaminathandevelopers:
424*1fd5a2e1SPrashanth Swaminathan
425*1fd5a2e1SPrashanth Swaminathan    aarch64             Marcus Shawcroft, James Greenhalgh
426*1fd5a2e1SPrashanth Swaminathan    alpha               Richard Henderson
427*1fd5a2e1SPrashanth Swaminathan    arc                 Hackers at Synopsis
428*1fd5a2e1SPrashanth Swaminathan    arm                 Raffaele Sena
429*1fd5a2e1SPrashanth Swaminathan    avr32               Bradley Smith
430*1fd5a2e1SPrashanth Swaminathan    blackfin            Alexandre Keunecke I. de Mendonca
431*1fd5a2e1SPrashanth Swaminathan    cris                Simon Posnjak, Hans-Peter Nilsson
432*1fd5a2e1SPrashanth Swaminathan    frv                 Anthony Green
433*1fd5a2e1SPrashanth Swaminathan    ia64                Hans Boehm
434*1fd5a2e1SPrashanth Swaminathan    m32r                Kazuhiro Inaoka
435*1fd5a2e1SPrashanth Swaminathan    m68k                Andreas Schwab
436*1fd5a2e1SPrashanth Swaminathan    m88k                Miod Vallat
437*1fd5a2e1SPrashanth Swaminathan    metag               Hackers at Imagination Technologies
438*1fd5a2e1SPrashanth Swaminathan    microblaze          Nathan Rossi
439*1fd5a2e1SPrashanth Swaminathan    mips                Anthony Green, Casey Marshall
440*1fd5a2e1SPrashanth Swaminathan    mips64              David Daney
441*1fd5a2e1SPrashanth Swaminathan    moxie               Anthony Green
442*1fd5a2e1SPrashanth Swaminathan    nios ii             Sandra Loosemore
443*1fd5a2e1SPrashanth Swaminathan    openrisc            Sebastian Macke
444*1fd5a2e1SPrashanth Swaminathan    pa                  Randolph Chung, Dave Anglin, Andreas Tobler
445*1fd5a2e1SPrashanth Swaminathan    powerpc             Geoffrey Keating, Andreas Tobler,
446*1fd5a2e1SPrashanth Swaminathan                        David Edelsohn, John Hornkvist
447*1fd5a2e1SPrashanth Swaminathan    powerpc64           Jakub Jelinek
448*1fd5a2e1SPrashanth Swaminathan    riscv               Michael Knyszek, Andrew Waterman, Stef O'Rear
449*1fd5a2e1SPrashanth Swaminathan    s390                Gerhard Tonn, Ulrich Weigand
450*1fd5a2e1SPrashanth Swaminathan    sh                  Kaz Kojima
451*1fd5a2e1SPrashanth Swaminathan    sh64                Kaz Kojima
452*1fd5a2e1SPrashanth Swaminathan    sparc               Anthony Green, Gordon Irlam
453*1fd5a2e1SPrashanth Swaminathan    tile-gx/tilepro     Walter Lee
454*1fd5a2e1SPrashanth Swaminathan    vax                 Miod Vallat
455*1fd5a2e1SPrashanth Swaminathan    x86                 Anthony Green, Jon Beniston
456*1fd5a2e1SPrashanth Swaminathan    x86-64              Bo Thorsen
457*1fd5a2e1SPrashanth Swaminathan    xtensa              Chris Zankel
458*1fd5a2e1SPrashanth Swaminathan
459*1fd5a2e1SPrashanth SwaminathanJesper Skov and Andrew Haley both did more than their fair share of
460*1fd5a2e1SPrashanth Swaminathanstepping through the code and tracking down bugs.
461*1fd5a2e1SPrashanth Swaminathan
462*1fd5a2e1SPrashanth SwaminathanThanks also to Tom Tromey for bug fixes, documentation and
463*1fd5a2e1SPrashanth Swaminathanconfiguration help.
464*1fd5a2e1SPrashanth Swaminathan
465*1fd5a2e1SPrashanth SwaminathanThanks to Jim Blandy, who provided some useful feedback on the libffi
466*1fd5a2e1SPrashanth Swaminathaninterface.
467*1fd5a2e1SPrashanth Swaminathan
468*1fd5a2e1SPrashanth SwaminathanAndreas Tobler has done a tremendous amount of work on the testsuite.
469*1fd5a2e1SPrashanth Swaminathan
470*1fd5a2e1SPrashanth SwaminathanAlex Oliva solved the executable page problem for SElinux.
471*1fd5a2e1SPrashanth Swaminathan
472*1fd5a2e1SPrashanth SwaminathanThe list above is almost certainly incomplete and inaccurate.  I'm
473*1fd5a2e1SPrashanth Swaminathanhappy to make corrections or additions upon request.
474*1fd5a2e1SPrashanth Swaminathan
475*1fd5a2e1SPrashanth SwaminathanIf you have a problem, or have found a bug, please send a note to the
476*1fd5a2e1SPrashanth Swaminathanauthor at [email protected], or the project mailing list at
477*1fd5a2e1SPrashanth Swaminathan[email protected].
478