ffi 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. data/LICENSE +1 -27
  2. data/Rakefile +9 -12
  3. data/ext/ffi_c/AbstractMemory.c +11 -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 +24 -8
  7. data/ext/ffi_c/Call.c +28 -0
  8. data/ext/ffi_c/Call.h +8 -4
  9. data/ext/ffi_c/ClosurePool.c +7 -5
  10. data/ext/ffi_c/DynamicLibrary.c +0 -1
  11. data/ext/ffi_c/Function.c +19 -2
  12. data/ext/ffi_c/MemoryPointer.c +3 -3
  13. data/ext/ffi_c/MethodHandle.c +1 -1
  14. data/ext/ffi_c/Pointer.c +23 -9
  15. data/ext/ffi_c/Struct.c +142 -69
  16. data/ext/ffi_c/Struct.h +16 -7
  17. data/ext/ffi_c/StructLayout.c +92 -55
  18. data/ext/ffi_c/Type.c +5 -22
  19. data/ext/ffi_c/Type.h +1 -1
  20. data/ext/ffi_c/Types.c +8 -2
  21. data/ext/ffi_c/Types.h +2 -0
  22. data/ext/ffi_c/Variadic.c +7 -19
  23. data/ext/ffi_c/endian.h +1 -1
  24. data/ext/ffi_c/extconf.rb +20 -11
  25. data/ext/ffi_c/libffi/ChangeLog +900 -84
  26. data/ext/ffi_c/libffi/ChangeLog.libffi +311 -0
  27. data/ext/ffi_c/libffi/LICENSE +1 -1
  28. data/ext/ffi_c/libffi/Makefile.am +14 -4
  29. data/ext/ffi_c/libffi/Makefile.in +362 -211
  30. data/ext/ffi_c/libffi/README +70 -92
  31. data/ext/ffi_c/libffi/aclocal.m4 +6068 -4586
  32. data/ext/ffi_c/libffi/config.guess +125 -143
  33. data/ext/ffi_c/libffi/config.sub +103 -27
  34. data/ext/ffi_c/libffi/configure +11364 -18497
  35. data/ext/ffi_c/libffi/configure.ac +43 -4
  36. data/ext/ffi_c/libffi/doc/libffi.info +15 -15
  37. data/ext/ffi_c/libffi/doc/libffi.texi +1 -1
  38. data/ext/ffi_c/libffi/doc/stamp-vti +4 -4
  39. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  40. data/ext/ffi_c/libffi/fficonfig.h.in +24 -3
  41. data/ext/ffi_c/libffi/include/Makefile.am +1 -1
  42. data/ext/ffi_c/libffi/include/Makefile.in +97 -50
  43. data/ext/ffi_c/libffi/include/ffi.h.in +8 -2
  44. data/ext/ffi_c/libffi/include/ffi_common.h +24 -0
  45. data/ext/ffi_c/libffi/libtool-version +1 -1
  46. data/ext/ffi_c/libffi/ltmain.sh +7346 -5870
  47. data/ext/ffi_c/libffi/m4/libtool.m4 +7360 -0
  48. data/ext/ffi_c/libffi/m4/ltoptions.m4 +368 -0
  49. data/ext/ffi_c/libffi/m4/ltsugar.m4 +123 -0
  50. data/ext/ffi_c/libffi/m4/ltversion.m4 +23 -0
  51. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +92 -0
  52. data/ext/ffi_c/libffi/man/Makefile.in +115 -62
  53. data/ext/ffi_c/libffi/man/ffi_call.3 +3 -3
  54. data/ext/ffi_c/libffi/missing +15 -8
  55. data/ext/ffi_c/libffi/src/arm/sysv.S +15 -8
  56. data/ext/ffi_c/libffi/src/avr32/ffi.c +421 -0
  57. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +50 -0
  58. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  59. data/ext/ffi_c/libffi/src/closures.c +47 -10
  60. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  61. data/ext/ffi_c/libffi/src/java_raw_api.c +0 -3
  62. data/ext/ffi_c/libffi/src/mips/ffi.c +135 -32
  63. data/ext/ffi_c/libffi/src/mips/ffitarget.h +37 -4
  64. data/ext/ffi_c/libffi/src/mips/n32.S +67 -10
  65. data/ext/ffi_c/libffi/src/mips/o32.S +8 -8
  66. data/ext/ffi_c/libffi/src/pa/ffi.c +7 -0
  67. data/ext/ffi_c/libffi/src/powerpc/aix.S +163 -64
  68. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +308 -112
  69. data/ext/ffi_c/libffi/src/powerpc/ffi.c +20 -7
  70. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +208 -80
  71. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +11 -3
  72. data/ext/ffi_c/libffi/src/powerpc/sysv.S +12 -23
  73. data/ext/ffi_c/libffi/src/s390/sysv.S +1 -1
  74. data/ext/ffi_c/libffi/src/sh/sysv.S +9 -9
  75. data/ext/ffi_c/libffi/src/sh64/ffi.c +37 -22
  76. data/ext/ffi_c/libffi/src/sh64/sysv.S +23 -14
  77. data/ext/ffi_c/libffi/src/sparc/ffi.c +21 -6
  78. data/ext/ffi_c/libffi/src/sparc/v8.S +55 -14
  79. data/ext/ffi_c/libffi/src/x86/darwin.S +10 -9
  80. data/ext/ffi_c/libffi/src/x86/ffi.c +293 -86
  81. data/ext/ffi_c/libffi/src/x86/ffi64.c +73 -19
  82. data/ext/ffi_c/libffi/src/x86/ffitarget.h +30 -0
  83. data/ext/ffi_c/libffi/src/x86/sysv.S +21 -4
  84. data/ext/ffi_c/libffi/src/x86/unix64.S +8 -4
  85. data/ext/ffi_c/libffi/src/x86/win32.S +633 -147
  86. data/ext/ffi_c/libffi/src/x86/win64.S +460 -0
  87. data/ext/ffi_c/libffi/testsuite/Makefile.am +63 -54
  88. data/ext/ffi_c/libffi/testsuite/Makefile.in +112 -77
  89. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +12 -1
  90. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -4
  91. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +7 -15
  92. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +7 -15
  93. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +7 -15
  94. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +7 -15
  95. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +7 -15
  96. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +7 -14
  97. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +7 -15
  98. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  99. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +6 -14
  100. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -12
  101. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -12
  102. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -12
  103. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -12
  104. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -12
  105. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -12
  106. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -12
  107. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +4 -12
  108. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -12
  109. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -12
  110. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -12
  111. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -12
  112. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -12
  113. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -12
  114. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -12
  115. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -12
  116. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +4 -12
  117. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -12
  118. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -12
  119. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -12
  120. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -12
  121. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -12
  122. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -12
  123. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -12
  124. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -12
  125. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -12
  126. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -12
  127. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +134 -0
  128. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +117 -0
  129. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +11 -17
  130. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -12
  131. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -12
  132. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +7 -15
  133. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -12
  134. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -12
  135. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +7 -15
  136. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  137. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +4 -12
  138. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +57 -0
  139. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +4 -13
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +57 -0
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +4 -12
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +4 -12
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +4 -12
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +4 -12
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +4 -12
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +4 -12
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +140 -0
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +4 -12
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +4 -12
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +4 -12
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +4 -12
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +4 -12
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +8 -16
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +4 -12
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +37 -0
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +25 -0
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +31 -0
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +2 -1
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +342 -0
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +4 -12
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +4 -12
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +4 -12
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +4 -12
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +4 -12
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +4 -12
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +4 -12
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +4 -12
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +4 -12
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +4 -12
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +4 -12
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +4 -12
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +1 -1
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +124 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +10 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +4 -5
  183. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +17 -16
  184. data/ext/ffi_c/libffi/texinfo.tex +155 -427
  185. data/ext/ffi_c/libffi.bsd.mk +1 -1
  186. data/lib/ffi/autopointer.rb +79 -20
  187. data/lib/ffi/buffer.rb +4 -0
  188. data/lib/ffi/callback.rb +4 -10
  189. data/lib/ffi/enum.rb +28 -0
  190. data/lib/ffi/ffi.rb +0 -1
  191. data/lib/ffi/io.rb +28 -0
  192. data/lib/ffi/library.rb +237 -182
  193. data/lib/ffi/memorypointer.rb +28 -62
  194. data/lib/ffi/platform.rb +27 -0
  195. data/lib/ffi/pointer.rb +28 -0
  196. data/lib/ffi/struct.rb +55 -1
  197. data/lib/ffi/types.rb +29 -0
  198. data/lib/ffi/variadic.rb +29 -0
  199. data/spec/ffi/library_spec.rb +31 -5
  200. data/spec/ffi/managed_struct_spec.rb +1 -1
  201. data/spec/ffi/pointer_spec.rb +1 -1
  202. data/spec/ffi/rbx/attach_function_spec.rb +2 -1
  203. data/spec/ffi/rbx/memory_pointer_spec.rb +2 -1
  204. data/spec/ffi/spec_helper.rb +5 -1
  205. data/spec/ffi/struct_spec.rb +77 -0
  206. metadata +28 -18
  207. data/ext/ffi_c/libffi/TODO +0 -1
  208. data/ext/ffi_c/libffi/ltcf-c.sh +0 -861
  209. data/ext/ffi_c/libffi/ltcf-cxx.sh +0 -1069
  210. data/ext/ffi_c/libffi/ltcf-gcj.sh +0 -700
  211. data/ext/ffi_c/libffi/ltconfig +0 -2862
  212. data/ext/ffi_c/libffi/mkinstalldirs +0 -158
