• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..07-May-2022-

doc/H03-May-2022-636483

include/H23-Jun-2015-1,043847

libffi.xcodeproj/H23-Jun-2015-580568

man/H23-Jun-2015-715627

src/H23-Jun-2015-41,68926,896

testsuite/H23-Jun-2015-13,3359,105

ChangeLogH A D23-Jun-2015181.6 KiB5,3014,095

ChangeLog.libffiH A D26-Dec-201219.7 KiB585460

ChangeLog.libgcjH A D18-Jul-20121.1 KiB4126

ChangeLog.v1H A D08-Aug-199922.5 KiB765459

LICENSEH A D04-Mar-20121.1 KiB2218

Makefile.amH A D04-Apr-20148.1 KiB254206

Makefile.inH A D23-Jun-201566 KiB1,7071,575

READMEH A D26-Dec-201211.5 KiB371290

acinclude.m4H A D23-Nov-20043.2 KiB9388

aclocal.m4H A D23-Jun-201537.3 KiB1,040936

build-ios.shH A D04-Mar-20122 KiB6850

configureH A D23-Jun-2015440.3 KiB15,44512,882

configure.acH A D04-Apr-201415.8 KiB531461

configure.hostH A D30-Aug-2004267 1210

fficonfig.h.inH A D23-Jun-20155.4 KiB203144

generate-ios-source-and-headers.pyH A D26-Dec-20125.2 KiB161129

generate-osx-source-and-headers.pyH A D26-Dec-20125.1 KiB154124

libtool-versionH A D26-Jun-2004249 76

mdate-shH A D29-Dec-20125.5 KiB206103

msvcc.shH A D04-Mar-20124.8 KiB198134

stamp-h.inH A D08-Aug-199910 21

README

