github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libffi/README (about)

     1  Status
     2  ======
     3  
     4  libffi-4?? was released on TBD.  Check the libffi web
     5  page for updates: <URL:http://sourceware.org/libffi/>.
     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  
    30  FFI stands for Foreign Function Interface.  A foreign function
    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  
    39  Supported Platforms
    40  ===================
    41  
    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  
    46   http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2
    47  
    48  At the time of release, the following basic configurations have been
    49  tested:
    50  
    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  |-----------------+------------------+-------------------------|
   118  
   119  Please send additional platform test results to
   120  libffi-discuss@sourceware.org and feel free to update the wiki page
   121  above.
   122  
   123  Installing libffi
   124  =================
   125  
   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  
   131  If you're building libffi directly from version control, configure won't
   132  exist yet; run ./autogen.sh first.
   133  
   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  
   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  
   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"
   161  
   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.)
   166  
   167  For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
   168  
   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
   172  GNU make.  You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
   173  
   174  To ensure that libffi is working as advertised, type "make check".
   175  This will require that you have DejaGNU installed.
   176  
   177  To install the library and header files, type "make install".
   178  
   179  
   180  History
   181  =======
   182  
   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.
   225  	Add Blackfin support.
   226  	Add TILE-Gx/TILEPro support.
   227  	Add MicroBlaze support.
   228  	Add Xtensa support.
   229  	Add support for PaX enabled kernels with MPROTECT.
   230  	Add support for native vendor compilers on
   231  	  Solaris and AIX.
   232  	Work around LLVM/GCC interoperability issue on x86_64.
   233  
   234  3.0.11 Apr-11-12
   235          Lots of build fixes.
   236  	Add support for variadic functions (ffi_prep_cif_var).
   237  	Add Linux/x32 support.
   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.
   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.
   251  	Fix the N64 build on mips-sgi-irix6.5.
   252  	Enable builds with Microsoft's compiler.
   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.
   258  
   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.
   264  
   265  3.0.8 Dec-19-08
   266          Add *BSD, BeOS, and PA-Linux support.
   267  
   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  
   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  
   387  libffi was originally written by Anthony Green <green@moxielogic.com>.
   388  
   389  The developers of the GNU Compiler Collection project have made
   390  innumerable valuable contributions.  See the ChangeLog file for
   391  details.
   392  
   393  Some of the ideas behind libffi were inspired by Gianni Mariani's free
   394  gencall library for Silicon Graphics machines.
   395  
   396  The closure mechanism was designed and implemented by Kresten Krab
   397  Thorup.
   398  
   399  Major processor architecture ports were contributed by the following
   400  developers:
   401  
   402  aarch64		Marcus Shawcroft, James Greenhalgh
   403  alpha		Richard Henderson
   404  arm		Raffaele Sena
   405  blackfin        Alexandre Keunecke I. de Mendonca
   406  cris		Simon Posnjak, Hans-Peter Nilsson
   407  frv		Anthony Green
   408  ia64		Hans Boehm
   409  m32r		Kazuhiro Inaoka
   410  m68k		Andreas Schwab
   411  m88k		Miod Vallat
   412  microblaze	Nathan Rossi
   413  mips		Anthony Green, Casey Marshall
   414  mips64		David Daney
   415  moxie		Anthony Green
   416  nios ii		Sandra Loosemore
   417  openrisc        Sebastian Macke
   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
   426  tile-gx/tilepro Walter Lee
   427  vax		Miod Vallat
   428  x86		Anthony Green, Jon Beniston
   429  x86-64		Bo Thorsen
   430  xtensa		Chris Zankel
   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  
   435  Thanks also to Tom Tromey for bug fixes, documentation and
   436  configuration help.
   437  
   438  Thanks to Jim Blandy, who provided some useful feedback on the libffi
   439  interface.
   440  
   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  
   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.