Home | History | Annotate | only in /external/libffi
Up to higher level directory
NameDateSize
acinclude.m431-Jul-20103.2K
aclocal.m431-Jul-2010263.5K
Android.mk31-Jul-20101.3K
ChangeLog31-Jul-2010115.4K
ChangeLog.libffi31-Jul-201011.2K
ChangeLog.libgcj31-Jul-20101.1K
ChangeLog.v131-Jul-201022.5K
CleanSpec.mk31-Jul-20102.2K
compile31-Jul-20103.6K
config.guess31-Jul-201043.5K
config.sub31-Jul-201032K
configure31-Jul-2010758.1K
configure.ac31-Jul-20109.8K
configure.host31-Jul-2010267
darwin-x86/31-Jul-2010
depcomp31-Jul-201017.2K
doc/31-Jul-2010
fficonfig.h.in31-Jul-20104.3K
include/31-Jul-2010
install-sh31-Jul-20109K
Libffi.mk31-Jul-20101.6K
libffi.pc.in31-Jul-2010277
libtool-version31-Jul-20101.1K
LICENSE31-Jul-20101.1K
linux-arm/31-Jul-2010
linux-x86/31-Jul-2010
ltcf-c.sh31-Jul-201033.2K
ltcf-cxx.sh31-Jul-201038.1K
ltcf-gcj.sh31-Jul-201028.9K
ltconfig31-Jul-201084.8K
ltmain.sh31-Jul-2010194.3K
Makefile.am31-Jul-20105.4K
Makefile.in31-Jul-201061.6K
man/31-Jul-2010
mdate-sh31-Jul-20105.4K
missing31-Jul-201010.3K
mkinstalldirs31-Jul-20103.4K
MODULE_LICENSE_BSD_LIKE31-Jul-20100
NOTICE31-Jul-20101.1K
README31-Jul-20109.9K
src/31-Jul-2010
testsuite/31-Jul-2010
texinfo.tex31-Jul-2010233.6K
TODO31-Jul-201023

