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
@@ -43,21 +43,13 @@ cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
43
43
  int main (void)
44
44
  {
45
45
  ffi_cif cif;
46
- #ifndef USING_MMAP
47
- static ffi_closure cl;
48
- #endif
49
- ffi_closure *pcl;
46
+ void *code;
47
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
50
48
  void* args_dbl[5];
51
49
  ffi_type* cls_struct_fields[4];
52
50
  ffi_type cls_struct_type;
53
51
  ffi_type* dbl_arg_types[5];
54
52
 
55
- #ifdef USING_MMAP
56
- pcl = allocate_mmap (sizeof(ffi_closure));
57
- #else
58
- pcl = &cl;
59
- #endif
60
-
61
53
  cls_struct_type.size = 0;
62
54
  cls_struct_type.alignment = 0;
63
55
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -87,9 +79,9 @@ int main (void)
87
79
  printf("res: %d %d\n", res_dbl.a, res_dbl.b);
88
80
  /* { dg-output "\nres: 24 144" } */
89
81
 
90
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_3byte_gn1, NULL) == FFI_OK);
82
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn1, NULL, code) == FFI_OK);
91
83
 
92
- res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(pcl))(g_dbl, f_dbl);
84
+ res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(code))(g_dbl, f_dbl);
93
85
  /* { dg-output "\n15 125 9 19: 24 144" } */
94
86
  printf("res: %d %d\n", res_dbl.a, res_dbl.b);
95
87
  /* { dg-output "\nres: 24 144" } */
@@ -49,21 +49,13 @@ cls_struct_4_1byte_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[5];
57
55
  ffi_type* cls_struct_fields[5];
58
56
  ffi_type cls_struct_type;
59
57
  ffi_type* dbl_arg_types[5];
60
58
 
61
- #ifdef USING_MMAP
62
- pcl = allocate_mmap (sizeof(ffi_closure));
63
- #else
64
- pcl = &cl;
65
- #endif
66
-
67
59
  cls_struct_type.size = 0;
68
60
  cls_struct_type.alignment = 0;
69
61
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -95,9 +87,9 @@ int main (void)
95
87
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
96
88
  /* { dg-output "\nres: 190 192 194 196" } */
97
89
 
98
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_4_1byte_gn, NULL) == FFI_OK);
90
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4_1byte_gn, NULL, code) == FFI_OK);
99
91
 
100
- res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(pcl))(g_dbl, f_dbl);
92
+ res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(code))(g_dbl, f_dbl);
101
93
  /* { dg-output "\n12 13 14 15 178 179 180 181: 190 192 194 196" } */
102
94
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
103
95
  /* { dg-output "\nres: 190 192 194 196" } */
@@ -43,21 +43,13 @@ cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
43
43
  int main (void)
44
44
  {
45
45
  ffi_cif cif;
46
- #ifndef USING_MMAP
47
- static ffi_closure cl;
48
- #endif
49
- ffi_closure *pcl;
46
+ void *code;
47
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
50
48
  void* args_dbl[5];
51
49
  ffi_type* cls_struct_fields[4];
52
50
  ffi_type cls_struct_type;
53
51
  ffi_type* dbl_arg_types[5];
54
52
 
55
- #ifdef USING_MMAP
56
- pcl = allocate_mmap (sizeof(ffi_closure));
57
- #else
58
- pcl = &cl;
59
- #endif
60
-
61
53
  cls_struct_type.size = 0;
62
54
  cls_struct_type.alignment = 0;
63
55
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -87,9 +79,9 @@ int main (void)
87
79
  printf("res: %d %d\n", res_dbl.a, res_dbl.b);
88
80
  /* { dg-output "\nres: 139 248" } */
89
81
 
90
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_4byte_gn, NULL) == FFI_OK);
82
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4byte_gn, NULL, code) == FFI_OK);
91
83
 
92
- res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(pcl))(g_dbl, f_dbl);
84
+ res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(code))(g_dbl, f_dbl);
93
85
  /* { dg-output "\n127 120 12 128: 139 248" } */
94
86
  printf("res: %d %d\n", res_dbl.a, res_dbl.b);
95
87
  /* { dg-output "\nres: 139 248" } */
