Home | History | Annotate | only in /external/libffi
Up to higher level directory
NameDateSize
acinclude.m422-Oct-20203.2K
Android.bp22-Oct-20202.3K
autogen.sh22-Oct-202035
ChangeLog.libffi22-Oct-202019.7K
ChangeLog.libffi-3.122-Oct-2020205.6K
ChangeLog.libgcj22-Oct-20201.1K
ChangeLog.v122-Oct-202022.5K
configure.ac22-Oct-202017.3K
doc/22-Oct-2020
gen_ffi_header.sh22-Oct-2020933
generate-darwin-source-and-headers.py22-Oct-20206.5K
include/22-Oct-2020
libffi.pc.in22-Oct-2020317
libffi.xcodeproj/22-Oct-2020
libtool-ldflags22-Oct-20203.3K
libtool-version22-Oct-20201.1K
LICENSE22-Oct-20201.1K
linux-arm/22-Oct-2020
linux-arm64/22-Oct-2020
linux-x86/22-Oct-2020
linux-x86_64/22-Oct-2020
m4/22-Oct-2020
Makefile.am22-Oct-20208.3K
man/22-Oct-2020
MODULE_LICENSE_MIT22-Oct-20200
msvcc.sh22-Oct-20206.3K
NOTICE22-Oct-20201.1K
OWNERS22-Oct-202046
README22-Oct-202015.8K
README.cheets.md22-Oct-2020888
src/22-Oct-2020
stamp-h.in22-Oct-202010
testsuite/22-Oct-2020
texinfo.tex22-Oct-2020315.5K

