ffi 1.17.0 → 1.17.4

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 (359) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +51 -0
  4. data/Gemfile +8 -3
  5. data/README.md +1 -0
  6. data/Rakefile +8 -5
  7. data/Steepfile +8 -0
  8. data/ext/ffi_c/DynamicLibrary.c +1 -1
  9. data/ext/ffi_c/Function.c +54 -34
  10. data/ext/ffi_c/MethodHandle.c +4 -2
  11. data/ext/ffi_c/StructLayout.c +129 -12
  12. data/ext/ffi_c/libffi/LICENSE +1 -1
  13. data/ext/ffi_c/libffi/Makefile.am +20 -15
  14. data/ext/ffi_c/libffi/Makefile.in +41 -54
  15. data/ext/ffi_c/libffi/README.md +40 -4
  16. data/ext/ffi_c/libffi/acinclude.m4 +6 -0
  17. data/ext/ffi_c/libffi/config.guess +80 -22
  18. data/ext/ffi_c/libffi/config.sub +161 -80
  19. data/ext/ffi_c/libffi/configure +135 -135
  20. data/ext/ffi_c/libffi/configure.ac +28 -14
  21. data/ext/ffi_c/libffi/configure.host +6 -6
  22. data/ext/ffi_c/libffi/doc/Makefile.in +4 -0
  23. data/ext/ffi_c/libffi/doc/libffi.texi +27 -4
  24. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  25. data/ext/ffi_c/libffi/fficonfig.h.in +3 -3
  26. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +1 -28
  27. data/ext/ffi_c/libffi/include/Makefile.in +4 -0
  28. data/ext/ffi_c/libffi/include/ffi.h.in +19 -1
  29. data/ext/ffi_c/libffi/include/ffi_cfi.h +2 -0
  30. data/ext/ffi_c/libffi/include/ffi_common.h +17 -0
  31. data/ext/ffi_c/libffi/libffi.map.in +13 -1
  32. data/ext/ffi_c/libffi/libtool-version +1 -1
  33. data/ext/ffi_c/libffi/m4/asmcfi.m4 +28 -11
  34. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +13 -3
  35. data/ext/ffi_c/libffi/man/Makefile.in +4 -0
  36. data/ext/ffi_c/libffi/src/aarch64/ffi.c +7 -4
  37. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +2 -2
  38. data/ext/ffi_c/libffi/src/aarch64/internal.h +63 -17
  39. data/ext/ffi_c/libffi/src/aarch64/sysv.S +22 -12
  40. data/ext/ffi_c/libffi/src/arc/arcompact.S +2 -2
  41. data/ext/ffi_c/libffi/src/arc/ffi.c +6 -2
  42. data/ext/ffi_c/libffi/src/arm/sysv.S +1 -1
  43. data/ext/ffi_c/libffi/src/closures.c +3 -3
  44. data/ext/ffi_c/libffi/src/dlmalloc.c +1 -0
  45. data/ext/ffi_c/libffi/src/mips/ffitarget.h +2 -4
  46. data/ext/ffi_c/libffi/src/mips/n32.S +4 -0
  47. data/ext/ffi_c/libffi/src/mips/o32.S +4 -0
  48. data/ext/ffi_c/libffi/src/or1k/ffi.c +2 -2
  49. data/ext/ffi_c/libffi/src/pa/linux.S +4 -0
  50. data/ext/ffi_c/libffi/src/powerpc/ffi.c +19 -0
  51. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +26 -19
  52. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +26 -16
  53. data/ext/ffi_c/libffi/src/powerpc/internal.h +10 -0
  54. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +47 -0
  55. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +24 -0
  56. data/ext/ffi_c/libffi/src/prep_cif.c +1 -4
  57. data/ext/ffi_c/libffi/src/riscv/ffi.c +39 -16
  58. data/ext/ffi_c/libffi/src/riscv/internal.h +7 -0
  59. data/ext/ffi_c/libffi/src/riscv/sysv.S +24 -0
  60. data/ext/ffi_c/libffi/src/s390/ffi.c +28 -1
  61. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  62. data/ext/ffi_c/libffi/src/s390/sysv.S +38 -0
  63. data/ext/ffi_c/libffi/src/sparc/ffi.c +16 -0
  64. data/ext/ffi_c/libffi/src/tramp.c +6 -1
  65. data/ext/ffi_c/libffi/src/types.c +23 -1
  66. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffi.c +166 -315
  67. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffitarget.h +17 -0
  68. data/ext/ffi_c/libffi/src/x86/ffi.c +4 -1
  69. data/ext/ffi_c/libffi/src/x86/ffi64.c +4 -1
  70. data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -3
  71. data/ext/ffi_c/libffi/src/x86/sysv.S +1 -3
  72. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +1 -3
  73. data/ext/ffi_c/libffi/testsuite/Makefile.in +10 -4
  74. data/ext/ffi_c/libffi.mk +5 -0
  75. data/ffi.gemspec +7 -6
  76. data/lib/ffi/autopointer.rb +6 -0
  77. data/lib/ffi/compat.rb +11 -0
  78. data/lib/ffi/ffi.rb +59 -0
  79. data/lib/ffi/function.rb +23 -0
  80. data/lib/ffi/library.rb +19 -3
  81. data/lib/ffi/struct_by_reference.rb +1 -1
  82. data/lib/ffi/version.rb +1 -1
  83. data/samples/hello_ractor.rb +9 -1
  84. data/samples/qsort_ractor.rb +9 -1
  85. data/sig/ffi/auto_pointer.rbs +1 -2
  86. data/sig/ffi/errno.rbs +8 -0
  87. data/sig/ffi/library.rbs +1 -1
  88. data/sig/ffi/platform.rbs +49 -0
  89. data/sig/ffi/struct.rbs +2 -2
  90. data/sig/ffi/struct_by_reference.rbs +1 -1
  91. data/sig/ffi.rbs +4 -1
  92. data.tar.gz.sig +0 -0
  93. metadata +25 -339
  94. metadata.gz.sig +0 -0
  95. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  96. data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
  97. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
  98. data/ext/ffi_c/libffi/.appveyor.yml +0 -84
  99. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  100. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  101. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  102. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  103. data/ext/ffi_c/libffi/.ci/build.sh +0 -124
  104. data/ext/ffi_c/libffi/.ci/compile +0 -351
  105. data/ext/ffi_c/libffi/.ci/install.sh +0 -78
  106. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  107. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  108. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  109. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  110. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  111. data/ext/ffi_c/libffi/.ci/site.exp +0 -29
  112. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  113. data/ext/ffi_c/libffi/.circleci/config.yml +0 -156
  114. data/ext/ffi_c/libffi/.gitattributes +0 -4
  115. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  116. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -479
  117. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -172
  118. data/ext/ffi_c/libffi/.gitignore +0 -46
  119. data/ext/ffi_c/libffi/src/nios2/ffi.c +0 -304
  120. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +0 -52
  121. data/ext/ffi_c/libffi/src/nios2/sysv.S +0 -136
  122. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -87
  123. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  124. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -54
  125. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -63
  126. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -86
  127. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -48
  128. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  129. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  130. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
  131. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  132. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  133. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  134. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  135. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  136. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  137. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  138. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  139. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +0 -99
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +0 -108
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +0 -114
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +0 -119
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -134
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -140
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  228. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  229. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  230. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  231. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  232. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  233. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  234. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  235. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  236. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  237. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  238. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  239. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  240. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  241. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  242. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  243. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  244. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  245. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  246. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  247. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  248. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  249. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  250. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  251. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  252. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  253. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  254. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  255. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  256. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  257. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  258. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  259. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  260. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  261. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  262. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  263. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  264. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  265. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  266. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  267. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  268. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  269. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  270. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  271. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  272. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  273. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  274. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  275. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  276. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  277. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  278. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  279. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  280. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  281. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  282. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  283. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  284. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  285. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
  286. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  287. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  288. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  289. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  290. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  291. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  292. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  293. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  294. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  295. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  296. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  297. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  298. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  299. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  300. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  301. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  302. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  303. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  304. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  305. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  306. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  307. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  308. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  309. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
  310. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  342. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  343. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  344. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  345. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  346. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  347. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  348. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  349. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  350. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  351. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  352. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  353. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  354. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  355. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  356. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  357. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  358. data/lib/ffi/tools/types_generator.rb +0 -137
  359. data/rakelib/ffi_gem_helper.rb +0 -65
