ffi 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (203) hide show
  1. data/LICENSE +1 -27
  2. data/Rakefile +2 -11
  3. data/ext/ffi_c/AbstractMemory.c +6 -8
  4. data/ext/ffi_c/AbstractMemory.h +23 -21
  5. data/ext/ffi_c/AutoPointer.c +0 -1
  6. data/ext/ffi_c/Buffer.c +23 -8
  7. data/ext/ffi_c/Call.c +28 -0
  8. data/ext/ffi_c/Call.h +5 -1
  9. data/ext/ffi_c/DynamicLibrary.c +0 -1
  10. data/ext/ffi_c/Function.c +19 -2
  11. data/ext/ffi_c/MemoryPointer.c +2 -3
  12. data/ext/ffi_c/Pointer.c +23 -9
  13. data/ext/ffi_c/Struct.c +142 -69
  14. data/ext/ffi_c/Struct.h +16 -7
  15. data/ext/ffi_c/StructLayout.c +92 -55
  16. data/ext/ffi_c/Type.c +5 -22
  17. data/ext/ffi_c/Type.h +1 -1
  18. data/ext/ffi_c/Types.c +8 -2
  19. data/ext/ffi_c/Types.h +2 -0
  20. data/ext/ffi_c/extconf.rb +11 -7
  21. data/ext/ffi_c/libffi/ChangeLog +900 -84
  22. data/ext/ffi_c/libffi/ChangeLog.libffi +311 -0
  23. data/ext/ffi_c/libffi/LICENSE +1 -1
  24. data/ext/ffi_c/libffi/Makefile.am +14 -4
  25. data/ext/ffi_c/libffi/Makefile.in +362 -211
  26. data/ext/ffi_c/libffi/README +70 -92
  27. data/ext/ffi_c/libffi/aclocal.m4 +6068 -4586
  28. data/ext/ffi_c/libffi/config.guess +125 -143
  29. data/ext/ffi_c/libffi/config.sub +103 -27
  30. data/ext/ffi_c/libffi/configure +11364 -18497
  31. data/ext/ffi_c/libffi/configure.ac +43 -4
  32. data/ext/ffi_c/libffi/doc/libffi.info +15 -15
  33. data/ext/ffi_c/libffi/doc/libffi.texi +1 -1
  34. data/ext/ffi_c/libffi/doc/stamp-vti +4 -4
  35. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  36. data/ext/ffi_c/libffi/fficonfig.h.in +24 -3
  37. data/ext/ffi_c/libffi/include/Makefile.am +1 -1
  38. data/ext/ffi_c/libffi/include/Makefile.in +97 -50
  39. data/ext/ffi_c/libffi/include/ffi.h.in +8 -2
  40. data/ext/ffi_c/libffi/include/ffi_common.h +24 -0
  41. data/ext/ffi_c/libffi/libtool-version +1 -1
  42. data/ext/ffi_c/libffi/ltmain.sh +7346 -5870
  43. data/ext/ffi_c/libffi/m4/libtool.m4 +7360 -0
  44. data/ext/ffi_c/libffi/m4/ltoptions.m4 +368 -0
  45. data/ext/ffi_c/libffi/m4/ltsugar.m4 +123 -0
  46. data/ext/ffi_c/libffi/m4/ltversion.m4 +23 -0
  47. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +92 -0
  48. data/ext/ffi_c/libffi/man/Makefile.in +115 -62
  49. data/ext/ffi_c/libffi/man/ffi_call.3 +3 -3
  50. data/ext/ffi_c/libffi/missing +15 -8
  51. data/ext/ffi_c/libffi/src/arm/sysv.S +15 -8
  52. data/ext/ffi_c/libffi/src/avr32/ffi.c +421 -0
  53. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +50 -0
  54. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  55. data/ext/ffi_c/libffi/src/closures.c +47 -10
  56. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  57. data/ext/ffi_c/libffi/src/java_raw_api.c +0 -3
  58. data/ext/ffi_c/libffi/src/mips/ffi.c +135 -32
  59. data/ext/ffi_c/libffi/src/mips/ffitarget.h +37 -4
  60. data/ext/ffi_c/libffi/src/mips/n32.S +67 -10
  61. data/ext/ffi_c/libffi/src/mips/o32.S +8 -8
  62. data/ext/ffi_c/libffi/src/pa/ffi.c +7 -0
  63. data/ext/ffi_c/libffi/src/powerpc/aix.S +163 -64
  64. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +308 -112
  65. data/ext/ffi_c/libffi/src/powerpc/ffi.c +20 -7
  66. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +208 -80
  67. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +11 -3
  68. data/ext/ffi_c/libffi/src/powerpc/sysv.S +12 -23
  69. data/ext/ffi_c/libffi/src/s390/sysv.S +1 -1
  70. data/ext/ffi_c/libffi/src/sh/sysv.S +9 -9
  71. data/ext/ffi_c/libffi/src/sh64/ffi.c +37 -22
  72. data/ext/ffi_c/libffi/src/sh64/sysv.S +23 -14
  73. data/ext/ffi_c/libffi/src/sparc/ffi.c +21 -6
  74. data/ext/ffi_c/libffi/src/sparc/v8.S +55 -14
  75. data/ext/ffi_c/libffi/src/x86/darwin.S +10 -9
  76. data/ext/ffi_c/libffi/src/x86/ffi.c +293 -86
  77. data/ext/ffi_c/libffi/src/x86/ffi64.c +73 -19
  78. data/ext/ffi_c/libffi/src/x86/ffitarget.h +30 -0
  79. data/ext/ffi_c/libffi/src/x86/sysv.S +21 -4
  80. data/ext/ffi_c/libffi/src/x86/unix64.S +8 -4
  81. data/ext/ffi_c/libffi/src/x86/win32.S +633 -147
  82. data/ext/ffi_c/libffi/src/x86/win64.S +460 -0
  83. data/ext/ffi_c/libffi/testsuite/Makefile.am +63 -54
  84. data/ext/ffi_c/libffi/testsuite/Makefile.in +112 -77
  85. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +12 -1
  86. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -4
  87. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +7 -15
  88. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +7 -15
  89. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +7 -15
  90. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +7 -15
  91. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +7 -15
  92. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +7 -14
  93. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +7 -15
  94. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  95. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +6 -14
  96. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -12
  97. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -12
  98. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -12
  99. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -12
  100. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -12
  101. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -12
  102. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -12
  103. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +4 -12
  104. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -12
  105. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -12
  106. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -12
  107. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -12
  108. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -12
  109. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -12
  110. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -12
  111. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -12
  112. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +4 -12
  113. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -12
  114. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -12
  115. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -12
  116. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -12
  117. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -12
  118. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -12
  119. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -12
  120. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -12
  121. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -12
  122. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -12
  123. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +134 -0
  124. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +117 -0
  125. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +11 -17
  126. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -12
  127. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -12
  128. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +7 -15
  129. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -12
  130. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -12
  131. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +7 -15
  132. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  133. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +4 -12
  134. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +57 -0
  135. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +4 -13
  136. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  137. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +57 -0
  138. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +4 -12
  139. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +4 -12
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +4 -12
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +4 -12
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +4 -12
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +4 -12
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +140 -0
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +4 -12
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +4 -12
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +4 -12
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +4 -12
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +4 -12
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +8 -16
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +4 -12
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +37 -0
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +25 -0
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +31 -0
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +2 -1
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +342 -0
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +4 -12
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +4 -12
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +4 -12
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +4 -12
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +4 -12
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +4 -12
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +4 -12
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +4 -12
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +4 -12
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +4 -12
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +4 -12
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +4 -12
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +1 -1
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +124 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +10 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +4 -5
  179. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +17 -16
  180. data/ext/ffi_c/libffi/texinfo.tex +155 -427
  181. data/lib/ffi/autopointer.rb +79 -20
  182. data/lib/ffi/callback.rb +4 -10
  183. data/lib/ffi/enum.rb +28 -0
  184. data/lib/ffi/io.rb +28 -0
  185. data/lib/ffi/library.rb +237 -182
  186. data/lib/ffi/memorypointer.rb +28 -62
  187. data/lib/ffi/platform.rb +27 -0
  188. data/lib/ffi/pointer.rb +28 -0
  189. data/lib/ffi/struct.rb +55 -1
  190. data/lib/ffi/types.rb +29 -0
  191. data/lib/ffi/variadic.rb +29 -0
  192. data/spec/ffi/library_spec.rb +31 -5
  193. data/spec/ffi/rbx/attach_function_spec.rb +2 -1
  194. data/spec/ffi/rbx/memory_pointer_spec.rb +2 -1
  195. data/spec/ffi/spec_helper.rb +5 -1
  196. data/spec/ffi/struct_spec.rb +64 -0
  197. metadata +28 -8
  198. data/ext/ffi_c/libffi/TODO +0 -1
  199. data/ext/ffi_c/libffi/ltcf-c.sh +0 -861
  200. data/ext/ffi_c/libffi/ltcf-cxx.sh +0 -1069
  201. data/ext/ffi_c/libffi/ltcf-gcj.sh +0 -700
  202. data/ext/ffi_c/libffi/ltconfig +0 -2862
  203. data/ext/ffi_c/libffi/mkinstalldirs +0 -158
