blob: 7be835690189687e7d44c138563572f9580fa808 [file] [log] [blame]
Anthony Greenc6dddbd2009-10-04 08:11:33 -04001Status
2======
3
Anthony Green4b18d1f2010-01-01 10:24:27 -05004libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web
Anthony Greenc6dddbd2009-10-04 08:11:33 -04005page for updates: <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
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 Green7b7a42f2010-01-12 09:14:14 -050046 http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10
Anthony Green0cfe60e2009-12-29 10:06:04 -050047
48At the time of release, the following basic configurations have been
49tested:
50
51|--------------+------------------|
52| Architecture | Operating System |
53|--------------+------------------|
54| Alpha | Linux |
Anthony Green7b7a42f2010-01-12 09:14:14 -050055| Alpha | Tru64 |
Anthony Green0cfe60e2009-12-29 10:06:04 -050056| ARM | Linux |
57| AVR32 | Linux |
58| HPPA | HPUX |
59| IA-64 | Linux |
60| MIPS | IRIX |
61| MIPS | Linux |
62| MIPS64 | Linux |
63| PowerPC | Linux |
64| PowerPC | Mac OSX |
65| PowerPC | FreeBSD |
66| PowerPC64 | Linux |
67| S390 | Linux |
68| S390X | Linux |
69| SPARC | Linux |
70| SPARC | Solaris |
71| SPARC64 | Linux |
72| SPARC64 | FreeBSD |
73| X86 | FreeBSD |
74| X86 | kFreeBSD |
75| X86 | Linux |
76| X86 | Mac OSX |
77| X86 | OpenBSD |
78| X86 | Solaris |
79| X86 | Windows/Cygwin |
80| X86 | Windows/MingW |
81| X86-64 | FreeBSD |
82| X86-64 | Linux |
83| X86-64 | OpenBSD |
Anthony Green4b18d1f2010-01-01 10:24:27 -050084| X86-64 | Windows/MingW |
Anthony Green0cfe60e2009-12-29 10:06:04 -050085|--------------+------------------|
Anthony Green2e7e03d2009-12-31 07:43:22 -050086
Anthony Greenc6dddbd2009-10-04 08:11:33 -040087Please send additional platform test results to
Anthony Green0cfe60e2009-12-29 10:06:04 -050088libffi-discuss@sourceware.org and feel free to update the wiki page
89above.
Anthony Greenc6dddbd2009-10-04 08:11:33 -040090
91Installing libffi
92=================
93
Anthony Greenc6dddbd2009-10-04 08:11:33 -040094First you must configure the distribution for your particular
95system. Go to the directory you wish to build libffi in and run the
96"configure" program found in the root directory of the libffi source
97distribution.
98
99You may want to tell configure where to install the libffi library and
100header files. To do that, use the --prefix configure switch. Libffi
101will install under /usr/local by default.
102
103If you want to enable extra run-time debugging checks use the the
104--enable-debug configure switch. This is useful when your program dies
105mysteriously while using libffi.
106
107Another useful configure switch is --enable-purify-safety. Using this
108will add some extra code which will suppress certain warnings when you
109are using Purify with libffi. Only use this switch when using
110Purify, as it will slow down the library.
111
Anthony Greenff3cd682010-01-15 11:27:24 -0500112It's also possible to build libffi on Windows platforms with
113Microsoft's Visual C++ compiler. In this case, use the msvcc.sh
114wrapper script during configuration like so:
115
116path/to/configure --enable-shared --enable-static \
117 CC=path/to/msvcc.sh LD=link \
118 CPP=\"cl -nologo -EP\"
119
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400120Configure has many other options. Use "configure --help" to see them all.
121
122Once configure has finished, type "make". Note that you must be using
123GNU make. You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
124
125To ensure that libffi is working as advertised, type "make check".
126This will require that you have DejaGNU installed.
127
128To install the library and header files, type "make install".
129
130
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400131History
132=======
133
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500134See the ChangeLog files for details.
135
Anthony Green7b7a42f2010-01-12 09:14:14 -05001363.0.10 ???-??-??
137 Fix the N64 build on mips-sgi-irix6.5.
138 Testsuite fixes for Tru64 Unix.
139
Anthony Green2e7e03d2009-12-31 07:43:22 -05001403.0.9 Dec-31-09
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500141 Add AVR32 and win64 ports. Add ARM softfp support.
142 Many fixes for AIX, Solaris, HP-UX, *BSD.
Anthony Green2e7e03d2009-12-31 07:43:22 -0500143 Several PowerPC and x86-64 bug fixes.
Anthony Green0cfe60e2009-12-29 10:06:04 -0500144 Build DLL for windows.
Anthony Greenf7c0bc62009-12-25 01:22:11 -0500145
1463.0.8 Dec-19-08
147 Add *BSD, BeOS, and PA-Linux support.
148
Anthony Greenc6dddbd2009-10-04 08:11:33 -04001493.0.7 Nov-11-08
150 Fix for ppc FreeBSD.
151 (thanks to Andreas Tobler)
152
1533.0.6 Jul-17-08
154 Fix for closures on sh.
155 Mark the sh/sh64 stack as non-executable.
156 (both thanks to Kaz Kojima)
157
1583.0.5 Apr-3-08
159 Fix libffi.pc file.
160 Fix #define ARM for IcedTea users.
161 Fix x86 closure bug.
162
1633.0.4 Feb-24-08
164 Fix x86 OpenBSD configury.
165
1663.0.3 Feb-22-08
167 Enable x86 OpenBSD thanks to Thomas Heller, and
168 x86-64 FreeBSD thanks to Björn König and Andreas Tobler.
169 Clean up test instruction in README.
170
1713.0.2 Feb-21-08
172 Improved x86 FreeBSD support.
173 Thanks to Björn König.
174
1753.0.1 Feb-15-08
176 Fix instruction cache flushing bug on MIPS.
177 Thanks to David Daney.
178
1793.0.0 Feb-15-08
180 Many changes, mostly thanks to the GCC project.
181 Cygnus Solutions is now Red Hat.
182
183 [10 years go by...]
184
1851.20 Oct-5-98
186 Raffaele Sena produces ARM port.
187
1881.19 Oct-5-98
189 Fixed x86 long double and long long return support.
190 m68k bug fixes from Andreas Schwab.
191 Patch for DU assembler compatibility for the Alpha from Richard
192 Henderson.
193
1941.18 Apr-17-98
195 Bug fixes and MIPS configuration changes.
196
1971.17 Feb-24-98
198 Bug fixes and m68k port from Andreas Schwab. PowerPC port from
199 Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
200
2011.16 Feb-11-98
202 Richard Henderson produces Alpha port.
203
2041.15 Dec-4-97
205 Fixed an n32 ABI bug. New libtool, auto* support.
206
2071.14 May-13-97
208 libtool is now used to generate shared and static libraries.
209 Fixed a minor portability problem reported by Russ McManus
210 <mcmanr@eq.gs.com>.
211
2121.13 Dec-2-96
213 Added --enable-purify-safety to keep Purify from complaining
214 about certain low level code.
215 Sparc fix for calling functions with < 6 args.
216 Linux x86 a.out fix.
217
2181.12 Nov-22-96
219 Added missing ffi_type_void, needed for supporting void return
220 types. Fixed test case for non MIPS machines. Cygnus Support
221 is now Cygnus Solutions.
222
2231.11 Oct-30-96
224 Added notes about GNU make.
225
2261.10 Oct-29-96
227 Added configuration fix for non GNU compilers.
228
2291.09 Oct-29-96
230 Added --enable-debug configure switch. Clean-ups based on LCLint
231 feedback. ffi_mips.h is always installed. Many configuration
232 fixes. Fixed ffitest.c for sparc builds.
233
2341.08 Oct-15-96
235 Fixed n32 problem. Many clean-ups.
236
2371.07 Oct-14-96
238 Gordon Irlam rewrites v8.S again. Bug fixes.
239
2401.06 Oct-14-96
241 Gordon Irlam improved the sparc port.
242
2431.05 Oct-14-96
244 Interface changes based on feedback.
245
2461.04 Oct-11-96
247 Sparc port complete (modulo struct passing bug).
248
2491.03 Oct-10-96
250 Passing struct args, and returning struct values works for
251 all architectures/calling conventions. Expanded tests.
252
2531.02 Oct-9-96
254 Added SGI n32 support. Fixed bugs in both o32 and Linux support.
255 Added "make test".
256
2571.01 Oct-8-96
258 Fixed float passing bug in mips version. Restructured some
259 of the code. Builds cleanly with SGI tools.
260
2611.00 Oct-7-96
262 First release. No public announcement.
263
264
265Authors & Credits
266=================
267
Anthony Greenda11bec2009-12-24 05:34:46 -0500268libffi was originally written by Anthony Green <green@redhat.com>.
Anthony Greenc6dddbd2009-10-04 08:11:33 -0400269
270The developers of the GNU Compiler Collection project have made
271innumerable valuable contributions. See the ChangeLog file for
272details.
273
274Some of the ideas behind libffi were inspired by Gianni Mariani's free
275gencall library for Silicon Graphics machines.
276
277The closure mechanism was designed and implemented by Kresten Krab
278Thorup.
279
280Major processor architecture ports were contributed by the following
281developers:
282
283alpha Richard Henderson
284arm Raffaele Sena
285cris Simon Posnjak, Hans-Peter Nilsson
286frv Anthony Green
287ia64 Hans Boehm
288m32r Kazuhiro Inaoka
289m68k Andreas Schwab
290mips Anthony Green, Casey Marshall
291mips64 David Daney
292pa Randolph Chung, Dave Anglin, Andreas Tobler
293powerpc Geoffrey Keating, Andreas Tobler,
294 David Edelsohn, John Hornkvist
295powerpc64 Jakub Jelinek
296s390 Gerhard Tonn, Ulrich Weigand
297sh Kaz Kojima
298sh64 Kaz Kojima
299sparc Anthony Green, Gordon Irlam
300x86 Anthony Green, Jon Beniston
301x86-64 Bo Thorsen
302
303Jesper Skov and Andrew Haley both did more than their fair share of
304stepping through the code and tracking down bugs.
305
306Thanks also to Tom Tromey for bug fixes, documentation and
307configuration help.
308
309Thanks to Jim Blandy, who provided some useful feedback on the libffi
310interface.
311
312Andreas Tobler has done a tremendous amount of work on the testsuite.
313
314Alex Oliva solved the executable page problem for SElinux.
315
316The list above is almost certainly incomplete and inaccurate. I'm
317happy to make corrections or additions upon request.
318
319If you have a problem, or have found a bug, please send a note to
320green@redhat.com.