README

      1 Status
      2 ======
      3 
      4 libffi-3.2.1 was released on November 12, 2014.  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 (a] 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 3.2.1 Nov-12-14
    186         Build fix for non-iOS AArch64 targets.
    187 
    188 3.2 Nov-11-14
    189         Add C99 Complex Type support (currently only supported on
    190           s390).
    191 	Add support for PASCAL and REGISTER calling conventions on x86
    192 	  Windows/Linux.
    193 	Add OpenRISC and Cygwin-64 support.
    194         Bug fixes.
    195 
    196 3.1 May-19-14
    197         Add AArch64 (ARM64) iOS support.
    198         Add Nios II support.
    199         Add m88k and DEC VAX support.
    200 	Add support for stdcall, thiscall, and fastcall on non-Windows
    201 	  32-bit x86 targets such as Linux.
    202 	Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi
    203 	  fixes.
    204 	Make the testsuite more robust: eliminate several spurious
    205 	  failures, and respect the $CC and $CXX environment variables.
    206 	Archive off the manually maintained ChangeLog in favor of git
    207 	  log.
    208 
    209 3.0.13 Mar-17-13
    210 	Add Meta support.
    211 	Add missing Moxie bits.
    212 	Fix stack alignment bug on 32-bit x86.
    213 	Build fix for m68000 targets.
    214 	Build fix for soft-float Power targets.
    215 	Fix the install dir location for some platforms when building
    216 	  with GCC (OS X, Solaris).
    217 	Fix Cygwin regression.
    218 
    219 3.0.12 Feb-11-13
    220         Add Moxie support.
    221 	Add AArch64 support.
    222 	Add Blackfin support.
    223 	Add TILE-Gx/TILEPro support.
    224 	Add MicroBlaze support.
    225 	Add Xtensa support.
    226 	Add support for PaX enabled kernels with MPROTECT.
    227 	Add support for native vendor compilers on
    228 	  Solaris and AIX.
    229 	Work around LLVM/GCC interoperability issue on x86_64.
    230 
    231 3.0.11 Apr-11-12
    232         Lots of build fixes.
    233 	Add support for variadic functions (ffi_prep_cif_var).
    234 	Add Linux/x32 support.
    235 	Add thiscall, fastcall and MSVC cdecl support on Windows.
    236 	Add Amiga and newer MacOS support.
    237 	Add m68k FreeMiNT support.
    238 	Integration with iOS' xcode build tools.
    239 	Fix Octeon and MC68881 support.
    240 	Fix code pessimizations.
    241 
    242 3.0.10 Aug-23-11
    243         Add support for Apple's iOS.
    244 	Add support for ARM VFP ABI.
    245         Add RTEMS support for MIPS and M68K.
    246 	Fix instruction cache clearing problems on
    247 	  ARM and SPARC.
    248 	Fix the N64 build on mips-sgi-irix6.5.
    249 	Enable builds with Microsoft's compiler.
    250 	Enable x86 builds with Oracle's Solaris compiler.
    251 	Fix support for calling code compiled with Oracle's Sparc
    252 	  Solaris compiler.
    253 	Testsuite fixes for Tru64 Unix.
    254 	Additional platform support.
    255 
    256 3.0.9 Dec-31-09
    257         Add AVR32 and win64 ports.  Add ARM softfp support.
    258 	Many fixes for AIX, Solaris, HP-UX, *BSD.
    259 	Several PowerPC and x86-64 bug fixes.
    260 	Build DLL for windows.
    261 
    262 3.0.8 Dec-19-08
    263         Add *BSD, BeOS, and PA-Linux support.
    264 
    265 3.0.7 Nov-11-08
    266         Fix for ppc FreeBSD.
    267 	(thanks to Andreas Tobler)
    268 
    269 3.0.6 Jul-17-08
    270         Fix for closures on sh.
    271 	Mark the sh/sh64 stack as non-executable.
    272 	(both thanks to Kaz Kojima)
    273 
    274 3.0.5 Apr-3-08
    275         Fix libffi.pc file.
    276 	Fix #define ARM for IcedTea users.
    277 	Fix x86 closure bug.
    278 
    279 3.0.4 Feb-24-08
    280         Fix x86 OpenBSD configury.
    281 
    282 3.0.3 Feb-22-08
    283         Enable x86 OpenBSD thanks to Thomas Heller, and
    284 	x86-64 FreeBSD thanks to Bjrn Knig and Andreas Tobler.
    285 	Clean up test instruction in README.
    286 
    287 3.0.2 Feb-21-08
    288         Improved x86 FreeBSD support.
    289 	Thanks to Bjrn Knig.
    290 
    291 3.0.1 Feb-15-08
    292         Fix instruction cache flushing bug on MIPS.
    293 	Thanks to David Daney.
    294 
    295 3.0.0 Feb-15-08
    296         Many changes, mostly thanks to the GCC project.
    297 	Cygnus Solutions is now Red Hat.
    298 
    299   [10 years go by...]
    300 
    301 1.20 Oct-5-98
    302 	Raffaele Sena produces ARM port.
    303 
    304 1.19 Oct-5-98
    305 	Fixed x86 long double and long long return support.
    306 	m68k bug fixes from Andreas Schwab.
    307 	Patch for DU assembler compatibility for the Alpha from Richard
    308 	Henderson.
    309 
    310 1.18 Apr-17-98
    311 	Bug fixes and MIPS configuration changes.
    312 
    313 1.17 Feb-24-98
    314 	Bug fixes and m68k port from Andreas Schwab. PowerPC port from
    315 	Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
    316 
    317 1.16 Feb-11-98
    318 	Richard Henderson produces Alpha port.
    319 
    320 1.15 Dec-4-97
    321 	Fixed an n32 ABI bug. New libtool, auto* support.
    322 
    323 1.14 May-13-97
    324 	libtool is now used to generate shared and static libraries.
    325 	Fixed a minor portability problem reported by Russ McManus
    326 	<mcmanr (a] eq.gs.com>.
    327 
    328 1.13 Dec-2-96
    329 	Added --enable-purify-safety to keep Purify from complaining
    330 	about certain low level code.
    331 	Sparc fix for calling functions with < 6 args.
    332 	Linux x86 a.out fix.
    333 
    334 1.12 Nov-22-96
    335 	Added missing ffi_type_void, needed for supporting void return 
    336 	types. Fixed test case for non MIPS machines. Cygnus Support 
    337 	is now Cygnus Solutions. 
    338 
    339 1.11 Oct-30-96
    340 	Added notes about GNU make.
    341 
    342 1.10 Oct-29-96
    343 	Added configuration fix for non GNU compilers.
    344 
    345 1.09 Oct-29-96
    346 	Added --enable-debug configure switch. Clean-ups based on LCLint 
    347 	feedback. ffi_mips.h is always installed. Many configuration 
    348 	fixes. Fixed ffitest.c for sparc builds.
    349 
    350 1.08 Oct-15-96
    351 	Fixed n32 problem. Many clean-ups.
    352 
    353 1.07 Oct-14-96
    354 	Gordon Irlam rewrites v8.S again. Bug fixes.
    355 
    356 1.06 Oct-14-96
    357 	Gordon Irlam improved the sparc port. 
    358 
    359 1.05 Oct-14-96
    360 	Interface changes based on feedback.
    361 
    362 1.04 Oct-11-96
    363 	Sparc port complete (modulo struct passing bug).
    364 
    365 1.03 Oct-10-96
    366 	Passing struct args, and returning struct values works for
    367 	all architectures/calling conventions. Expanded tests.
    368 
    369 1.02 Oct-9-96
    370 	Added SGI n32 support. Fixed bugs in both o32 and Linux support.
    371 	Added "make test".
    372 
    373 1.01 Oct-8-96
    374 	Fixed float passing bug in mips version. Restructured some
    375 	of the code. Builds cleanly with SGI tools.
    376 
    377 1.00 Oct-7-96
    378 	First release. No public announcement.
    379 
    380 
    381 Authors & Credits
    382 =================
    383 
    384 libffi was originally written by Anthony Green <green (a] moxielogic.com>.
    385 
    386 The developers of the GNU Compiler Collection project have made
    387 innumerable valuable contributions.  See the ChangeLog file for
    388 details.
    389 
    390 Some of the ideas behind libffi were inspired by Gianni Mariani's free
    391 gencall library for Silicon Graphics machines.
    392 
    393 The closure mechanism was designed and implemented by Kresten Krab
    394 Thorup.
    395 
    396 Major processor architecture ports were contributed by the following
    397 developers:
    398 
    399 aarch64		Marcus Shawcroft, James Greenhalgh
    400 alpha		Richard Henderson
    401 arm		Raffaele Sena
    402 blackfin        Alexandre Keunecke I. de Mendonca
    403 cris		Simon Posnjak, Hans-Peter Nilsson
    404 frv		Anthony Green
    405 ia64		Hans Boehm
    406 m32r		Kazuhiro Inaoka
    407 m68k		Andreas Schwab
    408 m88k		Miod Vallat
    409 microblaze	Nathan Rossi
    410 mips		Anthony Green, Casey Marshall
    411 mips64		David Daney
    412 moxie		Anthony Green
    413 nios ii		Sandra Loosemore
    414 openrisc        Sebastian Macke
    415 pa		Randolph Chung, Dave Anglin, Andreas Tobler
    416 powerpc		Geoffrey Keating, Andreas Tobler, 
    417 			 David Edelsohn, John Hornkvist
    418 powerpc64	Jakub Jelinek
    419 s390		Gerhard Tonn, Ulrich Weigand
    420 sh		Kaz Kojima
    421 sh64		Kaz Kojima
    422 sparc		Anthony Green, Gordon Irlam
    423 tile-gx/tilepro Walter Lee
    424 vax		Miod Vallat
    425 x86		Anthony Green, Jon Beniston
    426 x86-64		Bo Thorsen
    427 xtensa		Chris Zankel
    428 
    429 Jesper Skov and Andrew Haley both did more than their fair share of
    430 stepping through the code and tracking down bugs.
    431 
    432 Thanks also to Tom Tromey for bug fixes, documentation and
    433 configuration help.
    434 
    435 Thanks to Jim Blandy, who provided some useful feedback on the libffi
    436 interface.
    437 
    438 Andreas Tobler has done a tremendous amount of work on the testsuite.
    439 
    440 Alex Oliva solved the executable page problem for SElinux.
    441 
    442 The list above is almost certainly incomplete and inaccurate.  I'm
    443 happy to make corrections or additions upon request.
    444 
    445 If you have a problem, or have found a bug, please send a note to the
    446 author at green (a] moxielogic.com, or the project mailing list at
    447 libffi-discuss (a] sourceware.org.
    448 