@@ -68,10 +68,8 @@ cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
68
68
  int main (void)
69
69
  {
70
70
  ffi_cif cif;
71
- #ifndef USING_MMAP
72
- static ffi_closure cl;
73
- #endif
74
- ffi_closure *pcl;
71
+ void *code;
72
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
75
73
  void* args_dbl[5];
76
74
  ffi_type* cls_struct_fields[5];
77
75
  ffi_type* cls_struct_fields1[5];
@@ -79,12 +77,6 @@ int main (void)
79
77
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
80
78
  ffi_type* dbl_arg_types[5];
81
79
 
82
- #ifdef USING_MMAP
83
- pcl = allocate_mmap (sizeof(ffi_closure));
84
- #else
85
- pcl = &cl;
86
- #endif
87
-
88
80
  cls_struct_type.size = 0;
89
81
  cls_struct_type.alignment = 0;
90
82
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -143,12 +135,12 @@ int main (void)
143
135
  CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd));
144
136
  CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff));
145
137
 
146
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_combined_gn, NULL) == FFI_OK);
138
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK);
147
139
 
148
140
  res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1,
149
141
  cls_struct_16byte2,
150
142
  cls_struct_combined))
151
- (pcl))(e_dbl, f_dbl, g_dbl);
143
+ (code))(e_dbl, f_dbl, g_dbl);
152
144
  /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */
