ffi 1.17.2 → 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 (327) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +34 -0
  4. data/Gemfile +7 -4
  5. data/README.md +1 -0
  6. data/Rakefile +7 -4
  7. data/Steepfile +8 -0
  8. data/ext/ffi_c/DynamicLibrary.c +1 -1
  9. data/ext/ffi_c/Function.c +2 -0
  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 +17 -13
  14. data/ext/ffi_c/libffi/Makefile.in +37 -30
  15. data/ext/ffi_c/libffi/README.md +22 -3
  16. data/ext/ffi_c/libffi/configure +105 -121
  17. data/ext/ffi_c/libffi/configure.ac +21 -8
  18. data/ext/ffi_c/libffi/configure.host +6 -1
  19. data/ext/ffi_c/libffi/doc/Makefile.in +3 -0
  20. data/ext/ffi_c/libffi/doc/libffi.texi +24 -1
  21. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  22. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +1 -28
  23. data/ext/ffi_c/libffi/include/Makefile.in +3 -0
  24. data/ext/ffi_c/libffi/include/ffi.h.in +19 -1
  25. data/ext/ffi_c/libffi/libffi.map.in +13 -1
  26. data/ext/ffi_c/libffi/libtool-version +1 -1
  27. data/ext/ffi_c/libffi/m4/asmcfi.m4 +28 -11
  28. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +13 -3
  29. data/ext/ffi_c/libffi/man/Makefile.in +3 -0
  30. data/ext/ffi_c/libffi/src/aarch64/sysv.S +7 -1
  31. data/ext/ffi_c/libffi/src/arm/sysv.S +1 -1
  32. data/ext/ffi_c/libffi/src/pa/linux.S +4 -0
  33. data/ext/ffi_c/libffi/src/powerpc/ffi.c +6 -0
  34. data/ext/ffi_c/libffi/src/riscv/ffi.c +39 -16
  35. data/ext/ffi_c/libffi/src/riscv/internal.h +7 -0
  36. data/ext/ffi_c/libffi/src/riscv/sysv.S +24 -0
  37. data/ext/ffi_c/libffi/src/tramp.c +6 -1
  38. data/ext/ffi_c/libffi/src/types.c +23 -1
  39. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffi.c +157 -54
  40. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffitarget.h +17 -0
  41. data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -3
  42. data/ext/ffi_c/libffi/src/x86/sysv.S +1 -3
  43. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +1 -3
  44. data/ext/ffi_c/libffi/testsuite/Makefile.in +6 -2
  45. data/ext/ffi_c/libffi.mk +5 -0
  46. data/ffi.gemspec +7 -6
  47. data/lib/ffi/autopointer.rb +6 -0
  48. data/lib/ffi/compat.rb +11 -0
  49. data/lib/ffi/function.rb +23 -0
  50. data/lib/ffi/library.rb +19 -3
  51. data/lib/ffi/struct_by_reference.rb +1 -1
  52. data/lib/ffi/version.rb +1 -1
  53. data/samples/hello_ractor.rb +9 -1
  54. data/samples/qsort_ractor.rb +9 -1
  55. data/sig/ffi/auto_pointer.rbs +1 -1
  56. data/sig/ffi/errno.rbs +8 -0
  57. data/sig/ffi/platform.rbs +49 -0
  58. data/sig/ffi/struct.rbs +2 -2
  59. data/sig/ffi/struct_by_reference.rbs +1 -1
  60. data/sig/ffi.rbs +4 -1
  61. data.tar.gz.sig +0 -0
  62. metadata +24 -338
  63. metadata.gz.sig +0 -0
  64. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  65. data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
  66. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
  67. data/ext/ffi_c/libffi/.appveyor.yml +0 -84
  68. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  69. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  70. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  71. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  72. data/ext/ffi_c/libffi/.ci/build.sh +0 -124
  73. data/ext/ffi_c/libffi/.ci/compile +0 -351
  74. data/ext/ffi_c/libffi/.ci/install.sh +0 -78
  75. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  76. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  77. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  78. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  79. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  80. data/ext/ffi_c/libffi/.ci/site.exp +0 -29
  81. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  82. data/ext/ffi_c/libffi/.gitattributes +0 -4
  83. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  84. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -479
  85. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -160
  86. data/ext/ffi_c/libffi/.gitignore +0 -46
  87. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -88
  88. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  89. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -34
  90. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -46
  91. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -86
  92. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -23
  93. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  94. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  95. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
  96. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  97. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  98. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  99. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  100. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  101. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  102. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  103. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  104. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  105. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  106. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  107. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  108. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  109. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +0 -99
  110. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +0 -108
  111. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +0 -114
  112. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +0 -119
  113. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  114. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
  115. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  116. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  117. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  118. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  119. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  120. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  121. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  122. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  123. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  124. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  125. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  126. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  127. data/ext/ffi_c/libffi/testsuite/libffi.call/overread.c +0 -54
  128. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  129. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  130. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  131. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  132. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  133. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  134. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  135. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  136. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  137. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  138. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  139. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_int_float.c +0 -88
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -135
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -141
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/x32.c +0 -31
  178. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  179. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  180. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  181. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  182. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  183. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  184. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  185. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  186. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  187. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  188. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  189. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  190. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  191. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  192. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  193. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  194. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  195. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  196. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  197. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  198. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  199. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  200. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  201. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  202. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  203. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  204. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  205. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  206. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  207. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  208. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  209. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  228. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  229. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  230. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  231. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  232. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  233. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  234. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  235. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  236. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  237. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  238. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  239. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  240. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  241. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  242. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  243. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  244. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  245. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  246. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  247. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  248. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  249. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  250. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  251. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  252. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  253. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
  254. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  255. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  256. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  257. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  258. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  259. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  260. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  261. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  262. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  263. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  264. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  265. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  266. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  267. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  268. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  269. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  270. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  271. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  272. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  273. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  274. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  275. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  276. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  277. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
  278. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  284. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  321. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  322. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  323. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  324. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  325. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  326. data/lib/ffi/tools/types_generator.rb +0 -137
  327. data/rakelib/ffi_gem_helper.rb +0 -65
