Rebase
[platform/upstream/libffi.git] / patches / win64-struct-args
index 5589472..bce3800 100644 (file)
@@ -51,9 +51,9 @@ Index: libffi/ChangeLog
 ===================================================================
 --- libffi.orig/ChangeLog
 +++ libffi/ChangeLog
-@@ -8,6 +8,14 @@
-       * src/closures.c (selinux_enabled_check): Fix strncmp usage bug.
+@@ -102,6 +102,14 @@
+       * fficonfig.h.in: Regenerate.
+       * src/x86/sysv.S (.eh_frame): Use .ascii, .string or error.
  
 +2010-05-11  Dan Witte  <dwitte@mozilla.com>
 +
@@ -70,7 +70,47 @@ Index: libffi/doc/libffi.info
 ===================================================================
 --- libffi.orig/doc/libffi.info
 +++ libffi/doc/libffi.info
-@@ -147,7 +147,9 @@ To prepare a call interface object, use 
+@@ -1,10 +1,10 @@
+-This is doc/libffi.info, produced by makeinfo version 4.12 from
+-./doc/libffi.texi.
++This is ../libffi/doc/libffi.info, produced by makeinfo version 4.13
++from ../libffi/doc/libffi.texi.
+ This manual is for Libffi, a portable foreign-function interface
+ library.
+-   Copyright (C) 2008 Red Hat, Inc.
++   Copyright (C) 2008, 2010 Red Hat, Inc.
+      Permission is granted to copy, distribute and/or modify this
+      document under the terms of the GNU General Public License as
+@@ -13,7 +13,7 @@ library.
+      included in the section entitled "GNU General Public License".
+-INFO-DIR-SECTION
++INFO-DIR-SECTION Development
+ START-INFO-DIR-ENTRY
+ * libffi: (libffi).             Portable foreign-function interface library.
+ END-INFO-DIR-ENTRY
+@@ -27,7 +27,7 @@ libffi
+ This manual is for Libffi, a portable foreign-function interface
+ library.
+-   Copyright (C) 2008 Red Hat, Inc.
++   Copyright (C) 2008, 2010 Red Hat, Inc.
+      Permission is granted to copy, distribute and/or modify this
+      document under the terms of the GNU General Public License as
+@@ -89,6 +89,7 @@ File: libffi.info,  Node: Using libffi, 
+ * Types::                       libffi type descriptions.
+ * Multiple ABIs::               Different passing styles on one platform.
+ * The Closure API::             Writing a generic function.
++* Closure Example::             A closure example.
\1f
+ File: libffi.info,  Node: The Basics,  Next: Simple Example,  Up: Using libffi
+@@ -146,7 +147,9 @@ To prepare a call interface object, use 
       AVALUES is a vector of `void *' pointers that point to the memory
       locations holding the argument values for a call.  If CIF declares
       that the function has no arguments (i.e., NARGS was 0), then
@@ -81,20 +121,108 @@ Index: libffi/doc/libffi.info
  
  \1f
  File: libffi.info,  Node: Simple Example,  Next: Types,  Prev: The Basics,  Up: Using libffi
-@@ -577,15 +579,15 @@ Node: Top\7f706
- Node: Introduction\7f1448
- Node: Using libffi\7f3084
- Node: The Basics\7f3570
--Node: Simple Example\7f6177
--Node: Types\7f7204
--Node: Primitive Types\7f7487
--Node: Structures\7f9307
--Node: Type Example\7f10167
--Node: Multiple ABIs\7f11390
--Node: The Closure API\7f11761
--Node: Closure Example\7f14705
--Node: Missing Features\7f16264
--Node: Index\7f16757
+@@ -368,7 +371,7 @@ instance, the x86 platform has both `std
+ necessarily platform-specific.
\1f
+-File: libffi.info,  Node: The Closure API,  Prev: Multiple ABIs,  Up: Using libffi
++File: libffi.info,  Node: The Closure API,  Next: Closure Example,  Prev: Multiple ABIs,  Up: Using libffi
+ 2.5 The Closure API
+ ===================
+@@ -444,6 +447,62 @@ is deprecated, as it cannot handle the n
+ executable addresses.
\1f
++File: libffi.info,  Node: Closure Example,  Prev: The Closure API,  Up: Using libffi
++
++2.6 Closure Example
++===================
++
++A trivial example that creates a new `puts' by binding `fputs' with
++`stdin'.
++
++     #include <stdio.h>
++     #include <ffi.h>
++
++     /* Acts like puts with the file given at time of enclosure. */
++     void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
++                       FILE *stream)
++     {
++       *ret = fputs(*(char **)args[0], stream);
++     }
++
++     int main()
++     {
++       ffi_cif cif;
++       ffi_type *args[1];
++       ffi_closure *closure;
++
++       int (*bound_puts)(char *);
++       int rc;
++
++       /* Allocate closure and bound_puts */
++       closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
++
++       if (closure)
++         {
++           /* Initialize the argument info vectors */
++           args[0] = &ffi_type_pointer;
++
++           /* Initialize the cif */
++           if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
++                            &ffi_type_uint, args) == FFI_OK)
++             {
++               /* Initialize the closure, setting stream to stdout */
++               if (ffi_prep_closure_loc(closure, &cif, puts_binding,
++                                        stdout, bound_puts) == FFI_OK)
++                 {
++                   rc = bound_puts("Hello World!");
++                   /* rc now holds the result of the call to fputs */
++                 }
++             }
++         }
++
++       /* Deallocate both closure, and bound_puts */
++       ffi_closure_free(closure);
++
++       return 0;
++     }
++
++\1f
+ File: libffi.info,  Node: Missing Features,  Next: Index,  Prev: Using libffi,  Up: Top
+ 3 Missing Features
+@@ -480,7 +539,7 @@ Index
+ * closures:                              The Closure API.      (line 13)
+ * FFI:                                   Introduction.         (line 31)
+ * ffi_call:                              The Basics.           (line 41)
+-* ffi_closure_alloca:                    The Closure API.      (line 19)
++* ffi_closure_alloc:                     The Closure API.      (line 19)
+ * ffi_closure_free:                      The Closure API.      (line 26)
+ * FFI_CLOSURES:                          The Closure API.      (line 13)
+ * ffi_prep_cif:                          The Basics.           (line 16)
+@@ -516,18 +575,19 @@ Index
\1f
+ Tag Table:
+-Node: Top\7f670
+-Node: Introduction\7f1406
+-Node: Using libffi\7f3042
+-Node: The Basics\7f3477
+-Node: Simple Example\7f6084
+-Node: Types\7f7111
+-Node: Primitive Types\7f7394
+-Node: Structures\7f9214
+-Node: Type Example\7f10074
+-Node: Multiple ABIs\7f11297
+-Node: The Closure API\7f11668
+-Node: Missing Features\7f14588
+-Node: Index\7f15081
++Node: Top\7f706
++Node: Introduction\7f1448
++Node: Using libffi\7f3084
++Node: The Basics\7f3570
 +Node: Simple Example\7f6356
 +Node: Types\7f7383
 +Node: Primitive Types\7f7666