153
145
  CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a));
154
146
  CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b));
@@ -72,10 +72,8 @@ cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
72
72
  int main (void)
73
73
  {
74
74
  ffi_cif cif;
75
- #ifndef USING_MMAP
76
- static ffi_closure cl;
77
- #endif
78
- ffi_closure *pcl;
75
+ void *code;
76
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
79
77
  void* args_dbl[5];
80
78
  ffi_type* cls_struct_fields[5];
81
79
  ffi_type* cls_struct_fields1[5];
@@ -83,12 +81,6 @@ int main (void)
83
81
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
84
82
  ffi_type* dbl_arg_types[5];
85
83
 
86
- #ifdef USING_MMAP
87
- pcl = allocate_mmap (sizeof(ffi_closure));
88
- #else
89
- pcl = &cl;
90
- #endif
91
-
92
84
  cls_struct_type.size = 0;
93
85
  cls_struct_type.alignment = 0;
94
86
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -150,13 +142,13 @@ int main (void)
150
142
  CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd));
151
143
  CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff));
152
144
 
153
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_combined_gn, NULL) == FFI_OK);
145
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK);
154
146
 
155
147
  res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1,
156
148
  cls_struct_16byte2,
157
149
  cls_struct_combined,
158
150
  cls_struct_16byte1))
