]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libffi/README
Fix tests for std::variant to match original intention
[thirdparty/gcc.git] / libffi / README
index ef2dc719c9137ae0ee7dfcab91235952ccd147d3..c072101789172f89c84ed9a7fc24fc1607fc0634 100644 (file)
@@ -1,10 +1,7 @@
-This directory contains the libffi package, which is not part of GCC but
-shipped with GCC as convenience.
-
 Status
 ======
 
-libffi-3.0.8 was released on December 19, 2008. Check the libffi web
+libffi-4?? was released on TBD.  Check the libffi web
 page for updates: <URL:http://sourceware.org/libffi/>.
 
 
@@ -42,45 +39,98 @@ between the two languages.
 Supported Platforms
 ===================
 
-Libffi has been ported to many different platforms, although this
-release was only tested on:
-
-     arm oabi linux
-     arm eabi linux
-     hppa linux
-     mips o32 linux (little endian)
-     powerpc darwin
-     powerpc freebsd
-     powerpc64 linux
-     sparc solaris
-     sparc64 freebsd
-     sparc64 solaris
-     x86 cygwin
-     x86 darwin
-     x86 freebsd
-     x86 linux
-     x86 openbsd
-     x86 solaris
-     x86-64 darwin
-     x86-64 linux
-     x86-64 OS X
-     x86-64 freebsd
-     x86-64 solaris
-     
+Libffi has been ported to many different platforms.
+For specific configuration details and testing status, please
+refer to the wiki page here:
+
+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2
+
+At the time of release, the following basic configurations have been
+tested:
+
+|-----------------+------------------+-------------------------|
+| Architecture    | Operating System | Compiler                |
+|-----------------+------------------+-------------------------|
+| AArch64 (ARM64) | iOS              | Clang                   |
+| AArch64         | Linux            | GCC                     |
+| Alpha           | Linux            | GCC                     |
+| Alpha           | Tru64            | GCC                     |
+| ARC             | Linux            | GCC                     |
+| ARM             | Linux            | GCC                     |
+| ARM             | iOS              | GCC                     |
+| AVR32           | Linux            | GCC                     |
+| Blackfin        | uClinux          | GCC                     |
+| HPPA            | HPUX             | GCC                     |
+| IA-64           | Linux            | GCC                     |
+| M68K            | FreeMiNT         | GCC                     |
+| M68K            | Linux            | GCC                     |
+| M68K            | RTEMS            | GCC                     |
+| M88K            | OpenBSD/mvme88k  | GCC                     |
+| Meta            | Linux            | GCC                     |
+| MicroBlaze      | Linux            | GCC                     |
+| MIPS            | IRIX             | GCC                     |
+| MIPS            | Linux            | GCC                     |
+| MIPS            | RTEMS            | GCC                     |
+| MIPS64          | Linux            | GCC                     |
+| Moxie           | Bare metal       | GCC                     |
+| Nios II         | Linux            | GCC                     |
+| OpenRISC        | Linux            | GCC                     |
+| PowerPC 32-bit  | AIX              | IBM XL C                |
+| PowerPC 64-bit  | AIX              | IBM XL C                |
+| PowerPC         | AMIGA            | GCC                     |
+| PowerPC         | Linux            | GCC                     |
+| PowerPC         | Mac OSX          | GCC                     |
+| PowerPC         | FreeBSD          | GCC                     |
+| PowerPC 64-bit  | FreeBSD          | GCC                     |
+| PowerPC 64-bit  | Linux ELFv1      | GCC                     |
+| PowerPC 64-bit  | Linux ELFv2      | GCC                     |
+| S390            | Linux            | GCC                     |
+| S390X           | Linux            | GCC                     |
+| SPARC           | Linux            | GCC                     |
+| SPARC           | Solaris          | GCC                     |
+| SPARC           | Solaris          | Oracle Solaris Studio C |
+| SPARC64         | Linux            | GCC                     |
+| SPARC64         | FreeBSD          | GCC                     |
+| SPARC64         | Solaris          | Oracle Solaris Studio C |
+| TILE-Gx/TILEPro | Linux            | GCC                     |
+| VAX             | OpenBSD/vax      | GCC                     |
+| X86             | FreeBSD          | GCC                     |
+| X86             | GNU HURD         | GCC                     |
+| X86             | Interix          | GCC                     |
+| X86             | kFreeBSD         | GCC                     |
+| X86             | Linux            | GCC                     |
+| X86             | Mac OSX          | GCC                     |
+| X86             | OpenBSD          | GCC                     |
+| X86             | OS/2             | GCC                     |
+| X86             | Solaris          | GCC                     |
+| X86             | Solaris          | Oracle Solaris Studio C |
+| X86             | Windows/Cygwin   | GCC                     |
+| X86             | Windows/MingW    | GCC                     |
+| X86-64          | FreeBSD          | GCC                     |
+| X86-64          | Linux            | GCC                     |
+| X86-64          | Linux/x32        | GCC                     |
+| X86-64          | OpenBSD          | GCC                     |
+| X86-64          | Solaris          | Oracle Solaris Studio C |
+| X86-64          | Windows/Cygwin   | GCC                     |
+| X86-64          | Windows/MingW    | GCC                     |
+| Xtensa          | Linux            | GCC                     |
+|-----------------+------------------+-------------------------|
+
 Please send additional platform test results to