@@ -0,0 +1,70 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value float.
3
+ Limitations: none.
4
+ PR: 41908.
5
+ Originator: <rfm@gnu.org> 20091102 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ typedef struct cls_struct_combined {
11
+ float a;
12
+ float b;
13
+ float c;
14
+ float d;
15
+ } cls_struct_combined;
16
+
17
+ void cls_struct_combined_fn(struct cls_struct_combined arg)
18
+ {
19
+ printf("%g %g %g %g\n",
20
+ arg.a, arg.b,
21
+ arg.c, arg.d);
22
+ fflush(stdout);
23
+ }
24
+
25
+ static void
26
+ cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
27
+ void** args, void* userdata __UNUSED__)
28
+ {
29
+ struct cls_struct_combined a0;
30
+
31
+ a0 = *(struct cls_struct_combined*)(args[0]);
32
+
33
+ cls_struct_combined_fn(a0);
34
+ }
35
+
36
+
37
+ int main (void)
38
+ {
39
+ ffi_cif cif;
40
+ void *code;
41
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
42
+ ffi_type* cls_struct_fields0[5];
43
+ ffi_type cls_struct_type0;
44
+ ffi_type* dbl_arg_types[5];
45
+
46
+ cls_struct_type0.size = 0;
47
+ cls_struct_type0.alignment = 0;
48
+ cls_struct_type0.type = FFI_TYPE_STRUCT;
49
+ cls_struct_type0.elements = cls_struct_fields0;
50
+
51
+ struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
52
+
53
+ cls_struct_fields0[0] = &ffi_type_float;
54
+ cls_struct_fields0[1] = &ffi_type_float;
55
+ cls_struct_fields0[2] = &ffi_type_float;
56
+ cls_struct_fields0[3] = &ffi_type_float;
57
+ cls_struct_fields0[4] = NULL;
58
+
59
+ dbl_arg_types[0] = &cls_struct_type0;
60
+ dbl_arg_types[1] = NULL;
61
+
62
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_void,
63
+ dbl_arg_types) == FFI_OK);
64
+
65
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK);
66
+
67
+ ((void(*)(cls_struct_combined)) (code))(g_dbl);
68
+ /* { dg-output "4 5 1 8" } */
69
+ exit(0);
70
+ }
@@ -43,6 +43,16 @@
43
43
 