159
- (pcl))(e_dbl, f_dbl, g_dbl, h_dbl);
151
+ (code))(e_dbl, f_dbl, g_dbl, h_dbl);
160
152
  /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */
161
153
  CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a));
162
154
  CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b));
@@ -58,10 +58,8 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
58
58
  int main (void)
59
59
  {
60
60
  ffi_cif cif;
61
- #ifndef USING_MMAP
62
- static ffi_closure cl;
63
- #endif
64
- ffi_closure *pcl;
61
+ void *code;
62
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
65
63
  void* args_dbl[4];
66
64
  ffi_type* cls_struct_fields[3];
67
65
  ffi_type* cls_struct_fields1[4];
@@ -69,12 +67,6 @@ int main (void)
69
67
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
70
68
  ffi_type* dbl_arg_types[4];
71
69
 
72
- #ifdef USING_MMAP
73
- pcl = allocate_mmap (sizeof(ffi_closure));
74
- #else
75
- pcl = &cl;
76
- #endif
77
-
78
70
  cls_struct_type.size = 0;
79
71
  cls_struct_type.alignment = 0;
80
72
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -129,9 +121,9 @@ int main (void)
129
121
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
130
122
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
131
123
 
132
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
124
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
133
125
 
134
- res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
126
+ res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl);
135
127
  /* { dg-output "\n1 7 12 127 99 255 2 9: 270 242 143" } */
136
128
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d));
137
129
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
@@ -49,22 +49,14 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
49
49
  int main (void)
50
50
  {
51
51
  ffi_cif cif;
52
- #ifndef USING_MMAP
53
- static ffi_closure cl;
54
- #endif
55
- ffi_closure *pcl;
52
+ void *code;
53
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
56
54
  void* args_dbl[3];
57
55
  ffi_type* cls_struct_fields[3];
58
56
  ffi_type* cls_struct_fields1[3];
59
57
  ffi_type cls_struct_type, cls_struct_type1;
60
58
  ffi_type* dbl_arg_types[3];
61
59
 
62
- #ifdef USING_MMAP
63
- pcl = allocate_mmap (sizeof(ffi_closure));
64
- #else
65
- pcl = &cl;
66
- #endif
67
-
68
60
  cls_struct_type.size = 0;
69
61
  cls_struct_type.alignment = 0;
70
62
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -106,9 +98,9 @@ int main (void)
106
98
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
107
99
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
108
100
 
109
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
101
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
110
102
 
111
- res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
103
+ res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl);
112
104
  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
113
105
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
114
106
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
@@ -50,22 +50,14 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
50
50
  int main (void)
51
51
  {
52
52
  ffi_cif cif;
53
- #ifndef USING_MMAP
54
- static ffi_closure cl;
55
- #endif
56
- ffi_closure *pcl;
53
+ void *code;
54
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
55
  void* args_dbl[3];
58
56
  ffi_type* cls_struct_fields[3];
59
57
  ffi_type* cls_struct_fields1[3];
60
58
  ffi_type cls_struct_type, cls_struct_type1;
61
59
  ffi_type* dbl_arg_types[3];
62
60
 
63
- #ifdef USING_MMAP
64
- pcl = allocate_mmap (sizeof(ffi_closure));
65
- #else
66
- pcl = &cl;
67
- #endif
68
-
69
61
  cls_struct_type.size = 0;
70
62
  cls_struct_type.alignment = 0;
71
63
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -108,9 +100,9 @@ int main (void)
108
100
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
109
101
 
110
102
 
111
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
103
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
112
104
 
113
- res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
105
+ res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl);
114
106
  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
115
107
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
116
108
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
@@ -50,22 +50,14 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
50
50
  int main (void)