@@ -1,140 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Test passing struct in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: ARM Ltd. */
6
-
7
- /* { dg-do run } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
-
10
- #include "ffitest.h"
11
- #include <stdarg.h>
12
-
13
- struct small_tag
14
- {
15
- unsigned char a;
16
- unsigned char b;
17
- };
18
-
19
- struct large_tag
20
- {
21
- unsigned a;
22
- unsigned b;
23
- unsigned c;
24
- unsigned d;
25
- unsigned e;
26
- };
27
-
28
- static struct large_tag
29
- test_fn (int n, ...)
30
- {
31
- va_list ap;
32
- struct small_tag s1;
33
- struct small_tag s2;
34
- struct large_tag l;
35
-
36
- va_start (ap, n);
37
- s1 = va_arg (ap, struct small_tag);
38
- l = va_arg (ap, struct large_tag);
39
- s2 = va_arg (ap, struct small_tag);
40
- printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
41
- s2.a, s2.b);
42
-
43
- CHECK(s1.a == 5);
44
- CHECK(s1.b == 6);
45
- CHECK(l.a == 10);
46
- CHECK(l.b == 11);
47
- CHECK(l.c == 12);
48
- CHECK(l.d == 13);
49
- CHECK(l.e == 14);
50
- CHECK(s2.a == 7);
51
- CHECK(s2.b == 8);
52
- va_end (ap);
53
- l.a += s1.a;
54
- l.b += s1.b;
55
- l.c += s2.a;
56
- l.d += s2.b;
57
- return l;
58
- }
59
-
60
- int
61
- main (void)
62
- {
63
- ffi_cif cif;
64
- void* args[5];
65
- ffi_type* arg_types[5];
66
-
67
- ffi_type s_type;
68
- ffi_type *s_type_elements[3];
69
-
70
- ffi_type l_type;
71
- ffi_type *l_type_elements[6];
72
-
73
- struct small_tag s1;
74
- struct small_tag s2;
75
- struct large_tag l1;
76
-
77
- int n;
78
- struct large_tag res;
79
-
80
- s_type.size = 0;
81
- s_type.alignment = 0;
82
- s_type.type = FFI_TYPE_STRUCT;
83
- s_type.elements = s_type_elements;
84
-
85
- s_type_elements[0] = &ffi_type_uchar;
86
- s_type_elements[1] = &ffi_type_uchar;
87
- s_type_elements[2] = NULL;
88
-
89
- l_type.size = 0;
90
- l_type.alignment = 0;
91
- l_type.type = FFI_TYPE_STRUCT;
92
- l_type.elements = l_type_elements;
93
-
94
- l_type_elements[0] = &ffi_type_uint;
95
- l_type_elements[1] = &ffi_type_uint;
96
- l_type_elements[2] = &ffi_type_uint;
97
- l_type_elements[3] = &ffi_type_uint;
98
- l_type_elements[4] = &ffi_type_uint;
99
- l_type_elements[5] = NULL;
100
-
101
- arg_types[0] = &ffi_type_sint;
102
- arg_types[1] = &s_type;
103
- arg_types[2] = &l_type;
104
- arg_types[3] = &s_type;
105
- arg_types[4] = NULL;
106
-
107
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &l_type, arg_types) == FFI_OK);
108
-
109
- s1.a = 5;
110
- s1.b = 6;
111
-
112
- l1.a = 10;
113
- l1.b = 11;
114
- l1.c = 12;
115
- l1.d = 13;
116
- l1.e = 14;
117
-
118
- s2.a = 7;
119
- s2.b = 8;
120
-
121
- n = 41;
122
-
123
- args[0] = &n;
124
- args[1] = &s1;
125
- args[2] = &l1;
126
- args[3] = &s2;
127
- args[4] = NULL;
128
-
129
- ffi_call(&cif, FFI_FN(test_fn), &res, args);
130
- /* { dg-output "5 6 10 11 12 13 14 7 8" } */
131
- printf("res: %d %d %d %d %d\n", res.a, res.b, res.c, res.d, res.e);
132
- /* { dg-output "\nres: 15 17 19 21 14" } */
133
- CHECK(res.a == 15);
134
- CHECK(res.b == 17);
135
- CHECK(res.c == 19);
136
- CHECK(res.d == 21);
137
- CHECK(res.e == 14);
138
-
139
- return 0;
140
- }
@@ -1,67 +0,0 @@
1
- # Copyright (C) 2003, 2006, 2009, 2010, 2014, 2019 Free Software Foundation, Inc.
2
- # Copyright (C) 2019 Anthony Green
3
-
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; either version 3 of the License, or
7
- # (at your option) any later version.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; see the file COPYING3. If not see
16
- # <http://www.gnu.org/licenses/>.
17
-
18
- dg-init
19
- libffi-init
20
-
21
- global srcdir subdir
22
-
23
- if { [string match $compiler_vendor "microsoft"] } {
24
- # -wd4005 macro redefinition
25
- # -wd4244 implicit conversion to type of smaller size
26
- # -wd4305 truncation to smaller type
27
- # -wd4477 printf %lu of uintptr_t
28
- # -wd4312 implicit conversion to type of greater size
29
- # -wd4311 pointer truncation to unsigned long
30
- # -EHsc C++ Exception Handling (no SEH exceptions)
31
- set additional_options "-wd4005 -wd4244 -wd4305 -wd4477 -wd4312 -wd4311 -EHsc";
32
- } else {
33
- set additional_options "";
34
- }
35
-
36
- set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.c]]
37
-
38
- if { [libffi_feature_test "#if FFI_CLOSURES"] } {
39
- run-many-tests $tlist ""
40
- } else {
41
- foreach test $tlist {
42
- unsupported "$test"
43
- }
44
- }
45
-
46
- set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.cc]]
47
-
48
- # No C++ for or1k
49
- if { [istarget "or1k-*-*"] } {
50
- foreach test $tlist {
51
- unsupported "$test"
52
- }
53
- } else {
54
- if { [libffi_feature_test "#if FFI_CLOSURES"] } {
55
- run-many-tests $tlist $additional_options
56
- } else {
57
- foreach test $tlist {
58
- unsupported "$test"
59
- }
60
- }
61
- }
62
-
63
- dg-finish
64
-
65
- # Local Variables:
66
- # tcl-indent-level:4
67
- # End:
@@ -1,90 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
-
10
-
11
-
12
- /* { dg-do run } */
13
- #include "ffitest.h"
14
-
15
- static void
16
- closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
17
- void* userdata)
18
- {
19
- *(ffi_arg*)resp =
20
- (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) +
21
- (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] +
22
- (int)(*(signed short *)args[4]) +
23
- (int)(*(unsigned long long *)args[5]) +
24
- (int)*(int *)args[6] + (int)(*(int *)args[7]) +
25
- (int)(*(double *)args[8]) + (int)*(int *)args[9] +
26
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
27
- (int)*(int *)args[12] + (int)(*(int *)args[13]) +
28
- (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
29
-
30
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
31
- (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]),
32
- (int)(*(unsigned long long *)args[2]),
33
- (int)*(int *)args[3], (int)(*(signed short *)args[4]),
34
- (int)(*(unsigned long long *)args[5]),
35
- (int)*(int *)args[6], (int)(*(int *)args[7]),
36
- (int)(*(double *)args[8]), (int)*(int *)args[9],
37
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
38
- (int)*(int *)args[12], (int)(*(int *)args[13]),
39
- (int)(*(int *)args[14]),*(int *)args[15],
40
- (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
41
- CHECK((int)*(ffi_arg *)resp == 680);
42
- }
43
-
44
- typedef int (*closure_test_type0)(unsigned long long, int, unsigned long long,
45
- int, signed short, unsigned long long, int,
46
- int, double, int, int, float, int, int,
47
- int, int);
48
-
49
- int main (void)
50
- {
51
- ffi_cif cif;
52
- void * code;
53
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
54
- ffi_type * cl_arg_types[17];
55
- int res;
56
-
57
- cl_arg_types[0] = &ffi_type_uint64;
58
- cl_arg_types[1] = &ffi_type_sint;
59
- cl_arg_types[2] = &ffi_type_uint64;
60
- cl_arg_types[3] = &ffi_type_sint;
61
- cl_arg_types[4] = &ffi_type_sshort;
62
- cl_arg_types[5] = &ffi_type_uint64;
63
- cl_arg_types[6] = &ffi_type_sint;
64
- cl_arg_types[7] = &ffi_type_sint;
65
- cl_arg_types[8] = &ffi_type_double;
66
- cl_arg_types[9] = &ffi_type_sint;
67
- cl_arg_types[10] = &ffi_type_sint;
68
- cl_arg_types[11] = &ffi_type_float;
69
- cl_arg_types[12] = &ffi_type_sint;
70
- cl_arg_types[13] = &ffi_type_sint;
71
- cl_arg_types[14] = &ffi_type_sint;
72
- cl_arg_types[15] = &ffi_type_sint;
73
- cl_arg_types[16] = NULL;
74
-
75
- /* Initialize the cif */
76
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
77
- &ffi_type_sint, cl_arg_types) == FFI_OK);
78
-
79
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0,
80
- (void *) 3 /* userdata */, code) == FFI_OK);
81
-
82
- res = (*((closure_test_type0)code))
83
- (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13,
84
- 19, 21, 1);
85
- /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
86
- printf("res: %d\n",res);
87
- /* { dg-output "\nres: 680" } */
88
- CHECK(res == 680);
89
- exit(0);
90
- }
@@ -1,83 +0,0 @@
1
- /* Area: closure_call.
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
-
13
- static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
14
- void* userdata)
15
- {
16
- *(ffi_arg*)resp =
17
- (int)*(float *)args[0] +(int)(*(float *)args[1]) +
18
- (int)(*(float *)args[2]) + (int)*(float *)args[3] +
19
- (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
20
- (int)*(float *)args[6] + (int)(*(int *)args[7]) +
21
- (int)(*(double*)args[8]) + (int)*(int *)args[9] +
22
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
23
- (int)*(int *)args[12] + (int)(*(int *)args[13]) +
24
- (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
25
-
26
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
27
- (int)*(float *)args[0], (int)(*(float *)args[1]),
28
- (int)(*(float *)args[2]), (int)*(float *)args[3],
29
- (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
30
- (int)*(float *)args[6], (int)(*(int *)args[7]),
31
- (int)(*(double *)args[8]), (int)*(int *)args[9],
32
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
33
- (int)*(int *)args[12], (int)(*(int *)args[13]),
34
- (int)(*(int *)args[14]), *(int *)args[15],
35
- (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
36
- CHECK((int)*(ffi_arg *)resp == 255);
37
- }
38
-
39
- typedef int (*closure_test_type1)(float, float, float, float, signed short,
40
- float, float, int, double, int, int, float,
41
- int, int, int, int);
42
- int main (void)
43
- {
44
- ffi_cif cif;
45
- void *code;
46
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
47
- ffi_type * cl_arg_types[17];
48
- int res;
49
-
50
- cl_arg_types[0] = &ffi_type_float;
51
- cl_arg_types[1] = &ffi_type_float;
52
- cl_arg_types[2] = &ffi_type_float;
53
- cl_arg_types[3] = &ffi_type_float;
54
- cl_arg_types[4] = &ffi_type_sshort;
55
- cl_arg_types[5] = &ffi_type_float;
56
- cl_arg_types[6] = &ffi_type_float;
57
- cl_arg_types[7] = &ffi_type_sint;
58
- cl_arg_types[8] = &ffi_type_double;
59
- cl_arg_types[9] = &ffi_type_sint;
60
- cl_arg_types[10] = &ffi_type_sint;
61
- cl_arg_types[11] = &ffi_type_float;
62
- cl_arg_types[12] = &ffi_type_sint;
63
- cl_arg_types[13] = &ffi_type_sint;
64
- cl_arg_types[14] = &ffi_type_sint;
65
- cl_arg_types[15] = &ffi_type_sint;
66
- cl_arg_types[16] = NULL;
67
-
68
- /* Initialize the cif */
69
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
70
- &ffi_type_sint, cl_arg_types) == FFI_OK);
71
-
72
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
73
- (void *) 3 /* userdata */, code) == FFI_OK);
74
-
75
- res = (*((closure_test_type1)code))
76
- (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
77
- 19, 21, 1);
78
- /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
79
- printf("res: %d\n",res);
80
- /* { dg-output "\nres: 255" } */
81
- CHECK(res == 255);
82
- exit(0);
83
- }
@@ -1,83 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
- void* userdata)
14
- {
15
- *(ffi_arg*)resp =
16
- (int)*(double *)args[0] +(int)(*(double *)args[1]) +
17
- (int)(*(double *)args[2]) + (int)*(double *)args[3] +
18
- (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) +
19
- (int)*(double *)args[6] + (int)(*(int *)args[7]) +
20
- (int)(*(double *)args[8]) + (int)*(int *)args[9] +
21
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
22
- (int)*(int *)args[12] + (int)(*(float *)args[13]) +
23
- (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
24
-
25
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
26
- (int)*(double *)args[0], (int)(*(double *)args[1]),
27
- (int)(*(double *)args[2]), (int)*(double *)args[3],
28
- (int)(*(signed short *)args[4]), (int)(*(double *)args[5]),
29
- (int)*(double *)args[6], (int)(*(int *)args[7]),
30
- (int)(*(double*)args[8]), (int)*(int *)args[9],
31
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
32
- (int)*(int *)args[12], (int)(*(float *)args[13]),
33
- (int)(*(int *)args[14]), *(int *)args[15], (int)(intptr_t)userdata,
34
- (int)*(ffi_arg *)resp);
35
- CHECK((int)*(ffi_arg *)resp == 255);
36
- }
37
-
38
- typedef int (*closure_test_type2)(double, double, double, double, signed short,
39
- double, double, int, double, int, int, float,
40
- int, float, int, int);
41
-
42
- int main (void)
43
- {
44
- ffi_cif cif;
45
- void *code;
46
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
47
- ffi_type * cl_arg_types[17];
48
- int res;
49
-
50
- cl_arg_types[0] = &ffi_type_double;
51
- cl_arg_types[1] = &ffi_type_double;
52
- cl_arg_types[2] = &ffi_type_double;
53
- cl_arg_types[3] = &ffi_type_double;
54
- cl_arg_types[4] = &ffi_type_sshort;
55
- cl_arg_types[5] = &ffi_type_double;
56
- cl_arg_types[6] = &ffi_type_double;
57
- cl_arg_types[7] = &ffi_type_sint;
58
- cl_arg_types[8] = &ffi_type_double;
59
- cl_arg_types[9] = &ffi_type_sint;
60
- cl_arg_types[10] = &ffi_type_sint;
61
- cl_arg_types[11] = &ffi_type_float;
62
- cl_arg_types[12] = &ffi_type_sint;
63
- cl_arg_types[13] = &ffi_type_float;
64
- cl_arg_types[14] = &ffi_type_sint;
65
- cl_arg_types[15] = &ffi_type_sint;
66
- cl_arg_types[16] = NULL;
67
-
68
- /* Initialize the cif */
69
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
70
- &ffi_type_sint, cl_arg_types) == FFI_OK);
71
-
72
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn2,
73
- (void *) 3 /* userdata */, code) == FFI_OK);
74
-
75
- res = (*((closure_test_type2)code))
76
- (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13,
77
- 19.0, 21, 1);
78
- /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
79
- printf("res: %d\n",res);
80
- /* { dg-output "\nres: 255" } */
81
- CHECK(res == 255);
82
- exit(0);
83
- }
@@ -1,102 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
- void* userdata)
14
- {
15
- *(ffi_arg*)resp =
16
- (int)*(float *)args[0] +(int)(*(float *)args[1]) +
17
- (int)(*(float *)args[2]) + (int)*(float *)args[3] +
18
- (int)(*(float *)args[4]) + (int)(*(float *)args[5]) +
19
- (int)*(float *)args[6] + (int)(*(float *)args[7]) +
20
- (int)(*(double *)args[8]) + (int)*(int *)args[9] +
21
- (int)(*(float *)args[10]) + (int)(*(float *)args[11]) +
22
- (int)*(int *)args[12] + (int)(*(float *)args[13]) +
23
- (int)(*(float *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
24
-
25
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
26
- (int)*(float *)args[0], (int)(*(float *)args[1]),
27
- (int)(*(float *)args[2]), (int)*(float *)args[3],
28
- (int)(*(float *)args[4]), (int)(*(float *)args[5]),
29
- (int)*(float *)args[6], (int)(*(float *)args[7]),
30
- (int)(*(double *)args[8]), (int)*(int *)args[9],
31
- (int)(*(float *)args[10]), (int)(*(float *)args[11]),
32
- (int)*(int *)args[12], (int)(*(float *)args[13]),
33
- (int)(*(float *)args[14]), *(int *)args[15], (int)(intptr_t)userdata,
34
- (int)*(ffi_arg *)resp);
35
-
36
- CHECK((int)*(float *)args[0] == 1);
37
- CHECK((int)(*(float *)args[1]) == 2);
38
- CHECK((int)(*(float *)args[2]) == 3);
39
- CHECK((int)(*(float *)args[3]) == 4);
40
- CHECK((int)(*(float *)args[4]) == 5);
41
- CHECK((int)(*(float *)args[5]) == 6);
42
- CHECK((int)*(float *)args[6] == 7);
43
- CHECK((int)(*(float *)args[7]) == 8);
44
- CHECK((int)(*(double *)args[8]) == 9);
45
- CHECK((int)*(int *)args[9] == 10);
46
- CHECK((int)(*(float *)args[10]) == 11);
47
- CHECK((int)(*(float *)args[11]) == 12);
48
- CHECK((int)*(int *)args[12] == 13);
49
- CHECK((int)(*(float *)args[13]) == 19);
50
- CHECK((int)(*(float *)args[14]) == 21);
51
- CHECK(*(int *)args[15] == 1);
52
- CHECK((int)(intptr_t)userdata == 3);
53
-
54
- CHECK((int)*(ffi_arg *)resp == 135);
55
- }
56
-
57
- typedef int (*closure_test_type3)(float, float, float, float, float, float,
58
- float, float, double, int, float, float, int,
59
- float, float, int);
60
-
61
- int main (void)
62
- {
63
- ffi_cif cif;
64
- void *code;
65
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
66
- ffi_type * cl_arg_types[17];
67
- int res;
68
-
69
- cl_arg_types[0] = &ffi_type_float;
70
- cl_arg_types[1] = &ffi_type_float;
71
- cl_arg_types[2] = &ffi_type_float;
72
- cl_arg_types[3] = &ffi_type_float;
73
- cl_arg_types[4] = &ffi_type_float;
74
- cl_arg_types[5] = &ffi_type_float;
75
- cl_arg_types[6] = &ffi_type_float;
76
- cl_arg_types[7] = &ffi_type_float;
77
- cl_arg_types[8] = &ffi_type_double;
78
- cl_arg_types[9] = &ffi_type_sint;
79
- cl_arg_types[10] = &ffi_type_float;
80
- cl_arg_types[11] = &ffi_type_float;
81
- cl_arg_types[12] = &ffi_type_sint;
82
- cl_arg_types[13] = &ffi_type_float;
83
- cl_arg_types[14] = &ffi_type_float;
84
- cl_arg_types[15] = &ffi_type_sint;
85
- cl_arg_types[16] = NULL;
86
-
87
- /* Initialize the cif */
88
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
89
- &ffi_type_sint, cl_arg_types) == FFI_OK);
90
-
91
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn3,
92
- (void *) 3 /* userdata */, code) == FFI_OK);
93
-
94
- res = (*((closure_test_type3)code))
95
- (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13,
96
- 19.19, 21.21, 1);
97
- /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 19 21 1 3: 135" } */
98
- printf("res: %d\n",res);
99
- /* { dg-output "\nres: 135" } */
100
- CHECK(res == 135);
101
- exit(0);
102
- }
@@ -1,91 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check multiple long long values passing.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20031026 */
8
-
9
- /* { dg-do run } */
10
-
11
- #include "ffitest.h"
12
-
13
- static void
14
- closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
15
- void* userdata)
16
- {
17
- *(ffi_arg*)resp =
18
- (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
19
- (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] +
20
- (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] +
21
- (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] +
22
- (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] +
23
- (int)*(unsigned long long *)args[10] +
24
- (int)*(unsigned long long *)args[11] +
25
- (int)*(unsigned long long *)args[12] +
26
- (int)*(unsigned long long *)args[13] +
27
- (int)*(unsigned long long *)args[14] +
28
- *(int *)args[15] + (intptr_t)userdata;
29
-
30
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
31
- (int)*(unsigned long long *)args[0],
32
- (int)*(unsigned long long *)args[1],
33
- (int)*(unsigned long long *)args[2],
34
- (int)*(unsigned long long *)args[3],
35
- (int)*(unsigned long long *)args[4],
36
- (int)*(unsigned long long *)args[5],
37
- (int)*(unsigned long long *)args[6],
38
- (int)*(unsigned long long *)args[7],
39
- (int)*(unsigned long long *)args[8],
40
- (int)*(unsigned long long *)args[9],
41
- (int)*(unsigned long long *)args[10],
42
- (int)*(unsigned long long *)args[11],
43
- (int)*(unsigned long long *)args[12],
44
- (int)*(unsigned long long *)args[13],
45
- (int)*(unsigned long long *)args[14],
46
- *(int *)args[15],
47
- (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
48
- CHECK((int)*(ffi_arg *)resp == 680);
49
-
50
- }
51
-
52
- typedef int (*closure_test_type0)(unsigned long long, unsigned long long,
53
- unsigned long long, unsigned long long,
54
- unsigned long long, unsigned long long,
55
- unsigned long long, unsigned long long,
56
- unsigned long long, unsigned long long,
57
- unsigned long long, unsigned long long,
58
- unsigned long long, unsigned long long,
59
- unsigned long long, int);
60
-
61
- int main (void)
62
- {
63
- ffi_cif cif;
64
- void *code;
65
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
66
- ffi_type * cl_arg_types[17];
67
- int i, res;
68
-
69
- for (i = 0; i < 15; i++) {
70
- cl_arg_types[i] = &ffi_type_uint64;
71
- }
72
- cl_arg_types[15] = &ffi_type_sint;
73
- cl_arg_types[16] = NULL;
74
-
75
- /* Initialize the cif */
76
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
77
- &ffi_type_sint, cl_arg_types) == FFI_OK);
78
-
79
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0,
80
- (void *) 3 /* userdata */, code) == FFI_OK);
81
-
82
- res = (*((closure_test_type0)code))
83
- (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL,
84
- 13LL, 19LL, 21LL, 1);
85
- /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
86
- printf("res: %d\n",res);
87
- /* { dg-output "\nres: 680" } */
88
- CHECK(res == 680);
89
-
90
- exit(0);
91
- }