@@ -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
- }
@@ -1,114 +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
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- typedef struct cls_struct_3_1byte {
13
- unsigned char a;
14
- unsigned char b;
15
- unsigned char c;
16
- } cls_struct_3_1byte;
17
-
18
- cls_struct_3_1byte cls_struct_3_1byte_fn(struct cls_struct_3_1byte a1,
19
- struct cls_struct_3_1byte a2)
20
- {
21
- struct cls_struct_3_1byte result;
22
-
23
- result.a = a1.a + a2.a;
24
- result.b = a1.b + a2.b;
25
- result.c = a1.c + a2.c;
26
-
27
- printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c,
28
- a2.a, a2.b, a2.c,
29
- result.a, result.b, result.c);
30
-
31
- CHECK(a1.a == 12);
32
- CHECK(a1.b == 13);
33
- CHECK(a1.c == 14);
34
-
35
- CHECK(a2.a == 178);
36
- CHECK(a2.b == 179);
37
- CHECK(a2.c == 180);
38
-
39
- CHECK(result.a == 190);
40
- CHECK(result.b == 192);
41
- CHECK(result.c == 194);
42
-
43
- return result;
44
- }
45
-
46
- static void
47
- cls_struct_3_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
48
- void* userdata __UNUSED__)
49
- {
50
-
51
- struct cls_struct_3_1byte a1, a2;
52
-
53
- a1 = *(struct cls_struct_3_1byte*)(args[0]);
54
- a2 = *(struct cls_struct_3_1byte*)(args[1]);
55
-
56
- *(cls_struct_3_1byte*)resp = cls_struct_3_1byte_fn(a1, a2);
57
- }
58
-
59
- int main (void)
60
- {
61
- ffi_cif cif;
62
- void *code;
63
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
64
- void* args_dbl[5];
65
- ffi_type* cls_struct_fields[4];
66
- ffi_type cls_struct_type;
67
- ffi_type* dbl_arg_types[5];
68
-
69
- struct cls_struct_3_1byte g_dbl = { 12, 13, 14 };
70
- struct cls_struct_3_1byte f_dbl = { 178, 179, 180 };
71
- struct cls_struct_3_1byte res_dbl;
72
-
73
- cls_struct_type.size = 0;
74
- cls_struct_type.alignment = 0;
75
- cls_struct_type.type = FFI_TYPE_STRUCT;
76
- cls_struct_type.elements = cls_struct_fields;
77
-
78
- cls_struct_fields[0] = &ffi_type_uchar;
79
- cls_struct_fields[1] = &ffi_type_uchar;
80
- cls_struct_fields[2] = &ffi_type_uchar;
81
- cls_struct_fields[3] = NULL;
82
-
83
- dbl_arg_types[0] = &cls_struct_type;
84
- dbl_arg_types[1] = &cls_struct_type;
85
- dbl_arg_types[2] = NULL;
86
-
87
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
88
- dbl_arg_types) == FFI_OK);
89
-
90
- args_dbl[0] = &g_dbl;
91
- args_dbl[1] = &f_dbl;
92
- args_dbl[2] = NULL;
93
-
94
- ffi_call(&cif, FFI_FN(cls_struct_3_1byte_fn), &res_dbl, args_dbl);
95
- /* { dg-output "12 13 14 178 179 180: 190 192 194" } */
96
- printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
97
- /* { dg-output "\nres: 190 192 194" } */
98
- CHECK(res_dbl.a == 190);
99
- CHECK(res_dbl.b == 192);
100
- CHECK(res_dbl.c == 194);
101
-
102
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3_1byte_gn, NULL, code) == FFI_OK);
103
-
104
- res_dbl = ((cls_struct_3_1byte(*)(cls_struct_3_1byte, cls_struct_3_1byte))(code))(g_dbl, f_dbl);
105
- /* { dg-output "\n12 13 14 178 179 180: 190 192 194" } */
106
- printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
107
- /* { dg-output "\nres: 190 192 194" } */
108
-
109
- CHECK(res_dbl.a == 190);
110
- CHECK(res_dbl.b == 192);
111
- CHECK(res_dbl.c == 194);
112
-
113
- exit(0);
114
- }
@@ -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. Check overlapping.
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_3byte {
13
- unsigned short a;
14
- unsigned char b;
15
- } cls_struct_3byte;
16
-
17
- cls_struct_3byte cls_struct_3byte_fn(struct cls_struct_3byte a1,
18
- struct cls_struct_3byte a2)
19
- {
20
- struct cls_struct_3byte 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 == 119);
29
-
30
- CHECK(a2.a == 1);
31
- CHECK(a2.b == 15);
32
-
33
- CHECK(result.a == 13);
34
- CHECK(result.b == 134);
35
-
36
- return result;
37
- }
38
-
39
- static void
40
- cls_struct_3byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
41
- void* userdata __UNUSED__)
42
- {
43
-
44
- struct cls_struct_3byte a1, a2;
45
-
46
- a1 = *(struct cls_struct_3byte*)(args[0]);
47
- a2 = *(struct cls_struct_3byte*)(args[1]);
48
-
49
- *(cls_struct_3byte*)resp = cls_struct_3byte_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_3byte g_dbl = { 12, 119 };
63
- struct cls_struct_3byte f_dbl = { 1, 15 };
64
- struct cls_struct_3byte 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_ushort;
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_3byte_fn), &res_dbl, args_dbl);
87
- /* { dg-output "12 119 1 15: 13 134" } */
88
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
89
- /* { dg-output "\nres: 13 134" } */
90
- CHECK(res_dbl.a == 13);
91
- CHECK(res_dbl.b == 134);
92
-
93
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn, NULL, code) == FFI_OK);
94
-
95
- res_dbl = ((cls_struct_3byte(*)(cls_struct_3byte, cls_struct_3byte))(code))(g_dbl, f_dbl);
96
- /* { dg-output "\n12 119 1 15: 13 134" } */
97
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
98
- /* { dg-output "\nres: 13 134" } */
99
- CHECK(res_dbl.a == 13);
100
- CHECK(res_dbl.b == 134);
101
-
102
- exit(0);
103
- }
@@ -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. Check overlapping.
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_3byte_1 {
13
- unsigned char a;
14
- unsigned short b;
15
- } cls_struct_3byte_1;
16
-
17
- cls_struct_3byte_1 cls_struct_3byte_fn1(struct cls_struct_3byte_1 a1,
18
- struct cls_struct_3byte_1 a2)
19
- {
20
- struct cls_struct_3byte_1 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 == 15);
28
- CHECK(a1.b == 125);
29
-
30
- CHECK(a2.a == 9);
31
- CHECK(a2.b == 19);
32
-
33
- CHECK(result.a == 24);
34
- CHECK(result.b == 144);
35
-
36
- return result;
37
- }
38
-
39
- static void
40
- cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
41
- void* userdata __UNUSED__)
42
- {
43
-
44
- struct cls_struct_3byte_1 a1, a2;
45
-
46
- a1 = *(struct cls_struct_3byte_1*)(args[0]);
47
- a2 = *(struct cls_struct_3byte_1*)(args[1]);
48
-
49
- *(cls_struct_3byte_1*)resp = cls_struct_3byte_fn1(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_3byte_1 g_dbl = { 15, 125 };
63
- struct cls_struct_3byte_1 f_dbl = { 9, 19 };
64
- struct cls_struct_3byte_1 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_ushort;
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_3byte_fn1), &res_dbl, args_dbl);
87
- /* { dg-output "15 125 9 19: 24 144" } */
88
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
89
- /* { dg-output "\nres: 24 144" } */
90
- CHECK(res_dbl.a == 24);
91
- CHECK(res_dbl.b == 144);
92
-
93
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn1, NULL, code) == FFI_OK);
94
-
95
- res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(code))(g_dbl, f_dbl);
96
- /* { dg-output "\n15 125 9 19: 24 144" } */
97
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
98
- /* { dg-output "\nres: 24 144" } */
99
- CHECK(res_dbl.a == 24);
100
- CHECK(res_dbl.b == 144);
101
-
102
- exit(0);
103
- }