51
51
  {
52
52
  ffi_cif cif;
53
- #ifndef USING_MMAP
54
- static ffi_closure cl;
55
- #endif
56
- ffi_closure *pcl;
53
+ void *code;
54
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
55
  void* args_dbl[3];
58
56
  ffi_type* cls_struct_fields[3];
59
57
  ffi_type* cls_struct_fields1[3];
60
58
  ffi_type cls_struct_type, cls_struct_type1;
61
59
  ffi_type* dbl_arg_types[3];
62
60
 
63
- #ifdef USING_MMAP
64
- pcl = allocate_mmap (sizeof(ffi_closure));
65
- #else
66
- pcl = &cl;
67
- #endif
68
-
69
61
  cls_struct_type.size = 0;
70
62
  cls_struct_type.alignment = 0;
71
63
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -107,9 +99,9 @@ int main (void)
107
99
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
108
100
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
109
101
 
110
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
102
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
111
103
 
112
- res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
104
+ res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl);
113
105
  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
114
106
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
115
107
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
@@ -50,22 +50,14 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
50
50
  int main (void)
51
51
  {
52
52
  ffi_cif cif;
53
- #ifndef USING_MMAP
54
- static ffi_closure cl;
55
- #endif
56
- ffi_closure *pcl;
53
+ void *code;
54
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
55
  void* args_dbl[3];
58
56
  ffi_type* cls_struct_fields[3];
59
57
  ffi_type* cls_struct_fields1[3];
60
58
  ffi_type cls_struct_type, cls_struct_type1;
61
59
  ffi_type* dbl_arg_types[3];
62
60
 
63
- #ifdef USING_MMAP
64
- pcl = allocate_mmap (sizeof(ffi_closure));
65
- #else
66
- pcl = &cl;
67
- #endif
68
-
69
61
  cls_struct_type.size = 0;
70
62
  cls_struct_type.alignment = 0;
71
63
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -108,9 +100,9 @@ int main (void)
108
100
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
109
101
 
110
102
 
111
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
103
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
112
104
 
113
- res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
105
+ res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl);
114
106
  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
115
107
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
116
108
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
@@ -57,10 +57,8 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
57
57
  int main (void)
58
58
  {
59
59
  ffi_cif cif;
60
- #ifndef USING_MMAP
61
- static ffi_closure cl;
62
- #endif
63
- ffi_closure *pcl;
60
+ void *code;
61
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
64
62
  void* args_dbl[4];
65
63
  ffi_type* cls_struct_fields[3];
66
64
  ffi_type* cls_struct_fields1[3];
@@ -68,12 +66,6 @@ int main (void)
68
66
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
69
67
  ffi_type* dbl_arg_types[4];
70
68
 
71
- #ifdef USING_MMAP
72
- pcl = allocate_mmap (sizeof(ffi_closure));
73
- #else
74
- pcl = &cl;
75
- #endif
76
-
77
69
  cls_struct_type.size = 0;
78
70
  cls_struct_type.alignment = 0;
79
71
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -127,9 +119,9 @@ int main (void)
127
119
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
128
120
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
129
121
 
130
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
122
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
131
123
 
132
- res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
124
+ res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl);
133
125
  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
134
126
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
135
127
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
@@ -50,22 +50,14 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
50
50
  int main (void)
51
51
  {
52
52
  ffi_cif cif;
53
- #ifndef USING_MMAP
54
- static ffi_closure cl;
55
- #endif
56
- ffi_closure *pcl;
53
+ void *code;
54
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
55
  void* args_dbl[3];
58
56
  ffi_type* cls_struct_fields[3];
59
57
  ffi_type* cls_struct_fields1[3];
60
58
  ffi_type cls_struct_type, cls_struct_type1;
61
59
  ffi_type* dbl_arg_types[3];
62
60
 
63
- #ifdef USING_MMAP
64
- pcl = allocate_mmap (sizeof(ffi_closure));
65
- #else
66
- pcl = &cl;
67
- #endif
68
-
69
61
  cls_struct_type.size = 0;
70
62
  cls_struct_type.alignment = 0;
71
63
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -107,9 +99,9 @@ int main (void)
107
99
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
108
100
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
109
101
 
110
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
102
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
111
103
 
112
- res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
104
+ res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl);
113
105
  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
114
106
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
115
107
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
@@ -57,10 +57,8 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
57
57
  int main (void)