README.cheets.md

      1 # Notes for updating `external/libffi` from source
      2 
      3 Note: AOSP has (or had) a platform/external/libffi used by Dalvik/MIPS.
      4 To avoid confusion, we call our version of the library libffi-cheets.
      5 
      6 ## Files added for use in cheets:
      7 
      8 - `./Android.mk`
      9 - `./MODULE_LICENSE_BSD_LIKE`
     10 - `./NOTICE (copy of ./LICENSE)`
     11 - `./README.cheets.md`
     12 - `./linux-arm/ffi.h`
     13 - `./linux-arm/fficonfig.h`
     14 - `./linux-arm/ffitarget.h`
     15 - `./linux-x86/ffi.h`
     16 - `./linux-x86/fficonfig.h`
     17 - `./linux-x86/ffitarget.h`
     18 
     19 The `ffi.h`, `fficonfig.h`, and `ffitarget.h` files allow us to easily configure
     20 each build target.
     21 
     22 Note that Android.mk embeds the version of Wayland being built (ends up in src/wayland-version.h)
     23 
     24 ## Files generated by the build process
     25 
     26 These files are generated by the Android.mk makefile into the source directory,
     27 and should not be checked in.
     28 
     29 ### From `include/ffi.h.in`
     30 
     31 - `include/ffi.h`