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