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,68 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check double arguments in structs.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin 6/23/2007 */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "ffitest.h"
10
-
11
- typedef struct Dbls {
12
- double x;
13
- double y;
14
- } Dbls;
15
-
16
- void
17
- closure_test_fn(Dbls p)
18
- {
19
- printf("%.1f %.1f\n", p.x, p.y);
20
- CHECK(p.x == 1);
21
- CHECK(p.y == 2);
22
- }
23
-
24
- void
25
- closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
26
- void** args, void* userdata __UNUSED__)
27
- {
28
- closure_test_fn(*(Dbls*)args[0]);
29
- }
30
-
31
- int main(int argc __UNUSED__, char** argv __UNUSED__)
32
- {
33
- ffi_cif cif;
34
-
35
- void *code;
36
- ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
37
- ffi_type* cl_arg_types[1];
38
-
39
- ffi_type ts1_type;
40
- ffi_type* ts1_type_elements[4];
41
-
42
- Dbls arg = { 1.0, 2.0 };
43
-
44
- ts1_type.size = 0;
45
- ts1_type.alignment = 0;
46
- ts1_type.type = FFI_TYPE_STRUCT;
47
- ts1_type.elements = ts1_type_elements;
48
-
49
- ts1_type_elements[0] = &ffi_type_double;
50
- ts1_type_elements[1] = &ffi_type_double;
51
- ts1_type_elements[2] = NULL;
52
-
53
- cl_arg_types[0] = &ts1_type;
54
-
55
- /* Initialize the cif */
56
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
57
- &ffi_type_void, cl_arg_types) == FFI_OK);
58
-
59
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK);
60
-
61
- ((void (*)(Dbls))(code))(arg);
62
- /* { dg-output "1.0 2.0" } */
63
-
64
- closure_test_fn(arg);
65
- /* { dg-output "\n1.0 2.0" } */
66
-
67
- return 0;
68
- }
@@ -1,43 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value double.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20030828 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
- void* userdata __UNUSED__)
12
- {
13
- *(double *)resp = *(double *)args[0];
14
-
15
- printf("%f: %f\n",*(double *)args[0],
16
- *(double *)resp);
17
- }
18
- typedef double (*cls_ret_double)(double);
19
-
20
- int main (void)
21
- {
22
- ffi_cif cif;
23
- void *code;
24
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
25
- ffi_type * cl_arg_types[2];
26
- double res;
27
-
28
- cl_arg_types[0] = &ffi_type_double;
29
- cl_arg_types[1] = NULL;
30
-
31
- /* Initialize the cif */
32
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
33
- &ffi_type_double, cl_arg_types) == FFI_OK);
34
-
35
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK);
36
-
37
- res = (*((cls_ret_double)code))(21474.789);
38
- /* { dg-output "21474.789000: 21474.789000" } */
39
- printf("res: %.6f\n", res);
40
- /* { dg-output "\nres: 21474.789000" } */
41
-
42
- exit(0);
43
- }
@@ -1,69 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Test doubles passed in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin 6/6/2007 */
6
-
7
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
- /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
10
-
11
- #include "ffitest.h"
12
-
13
- #define BUF_SIZE 50
14
- static char buffer[BUF_SIZE];
15
-
16
- static void
17
- cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp,
18
- void** args, void* userdata __UNUSED__)
19
- {
20
- char* format = *(char**)args[0];
21
- double doubleValue = *(double*)args[1];
22
-
23
- *(ffi_arg*)resp = printf(format, doubleValue);
24
- CHECK(*(ffi_arg*)resp == 4);
25
- snprintf(buffer, BUF_SIZE, format, doubleValue);
26
- CHECK(strncmp(buffer, "7.0\n", 4) == 0);
27
- }
28
-
29
- int main (void)
30
- {
31
- ffi_cif cif;
32
- void *code;
33
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
34
- void* args[3];
35
- ffi_type* arg_types[3];
36
-
37
- char* format = "%.1f\n";
38
- double doubleArg = 7;
39
- ffi_arg res = 0;
40
-
41
- arg_types[0] = &ffi_type_pointer;
42
- arg_types[1] = &ffi_type_double;
43
- arg_types[2] = NULL;
44
-
45
- /* This printf call is variadic */
46
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
47
- arg_types) == FFI_OK);
48
-
49
- args[0] = &format;
50
- args[1] = &doubleArg;
51
- args[2] = NULL;
52
-
53
- ffi_call(&cif, FFI_FN(printf), &res, args);
54
- /* { dg-output "7.0" } */
55
- printf("res: %d\n", (int) res);
56
- /* { dg-output "\nres: 4" } */
57
- CHECK(res == 4);
58
-
59
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL,
60
- code) == FFI_OK);
61
-
62
- res = ((int(*)(char*, ...))(code))(format, doubleArg);
63
- /* { dg-output "\n7.0" } */
64
- printf("res: %d\n", (int) res);
65
- /* { dg-output "\nres: 4" } */
66
- CHECK(res == 4);
67
-
68
- exit(0);
69
- }
@@ -1,46 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20030828 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
- void* userdata __UNUSED__)
12
- {
13
- *(float *)resp = *(float *)args[0];
14
-
15
- printf("%g: %g\n",*(float *)args[0],
16
- *(float *)resp);
17
-
18
- CHECK((int)(*(float *)args[0]) == -2122);
19
- CHECK((int)(*(float *)resp) == -2122);
20
- }
21
-
22
- typedef float (*cls_ret_float)(float);
23
-
24
- int main (void)
25
- {
26
- ffi_cif cif;
27
- void *code;
28
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
29
- ffi_type * cl_arg_types[2];
30
- float res;
31
-
32
- cl_arg_types[0] = &ffi_type_float;
33
- cl_arg_types[1] = NULL;
34
-
35
- /* Initialize the cif */
36
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
37
- &ffi_type_float, cl_arg_types) == FFI_OK);
38
-
39
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_float_fn, NULL, code) == FFI_OK);
40
- res = ((((cls_ret_float)code)(-2122.12)));
41
- /* { dg-output "\\-2122.12: \\-2122.12" } */
42
- printf("res: %.6f\n", res);
43
- /* { dg-output "\nres: \-2122.120117" } */
44
- CHECK((int)res == -2122);
45
- exit(0);
46
- }
@@ -1,115 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check long double arguments.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin */
6
-
7
- /* This test is known to PASS on armv7l-unknown-linux-gnueabihf, so I have
8
- remove the xfail for arm*-*-* below, until we know more. */
9
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
10
- /* { dg-options -mlong-double-128 { target powerpc64*-*-linux-gnu* } } */
11
-
12
- #include "ffitest.h"
13
-
14
- long double cls_ldouble_fn(
15
- long double a1,
16
- long double a2,
17
- long double a3,
18
- long double a4,
19
- long double a5,
20
- long double a6,
21
- long double a7,
22
- long double a8)
23
- {
24
- long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
25
-
26
- printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n",
27
- a1, a2, a3, a4, a5, a6, a7, a8, r);
28
- CHECK(a1 == 1);
29
- CHECK(a2 == 2);
30
- CHECK(a3 == 3);
31
- CHECK(a4 == 4);
32
- CHECK(a5 == 5);
33
- CHECK(a6 == 6);
34
- CHECK(a7 == 7);
35
- CHECK(a8 == 8);
36
-
37
- return r;
38
- }
39
-
40
- static void
41
- cls_ldouble_gn(ffi_cif* cif __UNUSED__, void* resp,
42
- void** args, void* userdata __UNUSED__)
43
- {
44
- long double a1 = *(long double*)args[0];
45
- long double a2 = *(long double*)args[1];
46
- long double a3 = *(long double*)args[2];
47
- long double a4 = *(long double*)args[3];
48
- long double a5 = *(long double*)args[4];
49
- long double a6 = *(long double*)args[5];
50
- long double a7 = *(long double*)args[6];
51
- long double a8 = *(long double*)args[7];
52
-
53
- *(long double*)resp = cls_ldouble_fn(
54
- a1, a2, a3, a4, a5, a6, a7, a8);
55
- }
56
-
57
- int main(void)
58
- {
59
- ffi_cif cif;
60
- void* code;
61
- ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
62
- void* args[9];
63
- ffi_type* arg_types[9];
64
- long double res = 0;
65
-
66
- long double arg1 = 1;
67
- long double arg2 = 2;
68
- long double arg3 = 3;
69
- long double arg4 = 4;
70
- long double arg5 = 5;
71
- long double arg6 = 6;
72
- long double arg7 = 7;
73
- long double arg8 = 8;
74
-
75
- arg_types[0] = &ffi_type_longdouble;
76
- arg_types[1] = &ffi_type_longdouble;
77
- arg_types[2] = &ffi_type_longdouble;
78
- arg_types[3] = &ffi_type_longdouble;
79
- arg_types[4] = &ffi_type_longdouble;
80
- arg_types[5] = &ffi_type_longdouble;
81
- arg_types[6] = &ffi_type_longdouble;
82
- arg_types[7] = &ffi_type_longdouble;
83
- arg_types[8] = NULL;
84
-
85
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, &ffi_type_longdouble,
86
- arg_types) == FFI_OK);
87
-
88
- args[0] = &arg1;
89
- args[1] = &arg2;
90
- args[2] = &arg3;
91
- args[3] = &arg4;
92
- args[4] = &arg5;
93
- args[5] = &arg6;
94
- args[6] = &arg7;
95
- args[7] = &arg8;
96
- args[8] = NULL;
97
-
98
- ffi_call(&cif, FFI_FN(cls_ldouble_fn), &res, args);
99
- /* { dg-output "1 2 3 4 5 6 7 8: 36" } */
100
- printf("res: %Lg\n", res);
101
- /* { dg-output "\nres: 36" } */
102
- CHECK(res == 36);
103
-
104
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ldouble_gn, NULL, code) == FFI_OK);
105
-
106
- res = ((long double(*)(long double, long double, long double, long double,
107
- long double, long double, long double, long double))(code))(arg1, arg2,
108
- arg3, arg4, arg5, arg6, arg7, arg8);
109
- /* { dg-output "\n1 2 3 4 5 6 7 8: 36" } */
110
- printf("res: %Lg\n", res);
111
- /* { dg-output "\nres: 36" } */
112
- CHECK(res == 36);
113
-
114
- return 0;
115
- }
@@ -1,80 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Test long doubles passed in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin 6/6/2007 */
6
-
7
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
- /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
10
-
11
- #include "ffitest.h"
12
- #include <stdarg.h>
13
-
14
- #define BUF_SIZE 50
15
- static char buffer[BUF_SIZE];
16
-
17
- static int
18
- wrap_printf(char* fmt, ...) {
19
- va_list ap;
20
- va_start(ap, fmt);
21
- long double ldArg = va_arg(ap, long double);
22
- va_end(ap);
23
- CHECK((int)ldArg == 7);
24
- return printf(fmt, ldArg);
25
- }
26
-
27
- static void
28
- cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp,
29
- void** args, void* userdata __UNUSED__)
30
- {
31
- char* format = *(char**)args[0];
32
- long double ldValue = *(long double*)args[1];
33
-
34
- *(ffi_arg*)resp = printf(format, ldValue);
35
- CHECK(*(ffi_arg*)resp == 4);
36
- snprintf(buffer, BUF_SIZE, format, ldValue);
37
- CHECK(strncmp(buffer, "7.0\n", BUF_SIZE) == 0);
38
- }
39
-
40
- int main (void)
41
- {
42
- ffi_cif cif;
43
- void *code;
44
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
45
- void* args[3];
46
- ffi_type* arg_types[3];
47
-
48
- char* format = "%.1Lf\n";
49
- long double ldArg = 7;
50
- ffi_arg res = 0;
51
-
52
- arg_types[0] = &ffi_type_pointer;
53
- arg_types[1] = &ffi_type_longdouble;
54
- arg_types[2] = NULL;
55
-
56
- /* This printf call is variadic */
57
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
58
- arg_types) == FFI_OK);
59
-
60
- args[0] = &format;
61
- args[1] = &ldArg;
62
- args[2] = NULL;
63
-
64
- ffi_call(&cif, FFI_FN(wrap_printf), &res, args);
65
- /* { dg-output "7.0" } */
66
- printf("res: %d\n", (int) res);
67
- /* { dg-output "\nres: 4" } */
68
- CHECK(res == 4);
69
-
70
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL,
71
- code) == FFI_OK);
72
-
73
- res = ((int(*)(char*, ...))(code))(format, ldArg);
74
- /* { dg-output "\n7.0" } */
75
- printf("res: %d\n", (int) res);
76
- /* { dg-output "\nres: 4" } */
77
- CHECK(res == 4);
78
-
79
- exit(0);
80
- }
@@ -1,70 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check closures called with many args of mixed types
3
- Limitations: none.
4
- PR: none.
5
- Originator: <david.schneider@picle.org> */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
- #include <float.h>
10
- #include <math.h>
11
-
12
- #define NARGS 16
13
-
14
- static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
15
- void* userdata __UNUSED__)
16
- {
17
- int i;
18
- double r = 0;
19
- double t;
20
- for(i = 0; i < NARGS; i++)
21
- {
22
- if(i == 4 || i == 9 || i == 11 || i == 13 || i == 15)
23
- {
24
- t = *(long int *)args[i];
25
- CHECK(t == i+1);
26
- }
27
- else
28
- {
29
- t = *(double *)args[i];
30
- CHECK(fabs(t - ((i+1) * 0.1)) < FLT_EPSILON);
31
- }
32
- r += t;
33
- }
34
- *(double *)resp = r;
35
- }
36
- typedef double (*cls_ret_double)(double, double, double, double, long int,
37
- double, double, double, double, long int, double, long int, double, long int,
38
- double, long int);
39
-
40
- int main (void)
41
- {
42
- ffi_cif cif;
43
- void *code;
44
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
45
- ffi_type * cl_arg_types[NARGS];
46
- double res;
47
- int i;
48
- double expected = 64.9;
49
-
50
- for(i = 0; i < NARGS; i++)
51
- {
52
- if(i == 4 || i == 9 || i == 11 || i == 13 || i == 15)
53
- cl_arg_types[i] = &ffi_type_slong;
54
- else
55
- cl_arg_types[i] = &ffi_type_double;
56
- }
57
-
58
- /* Initialize the cif */
59
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, NARGS,
60
- &ffi_type_double, cl_arg_types) == FFI_OK);
61
-
62
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK);
63
-
64
- res = (((cls_ret_double)code))(0.1, 0.2, 0.3, 0.4, 5, 0.6, 0.7, 0.8, 0.9, 10,
65
- 1.1, 12, 1.3, 14, 1.5, 16);
66
- if (fabs(res - expected) < FLT_EPSILON)
67
- exit(0);
68
- else
69
- abort();
70
- }
@@ -1,55 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check register allocation for closure calls with many float and double arguments
3
- Limitations: none.
4
- PR: none.
5
- Originator: <david.schneider@picle.org> */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
- #include <float.h>
10
- #include <math.h>
11
-
12
- #define NARGS 16
13
-
14
- static void cls_mixed_float_double_fn(ffi_cif* cif , void* ret, void** args,
15
- void* userdata __UNUSED__)
16
- {
17
- double r = 0;
18
- unsigned int i;
19
- double t;
20
- for(i=0; i < cif->nargs; i++)
21
- {
22
- if(cif->arg_types[i] == &ffi_type_double) {
23
- t = *(((double**)(args))[i]);
24
- } else {
25
- t = *(((float**)(args))[i]);
26
- }
27
- r += t;
28
- }
29
- *((double*)ret) = r;
30
- }
31
- typedef double (*cls_mixed)(double, float, double, double, double, double, double, float, float, double, float, float);
32
-
33
- int main (void)
34
- {
35
- ffi_cif cif;
36
- ffi_closure *closure;
37
- void* code;
38
- ffi_type *argtypes[12] = {&ffi_type_double, &ffi_type_float, &ffi_type_double,
39
- &ffi_type_double, &ffi_type_double, &ffi_type_double,
40
- &ffi_type_double, &ffi_type_float, &ffi_type_float,
41
- &ffi_type_double, &ffi_type_float, &ffi_type_float};
42
-
43
-
44
- closure = ffi_closure_alloc(sizeof(ffi_closure), (void**)&code);
45
- if(closure ==NULL)
46
- abort();
47
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 12, &ffi_type_double, argtypes) == FFI_OK);
48
- CHECK(ffi_prep_closure_loc(closure, &cif, cls_mixed_float_double_fn, NULL, code) == FFI_OK);
49
- double ret = ((cls_mixed)code)(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2);
50
- ffi_closure_free(closure);
51
- if(fabs(ret - 7.8) < FLT_EPSILON)
52
- exit(0);
53
- else
54
- abort();
55
- }
@@ -1,78 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple signed char values.
3
- Limitations: none.
4
- PR: PR13221.
5
- Originator: <hos@tamanegi.org> 20031129 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static signed char test_func_fn(signed char a1, signed char a2)
11
- {
12
- signed char result;
13
-
14
- result = a1 + a2;
15
-
16
- printf("%d %d: %d\n", a1, a2, result);
17
-
18
- return result;
19
-
20
- }
21
-
22
- static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
23
- void *data __UNUSED__)
24
- {
25
- signed char a1, a2;
26
-
27
- a1 = *(signed char *)avals[0];
28
- a2 = *(signed char *)avals[1];
29
- CHECK(a1 == 2);
30
- CHECK(a2 == 125);
31
-
32
- *(ffi_arg *)rval = test_func_fn(a1, a2);
33
-
34
- }
35
-
36
- typedef signed char (*test_type)(signed char, signed char);
37
-
38
- int main (void)
39
- {
40
- ffi_cif cif;
41
- void *code;
42
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
43
- void * args_dbl[3];
44
- ffi_type * cl_arg_types[3];
45
- ffi_arg res_call;
46
- signed char a, b, res_closure;
47
-
48
- a = 2;
49
- b = 125;
50
-
51
- args_dbl[0] = &a;
52
- args_dbl[1] = &b;
53
- args_dbl[2] = NULL;
54
-
55
- cl_arg_types[0] = &ffi_type_schar;
56
- cl_arg_types[1] = &ffi_type_schar;
57
- cl_arg_types[2] = NULL;
58
-
59
- /* Initialize the cif */
60
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
61
- &ffi_type_schar, cl_arg_types) == FFI_OK);
62
-
63
- ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
64
- /* { dg-output "2 125: 127" } */
65
- printf("res: %d\n", (signed char)res_call);
66
- /* { dg-output "\nres: 127" } */
67
- CHECK((signed char)res_call == 127);
68
-
69
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
70
-
71
- res_closure = (*((test_type)code))(2, 125);
72
- /* { dg-output "\n2 125: 127" } */
73
- printf("res: %d\n", res_closure);
74
- /* { dg-output "\nres: 127" } */
75
- CHECK(res_closure == 127);
76
-
77
- exit(0);
78
- }
@@ -1,79 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple signed short values.
3
- Limitations: none.
4
- PR: PR13221.
5
- Originator: <andreast@gcc.gnu.org> 20031129 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static signed short test_func_fn(signed short a1, signed short a2)
11
- {
12
- signed short result;
13
-
14
- result = a1 + a2;
15
-
16
- printf("%d %d: %d\n", a1, a2, result);
17
- CHECK(a1 == 2);
18
- CHECK(a2 == 32765);
19
- CHECK(result == 32767);
20
-
21
- return result;
22
-
23
- }
24
-
25
- static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
26
- void *data __UNUSED__)
27
- {
28
- signed short a1, a2;
29
-
30
- a1 = *(signed short *)avals[0];
31
- a2 = *(signed short *)avals[1];
32
-
33
- *(ffi_arg *)rval = test_func_fn(a1, a2);
34
-
35
- }
36
-
37
- typedef signed short (*test_type)(signed short, signed short);
38
-
39
- int main (void)
40
- {
41
- ffi_cif cif;
42
- void *code;
43
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
44
- void * args_dbl[3];
45
- ffi_type * cl_arg_types[3];
46
- ffi_arg res_call;
47
- unsigned short a, b, res_closure;
48
-
49
- a = 2;
50
- b = 32765;
51
-
52
- args_dbl[0] = &a;
53
- args_dbl[1] = &b;
54
- args_dbl[2] = NULL;
55
-
56
- cl_arg_types[0] = &ffi_type_sshort;
57
- cl_arg_types[1] = &ffi_type_sshort;
58
- cl_arg_types[2] = NULL;
59
-
60
- /* Initialize the cif */
61
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
62
- &ffi_type_sshort, cl_arg_types) == FFI_OK);
63
-
64
- ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
65
- /* { dg-output "2 32765: 32767" } */
66
- printf("res: %d\n", (unsigned short)res_call);
67
- /* { dg-output "\nres: 32767" } */
68
- CHECK((unsigned short)res_call == 32767);
69
-
70
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
71
-
72
- res_closure = (*((test_type)code))(2, 32765);
73
- /* { dg-output "\n2 32765: 32767" } */
74
- printf("res: %d\n", res_closure);
75
- /* { dg-output "\nres: 32767" } */
76
- CHECK(res_closure == 32767);
77
-
78
- exit(0);
79
- }