58
58
  {
59
59
  ffi_cif cif;
60
- #ifndef USING_MMAP
61
- static ffi_closure cl;
62
- #endif
63
- ffi_closure *pcl;
60
+ void *code;
61
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
64
62
  void* args_dbl[4];
65
63
  ffi_type* cls_struct_fields[3];
66
64
  ffi_type* cls_struct_fields1[3];
@@ -68,12 +66,6 @@ int main (void)
68
66
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
69
67
  ffi_type* dbl_arg_types[4];
70
68
 
71
- #ifdef USING_MMAP
72
- pcl = allocate_mmap (sizeof(ffi_closure));
73
- #else
74
- pcl = &cl;
75
- #endif
76
-
77
69
  cls_struct_type.size = 0;
78
70
  cls_struct_type.alignment = 0;
79
71
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -127,9 +119,9 @@ int main (void)
127
119
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
128
120
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
129
121
 
130
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
122
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
131
123
 
132
- res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
124
+ res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl);
133
125
  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
134
126
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
135
127
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
@@ -57,10 +57,8 @@ B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
57
57
  int main (void)
58
58
  {
59
59
  ffi_cif cif;
60
- #ifndef USING_MMAP
61
- static ffi_closure cl;
62
- #endif
63
- ffi_closure *pcl;
60
+ void *code;
61
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
64
62
  void* args_dbl[4];
65
63
  ffi_type* cls_struct_fields[3];
66
64
  ffi_type* cls_struct_fields1[3];
@@ -68,12 +66,6 @@ int main (void)
68
66
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
69
67
  ffi_type* dbl_arg_types[4];
70
68
 
71
- #ifdef USING_MMAP
72
- pcl = allocate_mmap (sizeof(ffi_closure));
73
- #else
74
- pcl = &cl;
75
- #endif
76
-
77
69
  cls_struct_type.size = 0;
78
70
  cls_struct_type.alignment = 0;
79
71
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -127,9 +119,9 @@ int main (void)
127
119
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
128
120
  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
129
121
 
130
- CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
122
+ CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK);
131
123
 
132
- res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
124
+ res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl);
133
125
  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
134
126
  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
135
127
  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
@@ -45,19 +45,11 @@ int main(void)
45
45
  ffi_type* my_ffi_struct_fields[4];
46
46
  ffi_type my_ffi_struct_type;
47
47
  ffi_cif cif;
48
- #ifndef USING_MMAP
49
- static ffi_closure cl;
50
- #endif
51
- ffi_closure *pcl;
48
+ void *code;
49
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
52
50
  void* args[4];
53
51
  ffi_type* arg_types[3];
54
52
 
55
- #ifdef USING_MMAP
56
- pcl = allocate_mmap (sizeof(ffi_closure));
57
- #else
58
- pcl = &cl;
59
- #endif
60
-
61
53
  struct my_ffi_struct g = { 1.0, 2.0, 3.0 };
62
54
  struct my_ffi_struct f = { 1.0, 2.0, 3.0 };
63
55
  struct my_ffi_struct res;
@@ -87,9 +79,9 @@ int main(void)
87
79
  printf("res: %g %g %g\n", res.a, res.b, res.c);
88
80
  /* { dg-output "\nres: 2 4 6" } */
89
81
 
90
- CHECK(ffi_prep_closure(pcl, &cif, stub, NULL) == FFI_OK);
82
+ CHECK(ffi_prep_closure_loc(pcl, &cif, stub, NULL, code) == FFI_OK);
91
83
 
92
- res = ((my_ffi_struct(*)(struct my_ffi_struct, struct my_ffi_struct))(pcl))(g, f);
84
+ res = ((my_ffi_struct(*)(struct my_ffi_struct, struct my_ffi_struct))(code))(g, f);
93
85
  /* { dg-output "\n1 2 3 1 2 3: 2 4 6" } */
94
86
  printf("res: %g %g %g\n", res.a, res.b, res.c);
95
87
  /* { dg-output "\nres: 2 4 6" } */