-libffi-discuss@sourceware.org.
+libffi-discuss@sourceware.org and feel free to update the wiki page
+above.
 
 Installing libffi
 =================
 
-[Note: before actually performing any of these installation steps,
- you may wish to read the "Platform Specific Notes" below.]
-
 First you must configure the distribution for your particular
 system. Go to the directory you wish to build libffi in and run the
 "configure" program found in the root directory of the libffi source
 distribution.
 
+If you're building libffi directly from version control, configure won't
+exist yet; run ./autogen.sh first.
+
 You may want to tell configure where to install the libffi library and
 header files. To do that, use the --prefix configure switch.  Libffi
 will install under /usr/local by default. 
@@ -94,77 +144,127 @@ will add some extra code which will suppress certain warnings when you
 are using Purify with libffi. Only use this switch when using 
 Purify, as it will slow down the library.
 
-Configure has many other options. Use "configure --help" to see them all.
-
-Once configure has finished, type "make". Note that you must be using
-GNU make.  You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
-
-To ensure that libffi is working as advertised, type "make check".
-This will require that you have DejaGNU installed.
-
-To install the library and header files, type "make install".
-
-
-Platform Specific Notes
-=======================
-
-       MIPS - Irix 5.3 & 6.x
-       ---------------------
-
-Irix 6.2 and better supports three different calling conventions: o32,
-n32 and n64. Currently, libffi only supports both o32 and n32 under
-Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be
-configured for whichever calling convention it was built for.
+It's also possible to build libffi on Windows platforms with
+Microsoft's Visual C++ compiler.  In this case, use the msvcc.sh
+wrapper script during configuration like so:
 
-By default, the configure script will try to build libffi with the GNU
-development tools. To build libffi with the SGI development tools, set
-the environment variable CC to either "cc -32" or "cc -n32" before
-running configure under Irix 6.x (depending on whether you want an o32
-or n32 library), or just "cc" for Irix 5.3.
+path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP"
 
-With the n32 calling convention, when returning structures smaller
-than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned.
-Here's one way of forcing this:
+For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and
+CXX="path/to/msvcc.sh -m64".  You may also need to specify --build
+appropriately.
 
-       double struct_storage[2];
-       my_small_struct *s = (my_small_struct *) struct_storage;  
-       /* Use s for RVALUE */
+It is also possible to build libffi on Windows platforms with the LLVM
+project's clang-cl compiler, like below:
 
-If you don't do this you are liable to get spurious bus errors. 
+path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP"
 
-"long long" values are not supported yet.
+When building with MSVC under a MingW environment, you may need to
+remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath'
+command.  ('cygpath' is not present in MingW, and is not required when
+using MingW-style paths.)
 
-You must use GNU Make to build libffi on SGI platforms.
+For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
 
+Configure has many other options. Use "configure --help" to see them all.
 
-       PowerPC System V ABI
-       --------------------
-
-There are two `System V ABI's which libffi implements for PowerPC.
-They differ only in how small structures are returned from functions.
-
-In the FFI_SYSV version, structures that are 8 bytes or smaller are
-returned in registers.  This is what GCC does when it is configured
-for solaris, and is what the System V ABI I have (dated September
-1995) says.
+Once configure has finished, type "make". Note that you must be using
+GNU make.  You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
 
-In the FFI_GCC_SYSV version, all structures are returned the same way:
-by passing a pointer as the first argument to the function.  This is
-what GCC does when it is configured for linux or a generic sysv
-target.
+To ensure that libffi is working as advertised, type "make check".
+This will require that you have DejaGNU installed.
 
-EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a
-inconsistency with the SysV ABI: When a procedure is called with many
-floating-point arguments, some of them get put on the stack.  They are
-all supposed to be stored in double-precision format, even if they are
-only single-precision, but EGCS stores single-precision arguments as
-single-precision anyway.  This causes one test to fail (the `many
-arguments' test).
+To install the library and header files, type "make install".
 
 
 History
 =======
 
