blob: f8c7cba817c3c14a140dd3abc975c3fb46396f5a [file] [log] [blame]
Anthony Greenc6dddbd2009-10-04 08:11:33 -04001Status
2======
3
Anthony Green048d2f42012-10-11 10:55:25 -04004libffi-3.0.12 was released on XXXXXXX. Check the libffi web page for
Anthony Green09b23cf2012-04-27 08:29:48 -04005updates: <URL:http://sourceware.org/libffi/>.
Anthony Greenc6dddbd2009-10-04 08:11:33 -04006
7
8What is libffi?
9===============
10
11Compilers for high level languages generate code that follow certain
12conventions. These conventions are necessary, in part, for separate
13compilation to work. One such convention is the "calling
14convention". The "calling convention" is essentially a set of
15assumptions made by the compiler about where function arguments will
16be found on entry to a function. A "calling convention" also specifies
17where the return value for a function is found.
18
19Some programs may not know at the time of compilation what arguments
20are to be passed to a function. For instance, an interpreter may be
21told at run-time about the number and types of arguments used to call
22a given function. Libffi can be used in such programs to provide a
23bridge from the interpreter program to compiled code.
24
25The libffi library provides a portable, high level programming
26interface to various calling conventions. This allows a programmer to
27call any function specified by a call interface description at run
28time.
29
30FFI stands for Foreign Function Interface. A foreign function
31interface is the popular name for the interface that allows code
32written in one language to call code written in another language. The
33libffi library really only provides the lowest, machine dependent
34layer of a fully featured foreign function interface. A layer must
35exist above libffi that handles type conversions for values passed
36between the two languages.
37
38
39Supported Platforms
40===================
41
Anthony Green0cfe60e2009-12-29 10:06:04 -050042Libffi has been ported to many different platforms.
43For specific configuration details and testing status, please
44refer to the wiki page here:
Anthony Greenc6dddbd2009-10-04 08:11:33 -040045
Anthony Greenee6696f2011-08-23 12:30:29 -040046 http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.11
Anthony Green0cfe60e2009-12-29 10:06:04 -050047
48At the time of release, the following basic configurations have been
49tested:
50
Anthony Green9c00a3f2012-10-12 16:46:06 -040051|-----------------+------------------|
52| Architecture | Operating System |
53|-----------------+------------------|
Anthony Green58e8b662012-10-30 07:07:19 -040054| AArch64 | Linux |
Anthony Green9c00a3f2012-10-12 16:46:06 -040055| Alpha | Linux |
56| Alpha | Tru64 |
57| ARM | Linux |
58| ARM | iOS |
59| AVR32 | Linux |
60| Blackfin | uClinux |
61| HPPA | HPUX |
62| IA-64 | Linux |
63| M68K | FreeMiNT |
64| M68K | RTEMS |
65| MIPS | IRIX |
66| MIPS | Linux |
67| MIPS | RTEMS |
68| MIPS64 | Linux |
69| PowerPC | AMIGA |
70| PowerPC | Linux |
71| PowerPC | Mac OSX |
72| PowerPC | FreeBSD |
73| PowerPC64 | Linux |
74| S390 | Linux |
75| S390X | Linux |
76| SPARC | Linux |
77| SPARC | Solaris |
78| SPARC64 | Linux |
79| SPARC64 | FreeBSD |
Anthony Green70084e72012-10-12 23:55:06 -040080| TILE-Gx/TILEPro | Linux |
Anthony Green9c00a3f2012-10-12 16:46:06 -040081| X86 | FreeBSD |
82| X86 | Interix |
83| X86 | kFreeBSD |
84| X86 | Linux |
85| X86 | Mac OSX |
86| X86 | OpenBSD |
87| X86 | OS/2 |
88| X86 | Solaris |
89| X86 | Windows/Cygwin |
90| X86 | Windows/MingW |
91| X86-64 | FreeBSD |
92| X86-64 | Linux |
93| X86-64 | Linux/x32 |
94| X86-64 | OpenBSD |
95| X86-64 | Windows/MingW |
96|-----------------+------------------|
Anthony Green2e7e03d2009-12-31 07:43:22 -050097
Anthony Greenc6dddbd2009-10-04 08:11:33 -040098Please send additional platform test results to
Anthony Green0cfe60e2009-12-29 10:06:04 -050099libffi-discuss@sourceware.org and feel free to update the wiki page
100above.
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400101
102Installing libffi
103=================
104
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400105First you must configure the distribution for your particular
106system. Go to the directory you wish to build libffi in and run the
107"configure" program found in the root directory of the libffi source
108distribution.
109
110You may want to tell configure where to install the libffi library and
111header files. To do that, use the --prefix configure switch. Libffi
112will install under /usr/local by default.
113
114If you want to enable extra run-time debugging checks use the the
115--enable-debug configure switch. This is useful when your program dies
116mysteriously while using libffi.
117
118Another useful configure switch is --enable-purify-safety. Using this
119will add some extra code which will suppress certain warnings when you
120are using Purify with libffi. Only use this switch when using
121Purify, as it will slow down the library.
122
Anthony Greenff3cd682010-01-15 11:27:24 -0500123It's also possible to build libffi on Windows platforms with
124Microsoft's Visual C++ compiler. In this case, use the msvcc.sh
125wrapper script during configuration like so:
126
Anthony Green9dc9a292010-04-13 10:33:52 -0400127path/to/configure CC=path/to/msvcc.sh LD=link CPP=\"cl -nologo -EP\"
128
129For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64".
130You may also need to specify --build appropriately. When building with MSVC
131under a MingW environment, you may need to remove the line in configure
132that sets 'fix_srcfile_path' to a 'cygpath' command. ('cygpath' is not
133present in MingW, and is not required when using MingW-style paths.)
Anthony Greenff3cd682010-01-15 11:27:24 -0500134
Nicolas Lelongd330f192012-05-05 09:37:02 -0400135For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
Anthony Greenf4983182011-02-09 06:26:46 -0500136
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400137Configure has many other options. Use "configure --help" to see them all.
138
139Once configure has finished, type "make". Note that you must be using
140GNU make. You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
141
142To ensure that libffi is working as advertised, type "make check".
143This will require that you have DejaGNU installed.
144
145To install the library and header files, type "make install".
146
147
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400148History
149=======
150
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500151See the ChangeLog files for details.
152
Anthony Green09b23cf2012-04-27 08:29:48 -04001533.0.12 XXX-XX-XX
Anthony Green048d2f42012-10-11 10:55:25 -0400154 Add Blackfin support.
Anthony Green9c00a3f2012-10-12 16:46:06 -0400155 Add TILE-Gx/TILEPro support.
Anthony Green58e8b662012-10-30 07:07:19 -0400156 Add AArch64 support.
Anthony Greene944b8c2012-10-30 14:06:09 -0400157 Add support for PaX enabled kernels with MPROTECT.
Anthony Green09b23cf2012-04-27 08:29:48 -0400158
Anthony Greenff3d76f2012-04-11 23:16:48 -04001593.0.11 Apr-11-12
Anthony Green048d2f42012-10-11 10:55:25 -0400160 Lots of build fixes.
161 Add Amiga newer MacOS support.
162 Add support for variadic functions (ffi_prep_cif_var).
Anthony Green964c5b92012-03-03 14:46:20 -0500163 Add Linux/x32 support.
Anthony Green59bb61a2012-04-06 08:26:14 -0400164 Add thiscall, fastcall and MSVC cdecl support on Windows.
Anthony Green048d2f42012-10-11 10:55:25 -0400165 Add Amiga and newer MacOS support.
Anthony Green59bb61a2012-04-06 08:26:14 -0400166 Add m68k FreeMiNT support.
Mike Lewisebb8e892012-04-06 20:02:08 -0400167 Integration with iOS' xcode build tools.
168 Fix Octeon and MC68881 support.
Anthony Greenafaf3382012-01-23 14:17:13 -0500169 Fix code pessimizations.
Anthony Greenee6696f2011-08-23 12:30:29 -0400170
Anthony Greenc6265c32011-08-23 10:31:33 -04001713.0.10 Aug-23-11
Anthony Greencbb062c2011-02-17 20:39:21 -0500172 Add support for Apple's iOS.
Anthony Green1fbf9dc2011-02-13 08:06:39 -0500173 Add support for ARM VFP ABI.
Anthony Green630b9c02011-02-09 06:24:23 -0500174 Add RTEMS support for MIPS and M68K.
Anthony Greenc6265c32011-08-23 10:31:33 -0400175 Fix instruction cache clearing problems on
176 ARM and SPARC.
Anthony Green2db72612010-11-21 10:50:56 -0500177 Fix the N64 build on mips-sgi-irix6.5.
Anthony Greencbb062c2011-02-17 20:39:21 -0500178 Enable builds with Microsoft's compiler.
179 Enable x86 builds with Oracle's Solaris compiler.
Anthony Greene2214f82011-02-08 19:22:56 -0500180 Fix support for calling code compiled with Oracle's Sparc
Anthony Greencbb062c2011-02-17 20:39:21 -0500181 Solaris compiler.
182 Testsuite fixes for Tru64 Unix.
Anthony Greenc6265c32011-08-23 10:31:33 -0400183 Additional platform support.
Anthony Green2db72612010-11-21 10:50:56 -0500184
Anthony Green2e7e03d2009-12-31 07:43:22 -05001853.0.9 Dec-31-09
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500186 Add AVR32 and win64 ports. Add ARM softfp support.
187 Many fixes for AIX, Solaris, HP-UX, *BSD.
Anthony Green2e7e03d2009-12-31 07:43:22 -0500188 Several PowerPC and x86-64 bug fixes.
Anthony Green0cfe60e2009-12-29 10:06:04 -0500189 Build DLL for windows.
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500190
1913.0.8 Dec-19-08
192 Add *BSD, BeOS, and PA-Linux support.
193
Anthony Greenc6dddbd2009-10-04 08:11:33 -04001943.0.7 Nov-11-08
195 Fix for ppc FreeBSD.
196 (thanks to Andreas Tobler)
197
1983.0.6 Jul-17-08
199 Fix for closures on sh.
200 Mark the sh/sh64 stack as non-executable.
201 (both thanks to Kaz Kojima)
202
2033.0.5 Apr-3-08
204 Fix libffi.pc file.
205 Fix #define ARM for IcedTea users.
206 Fix x86 closure bug.
207
2083.0.4 Feb-24-08
209 Fix x86 OpenBSD configury.
210
2113.0.3 Feb-22-08
212 Enable x86 OpenBSD thanks to Thomas Heller, and
213 x86-64 FreeBSD thanks to Björn König and Andreas Tobler.
214 Clean up test instruction in README.
215
2163.0.2 Feb-21-08
217 Improved x86 FreeBSD support.
218 Thanks to Björn König.
219
2203.0.1 Feb-15-08
221 Fix instruction cache flushing bug on MIPS.
222 Thanks to David Daney.
223
2243.0.0 Feb-15-08
225 Many changes, mostly thanks to the GCC project.
226 Cygnus Solutions is now Red Hat.
227
228 [10 years go by...]
229
2301.20 Oct-5-98
231 Raffaele Sena produces ARM port.
232
2331.19 Oct-5-98
234 Fixed x86 long double and long long return support.
235 m68k bug fixes from Andreas Schwab.
236 Patch for DU assembler compatibility for the Alpha from Richard
237 Henderson.
238
2391.18 Apr-17-98
240 Bug fixes and MIPS configuration changes.
241
2421.17 Feb-24-98
243 Bug fixes and m68k port from Andreas Schwab. PowerPC port from
244 Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
245
2461.16 Feb-11-98
247 Richard Henderson produces Alpha port.
248
2491.15 Dec-4-97
250 Fixed an n32 ABI bug. New libtool, auto* support.
251
2521.14 May-13-97
253 libtool is now used to generate shared and static libraries.
254 Fixed a minor portability problem reported by Russ McManus
255 <mcmanr@eq.gs.com>.
256
2571.13 Dec-2-96
258 Added --enable-purify-safety to keep Purify from complaining
259 about certain low level code.
260 Sparc fix for calling functions with < 6 args.
261 Linux x86 a.out fix.
262
2631.12 Nov-22-96
264 Added missing ffi_type_void, needed for supporting void return
265 types. Fixed test case for non MIPS machines. Cygnus Support
266 is now Cygnus Solutions.
267
2681.11 Oct-30-96
269 Added notes about GNU make.
270
2711.10 Oct-29-96
272 Added configuration fix for non GNU compilers.
273
2741.09 Oct-29-96
275 Added --enable-debug configure switch. Clean-ups based on LCLint
276 feedback. ffi_mips.h is always installed. Many configuration
277 fixes. Fixed ffitest.c for sparc builds.
278
2791.08 Oct-15-96
280 Fixed n32 problem. Many clean-ups.
281
2821.07 Oct-14-96
283 Gordon Irlam rewrites v8.S again. Bug fixes.
284
2851.06 Oct-14-96
286 Gordon Irlam improved the sparc port.
287
2881.05 Oct-14-96
289 Interface changes based on feedback.
290
2911.04 Oct-11-96
292 Sparc port complete (modulo struct passing bug).
293
2941.03 Oct-10-96
295 Passing struct args, and returning struct values works for
296 all architectures/calling conventions. Expanded tests.
297
2981.02 Oct-9-96
299 Added SGI n32 support. Fixed bugs in both o32 and Linux support.
300 Added "make test".
301
3021.01 Oct-8-96
303 Fixed float passing bug in mips version. Restructured some
304 of the code. Builds cleanly with SGI tools.
305
3061.00 Oct-7-96
307 First release. No public announcement.
308
309
310Authors & Credits
311=================
312
Anthony Green048d2f42012-10-11 10:55:25 -0400313libffi was originally written by Anthony Green <green@redhat.com>.
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400314
315The developers of the GNU Compiler Collection project have made
316innumerable valuable contributions. See the ChangeLog file for
317details.
318
319Some of the ideas behind libffi were inspired by Gianni Mariani's free
320gencall library for Silicon Graphics machines.
321
322The closure mechanism was designed and implemented by Kresten Krab
323Thorup.
324
325Major processor architecture ports were contributed by the following
326developers:
327
Anthony Green58e8b662012-10-30 07:07:19 -0400328aarch64 Marcus Shawcroft, James Greenhalgh
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400329alpha Richard Henderson
330arm Raffaele Sena
Anthony Green70084e72012-10-12 23:55:06 -0400331blackfin Alexandre Keunecke I. de Mendonca
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400332cris Simon Posnjak, Hans-Peter Nilsson
333frv Anthony Green
334ia64 Hans Boehm
335m32r Kazuhiro Inaoka
336m68k Andreas Schwab
337mips Anthony Green, Casey Marshall
338mips64 David Daney
339pa Randolph Chung, Dave Anglin, Andreas Tobler
340powerpc Geoffrey Keating, Andreas Tobler,
341 David Edelsohn, John Hornkvist
342powerpc64 Jakub Jelinek
343s390 Gerhard Tonn, Ulrich Weigand
344sh Kaz Kojima
345sh64 Kaz Kojima
346sparc Anthony Green, Gordon Irlam
Anthony Green70084e72012-10-12 23:55:06 -0400347tile-gx/tilepro Walter Lee
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400348x86 Anthony Green, Jon Beniston
349x86-64 Bo Thorsen
350
351Jesper Skov and Andrew Haley both did more than their fair share of
352stepping through the code and tracking down bugs.
353
354Thanks also to Tom Tromey for bug fixes, documentation and
355configuration help.
356
357Thanks to Jim Blandy, who provided some useful feedback on the libffi
358interface.
359
360Andreas Tobler has done a tremendous amount of work on the testsuite.
361
362Alex Oliva solved the executable page problem for SElinux.
363
364The list above is almost certainly incomplete and inaccurate. I'm
365happy to make corrections or additions upon request.
366
Anthony Green630b9c02011-02-09 06:24:23 -0500367If you have a problem, or have found a bug, please send a note to the
368author at green@moxielogic.com, or the project mailing list at
369libffi-discuss@sourceware.org.