44
44
  #endif
45
45
 
46
+
47
+ /* MinGW kludge. */
48
+ #ifdef _WIN64
49
+ #define PRIdLL "I64d"
50
+ #define PRIuLL "I64u"
51
+ #else
52
+ #define PRIdLL "lld"
53
+ #define PRIuLL "llu"
54
+ #endif
55
+
46
56
  #ifdef USING_MMAP
47
57
  static inline void *
48
58
  allocate_mmap (size_t size)
@@ -1,8 +1,8 @@
1
- # Copyright (C) 2003, 2006 Free Software Foundation, Inc.
1
+ # Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
2
2
 
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
5
- # the Free Software Foundation; either version 2 of the License, or
5
+ # the Free Software Foundation; either version 3 of the License, or
6
6
  # (at your option) any later version.
7
7
  #
8
8
  # This program is distributed in the hope that it will be useful,
@@ -11,9 +11,8 @@
11
11
  # GNU General Public License for more details.
12
12
  #
13
13
  # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
- # libffi testsuite that uses the 'dg.exp' driver.
14
+ # along with this program; see the file COPYING3. If not see
15
+ # <http://www.gnu.org/licenses/>.
17
16
 
18
17
  load_lib libffi-dg.exp
19
18
 
@@ -7,6 +7,14 @@
7
7
  /* { dg-do run } */
