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,131 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Double alignment check on darwin.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030915 */
7
-
8
- /* { dg-do run } */
9
- #include "ffitest.h"
10
-
11
- typedef struct cls_struct_19byte {
12
- double a;
13
- unsigned char b;
14
- unsigned char c;
15
- double d;
16
- unsigned char e;
17
- } cls_struct_19byte;
18
-
19
- cls_struct_19byte cls_struct_19byte_fn(struct cls_struct_19byte a1,
20
- struct cls_struct_19byte a2)
21
- {
22
- struct cls_struct_19byte result;
23
-
24
- result.a = a1.a + a2.a;
25
- result.b = a1.b + a2.b;
26
- result.c = a1.c + a2.c;
27
- result.d = a1.d + a2.d;
28
- result.e = a1.e + a2.e;
29
-
30
-
31
- printf("%g %d %d %g %d %g %d %d %g %d: %g %d %d %g %d\n",
32
- a1.a, a1.b, a1.c, a1.d, a1.e,
33
- a2.a, a2.b, a2.c, a2.d, a2.e,
34
- result.a, result.b, result.c, result.d, result.e);
35
-
36
- CHECK(a1.a == 1);
37
- CHECK(a1.b == 127);
38
- CHECK(a1.c == 126);
39
- CHECK(a1.d == 3);
40
- CHECK(a1.e == 120);
41
-
42
- CHECK(a2.a == 4);
43
- CHECK(a2.b == 125);
44
- CHECK(a2.c == 124);
45
- CHECK(a2.d == 5);
46
- CHECK(a2.e == 119);
47
-
48
- CHECK(result.a == 5);
49
- CHECK(result.b == 252);
50
- CHECK(result.c == 250);
51
- CHECK(result.d == 8);
52
- CHECK(result.e == 239);
53
-
54
- return result;
55
- }
56
-
57
- static void
58
- cls_struct_19byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
59
- void* userdata __UNUSED__)
60
- {
61
- struct cls_struct_19byte a1, a2;
62
-
63
- a1 = *(struct cls_struct_19byte*)(args[0]);
64
- a2 = *(struct cls_struct_19byte*)(args[1]);
65
-
66
- *(cls_struct_19byte*)resp = cls_struct_19byte_fn(a1, a2);
67
- }
68
-
69
- int main (void)
70
- {
71
- ffi_cif cif;
72
- void *code;
73
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
74
- void* args_dbl[3];
75
- ffi_type* cls_struct_fields[6];
76
- ffi_type cls_struct_type;
77
- ffi_type* dbl_arg_types[3];
78
-
79
- struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 };
80
- struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 };
81
- struct cls_struct_19byte res_dbl;
82
-
83
- cls_struct_type.size = 0;
84
- cls_struct_type.alignment = 0;
85
- cls_struct_type.type = FFI_TYPE_STRUCT;
86
- cls_struct_type.elements = cls_struct_fields;
87
-
88
- cls_struct_fields[0] = &ffi_type_double;
89
- cls_struct_fields[1] = &ffi_type_uchar;
90
- cls_struct_fields[2] = &ffi_type_uchar;
91
- cls_struct_fields[3] = &ffi_type_double;
92
- cls_struct_fields[4] = &ffi_type_uchar;
93
- cls_struct_fields[5] = NULL;
94
-
95
- dbl_arg_types[0] = &cls_struct_type;
96
- dbl_arg_types[1] = &cls_struct_type;
97
- dbl_arg_types[2] = NULL;
98
-
99
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
100
- dbl_arg_types) == FFI_OK);
101
-
102
- args_dbl[0] = &g_dbl;
103
- args_dbl[1] = &f_dbl;
104
- args_dbl[2] = NULL;
105
-
106
- ffi_call(&cif, FFI_FN(cls_struct_19byte_fn), &res_dbl, args_dbl);
107
- /* { dg-output "1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */
108
- printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
109
- res_dbl.d, res_dbl.e);
110
- /* { dg-output "\nres: 5 252 250 8 239" } */
111
- CHECK(res_dbl.a == 5);
112
- CHECK(res_dbl.b == 252);
113
- CHECK(res_dbl.c == 250);
114
- CHECK(res_dbl.d == 8);
115
- CHECK(res_dbl.e == 239);
116
-
117
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_19byte_gn, NULL, code) == FFI_OK);
118
-
119
- res_dbl = ((cls_struct_19byte(*)(cls_struct_19byte, cls_struct_19byte))(code))(g_dbl, f_dbl);
120
- /* { dg-output "\n1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */
121
- printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
122
- res_dbl.d, res_dbl.e);
123
- /* { dg-output "\nres: 5 252 250 8 239" } */
124
- CHECK(res_dbl.a == 5);
125
- CHECK(res_dbl.b == 252);
126
- CHECK(res_dbl.c == 250);
127
- CHECK(res_dbl.d == 8);
128
- CHECK(res_dbl.e == 239);
129
-
130
- exit(0);
131
- }
@@ -1,93 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Especially with small structures which may fit in one
4
- register. Depending on the ABI.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030902 */
8
-
9
-
10
-
11
- /* { dg-do run } */
12
- #include "ffitest.h"
13
-
14
- typedef struct cls_struct_1_1byte {
15
- unsigned char a;
16
- } cls_struct_1_1byte;
17
-
18
- cls_struct_1_1byte cls_struct_1_1byte_fn(struct cls_struct_1_1byte a1,
19
- struct cls_struct_1_1byte a2)
20
- {
21
- struct cls_struct_1_1byte result;
22
-
23
- result.a = a1.a + a2.a;
24
-
25
- printf("%d %d: %d\n", a1.a, a2.a, result.a);
26
- CHECK(a1.a == 12);
27
- CHECK(a2.a == 178);
28
- CHECK(result.a == 190);
29
-
30
- return result;
31
- }
32
-
33
- static void
34
- cls_struct_1_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
35
- void* userdata __UNUSED__)
36
- {
37
-
38
- struct cls_struct_1_1byte a1, a2;
39
-
40
- a1 = *(struct cls_struct_1_1byte*)(args[0]);
41
- a2 = *(struct cls_struct_1_1byte*)(args[1]);
42
-
43
- *(cls_struct_1_1byte*)resp = cls_struct_1_1byte_fn(a1, a2);
44
- }
45
-
46
- int main (void)
47
- {
48
- ffi_cif cif;
49
- void *code;
50
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
51
- void* args_dbl[5];
52
- ffi_type* cls_struct_fields[2];
53
- ffi_type cls_struct_type;
54
- ffi_type* dbl_arg_types[5];
55
-
56
- struct cls_struct_1_1byte g_dbl = { 12 };
57
- struct cls_struct_1_1byte f_dbl = { 178 };
58
- struct cls_struct_1_1byte res_dbl;
59
-
60
- cls_struct_type.size = 0;
61
- cls_struct_type.alignment = 0;
62
- cls_struct_type.type = FFI_TYPE_STRUCT;
63
- cls_struct_type.elements = cls_struct_fields;
64
-
65
- cls_struct_fields[0] = &ffi_type_uchar;
66
- cls_struct_fields[1] = NULL;
67
-
68
- dbl_arg_types[0] = &cls_struct_type;
69
- dbl_arg_types[1] = &cls_struct_type;
70
- dbl_arg_types[2] = NULL;
71
-
72
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
73
- dbl_arg_types) == FFI_OK);
74
-
75
- args_dbl[0] = &g_dbl;
76
- args_dbl[1] = &f_dbl;
77
- args_dbl[2] = NULL;
78
-
79
- ffi_call(&cif, FFI_FN(cls_struct_1_1byte_fn), &res_dbl, args_dbl);
80
- /* { dg-output "12 178: 190" } */
81
- printf("res: %d\n", res_dbl.a);
82
- /* { dg-output "\nres: 190" } */
83
-
84
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_1_1byte_gn, NULL, code) == FFI_OK);
85
-
86
- res_dbl = ((cls_struct_1_1byte(*)(cls_struct_1_1byte, cls_struct_1_1byte))(code))(g_dbl, f_dbl);
87
- /* { dg-output "\n12 178: 190" } */
88
- printf("res: %d\n", res_dbl.a);
89
- /* { dg-output "\nres: 190" } */
90
- CHECK(res_dbl.a == 190);
91
-
92
- exit(0);
93
- }
@@ -1,109 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030828 */
7
-
8
- /* { dg-do run } */
9
- #include "ffitest.h"
10
-
11
- typedef struct cls_struct_20byte {
12
- double a;
13
- double b;
14
- int c;
15
- } cls_struct_20byte;
16
-
17
- static cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1,
18
- struct cls_struct_20byte a2)
19
- {
20
- struct cls_struct_20byte result;
21
-
22
- result.a = a1.a + a2.a;
23
- result.b = a1.b + a2.b;
24
- result.c = a1.c + a2.c;
25
-
26
- printf("%g %g %d %g %g %d: %g %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c,
27
- result.a, result.b, result.c);
28
-
29
- CHECK(a1.a == 1);
30
- CHECK(a1.b == 2);
31
- CHECK(a1.c == 3);
32
-
33
- CHECK(a2.a == 4);
34
- CHECK(a2.b == 5);
35
- CHECK(a2.c == 7);
36
-
37
- CHECK(result.a == 5);
38
- CHECK(result.b == 7);
39
- CHECK(result.c == 10);
40
- return result;
41
- }
42
-
43
- static void
44
- cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
45
- void* userdata __UNUSED__)
46
- {
47
- struct cls_struct_20byte a1, a2;
48
-
49
- a1 = *(struct cls_struct_20byte*)(args[0]);
50
- a2 = *(struct cls_struct_20byte*)(args[1]);
51
-
52
- *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2);
53
- }
54
-
55
- int main (void)
56
- {
57
- ffi_cif cif;
58
- void *code;
59
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
60
- void* args_dbl[5];
61
- ffi_type* cls_struct_fields[4];
62
- ffi_type cls_struct_type;
63
- ffi_type* dbl_arg_types[5];
64
-
65
- struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 };
66
- struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 };
67
- struct cls_struct_20byte res_dbl;
68
-
69
- cls_struct_type.size = 0;
70
- cls_struct_type.alignment = 0;
71
- cls_struct_type.type = FFI_TYPE_STRUCT;
72
- cls_struct_type.elements = cls_struct_fields;
73
-
74
- cls_struct_fields[0] = &ffi_type_double;
75
- cls_struct_fields[1] = &ffi_type_double;
76
- cls_struct_fields[2] = &ffi_type_sint;
77
- cls_struct_fields[3] = NULL;
78
-
79
- dbl_arg_types[0] = &cls_struct_type;
80
- dbl_arg_types[1] = &cls_struct_type;
81
- dbl_arg_types[2] = NULL;
82
-
83
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
84
- dbl_arg_types) == FFI_OK);
85
-
86
- args_dbl[0] = &g_dbl;
87
- args_dbl[1] = &f_dbl;
88
- args_dbl[2] = NULL;
89
-
90
- ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl);
91
- /* { dg-output "1 2 3 4 5 7: 5 7 10" } */
92
- printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
93
- /* { dg-output "\nres: 5 7 10" } */
94
- CHECK(res_dbl.a == 5);
95
- CHECK(res_dbl.b == 7);
96
- CHECK(res_dbl.c == 10);
97
-
98
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK);
99
-
100
- res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl);
101
- /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */
102
- printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
103
- /* { dg-output "\nres: 5 7 10" } */
104
- CHECK(res_dbl.a == 5);
105
- CHECK(res_dbl.b == 7);
106
- CHECK(res_dbl.c == 10);
107
-
108
- exit(0);
109
- }
@@ -1,113 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030828 */
7
-
8
-
9
-
10
- /* { dg-do run } */
11
- #include "ffitest.h"
12
-
13
- typedef struct cls_struct_20byte {
14
- int a;
15
- double b;
16
- double c;
17
- } cls_struct_20byte;
18
-
19
- static cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1,
20
- struct cls_struct_20byte a2)
21
- {
22
- struct cls_struct_20byte result;
23
-
24
- result.a = a1.a + a2.a;
25
- result.b = a1.b + a2.b;
26
- result.c = a1.c + a2.c;
27
-
28
- printf("%d %g %g %d %g %g: %d %g %g\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c,
29
- result.a, result.b, result.c);
30
-
31
- CHECK(a1.a == 1);
32
- CHECK(a1.b == 2);
33
- CHECK(a1.c == 3);
34
-
35
- CHECK(a2.a == 4);
36
- CHECK(a2.b == 5);
37
- CHECK(a2.c == 7);
38
-
39
- CHECK(result.a == 5);
40
- CHECK(result.b == 7);
41
- CHECK(result.c == 10);
42
-
43
- return result;
44
- }
45
-
46
- static void
47
- cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
48
- void* userdata __UNUSED__)
49
- {
50
- struct cls_struct_20byte a1, a2;
51
-
52
- a1 = *(struct cls_struct_20byte*)(args[0]);
53
- a2 = *(struct cls_struct_20byte*)(args[1]);
54
-
55
- *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2);
56
- }
57
-
58
- int main (void)
59
- {
60
- ffi_cif cif;
61
- void *code;
62
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
63
- void* args_dbl[3];
64
- ffi_type* cls_struct_fields[4];
65
- ffi_type cls_struct_type;
66
- ffi_type* dbl_arg_types[3];
67
-
68
- struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 };
69
- struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 };
70
- struct cls_struct_20byte res_dbl;
71
-
72
- cls_struct_type.size = 0;
73
- cls_struct_type.alignment = 0;
74
- cls_struct_type.type = FFI_TYPE_STRUCT;
75
- cls_struct_type.elements = cls_struct_fields;
76
-
77
- cls_struct_fields[0] = &ffi_type_sint;
78
- cls_struct_fields[1] = &ffi_type_double;
79
- cls_struct_fields[2] = &ffi_type_double;
80
- cls_struct_fields[3] = NULL;
81
-
82
- dbl_arg_types[0] = &cls_struct_type;
83
- dbl_arg_types[1] = &cls_struct_type;
84
- dbl_arg_types[2] = NULL;
85
-
86
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
87
- dbl_arg_types) == FFI_OK);
88
-
89
- args_dbl[0] = &g_dbl;
90
- args_dbl[1] = &f_dbl;
91
- args_dbl[2] = NULL;
92
-
93
- ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl);
94
- /* { dg-output "1 2 3 4 5 7: 5 7 10" } */
95
- printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c);
96
- /* { dg-output "\nres: 5 7 10" } */
97
- CHECK(res_dbl.a == 5);
98
- CHECK(res_dbl.b == 7);
99
- CHECK(res_dbl.c == 10);
100
-
101
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK);
102
-
103
- res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl);
104
- /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */
105
- printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c);
106
- /* { dg-output "\nres: 5 7 10" } */
107
-
108
- CHECK(res_dbl.a == 5);
109
- CHECK(res_dbl.b == 7);
110
- CHECK(res_dbl.c == 10);
111
-
112
- exit(0);
113
- }
@@ -1,145 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030828 */
7
-
8
- /* { dg-do run } */
9
- #include "ffitest.h"
10
-
11
- typedef struct cls_struct_24byte {
12
- double a;
13
- double b;
14
- int c;
15
- float d;
16
- } cls_struct_24byte;
17
-
18
- cls_struct_24byte cls_struct_24byte_fn(struct cls_struct_24byte b0,
19
- struct cls_struct_24byte b1,
20
- struct cls_struct_24byte b2,
21
- struct cls_struct_24byte b3)
22
- {
23
- struct cls_struct_24byte result;
24
-
25
- result.a = b0.a + b1.a + b2.a + b3.a;
26
- result.b = b0.b + b1.b + b2.b + b3.b;
27
- result.c = b0.c + b1.c + b2.c + b3.c;
28
- result.d = b0.d + b1.d + b2.d + b3.d;
29
-
30
- printf("%g %g %d %g %g %g %d %g %g %g %d %g %g %g %d %g: %g %g %d %g\n",
31
- b0.a, b0.b, b0.c, b0.d,
32
- b1.a, b1.b, b1.c, b1.d,
33
- b2.a, b2.b, b2.c, b2.d,
34
- b3.a, b3.b, b3.c, b3.d,
35
- result.a, result.b, result.c, result.d);
36
- CHECK_DOUBLE_EQ(b0.a, 9);
37
- CHECK_DOUBLE_EQ(b0.b, 2);
38
- CHECK(b0.c == 6);
39
- CHECK_FLOAT_EQ(b0.d, 5);
40
-
41
- CHECK_DOUBLE_EQ(b1.a, 1);
42
- CHECK_DOUBLE_EQ(b1.b, 2);
43
- CHECK(b1.c == 3);
44
- CHECK_FLOAT_EQ(b1.d, 7);
45
-
46
- CHECK_DOUBLE_EQ(b2.a, 4);
47
- CHECK_DOUBLE_EQ(b2.b, 5);
48
- CHECK(b2.c == 7);
49
- CHECK_FLOAT_EQ(b2.d, 9);
50
-
51
- CHECK_DOUBLE_EQ(b3.a, 8);
52
- CHECK_DOUBLE_EQ(b3.b, 6);
53
- CHECK(b3.c == 1);
54
- CHECK_FLOAT_EQ(b3.d, 4);
55
-
56
- CHECK_DOUBLE_EQ(result.a, 22);
57
- CHECK_DOUBLE_EQ(result.b, 15);
58
- CHECK(result.c == 17);
59
- CHECK_FLOAT_EQ(result.d, 25);
60
-
61
- return result;
62
- }
63
-
64
- static void
65
- cls_struct_24byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
66
- void* userdata __UNUSED__)
67
- {
68
- struct cls_struct_24byte b0, b1, b2, b3;
69
-
70
- b0 = *(struct cls_struct_24byte*)(args[0]);
71
- b1 = *(struct cls_struct_24byte*)(args[1]);
72
- b2 = *(struct cls_struct_24byte*)(args[2]);
73
- b3 = *(struct cls_struct_24byte*)(args[3]);
74
-
75
- *(cls_struct_24byte*)resp = cls_struct_24byte_fn(b0, b1, b2, b3);
76
- }
77
-
78
- int main (void)
79
- {
80
- ffi_cif cif;
81
- void *code;
82
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
83
- void* args_dbl[5];
84
- ffi_type* cls_struct_fields[5];
85
- ffi_type cls_struct_type;
86
- ffi_type* dbl_arg_types[5];
87
-
88
- struct cls_struct_24byte e_dbl = { 9.0, 2.0, 6, 5.0 };
89
- struct cls_struct_24byte f_dbl = { 1.0, 2.0, 3, 7.0 };
90
- struct cls_struct_24byte g_dbl = { 4.0, 5.0, 7, 9.0 };
91
- struct cls_struct_24byte h_dbl = { 8.0, 6.0, 1, 4.0 };
92
- struct cls_struct_24byte res_dbl;
93
-
94
- cls_struct_type.size = 0;
95
- cls_struct_type.alignment = 0;
96
- cls_struct_type.type = FFI_TYPE_STRUCT;
97
- cls_struct_type.elements = cls_struct_fields;
98
-
99
- cls_struct_fields[0] = &ffi_type_double;
100
- cls_struct_fields[1] = &ffi_type_double;
101
- cls_struct_fields[2] = &ffi_type_sint;
102
- cls_struct_fields[3] = &ffi_type_float;
103
- cls_struct_fields[4] = NULL;
104
-
105
- dbl_arg_types[0] = &cls_struct_type;
106
- dbl_arg_types[1] = &cls_struct_type;
107
- dbl_arg_types[2] = &cls_struct_type;
108
- dbl_arg_types[3] = &cls_struct_type;
109
- dbl_arg_types[4] = NULL;
110
-
111
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type,
112
- dbl_arg_types) == FFI_OK);
113
-
114
- args_dbl[0] = &e_dbl;
115
- args_dbl[1] = &f_dbl;
116
- args_dbl[2] = &g_dbl;
117
- args_dbl[3] = &h_dbl;
118
- args_dbl[4] = NULL;
119
-
120
- ffi_call(&cif, FFI_FN(cls_struct_24byte_fn), &res_dbl, args_dbl);
121
- /* { dg-output "9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 4: 22 15 17 25" } */
122
- printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
123
- /* { dg-output "\nres: 22 15 17 25" } */
124
- CHECK_DOUBLE_EQ(res_dbl.a, 22);
125
- CHECK_DOUBLE_EQ(res_dbl.b, 15);
126
- CHECK(res_dbl.c == 17);
127
- CHECK_FLOAT_EQ(res_dbl.d, 25);
128
-
129
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_24byte_gn, NULL, code) == FFI_OK);
130
-
131
- res_dbl = ((cls_struct_24byte(*)(cls_struct_24byte,
132
- cls_struct_24byte,
133
- cls_struct_24byte,
134
- cls_struct_24byte))
135
- (code))(e_dbl, f_dbl, g_dbl, h_dbl);
136
- /* { dg-output "\n9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 4: 22 15 17 25" } */
137
- printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
138
- /* { dg-output "\nres: 22 15 17 25" } */
139
- CHECK_DOUBLE_EQ(res_dbl.a, 22);
140
- CHECK_DOUBLE_EQ(res_dbl.b, 15);
141
- CHECK(res_dbl.c == 17);
142
- CHECK_FLOAT_EQ(res_dbl.d, 25);
143
-
144
- exit(0);
145
- }
@@ -1,103 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Especially with small structures which may fit in one
4
- register. Depending on the ABI.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- typedef struct cls_struct_2byte {
13
- unsigned char a;
14
- unsigned char b;
15
- } cls_struct_2byte;
16
-
17
- cls_struct_2byte cls_struct_2byte_fn(struct cls_struct_2byte a1,
18
- struct cls_struct_2byte a2)
19
- {
20
- struct cls_struct_2byte result;
21
-
22
- result.a = a1.a + a2.a;
23
- result.b = a1.b + a2.b;
24
-
25
- printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b);
26
-
27
- CHECK(a1.a == 12);
28
- CHECK(a1.b == 127);
29
-
30
- CHECK(a2.a == 1);
31
- CHECK(a2.b == 13);
32
-
33
- CHECK(result.a == 13);
34
- CHECK(result.b == 140);
35
-
36
- return result;
37
- }
38
-
39
- static void
40
- cls_struct_2byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
41
- void* userdata __UNUSED__)
42
- {
43
-
44
- struct cls_struct_2byte a1, a2;
45
-
46
- a1 = *(struct cls_struct_2byte*)(args[0]);
47
- a2 = *(struct cls_struct_2byte*)(args[1]);
48
-
49
- *(cls_struct_2byte*)resp = cls_struct_2byte_fn(a1, a2);
50
- }
51
-
52
- int main (void)
53
- {
54
- ffi_cif cif;
55
- void *code;
56
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
- void* args_dbl[5];
58
- ffi_type* cls_struct_fields[4];
59
- ffi_type cls_struct_type;
60
- ffi_type* dbl_arg_types[5];
61
-
62
- struct cls_struct_2byte g_dbl = { 12, 127 };
63
- struct cls_struct_2byte f_dbl = { 1, 13 };
64
- struct cls_struct_2byte res_dbl;
65
-
66
- cls_struct_type.size = 0;
67
- cls_struct_type.alignment = 0;
68
- cls_struct_type.type = FFI_TYPE_STRUCT;
69
- cls_struct_type.elements = cls_struct_fields;
70
-
71
- cls_struct_fields[0] = &ffi_type_uchar;
72
- cls_struct_fields[1] = &ffi_type_uchar;
73
- cls_struct_fields[2] = NULL;
74
-
75
- dbl_arg_types[0] = &cls_struct_type;
76
- dbl_arg_types[1] = &cls_struct_type;
77
- dbl_arg_types[2] = NULL;
78
-
79
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
80
- dbl_arg_types) == FFI_OK);
81
-
82
- args_dbl[0] = &g_dbl;
83
- args_dbl[1] = &f_dbl;
84
- args_dbl[2] = NULL;
85
-
86
- ffi_call(&cif, FFI_FN(cls_struct_2byte_fn), &res_dbl, args_dbl);
87
- /* { dg-output "12 127 1 13: 13 140" } */
88
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
89
- /* { dg-output "\nres: 13 140" } */
90
- CHECK(res_dbl.a == 13);
91
- CHECK(res_dbl.b == 140);
92
-
93
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_2byte_gn, NULL, code) == FFI_OK);
94
-
95
- res_dbl = ((cls_struct_2byte(*)(cls_struct_2byte, cls_struct_2byte))(code))(g_dbl, f_dbl);
96
- /* { dg-output "\n12 127 1 13: 13 140" } */
97
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
98
- /* { dg-output "\nres: 13 140" } */
99
- CHECK(res_dbl.a == 13);
100
- CHECK(res_dbl.b == 140);
101
-
102
- exit(0);
103
- }