1 \input texinfo @c -*-texinfo-*- 2 @c %**start of header 3 @setfilename libffi.info 4 @settitle libffi 5 @setchapternewpage off 6 @c %**end of header 7 8 @c Merge the standard indexes into a single one. 9 @syncodeindex fn cp 10 @syncodeindex vr cp 11 @syncodeindex ky cp 12 @syncodeindex pg cp 13 @syncodeindex tp cp 14 15 @include version.texi 16 17 @copying 18 19 This manual is for Libffi, a portable foreign-function interface 20 library. 21 22 Copyright @copyright{} 2008 Red Hat, Inc. 23 24 @quotation 25 Permission is granted to copy, distribute and/or modify this document 26 under the terms of the GNU General Public License as published by the 27 Free Software Foundation; either version 2, or (at your option) any 28 later version. A copy of the license is included in the 29 section entitled ``GNU General Public License''. 30 31 @end quotation 32 @end copying 33 34 @dircategory 35 @direntry 36 * libffi: (libffi). Portable foreign-function interface library. 37 @end direntry 38 39 @titlepage 40 @title Libffi 41 @page 42 @vskip 0pt plus 1filll 43 @insertcopying 44 @end titlepage 45 46 47 @ifnottex 48 @node Top 49 @top libffi 50 51 @insertcopying 52 53 @menu 54 * Introduction:: What is libffi? 55 * Using libffi:: How to use libffi. 56 * Missing Features:: Things libffi can't do. 57 * Index:: Index. 58 @end menu 59 60 @end ifnottex 61 62 63 @node Introduction 64 @chapter What is libffi? 65 66 Compilers for high level languages generate code that follow certain 67 conventions. These conventions are necessary, in part, for separate 68 compilation to work. One such convention is the @dfn{calling 69 convention}. The calling convention is a set of assumptions made by 70 the compiler about where function arguments will be found on entry to 71 a function. A calling convention also specifies where the return 72 value for a function is found. The calling convention is also 73 sometimes called the @dfn{ABI} or @dfn{Application Binary Interface}. 74 @cindex calling convention 75 @cindex ABI 76 @cindex Application Binary Interface 77 78 Some programs may not know at the time of compilation what arguments 79 are to be passed to a function. For instance, an interpreter may be 80 told at run-time about the number and types of arguments used to call 81 a given function. @samp{Libffi} can be used in such programs to 82 provide a bridge from the interpreter program to compiled code. 83 84 The @samp{libffi} library provides a portable, high level programming 85 interface to various calling conventions. This allows a programmer to 86 call any function specified by a call interface description at run 87 time. 88 89 @acronym{FFI} stands for Foreign Function Interface. A foreign 90 function interface is the popular name for the interface that allows 91 code written in one language to call code written in another language. 92 The @samp{libffi} library really only provides the lowest, machine 93 dependent layer of a fully featured foreign function interface. A 94 layer must exist above @samp{libffi} that handles type conversions for 95 values passed between the two languages. 96 @cindex FFI 97 @cindex Foreign Function Interface 98 99 100 @node Using libffi 101 @chapter Using libffi 102 103 @menu 104 * The Basics:: The basic libffi API. 105 * Simple Example:: A simple example. 106 * Types:: libffi type descriptions. 107 * Multiple ABIs:: Different passing styles on one platform. 108 * The Closure API:: Writing a generic function. 109 @end menu 110 111 112 @node The Basics 113 @section The Basics 114 115 @samp{Libffi} assumes that you have a pointer to the function you wish 116 to call and that you know the number and types of arguments to pass 117 it, as well as the return type of the function. 118 119 The first thing you must do is create an @code{ffi_cif} object that 120 matches the signature of the function you wish to call. This is a 121 separate step because it is common to make multiple calls using a 122 single @code{ffi_cif}. The @dfn{cif} in @code{ffi_cif} stands for 123 Call InterFace. To prepare a call interface object, use the function 124 @code{ffi_prep_cif}. 125 @cindex cif 126 127 @findex ffi_prep_cif 128 @defun ffi_status ffi_prep_cif (ffi_cif *@var{cif}, ffi_abi @var{abi}, unsigned int @var{nargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) 129 This initializes @var{cif} according to the given parameters. 130 131 @var{abi} is the ABI to use; normally @code{FFI_DEFAULT_ABI} is what 132 you want. @ref{Multiple ABIs} for more information. 133 134 @var{nargs} is the number of arguments that this function accepts. 135 @samp{libffi} does not yet handle varargs functions; see @ref{Missing 136 Features} for more information. 137 138 @var{rtype} is a pointer to an @code{ffi_type} structure that 139 describes the return type of the function. @xref{Types}. 140 141 @var{argtypes} is a vector of @code{ffi_type} pointers. 142 @var{argtypes} must have @var{nargs} elements. If @var{nargs} is 0, 143 this argument is ignored. 144 145 @code{ffi_prep_cif} returns a @code{libffi} status code, of type 146 @code{ffi_status}. This will be either @code{FFI_OK} if everything 147 worked properly; @code{FFI_BAD_TYPEDEF} if one of the @code{ffi_type} 148 objects is incorrect; or @code{FFI_BAD_ABI} if the @var{abi} parameter 149 is invalid. 150 @end defun 151 152 153 To call a function using an initialized @code{ffi_cif}, use the 154 @code{ffi_call} function: 155 156 @findex ffi_call 157 @defun void ffi_call (ffi_cif *@var{cif}, void *@var{fn}, void *@var{rvalue}, void **@var{avalues}) 158 This calls the function @var{fn} according to the description given in 159 @var{cif}. @var{cif} must have already been prepared using 160 @code{ffi_prep_cif}. 161 162 @var{rvalue} is a pointer to a chunk of memory that will hold the 163 result of the function call. This must be large enough to hold the 164 result and must be suitably aligned; it is the caller's responsibility 165 to ensure this. If @var{cif} declares that the function returns 166 @code{void} (using @code{ffi_type_void}), then @var{rvalue} is 167 ignored. If @var{rvalue} is @samp{NULL}, then the return value is 168 discarded. 169 170 @var{avalues} is a vector of @code{void *} pointers that point to the 171 memory locations holding the argument values for a call. If @var{cif} 172 declares that the function has no arguments (i.e., @var{nargs} was 0), 173 then @var{avalues} is ignored. 174 @end defun 175 176 177 @node Simple Example 178 @section Simple Example 179 180 Here is a trivial example that calls @code{puts} a few times. 181 182 @example 183 #include <stdio.h> 184 #include <ffi.h> 185 186 int main() 187 @{ 188 ffi_cif cif; 189 ffi_type *args[1]; 190 void *values[1]; 191 char *s; 192 int rc; 193 194 /* Initialize the argument info vectors */ 195 args[0] = &ffi_type_pointer; 196 values[0] = &s; 197 198 /* Initialize the cif */ 199 if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 200 &ffi_type_uint, args) == FFI_OK) 201 @{ 202 s = "Hello World!"; 203 ffi_call(&cif, puts, &rc, values); 204 /* rc now holds the result of the call to puts */ 205 206 /* values holds a pointer to the function's arg, so to 207 call puts() again all we need to do is change the 208 value of s */ 209 s = "This is cool!"; 210 ffi_call(&cif, puts, &rc, values); 211 @} 212 213 return 0; 214 @} 215 @end example 216 217 218 @node Types 219 @section Types 220 221 @menu 222 * Primitive Types:: Built-in types. 223 * Structures:: Structure types. 224 * Type Example:: Structure type example. 225 @end menu 226 227 @node Primitive Types 228 @subsection Primitive Types 229 230 @code{Libffi} provides a number of built-in type descriptors that can 231 be used to describe argument and return types: 232 233 @table @code 234 @item ffi_type_void 235 @tindex ffi_type_void 236 The type @code{void}. This cannot be used for argument types, only 237 for return values. 238 239 @item ffi_type_uint8 240 @tindex ffi_type_uint8 241 An unsigned, 8-bit integer type. 242 243 @item ffi_type_sint8 244 @tindex ffi_type_sint8 245 A signed, 8-bit integer type. 246 247 @item ffi_type_uint16 248 @tindex ffi_type_uint16 249 An unsigned, 16-bit integer type. 250 251 @item ffi_type_sint16 252 @tindex ffi_type_sint16 253 A signed, 16-bit integer type. 254 255 @item ffi_type_uint32 256 @tindex ffi_type_uint32 257 An unsigned, 32-bit integer type. 258 259 @item ffi_type_sint32 260 @tindex ffi_type_sint32 261 A signed, 32-bit integer type. 262 263 @item ffi_type_uint64 264 @tindex ffi_type_uint64 265 An unsigned, 64-bit integer type. 266 267 @item ffi_type_sint64 268 @tindex ffi_type_sint64 269 A signed, 64-bit integer type. 270 271 @item ffi_type_float 272 @tindex ffi_type_float 273 The C @code{float} type. 274 275 @item ffi_type_double 276 @tindex ffi_type_double 277 The C @code{double} type. 278 279 @item ffi_type_uchar 280 @tindex ffi_type_uchar 281 The C @code{unsigned char} type. 282 283 @item ffi_type_schar 284 @tindex ffi_type_schar 285 The C @code{signed char} type. (Note that there is not an exact 286 equivalent to the C @code{char} type in @code{libffi}; ordinarily you 287 should either use @code{ffi_type_schar} or @code{ffi_type_uchar} 288 depending on whether @code{char} is signed.) 289 290 @item ffi_type_ushort 291 @tindex ffi_type_ushort 292 The C @code{unsigned short} type. 293 294 @item ffi_type_sshort 295 @tindex ffi_type_sshort 296 The C @code{short} type. 297 298 @item ffi_type_uint 299 @tindex ffi_type_uint 300 The C @code{unsigned int} type. 301 302 @item ffi_type_sint 303 @tindex ffi_type_sint 304 The C @code{int} type. 305 306 @item ffi_type_ulong 307 @tindex ffi_type_ulong 308 The C @code{unsigned long} type. 309 310 @item ffi_type_slong 311 @tindex ffi_type_slong 312 The C @code{long} type. 313 314 @item ffi_type_longdouble 315 @tindex ffi_type_longdouble 316 On platforms that have a C @code{long double} type, this is defined. 317 On other platforms, it is not. 318 319 @item ffi_type_pointer 320 @tindex ffi_type_pointer 321 A generic @code{void *} pointer. You should use this for all 322 pointers, regardless of their real type. 323 @end table 324 325 Each of these is of type @code{ffi_type}, so you must take the address 326 when passing to @code{ffi_prep_cif}. 327 328 329 @node Structures 330 @subsection Structures 331 332 Although @samp{libffi} has no special support for unions or 333 bit-fields, it is perfectly happy passing structures back and forth. 334 You must first describe the structure to @samp{libffi} by creating a 335 new @code{ffi_type} object for it. 336 337 @tindex ffi_type 338 @deftp ffi_type 339 The @code{ffi_type} has the following members: 340 @table @code 341 @item size_t size 342 This is set by @code{libffi}; you should initialize it to zero. 343 344 @item unsigned short alignment 345 This is set by @code{libffi}; you should initialize it to zero. 346 347 @item unsigned short type 348 For a structure, this should be set to @code{FFI_TYPE_STRUCT}. 349 350 @item ffi_type **elements 351 This is a @samp{NULL}-terminated array of pointers to @code{ffi_type} 352 objects. There is one element per field of the struct. 353 @end table 354 @end deftp 355 356 357 @node Type Example 358 @subsection Type Example 359 360 The following example initializes a @code{ffi_type} object 361 representing the @code{tm} struct from Linux's @file{time.h}. 362 363 Here is how the struct is defined: 364 365 @example 366 struct tm @{ 367 int tm_sec; 368 int tm_min; 369 int tm_hour; 370 int tm_mday; 371 int tm_mon; 372 int tm_year; 373 int tm_wday; 374 int tm_yday; 375 int tm_isdst; 376 /* Those are for future use. */ 377 long int __tm_gmtoff__; 378 __const char *__tm_zone__; 379 @}; 380 @end example 381 382 Here is the corresponding code to describe this struct to 383 @code{libffi}: 384 385 @example 386 @{ 387 ffi_type tm_type; 388 ffi_type *tm_type_elements[12]; 389 int i; 390 391 tm_type.size = tm_type.alignment = 0; 392 tm_type.elements = &tm_type_elements; 393 394 for (i = 0; i < 9; i++) 395 tm_type_elements[i] = &ffi_type_sint; 396 397 tm_type_elements[9] = &ffi_type_slong; 398 tm_type_elements[10] = &ffi_type_pointer; 399 tm_type_elements[11] = NULL; 400 401 /* tm_type can now be used to represent tm argument types and 402 return types for ffi_prep_cif() */ 403 @} 404 @end example 405 406 407 @node Multiple ABIs 408 @section Multiple ABIs 409 410 A given platform may provide multiple different ABIs at once. For 411 instance, the x86 platform has both @samp{stdcall} and @samp{fastcall} 412 functions. 413 414 @code{libffi} provides some support for this. However, this is 415 necessarily platform-specific. 416 417 @c FIXME: document the platforms 418 419 @node The Closure API 420 @section The Closure API 421 422 @code{libffi} also provides a way to write a generic function -- a 423 function that can accept and decode any combination of arguments. 424 This can be useful when writing an interpreter, or to provide wrappers 425 for arbitrary functions. 426 427 This facility is called the @dfn{closure API}. Closures are not 428 supported on all platforms; you can check the @code{FFI_CLOSURES} 429 define to determine whether they are supported on the current 430 platform. 431 @cindex closures 432 @cindex closure API 433 @findex FFI_CLOSURES 434 435 Because closures work by assembling a tiny function at runtime, they 436 require special allocation on platforms that have a non-executable 437 heap. Memory management for closures is handled by a pair of 438 functions: 439 440 @findex ffi_closure_alloca 441 @defun void *ffi_closure_alloc (size_t @var{size}, void **@var{code}) 442 Allocate a chunk of memory holding @var{size} bytes. This returns a 443 pointer to the writable address, and sets *@var{code} to the 444 corresponding executable address. 445 446 @var{size} should be sufficient to hold a @code{ffi_closure} object. 447 @end defun 448 449 @findex ffi_closure_free 450 @defun void ffi_closure_free (void *@var{writable}) 451 Free memory allocated using @code{ffi_closure_alloc}. The argument is 452 the writable address that was returned. 453 @end defun 454 455 456 Once you have allocated the memory for a closure, you must construct a 457 @code{ffi_cif} describing the function call. Finally you can prepare 458 the closure function: 459 460 @findex ffi_prep_closure_loc 461 @defun ffi_status ffi_prep_closure_loc (ffi_closure *@var{closure}, ffi_cif *@var{cif}, void (*@var{fun}) (ffi_cif *@var{cif}, void *@var{ret}, void **@var{args}, void *@var{user_data}), void *@var{user_data}, void *@var{codeloc}) 462 Prepare a closure function. 463 464 @var{closure} is the address of a @code{ffi_closure} object; this is 465 the writable address returned by @code{ffi_closure_alloc}. 466 467 @var{cif} is the @code{ffi_cif} describing the function parameters. 468 469 @var{user_data} is an arbitrary datum that is passed, uninterpreted, 470 to your closure function. 471 472 @var{codeloc} is the executable address returned by 473 @code{ffi_closure_alloc}. 474 475 @var{fun} is the function which will be called when the closure is 476 invoked. It is called with the arguments: 477 @table @var 478 @item cif 479 The @code{ffi_cif} passed to @code{ffi_prep_closure_loc}. 480 481 @item ret 482 A pointer to the memory used for the function's return value. 483 @var{fun} must fill this, unless the function is declared as returning 484 @code{void}. 485 @c FIXME: is this NULL for void-returning functions? 486 487 @item args 488 A vector of pointers to memory holding the arguments to the function. 489 490 @item user_data 491 The same @var{user_data} that was passed to 492 @code{ffi_prep_closure_loc}. 493 @end table 494 495 @code{ffi_prep_closure_loc} will return @code{FFI_OK} if everything 496 went ok, and something else on error. 497 @c FIXME: what? 498 499 After calling @code{ffi_prep_closure_loc}, you can cast @var{codeloc} 500 to the appropriate pointer-to-function type. 501 @end defun 502 503 @c FIXME: example 504 505 You may see old code referring to @code{ffi_prep_closure}. This 506 function is deprecated, as it cannot handle the need for separate 507 writable and executable addresses. 508 509 510 @node Missing Features 511 @chapter Missing Features 512 513 @code{libffi} is missing a few features. We welcome patches to add 514 support for these. 515 516 @itemize @bullet 517 @item 518 There is no support for calling varargs functions. This may work on 519 some platforms, depending on how the ABI is defined, but it is not 520 reliable. 521 522 @item 523 There is no support for bit fields in structures. 524 525 @item 526 The closure API is 527 528 @item 529 The ``raw'' API is undocumented. 530 @c argument promotion? 531 @c unions? 532 @c anything else? 533 @end itemize 534 535 536 @node Index 537 @unnumbered Index 538 539 @printindex cp 540 541 @bye 542