@@ -51,21 +51,13 @@ cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
51
51
  int main (void)
52
52
  {
53
53
  ffi_cif cif;
54
- #ifndef USING_MMAP
55
- static ffi_closure cl;
56
- #endif
57
- ffi_closure *pcl;
54
+ void *code;
55
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
58
56
  void* args_dbl[5];
59
57
  ffi_type* cls_struct_fields[6];
60
58
  ffi_type cls_struct_type;
61
59
  ffi_type* dbl_arg_types[5];
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;
@@ -105,9 +97,9 @@ int main (void)
105
97
  res_dbl.d = 0;
106
98
  res_dbl.e = 0;
107
99
 
108
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_5byte_gn, NULL) == FFI_OK);
100
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK);
109
101
 
110
- res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(pcl))(g_dbl, f_dbl);
102
+ res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl);
111
103
  /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */
112
104
  printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
113
105
  res_dbl.d, res_dbl.e);
@@ -46,21 +46,13 @@ cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
46
46
  int main (void)
47
47
  {
48
48
  ffi_cif cif;
49
- #ifndef USING_MMAP
50
- static ffi_closure cl;
51
- #endif
52
- ffi_closure *pcl;
49
+ void *code;
50
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
53
51
  void* args_dbl[5];
54
52
  ffi_type* cls_struct_fields[4];
55
53
  ffi_type cls_struct_type;
56
54
  ffi_type* dbl_arg_types[5];
57
55
 
58
- #ifdef USING_MMAP
59
- pcl = allocate_mmap (sizeof(ffi_closure));
60
- #else
61
- pcl = &cl;
62
- #endif
63
-
64
56
  cls_struct_type.size = 0;
65
57
  cls_struct_type.alignment = 0;
66
58
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -95,9 +87,9 @@ int main (void)
95
87
  res_dbl.b = 0;
96
88
  res_dbl.c = 0;
97
89
 
98
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_5byte_gn, NULL) == FFI_OK);
90
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK);
99
91
 
100
- res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(pcl))(g_dbl, f_dbl);
92
+ res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl);
101
93
  /* { dg-output "\n127 120 1 12 128 9: 139 248 10" } */
102
94
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
103
95
  /* { dg-output "\nres: 139 248 10" } */
@@ -59,21 +59,13 @@ cls_struct_64byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
59
59
  int main (void)
60
60
  {
61
61
  ffi_cif cif;
62
- #ifndef USING_MMAP
63
- static ffi_closure cl;
64
- #endif
65
- ffi_closure *pcl;
62
+ void *code;
63
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
66
64
  void* args_dbl[5];
67
65
  ffi_type* cls_struct_fields[9];
68
66
  ffi_type cls_struct_type;
69
67
  ffi_type* dbl_arg_types[5];
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;
@@ -116,13 +108,13 @@ int main (void)
116
108
  res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h);
117
109
  /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */
118
110
 
119
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_64byte_gn, NULL) == FFI_OK);
111
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_64byte_gn, NULL, code) == FFI_OK);
120
112
 
121
113
  res_dbl = ((cls_struct_64byte(*)(cls_struct_64byte,
122
114
  cls_struct_64byte,
123
115
  cls_struct_64byte,
124
116
  cls_struct_64byte))
125
- (pcl))(e_dbl, f_dbl, g_dbl, h_dbl);
117
+ (code))(e_dbl, f_dbl, g_dbl, h_dbl);
126
118
  /* { dg-output "\n22 15 17 25 6 13 19 18" } */
127
119
  printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c,
128
120
  res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h);
@@ -53,21 +53,13 @@ cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
53
53
  int main (void)
54
54
  {
55
55
  ffi_cif cif;
56
- #ifndef USING_MMAP
57
- static ffi_closure cl;
58
- #endif
59
- ffi_closure *pcl;
56
+ void *code;
57
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
60
58
  void* args_dbl[5];
61
59
  ffi_type* cls_struct_fields[7];
62
60
  ffi_type cls_struct_type;
63
61
  ffi_type* dbl_arg_types[5];
64
62
 
65
- #ifdef USING_MMAP
66
- pcl = allocate_mmap (sizeof(ffi_closure));
67
- #else
68
- pcl = &cl;
69
- #endif
70
-
71
63
  cls_struct_type.size = 0;
72
64
  cls_struct_type.alignment = 0;
73
65
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -109,9 +101,9 @@ int main (void)
109
101
  res_dbl.e = 0;
110
102
  res_dbl.f = 0;
111
103
 
112
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_6byte_gn, NULL) == FFI_OK);
104
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK);
113
105
 
