summaryrefslogtreecommitdiff
path: root/data/libffi/incompetant.diff
blob: 3245f3077f9b607009255afc9c26d92ac9831c36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
diff -ru libffi-3.0.10/include/ffi.h.in libffi-3.0.10+iPhone/include/ffi.h.in
--- libffi-3.0.10/include/ffi.h.in	2011-08-23 14:28:00.000000000 +0000
+++ libffi-3.0.10+iPhone/include/ffi.h.in	2012-03-18 23:19:19.000000000 +0000
@@ -274,7 +274,16 @@
 __declspec(align(8))
 #endif
 typedef struct {
+union {
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
+    struct {
+      void *trampoline_table;
+      void *trampoline_table_entry;
+    };
+#endif
   char tramp[FFI_TRAMPOLINE_SIZE];
+};
+
   ffi_cif   *cif;
   void     (*fun)(ffi_cif*,void*,void**,void*);
   void      *user_data;
@@ -307,7 +316,15 @@
 # pragma pack 8
 #endif
 typedef struct {
+union {
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
+    struct {
+      void *trampoline_table;
+      void *trampoline_table_entry;
+    };
+#endif
   char tramp[FFI_TRAMPOLINE_SIZE];
+};
 
   ffi_cif   *cif;
 
@@ -328,7 +345,15 @@
 } ffi_raw_closure;
 
 typedef struct {
+union {
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
+    struct {
+      void *trampoline_table;
+      void *trampoline_table_entry;
+    };
+#endif
   char tramp[FFI_TRAMPOLINE_SIZE];
+};
 
   ffi_cif   *cif;
 
diff -ru libffi-3.0.10/libtool-version libffi-3.0.10+iPhone/libtool-version
--- libffi-3.0.10/libtool-version	2011-08-22 18:38:12.000000000 +0000
+++ libffi-3.0.10+iPhone/libtool-version	2012-03-18 23:08:29.000000000 +0000
@@ -26,4 +26,4 @@
 #    release, then set age to 0.
 #
 # CURRENT:REVISION:AGE
-5:10:0
+4:1:0
diff -ru libffi-3.0.10/src/arm/ffi.c libffi-3.0.10+iPhone/src/arm/ffi.c
--- libffi-3.0.10/src/arm/ffi.c	2011-08-23 14:28:04.000000000 +0000
+++ libffi-3.0.10+iPhone/src/arm/ffi.c	2012-03-18 23:15:50.000000000 +0000
@@ -552,7 +552,7 @@
   free (closure);
 }
 
-#else
+#endif
 
 #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX)				\
 ({ unsigned char *__tramp = (unsigned char*)(TRAMP);			\
@@ -570,8 +570,6 @@
                                                     mapping.  */        \
  })
 
-#endif
-
 /* the cif must already be prep'ed */
 
 ffi_status
@@ -591,13 +589,19 @@
     return FFI_BAD_ABI;
     
 #if FFI_EXEC_TRAMPOLINE_TABLE
+if (closure != codeloc) {
   void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc);
   config[0] = closure;
   config[1] = closure_func;
-#else
+} else {
+#endif
+
   FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
 		       closure_func,  \
 		       codeloc);
+
+#if FFI_EXEC_TRAMPOLINE_TABLE
+}
 #endif
 
   closure->cif  = cif;