1Status
2======
3
4libffi-3.0.12 was released on XXXXXXX.  Check the libffi web page for
5updates: <URL:http://sourceware.org/libffi/>.
6
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
42Libffi has been ported to many different platforms.
43For specific configuration details and testing status, please
44refer to the wiki page here:
45
46 http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.11
47
48At the time of release, the following basic configurations have been
49tested:
50
51|-----------------+------------------|
52| Architecture    | Operating System |
53|-----------------+------------------|
54| AArch64         | Linux            |
55| 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          |
80| TILE-Gx/TILEPro | Linux            |
81| 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|-----------------+------------------|
97
98Please send additional platform test results to
99libffi-discuss@sourceware.org and feel free to update the wiki page
100above.
101
102Installing libffi
103=================
104
105First 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
123It'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
127path/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.)
134
135For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
136
137Configure 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
148History
149=======
150
151See the ChangeLog files for details.
152
1533.0.12 XXX-XX-XX
154	Add Blackfin support.
155	Add TILE-Gx/TILEPro support.
156	Add AArch64 support.
157	Add support for PaX enabled kernels with MPROTECT.
158
1593.0.11 Apr-11-12
160        Lots of build fixes.
161	Add Amiga newer MacOS support.
162	Add support for variadic functions (ffi_prep_cif_var).
163	Add Linux/x32 support.
164	Add thiscall, fastcall and MSVC cdecl support on Windows.
165	Add Amiga and newer MacOS support.
166	Add m68k FreeMiNT support.
167	Integration with iOS' xcode build tools.
168	Fix Octeon and MC68881 support.
169	Fix code pessimizations.
170	Lots of build fixes.
171
1723.0.10 Aug-23-11
173        Add support for Apple's iOS.
174	Add support for ARM VFP ABI.
175        Add RTEMS support for MIPS and M68K.
176	Fix instruction cache clearing problems on
177	  ARM and SPARC.
178	Fix the N64 build on mips-sgi-irix6.5.
179	Enable builds with Microsoft's compiler.
180	Enable x86 builds with Oracle's Solaris compiler.
181	Fix support for calling code compiled with Oracle's Sparc
182	  Solaris compiler.
183	Testsuite fixes for Tru64 Unix.
184	Additional platform support.
185
1863.0.9 Dec-31-09
187        Add AVR32 and win64 ports.  Add ARM softfp support.
188	Many fixes for AIX, Solaris, HP-UX, *BSD.
189	Several PowerPC and x86-64 bug fixes.
190	Build DLL for windows.
191
1923.0.8 Dec-19-08
193        Add *BSD, BeOS, and PA-Linux support.
194
1953.0.7 Nov-11-08
196        Fix for ppc FreeBSD.
197	(thanks to Andreas Tobler)
198
1993.0.6 Jul-17-08
200        Fix for closures on sh.
201	Mark the sh/sh64 stack as non-executable.
202	(both thanks to Kaz Kojima)
203
2043.0.5 Apr-3-08
205        Fix libffi.pc file.
206	Fix #define ARM for IcedTea users.
207	Fix x86 closure bug.
208
2093.0.4 Feb-24-08
210        Fix x86 OpenBSD configury.
211
2123.0.3 Feb-22-08
213        Enable x86 OpenBSD thanks to Thomas Heller, and
214	x86-64 FreeBSD thanks to Björn König and Andreas Tobler.
215	Clean up test instruction in README.
216
2173.0.2 Feb-21-08
218        Improved x86 FreeBSD support.
219	Thanks to Björn König.
220
2213.0.1 Feb-15-08
222        Fix instruction cache flushing bug on MIPS.
223	Thanks to David Daney.
224
2253.0.0 Feb-15-08
226        Many changes, mostly thanks to the GCC project.
227	Cygnus Solutions is now Red Hat.
228
229  [10 years go by...]
230
2311.20 Oct-5-98
232	Raffaele Sena produces ARM port.
233
2341.19 Oct-5-98
235	Fixed x86 long double and long long return support.
236	m68k bug fixes from Andreas Schwab.
237	Patch for DU assembler compatibility for the Alpha from Richard
238	Henderson.
239
2401.18 Apr-17-98
241	Bug fixes and MIPS configuration changes.
242
2431.17 Feb-24-98
244	Bug fixes and m68k port from Andreas Schwab. PowerPC port from
245	Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
246
2471.16 Feb-11-98
248	Richard Henderson produces Alpha port.
249
2501.15 Dec-4-97
251	Fixed an n32 ABI bug. New libtool, auto* support.
252
2531.14 May-13-97
254	libtool is now used to generate shared and static libraries.
255	Fixed a minor portability problem reported by Russ McManus
256	<mcmanr@eq.gs.com>.
257
2581.13 Dec-2-96
259	Added --enable-purify-safety to keep Purify from complaining
260	about certain low level code.
261	Sparc fix for calling functions with < 6 args.
262	Linux x86 a.out fix.
263
2641.12 Nov-22-96
265	Added missing ffi_type_void, needed for supporting void return
266	types. Fixed test case for non MIPS machines. Cygnus Support
267	is now Cygnus Solutions.
268
2691.11 Oct-30-96
270	Added notes about GNU make.
271
2721.10 Oct-29-96
273	Added configuration fix for non GNU compilers.
274
2751.09 Oct-29-96
276	Added --enable-debug configure switch. Clean-ups based on LCLint
277	feedback. ffi_mips.h is always installed. Many configuration
278	fixes. Fixed ffitest.c for sparc builds.
279
2801.08 Oct-15-96
281	Fixed n32 problem. Many clean-ups.
282
2831.07 Oct-14-96
284	Gordon Irlam rewrites v8.S again. Bug fixes.
285
2861.06 Oct-14-96
287	Gordon Irlam improved the sparc port.
288
2891.05 Oct-14-96
290	Interface changes based on feedback.
291
2921.04 Oct-11-96
293	Sparc port complete (modulo struct passing bug).
294
2951.03 Oct-10-96
296	Passing struct args, and returning struct values works for
297	all architectures/calling conventions. Expanded tests.
298
2991.02 Oct-9-96
300	Added SGI n32 support. Fixed bugs in both o32 and Linux support.
301	Added "make test".
302
3031.01 Oct-8-96
304	Fixed float passing bug in mips version. Restructured some
305	of the code. Builds cleanly with SGI tools.
306
3071.00 Oct-7-96
308	First release. No public announcement.
309
310
311Authors & Credits
312=================
313
314libffi was originally written by Anthony Green <green@redhat.com>.
315
316The developers of the GNU Compiler Collection project have made
317innumerable valuable contributions.  See the ChangeLog file for
318details.
319
320Some of the ideas behind libffi were inspired by Gianni Mariani's free
321gencall library for Silicon Graphics machines.
322
323The closure mechanism was designed and implemented by Kresten Krab
324Thorup.
325
326Major processor architecture ports were contributed by the following
327developers:
328
329aarch64		Marcus Shawcroft, James Greenhalgh
330alpha		Richard Henderson
331arm		Raffaele Sena
332blackfin        Alexandre Keunecke I. de Mendonca
333cris		Simon Posnjak, Hans-Peter Nilsson
334frv		Anthony Green
335ia64		Hans Boehm
336m32r		Kazuhiro Inaoka
337m68k		Andreas Schwab
338mips		Anthony Green, Casey Marshall
339mips64		David Daney
340pa		Randolph Chung, Dave Anglin, Andreas Tobler
341powerpc		Geoffrey Keating, Andreas Tobler,
342			 David Edelsohn, John Hornkvist
343powerpc64	Jakub Jelinek
344s390		Gerhard Tonn, Ulrich Weigand
345sh		Kaz Kojima
346sh64		Kaz Kojima
347sparc		Anthony Green, Gordon Irlam
348tile-gx/tilepro Walter Lee
349x86		Anthony Green, Jon Beniston
350x86-64		Bo Thorsen
351
352Jesper Skov and Andrew Haley both did more than their fair share of
353stepping through the code and tracking down bugs.
354
355Thanks also to Tom Tromey for bug fixes, documentation and
356configuration help.
357
358Thanks to Jim Blandy, who provided some useful feedback on the libffi
359interface.
360
361Andreas Tobler has done a tremendous amount of work on the testsuite.
362
363Alex Oliva solved the executable page problem for SElinux.
364
365The list above is almost certainly incomplete and inaccurate.  I'm
366happy to make corrections or additions upon request.
367
368If you have a problem, or have found a bug, please send a note to the
369author at green@moxielogic.com, or the project mailing list at
370libffi-discuss@sourceware.org.
371