114
- res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(pcl))(g_dbl, f_dbl);
106
+ res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl);
115
107
  /* { dg-output "\n127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */
116
108
  printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
117
109
  res_dbl.d, res_dbl.e, res_dbl.f);
@@ -49,21 +49,13 @@ cls_struct_6byte_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[5];
57
55
  ffi_type* cls_struct_fields[5];
58
56
  ffi_type cls_struct_type;
59
57
  ffi_type* dbl_arg_types[5];
60
58
 
61
- #ifdef USING_MMAP
62
- pcl = allocate_mmap (sizeof(ffi_closure));
63
- #else
64
- pcl = &cl;
65
- #endif
66
-
67
59
  cls_struct_type.size = 0;
68
60
  cls_struct_type.alignment = 0;
69
61
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -95,9 +87,9 @@ int main (void)
95
87
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
96
88
  /* { dg-output "\nres: 139 248 10 255" } */
97
89
 
98
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_6byte_gn, NULL) == FFI_OK);
90
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK);
99
91
 
100
- res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(pcl))(g_dbl, f_dbl);
92
+ res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl);
101
93
  /* { dg-output "\n127 120 1 128 12 128 9 127: 139 248 10 255" } */
102
94
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
103
95
  /* { dg-output "\nres: 139 248 10 255" } */
@@ -55,21 +55,13 @@ cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
55
55
  int main (void)
56
56
  {
57
57
  ffi_cif cif;
58
- #ifndef USING_MMAP
59
- static ffi_closure cl;
60
- #endif
61
- ffi_closure *pcl;
58
+ void *code;
59
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
62
60
  void* args_dbl[5];
63
61
  ffi_type* cls_struct_fields[8];
64
62
  ffi_type cls_struct_type;
65
63
  ffi_type* dbl_arg_types[5];
66
64
 
67
- #ifdef USING_MMAP
68
- pcl = allocate_mmap (sizeof(ffi_closure));
69
- #else
70
- pcl = &cl;
71
- #endif
72
-
73
65
  cls_struct_type.size = 0;
74
66
  cls_struct_type.alignment = 0;
75
67
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -113,9 +105,9 @@ int main (void)
113
105
  res_dbl.f = 0;
114
106
  res_dbl.g = 0;
115
107
 
116
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_7byte_gn, NULL) == FFI_OK);
108
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK);
117
109
 
118
- res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(pcl))(g_dbl, f_dbl);
110
+ res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl);
119
111
  /* { dg-output "\n127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */
120
112
  printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
121
113
  res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g);
@@ -48,21 +48,13 @@ cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
48
48
  int main (void)
49
49
  {
50
50
  ffi_cif cif;
51
- #ifndef USING_MMAP
52
- static ffi_closure cl;
53
- #endif
54
- ffi_closure *pcl;
51
+ void *code;
52
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
55
53
  void* args_dbl[5];
56
54
  ffi_type* cls_struct_fields[5];
57
55
  ffi_type cls_struct_type;
58
56
  ffi_type* dbl_arg_types[5];
59
57
 
60
- #ifdef USING_MMAP
61
- pcl = allocate_mmap (sizeof(ffi_closure));
62
- #else
63
- pcl = &cl;
64
- #endif
65
-
66
58
  cls_struct_type.size = 0;
67
59
  cls_struct_type.alignment = 0;
68
60
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -94,9 +86,9 @@ int main (void)
94
86
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
95
87
  /* { dg-output "\nres: 139 248 10 509" } */
96
88
 
97
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_7byte_gn, NULL) == FFI_OK);
89
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK);
98
90
 
99
- res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(pcl))(g_dbl, f_dbl);
91
+ res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl);
100
92
  /* { dg-output "\n127 120 1 254 12 128 9 255: 139 248 10 509" } */
101
93
  printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
102
94
  /* { dg-output "\nres: 139 248 10 509" } */