+See the git log for details at http://github.com/atgreen/libffi.
+
+4.0 TBD
+        New API in support of GO closures.
+
+3.2.1 Nov-12-14
+        Build fix for non-iOS AArch64 targets.
+
+3.2 Nov-11-14
+        Add C99 Complex Type support (currently only supported on
+          s390).
+       Add support for PASCAL and REGISTER calling conventions on x86
+         Windows/Linux.
+       Add OpenRISC and Cygwin-64 support.
+        Bug fixes.
+
+3.1 May-19-14
+        Add AArch64 (ARM64) iOS support.
+        Add Nios II support.
+        Add m88k and DEC VAX support.
+       Add support for stdcall, thiscall, and fastcall on non-Windows
+         32-bit x86 targets such as Linux.
+       Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi
+         fixes.
+       Make the testsuite more robust: eliminate several spurious
+         failures, and respect the $CC and $CXX environment variables.
+       Archive off the manually maintained ChangeLog in favor of git
+         log.
+
+3.0.13 Mar-17-13
+       Add Meta support.
+       Add missing Moxie bits.
+       Fix stack alignment bug on 32-bit x86.
+       Build fix for m68000 targets.
+       Build fix for soft-float Power targets.
+       Fix the install dir location for some platforms when building
+         with GCC (OS X, Solaris).
+       Fix Cygwin regression.
+
+3.0.12 Feb-11-13
+        Add Moxie support.
+       Add AArch64 support.
+       Add Blackfin support.
+       Add TILE-Gx/TILEPro support.
+       Add MicroBlaze support.
+       Add Xtensa support.
+       Add support for PaX enabled kernels with MPROTECT.
+       Add support for native vendor compilers on
+         Solaris and AIX.
+       Work around LLVM/GCC interoperability issue on x86_64.
+
+3.0.11 Apr-11-12
+        Lots of build fixes.
+       Add support for variadic functions (ffi_prep_cif_var).
+       Add Linux/x32 support.
+       Add thiscall, fastcall and MSVC cdecl support on Windows.
+       Add Amiga and newer MacOS support.
+       Add m68k FreeMiNT support.
+       Integration with iOS' xcode build tools.
+       Fix Octeon and MC68881 support.
+       Fix code pessimizations.
+
+3.0.10 Aug-23-11
+        Add support for Apple's iOS.
+       Add support for ARM VFP ABI.
+        Add RTEMS support for MIPS and M68K.
+       Fix instruction cache clearing problems on
+         ARM and SPARC.
+       Fix the N64 build on mips-sgi-irix6.5.
+       Enable builds with Microsoft's compiler.
+       Enable x86 builds with Oracle's Solaris compiler.
+       Fix support for calling code compiled with Oracle's Sparc
+         Solaris compiler.
+       Testsuite fixes for Tru64 Unix.
+       Additional platform support.
+
+3.0.9 Dec-31-09
+        Add AVR32 and win64 ports.  Add ARM softfp support.
+       Many fixes for AIX, Solaris, HP-UX, *BSD.
+       Several PowerPC and x86-64 bug fixes.
+       Build DLL for windows.
+
+3.0.8 Dec-19-08
+        Add *BSD, BeOS, and PA-Linux support.
+
 3.0.7 Nov-11-08
         Fix for ppc FreeBSD.
        (thanks to Andreas Tobler)
@@ -284,7 +384,7 @@ History
 Authors & Credits
 =================
 
-libffi was originally written by Anthony Green <green@redhat.com>.
+libffi was originally written by Anthony Green <green@moxielogic.com>.
 
 The developers of the GNU Compiler Collection project have made
 innumerable valuable contributions.  See the ChangeLog file for
@@ -299,15 +399,22 @@ Thorup.
 Major processor architecture ports were contributed by the following
 developers:
 
+aarch64                Marcus Shawcroft, James Greenhalgh
 alpha          Richard Henderson
 arm            Raffaele Sena
+blackfin        Alexandre Keunecke I. de Mendonca
 cris           Simon Posnjak, Hans-Peter Nilsson
 frv            Anthony Green
 ia64           Hans Boehm
 m32r           Kazuhiro Inaoka
 m68k           Andreas Schwab
+m88k           Miod Vallat
+microblaze     Nathan Rossi
 mips           Anthony Green, Casey Marshall
 mips64         David Daney
+moxie          Anthony Green
+nios ii                Sandra Loosemore
+openrisc        Sebastian Macke
 pa             Randolph Chung, Dave Anglin, Andreas Tobler
 powerpc                Geoffrey Keating, Andreas Tobler, 
                         David Edelsohn, John Hornkvist
@@ -316,8 +423,11 @@ s390               Gerhard Tonn, Ulrich Weigand
 sh             Kaz Kojima
 sh64           Kaz Kojima
 sparc          Anthony Green, Gordon Irlam
+tile-gx/tilepro Walter Lee
+vax            Miod Vallat
 x86            Anthony Green, Jon Beniston
 x86-64         Bo Thorsen
+xtensa         Chris Zankel
 
 Jesper Skov and Andrew Haley both did more than their fair share of
 stepping through the code and tracking down bugs.
@@ -335,5 +445,6 @@ Alex Oliva solved the executable page problem for SElinux.
 The list above is almost certainly incomplete and inaccurate.  I'm
 happy to make corrections or additions upon request.
 
-If you have a problem, or have found a bug, please send a note to
-green@redhat.com.
+If you have a problem, or have found a bug, please send a note to the
+author at green@moxielogic.com, or the project mailing list at
+libffi-discuss@sourceware.org.