README

      1 Status
      2 ======
      3 
      4 libffi-3.0.6 was released on July 17, 2008. 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 convention".
     14 The "calling convention" is a set of assumptions made by the compiler
     15 about where function arguments will be found on entry to a function.
     16 A "calling convention" also specifies where the return value for a
     17 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, although this
     43 release was only tested on:
     44 
     45      arm oabi linux
     46      arm eabi linux
     47      hppa linux
     48      mips o32 linux (little endian)
     49      powerpc darwin
     50      powerpc64 linux
     51      sparc solaris
     52      sparc64 solaris
     53      x86 cygwin
     54      x86 darwin
     55      x86 freebsd
     56      x86 linux
     57      x86 openbsd
     58      x86-64 darwin
     59      x86-64 linux
     60      x86-64 OS X
     61      x86-64 freebsd
     62      
     63 Please send additional platform test results to
     64 libffi-discuss (a] sourceware.org.
     65 
     66 Installing libffi
     67 =================
     68 
     69 [Note: before actually performing any of these installation steps,
     70  you may wish to read the "Platform Specific Notes" below.]
     71 
     72 First you must configure the distribution for your particular
     73 system. Go to the directory you wish to build libffi in and run the
     74 "configure" program found in the root directory of the libffi source
     75 distribution.
     76 
     77 You may want to tell configure where to install the libffi library and
     78 header files. To do that, use the --prefix configure switch.  Libffi
     79 will install under /usr/local by default. 
     80 
     81 If you want to enable extra run-time debugging checks use the the
     82 --enable-debug configure switch. This is useful when your program dies
     83 mysteriously while using libffi. 
     84 
     85 Another useful configure switch is --enable-purify-safety. Using this
     86 will add some extra code which will suppress certain warnings when you
     87 are using Purify with libffi. Only use this switch when using 
     88 Purify, as it will slow down the library.
     89 
     90 Configure has many other options. Use "configure --help" to see them all.
     91 
     92 Once configure has finished, type "make". Note that you must be using
     93 GNU make.  You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
     94 
     95 To ensure that libffi is working as advertised, type "make check".
     96 This will require that you have DejaGNU installed.
     97 
     98 To install the library and header files, type "make install".
     99 
    100 
    101 Platform Specific Notes
    102 =======================
    103 
    104 	MIPS - Irix 5.3 & 6.x
    105 	---------------------
    106 
    107 Irix 6.2 and better supports three different calling conventions: o32,
    108 n32 and n64. Currently, libffi only supports both o32 and n32 under
    109 Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be
    110 configured for whichever calling convention it was built for.
    111 
    112 By default, the configure script will try to build libffi with the GNU
    113 development tools. To build libffi with the SGI development tools, set
    114 the environment variable CC to either "cc -32" or "cc -n32" before
    115 running configure under Irix 6.x (depending on whether you want an o32
    116 or n32 library), or just "cc" for Irix 5.3.
    117 
    118 With the n32 calling convention, when returning structures smaller
    119 than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned.
    120 Here's one way of forcing this:
    121 
    122 	double struct_storage[2];
    123 	my_small_struct *s = (my_small_struct *) struct_storage;  
    124 	/* Use s for RVALUE */
    125 
    126 If you don't do this you are liable to get spurious bus errors. 
    127 
    128 "long long" values are not supported yet.
    129 
    130 You must use GNU Make to build libffi on SGI platforms.
    131 
    132 
    133 	PowerPC System V ABI
    134 	--------------------
    135 
    136 There are two `System V ABI's which libffi implements for PowerPC.
    137 They differ only in how small structures are returned from functions.
    138 
    139 In the FFI_SYSV version, structures that are 8 bytes or smaller are
    140 returned in registers.  This is what GCC does when it is configured
    141 for solaris, and is what the System V ABI I have (dated September
    142 1995) says.
    143 
    144 In the FFI_GCC_SYSV version, all structures are returned the same way:
    145 by passing a pointer as the first argument to the function.  This is
    146 what GCC does when it is configured for linux or a generic sysv
    147 target.
    148 
    149 EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a
    150 inconsistency with the SysV ABI: When a procedure is called with many
    151 floating-point arguments, some of them get put on the stack.  They are
    152 all supposed to be stored in double-precision format, even if they are
    153 only single-precision, but EGCS stores single-precision arguments as
    154 single-precision anyway.  This causes one test to fail (the `many
    155 arguments' test).
    156 
    157 
    158 History
    159 =======
    160 
    161 3.0.6 Jul-17-08
    162         Fix for closures on sh.
    163 	Mark the sh/sh64 stack as non-executable.
    164 	(both thanks to Kaz Kojima)
    165 
    166 3.0.5 Apr-3-08
    167         Fix libffi.pc file.
    168 	Fix #define ARM for IcedTea users.
    169 	Fix x86 closure bug.
    170 
    171 3.0.4 Feb-24-08
    172         Fix x86 OpenBSD configury.
    173 
    174 3.0.3 Feb-22-08
    175         Enable x86 OpenBSD thanks to Thomas Heller, and
    176 	x86-64 FreeBSD thanks to Bjrn Knig and Andreas Tobler.
    177 	Clean up test instruction in README.
    178 
    179 3.0.2 Feb-21-08
    180         Improved x86 FreeBSD support.
    181 	Thanks to Bjrn Knig.
    182 
    183 3.0.1 Feb-15-08
    184         Fix instruction cache flushing bug on MIPS.
    185 	Thanks to David Daney.
    186 
    187 3.0.0 Feb-15-08
    188         Many changes, mostly thanks to the GCC project.
    189 	Cygnus Solutions is now Red Hat.
    190 
    191   [10 years go by...]
    192 
    193 1.20 Oct-5-98
    194 	Raffaele Sena produces ARM port.
    195 
    196 1.19 Oct-5-98
    197 	Fixed x86 long double and long long return support.
    198 	m68k bug fixes from Andreas Schwab.
    199 	Patch for DU assembler compatibility for the Alpha from Richard
    200 	Henderson.
    201 
    202 1.18 Apr-17-98
    203 	Bug fixes and MIPS configuration changes.
    204 
    205 1.17 Feb-24-98
    206 	Bug fixes and m68k port from Andreas Schwab. PowerPC port from
    207 	Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
    208 
    209 1.16 Feb-11-98
    210 	Richard Henderson produces Alpha port.
    211 
    212 1.15 Dec-4-97
    213 	Fixed an n32 ABI bug. New libtool, auto* support.
    214 
    215 1.14 May-13-97
    216 	libtool is now used to generate shared and static libraries.
    217 	Fixed a minor portability problem reported by Russ McManus
    218 	<mcmanr (a] eq.gs.com>.
    219 
    220 1.13 Dec-2-96
    221 	Added --enable-purify-safety to keep Purify from complaining
    222 	about certain low level code.
    223 	Sparc fix for calling functions with < 6 args.
    224 	Linux x86 a.out fix.
    225 
    226 1.12 Nov-22-96
    227 	Added missing ffi_type_void, needed for supporting void return 
    228 	types. Fixed test case for non MIPS machines. Cygnus Support 
    229 	is now Cygnus Solutions. 
    230 
    231 1.11 Oct-30-96
    232 	Added notes about GNU make.
    233 
    234 1.10 Oct-29-96
    235 	Added configuration fix for non GNU compilers.
    236 
    237 1.09 Oct-29-96
    238 	Added --enable-debug configure switch. Clean-ups based on LCLint 
    239 	feedback. ffi_mips.h is always installed. Many configuration 
    240 	fixes. Fixed ffitest.c for sparc builds.
    241 
    242 1.08 Oct-15-96
    243 	Fixed n32 problem. Many clean-ups.
    244 
    245 1.07 Oct-14-96
    246 	Gordon Irlam rewrites v8.S again. Bug fixes.
    247 
    248 1.06 Oct-14-96
    249 	Gordon Irlam improved the sparc port. 
    250 
    251 1.05 Oct-14-96
    252 	Interface changes based on feedback.
    253 
    254 1.04 Oct-11-96
    255 	Sparc port complete (modulo struct passing bug).
    256 
    257 1.03 Oct-10-96
    258 	Passing struct args, and returning struct values works for
    259 	all architectures/calling conventions. Expanded tests.
    260 
    261 1.02 Oct-9-96
    262 	Added SGI n32 support. Fixed bugs in both o32 and Linux support.
    263 	Added "make test".
    264 
    265 1.01 Oct-8-96
    266 	Fixed float passing bug in mips version. Restructured some
    267 	of the code. Builds cleanly with SGI tools.
    268 
    269 1.00 Oct-7-96
    270 	First release. No public announcement.
    271 
    272 
    273 Authors & Credits
    274 =================
    275 
    276 libffi was originally written by Anthony Green <green (a] redhat.com>.
    277 
    278 The developers of the GNU Compiler Collection project have made
    279 innumerable valuable contributions.  See the ChangeLog file for
    280 details.
    281 
    282 Some of the ideas behind libffi were inspired by Gianni Mariani's free
    283 gencall library for Silicon Graphics machines.
    284 
    285 The closure mechanism was designed and implemented by Kresten Krab
    286 Thorup.
    287 
    288 Major processor architecture ports were contributed by the following
    289 developers:
    290 
    291 alpha		Richard Henderson
    292 arm		Raffaele Sena
    293 cris		Simon Posnjak, Hans-Peter Nilsson
    294 frv		Anthony Green
    295 ia64		Hans Boehm
    296 m32r		Kazuhiro Inaoka
    297 m68k		Andreas Schwab
    298 mips		Anthony Green, Casey Marshall
    299 mips64		David Daney
    300 pa		Randolph Chung, Dave Anglin, Andreas Tobler
    301 powerpc		Geoffrey Keating, Andreas Tobler, 
    302 			 David Edelsohn, John Hornkvist
    303 powerpc64	Jakub Jelinek
    304 s390		Gerhard Tonn, Ulrich Weigand
    305 sh		Kaz Kojima
    306 sh64		Kaz Kojima
    307 sparc		Anthony Green, Gordon Irlam
    308 x86		Anthony Green, Jon Beniston
    309 x86-64		Bo Thorsen
    310 
    311 Jesper Skov and Andrew Haley both did more than their fair share of
    312 stepping through the code and tracking down bugs.
    313 
    314 Thanks also to Tom Tromey for bug fixes, documentation and
    315 configuration help.
    316 
    317 Thanks to Jim Blandy, who provided some useful feedback on the libffi
    318 interface.
    319 
    320 Andreas Tobler has done a tremendous amount of work on the testsuite.
    321 
    322 Alex Oliva solved the executable page problem for SElinux.
    323 
    324 The list above is almost certainly incomplete and inaccurate.  I'm
    325 happy to make corrections or additions upon request.
    326 
    327 If you have a problem, or have found a bug, please send a note to
    328 green (a] redhat.com.
    329