@@ -42,21 +42,13 @@ cls_struct_8byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
42
42
  int main (void)
43
43
  {
44
44
  ffi_cif cif;
45
- #ifndef USING_MMAP
46
- static ffi_closure cl;
47
- #endif
48
- ffi_closure *pcl;
45
+ void *code;
46
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
49
47
  void* args_dbl[5];
50
48
  ffi_type* cls_struct_fields[4];
51
49
  ffi_type cls_struct_type;
52
50
  ffi_type* dbl_arg_types[5];
53
51
 
54
- #ifdef USING_MMAP
55
- pcl = allocate_mmap (sizeof(ffi_closure));
56
- #else
57
- pcl = &cl;
58
- #endif
59
-
60
52
  cls_struct_type.size = 0;
61
53
  cls_struct_type.alignment = 0;
62
54
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -85,9 +77,9 @@ int main (void)
85
77
  /* { dg-output "1 2 4 5: 5 7" } */
86
78
  printf("res: %d %g\n", res_dbl.a, res_dbl.b);
87
79
  /* { dg-output "\nres: 5 7" } */
88
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_8byte_gn, NULL) == FFI_OK);
80
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_8byte_gn, NULL, code) == FFI_OK);
89
81
 
90
- res_dbl = ((cls_struct_8byte(*)(cls_struct_8byte, cls_struct_8byte))(pcl))(g_dbl, f_dbl);
82
+ res_dbl = ((cls_struct_8byte(*)(cls_struct_8byte, cls_struct_8byte))(code))(g_dbl, f_dbl);
91
83
  /* { dg-output "\n1 2 4 5: 5 7" } */
92
84
  printf("res: %d %g\n", res_dbl.a, res_dbl.b);
93
85
  /* { dg-output "\nres: 5 7" } */
@@ -43,21 +43,13 @@ static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp,
43
43
  int main (void)
44
44
  {
45
45
  ffi_cif cif;
46
- #ifndef USING_MMAP
47
- static ffi_closure cl;
48
- #endif
49
- ffi_closure *pcl;
46
+ void *code;
47
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
50
48
  void* args_dbl[3];
51
49
  ffi_type* cls_struct_fields[3];
52
50
  ffi_type cls_struct_type;
53
51
  ffi_type* dbl_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
  cls_struct_type.size = 0;
62
54
  cls_struct_type.alignment = 0;
63
55
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -87,9 +79,9 @@ int main (void)
87
79
  printf("res: %d %g\n", res_dbl.a, res_dbl.b);
88
80
  /* { dg-output "\nres: 8 17" } */
89
81
 
90
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_9byte_gn, NULL) == FFI_OK);
82
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK);
91
83
 
92
- res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(pcl))(h_dbl, j_dbl);
84
+ res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl);
93
85
  /* { dg-output "\n7 8 1 9: 8 17" } */
94
86
  printf("res: %d %g\n", res_dbl.a, res_dbl.b);
95
87
  /* { dg-output "\nres: 8 17" } */
@@ -43,21 +43,13 @@ static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp,
43
43
  int main (void)
44
44
  {
45
45
  ffi_cif cif;
46
- #ifndef USING_MMAP
47
- static ffi_closure cl;
48
- #endif
49
- ffi_closure *pcl;
46
+ void *code;
47
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
50
48
  void* args_dbl[3];
51
49
  ffi_type* cls_struct_fields[3];
52
50
  ffi_type cls_struct_type;
53
51
  ffi_type* dbl_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
  cls_struct_type.size = 0;
62
54
  cls_struct_type.alignment = 0;
63
55
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -88,9 +80,9 @@ int main (void)
88
80
  /* { dg-output "\nres: 8 17" } */
89
81
 
90
82
 
91
- CHECK(ffi_prep_closure(pcl, &cif, cls_struct_9byte_gn, NULL) == FFI_OK);
83
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK);
92
84
 
93
- res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(pcl))(h_dbl, j_dbl);
85
+ res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl);
94
86
  /* { dg-output "\n7 8 1 9: 8 17" } */
95
87
  printf("res: %g %d\n", res_dbl.a, res_dbl.b);
96
88
  /* { dg-output "\nres: 8 17" } */