8
8
  #include "ffitestcxx.h"
9
9
 
10
+ #if defined HAVE_STDINT_H
11
+ #include <stdint.h>
12
+ #endif
13
+
14
+ #if defined HAVE_INTTYPES_H
15
+ #include <inttypes.h>
16
+ #endif
17
+
10
18
  void
11
19
  closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
12
20
  void** args __UNUSED__, void* userdata __UNUSED__)
@@ -27,7 +35,7 @@ void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
27
35
  (int)(*(double*)args[8]) + (int)*(int *)args[9] +
28
36
  (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
29
37
  (int)*(int *)args[12] + (int)(*(int *)args[13]) +
30
- (int)(*(int *)args[14]) + *(int *)args[15] + (int)(long)userdata;
38
+ (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
31
39
 
32
40
  printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
33
41
  (int)*(float *)args[0], (int)(*(float *)args[1]),
@@ -38,7 +46,7 @@ void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
38
46
  (int)(*(int *)args[10]), (int)(*(float *)args[11]),
39
47
  (int)*(int *)args[12], (int)(*(int *)args[13]),
40
48
  (int)(*(int *)args[14]), *(int *)args[15],
41
- (int)(long)userdata, (int)*(ffi_arg*)resp);
49
+ (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
42
50
 
43
51
  throw (int)*(ffi_arg*)resp;
44
52
  }
@@ -50,27 +58,20 @@ typedef int (*closure_test_type1)(float, float, float, float, signed short,
50
58
  int main (void)
51
59
  {
52
60
  ffi_cif cif;
53
- #ifndef USING_MMAP
54
- static ffi_closure cl;
55
- #endif
56
- ffi_closure *pcl;
61
+ void *code;
62
+ ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
57
63
  ffi_type * cl_arg_types[17];
58
- #ifdef USING_MMAP
59
- pcl = (ffi_closure *) allocate_mmap (sizeof(ffi_closure));
60
- #else
61
- pcl = &cl;
62
- #endif
63
64
 
64
65
  {
65
66
  cl_arg_types[1] = NULL;
66
67
 
67
68
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
68
69
  &ffi_type_void, cl_arg_types) == FFI_OK);
69
- CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn, NULL) == FFI_OK);
70
+ CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
70
71
 
71
72
  try
72
73
  {
73
- (*((closure_test_type)(pcl)))();
74
+ (*((closure_test_type)(code)))();
74
75
  } catch (int exception_code)
75
76
  {
76
77
  CHECK(exception_code == 9);
@@ -104,11 +105,11 @@ int main (void)
104
105
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
105
106
  &ffi_type_sint, cl_arg_types) == FFI_OK);
106
107
 
107
- CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn1,
108
- (void *) 3 /* userdata */) == FFI_OK);
108
+ CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
109
+ (void *) 3 /* userdata */, code) == FFI_OK);
109
110
  try
110
111
  {
111
- (*((closure_test_type1)pcl))
112
+ (*((closure_test_type1)code))
112
113
  (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
113
114
  19, 21, 1);
114
115
  /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */