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,78 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple unsigned 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 unsigned short test_func_fn(unsigned short a1, unsigned short a2)
11
- {
12
- unsigned short result;
13
-
14
- result = a1 + a2;
15
-
16
- printf("%d %d: %d\n", a1, a2, result);
17
-
18
- CHECK(a1 == 2);
19
- CHECK(a2 == 32765);
20
- CHECK(result == 32767);
21
-
22
- return result;
23
- }
24
-
25
- static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
26
- void *data __UNUSED__)
27
- {
28
- unsigned short a1, a2;
29
-
30
- a1 = *(unsigned short *)avals[0];
31
- a2 = *(unsigned short *)avals[1];
32
-
33
- *(ffi_arg *)rval = test_func_fn(a1, a2);
34
-
35
- }
36
-
37
- typedef unsigned short (*test_type)(unsigned short, unsigned 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_ushort;
57
- cl_arg_types[1] = &ffi_type_ushort;
58
- cl_arg_types[2] = NULL;
59
-
60
- /* Initialize the cif */
61
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
62
- &ffi_type_ushort, 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
-
69
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
70
-
71
- res_closure = (*((test_type)code))(2, 32765);
72
- /* { dg-output "\n2 32765: 32767" } */
73
- printf("res: %d\n", res_closure);
74
- /* { dg-output "\nres: 32767" } */
75
- CHECK(res_closure == 32767);
76
-
77
- exit(0);
78
- }
@@ -1,94 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple unsigned short/char 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 unsigned short test_func_fn(unsigned char a1, unsigned short a2,
11
- unsigned char a3, unsigned short a4)
12
- {
13
- unsigned short result;
14
-
15
- result = a1 + a2 + a3 + a4;
16
-
17
- printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result);
18
-
19
- CHECK(a1 == 1);
20
- CHECK(a2 == 2);
21
- CHECK(a3 == 127);
22
- CHECK(a4 == 128);
23
- CHECK(result == 258);
24
-
25
- return result;
26
-
27
- }
28
-
29
- static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
30
- void *data __UNUSED__)
31
- {
32
- unsigned char a1, a3;
33
- unsigned short a2, a4;
34
-
35
- a1 = *(unsigned char *)avals[0];
36
- a2 = *(unsigned short *)avals[1];
37
- a3 = *(unsigned char *)avals[2];
38
- a4 = *(unsigned short *)avals[3];
39
-
40
- *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
41
-
42
- }
43
-
44
- typedef unsigned short (*test_type)(unsigned char, unsigned short,
45
- unsigned char, unsigned short);
46
-
47
- int main (void)
48
- {
49
- ffi_cif cif;
50
- void *code;
51
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
52
- void * args_dbl[5];
53
- ffi_type * cl_arg_types[5];
54
- ffi_arg res_call;
55
- unsigned char a, c;
56
- unsigned short b, d, res_closure;
57
-
58
- a = 1;
59
- b = 2;
60
- c = 127;
61
- d = 128;
62
-
63
- args_dbl[0] = &a;
64
- args_dbl[1] = &b;
65
- args_dbl[2] = &c;
66
- args_dbl[3] = &d;
67
- args_dbl[4] = NULL;
68
-
69
- cl_arg_types[0] = &ffi_type_uchar;
70
- cl_arg_types[1] = &ffi_type_ushort;
71
- cl_arg_types[2] = &ffi_type_uchar;
72
- cl_arg_types[3] = &ffi_type_ushort;
73
- cl_arg_types[4] = NULL;
74
-
75
- /* Initialize the cif */
76
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
77
- &ffi_type_ushort, cl_arg_types) == FFI_OK);
78
-
79
- ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
80
- /* { dg-output "1 2 127 128: 258" } */
81
- printf("res: %d\n", (unsigned short)res_call);
82
- /* { dg-output "\nres: 258" } */
83
- CHECK((unsigned short)res_call == 258);
84
-
85
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
86
-
87
- res_closure = (*((test_type)code))(1, 2, 127, 128);
88
- /* { dg-output "\n1 2 127 128: 258" } */
89
- printf("res: %d\n", res_closure);
90
- /* { dg-output "\nres: 258" } */
91
- CHECK(res_closure == 258);
92
-
93
- exit(0);
94
- }
@@ -1,79 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check pointer arguments.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin 6/6/2007 */
6
-
7
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
- #include "ffitest.h"
9
-
10
- void* cls_pointer_fn(void* a1, void* a2)
11
- {
12
- void* result = (void*)((intptr_t)a1 + (intptr_t)a2);
13
-
14
- printf("0x%08x 0x%08x: 0x%08x\n",
15
- (unsigned int)(uintptr_t) a1,
16
- (unsigned int)(uintptr_t) a2,
17
- (unsigned int)(uintptr_t) result);
18
-
19
- CHECK((unsigned int)(uintptr_t) a1 == 0x12345678);
20
- CHECK((unsigned int)(uintptr_t) a2 == 0x89abcdef);
21
- CHECK((unsigned int)(uintptr_t) result == 0x9be02467);
22
-
23
- return result;
24
- }
25
-
26
- static void
27
- cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp,
28
- void** args, void* userdata __UNUSED__)
29
- {
30
- void* a1 = *(void**)(args[0]);
31
- void* a2 = *(void**)(args[1]);
32
-
33
- *(void**)resp = cls_pointer_fn(a1, a2);
34
- }
35
-
36
- int main (void)
37
- {
38
- ffi_cif cif;
39
- void *code;
40
- ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
41
- void* args[3];
42
- /* ffi_type cls_pointer_type; */
43
- ffi_type* arg_types[3];
44
-
45
- /* cls_pointer_type.size = sizeof(void*);
46
- cls_pointer_type.alignment = 0;
47
- cls_pointer_type.type = FFI_TYPE_POINTER;
48
- cls_pointer_type.elements = NULL;*/
49
-
50
- void* arg1 = (void*)0x12345678;
51
- void* arg2 = (void*)0x89abcdef;
52
- ffi_arg res = 0;
53
-
54
- arg_types[0] = &ffi_type_pointer;
55
- arg_types[1] = &ffi_type_pointer;
56
- arg_types[2] = NULL;
57
-
58
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer,
59
- arg_types) == FFI_OK);
60
-
61
- args[0] = &arg1;
62
- args[1] = &arg2;
63
- args[2] = NULL;
64
-
65
- ffi_call(&cif, FFI_FN(cls_pointer_fn), &res, args);
66
- /* { dg-output "0x12345678 0x89abcdef: 0x9be02467" } */
67
- printf("res: 0x%08x\n", (unsigned int) res);
68
- /* { dg-output "\nres: 0x9be02467" } */
69
-
70
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK);
71
-
72
- res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2);
73
- /* { dg-output "\n0x12345678 0x89abcdef: 0x9be02467" } */
74
- printf("res: 0x%08x\n", (unsigned int) res);
75
- /* { dg-output "\nres: 0x9be02467" } */
76
- CHECK(res == 0x9be02467);
77
-
78
- exit(0);
79
- }
@@ -1,152 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check pointer arguments across multiple hideous stack frames.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Blake Chaffin 6/7/2007 */
6
-
7
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
- #include "ffitest.h"
9
-
10
- static long dummyVar;
11
-
12
- long dummy_func(
13
- long double a1, char b1,
14
- long double a2, char b2,
15
- long double a3, char b3,
16
- long double a4, char b4)
17
- {
18
- return a1 + b1 + a2 + b2 + a3 + b3 + a4 + b4;
19
- }
20
-
21
- void* cls_pointer_fn2(void* a1, void* a2)
22
- {
23
- long double trample1 = (intptr_t)a1 + (intptr_t)a2;
24
- char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0];
25
- long double trample3 = (intptr_t)trample1 + (intptr_t)a1;
26
- char trample4 = trample2 + ((char*)&a1)[1];
27
- long double trample5 = (intptr_t)trample3 + (intptr_t)a2;
28
- char trample6 = trample4 + ((char*)&a2)[1];
29
- long double trample7 = (intptr_t)trample5 + (intptr_t)trample1;
30
- char trample8 = trample6 + trample2;
31
- void* result;
32
-
33
- dummyVar = dummy_func(trample1, trample2, trample3, trample4,
34
- trample5, trample6, trample7, trample8);
35
-
36
- result = (void*)((intptr_t)a1 + (intptr_t)a2);
37
-
38
- printf("0x%08x 0x%08x: 0x%08x\n",
39
- (unsigned int)(uintptr_t) a1,
40
- (unsigned int)(uintptr_t) a2,
41
- (unsigned int)(uintptr_t) result);
42
-
43
- CHECK((unsigned int)(uintptr_t) a1 == 0x8acf1356);
44
- CHECK((unsigned int)(uintptr_t) a2 == 0x01234567);
45
- CHECK((unsigned int)(uintptr_t) result == 0x8bf258bd);
46
-
47
- return result;
48
- }
49
-
50
- void* cls_pointer_fn1(void* a1, void* a2)
51
- {
52
- long double trample1 = (intptr_t)a1 + (intptr_t)a2;
53
- char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0];
54
- long double trample3 = (intptr_t)trample1 + (intptr_t)a1;
55
- char trample4 = trample2 + ((char*)&a1)[1];
56
- long double trample5 = (intptr_t)trample3 + (intptr_t)a2;
57
- char trample6 = trample4 + ((char*)&a2)[1];
58
- long double trample7 = (intptr_t)trample5 + (intptr_t)trample1;
59
- char trample8 = trample6 + trample2;
60
- void* result;
61
-
62
- dummyVar = dummy_func(trample1, trample2, trample3, trample4,
63
- trample5, trample6, trample7, trample8);
64
-
65
- result = (void*)((intptr_t)a1 + (intptr_t)a2);
66
-
67
- printf("0x%08x 0x%08x: 0x%08x\n",
68
- (unsigned int)(intptr_t) a1,
69
- (unsigned int)(intptr_t) a2,
70
- (unsigned int)(intptr_t) result);
71
-
72
- CHECK((unsigned int)(uintptr_t) a1 == 0x01234567);
73
- CHECK((unsigned int)(uintptr_t) a2 == 0x89abcdef);
74
- CHECK((unsigned int)(uintptr_t) result == 0x8acf1356);
75
-
76
- result = cls_pointer_fn2(result, a1);
77
-
78
- return result;
79
- }
80
-
81
- static void
82
- cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp,
83
- void** args, void* userdata __UNUSED__)
84
- {
85
- void* a1 = *(void**)(args[0]);
86
- void* a2 = *(void**)(args[1]);
87
-
88
- long double trample1 = (intptr_t)a1 + (intptr_t)a2;
89
- char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0];
90
- long double trample3 = (intptr_t)trample1 + (intptr_t)a1;
91
- char trample4 = trample2 + ((char*)&a1)[1];
92
- long double trample5 = (intptr_t)trample3 + (intptr_t)a2;
93
- char trample6 = trample4 + ((char*)&a2)[1];
94
- long double trample7 = (intptr_t)trample5 + (intptr_t)trample1;
95
- char trample8 = trample6 + trample2;
96
-
97
- dummyVar = dummy_func(trample1, trample2, trample3, trample4,
98
- trample5, trample6, trample7, trample8);
99
-
100
- *(void**)resp = cls_pointer_fn1(a1, a2);
101
- }
102
-
103
- int main (void)
104
- {
105
- ffi_cif cif;
106
- void *code;
107
- ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
108
- void* args[3];
109
- /* ffi_type cls_pointer_type; */
110
- ffi_type* arg_types[3];
111
-
112
- /* cls_pointer_type.size = sizeof(void*);
113
- cls_pointer_type.alignment = 0;
114
- cls_pointer_type.type = FFI_TYPE_POINTER;
115
- cls_pointer_type.elements = NULL;*/
116
-
117
- void* arg1 = (void*)0x01234567;
118
- void* arg2 = (void*)0x89abcdef;
119
- ffi_arg res = 0;
120
-
121
- arg_types[0] = &ffi_type_pointer;
122
- arg_types[1] = &ffi_type_pointer;
123
- arg_types[2] = NULL;
124
-
125
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer,
126
- arg_types) == FFI_OK);
127
-
128
- args[0] = &arg1;
129
- args[1] = &arg2;
130
- args[2] = NULL;
131
-
132
- printf("\n");
133
- ffi_call(&cif, FFI_FN(cls_pointer_fn1), &res, args);
134
-
135
- printf("res: 0x%08x\n", (unsigned int) res);
136
- /* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */
137
- /* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */
138
- /* { dg-output "\nres: 0x8bf258bd" } */
139
- CHECK(res == 0x8bf258bd);
140
-
141
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK);
142
-
143
- res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2);
144
-
145
- printf("res: 0x%08x\n", (unsigned int) res);
146
- /* { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } */
147
- /* { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } */
148
- /* { dg-output "\nres: 0x8bf258bd" } */
149
- CHECK(res == 0x8bf258bd);
150
-
151
- exit(0);
152
- }
@@ -1,47 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value schar.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20031108 */
6
-
7
-
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
- void* userdata __UNUSED__)
14
- {
15
- *(ffi_arg*)resp = *(signed char *)args[0];
16
- printf("%d: %d\n",*(signed char *)args[0],
17
- (int)*(ffi_arg *)(resp));
18
- CHECK(*(signed char *)args[0] == 127);
19
- CHECK((int)*(ffi_arg *)(resp) == 127);
20
- }
21
- typedef signed char (*cls_ret_schar)(signed char);
22
-
23
- int main (void)
24
- {
25
- ffi_cif cif;
26
- void *code;
27
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
28
- ffi_type * cl_arg_types[2];
29
- signed char res;
30
-
31
- cl_arg_types[0] = &ffi_type_schar;
32
- cl_arg_types[1] = NULL;
33
-
34
- /* Initialize the cif */
35
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
36
- &ffi_type_schar, cl_arg_types) == FFI_OK);
37
-
38
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_schar_fn, NULL, code) == FFI_OK);
39
-
40
- res = (*((cls_ret_schar)code))(127);
41
- /* { dg-output "127: 127" } */
42
- printf("res: %d\n", res);
43
- /* { dg-output "\nres: 127" } */
44
- CHECK(res == 127);
45
-
46
- exit(0);
47
- }
@@ -1,44 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value sint32.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20031108 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
- void* userdata __UNUSED__)
12
- {
13
- *(ffi_arg*)resp = *(signed int *)args[0];
14
- printf("%d: %d\n",*(signed int *)args[0],
15
- (int)*(ffi_arg *)(resp));
16
- CHECK(*(signed int *)args[0] == 65534);
17
- CHECK((int)*(ffi_arg *)(resp) == 65534);
18
- }
19
- typedef signed int (*cls_ret_sint)(signed int);
20
-
21
- int main (void)
22
- {
23
- ffi_cif cif;
24
- void *code;
25
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
26
- ffi_type * cl_arg_types[2];
27
- signed int res;
28
-
29
- cl_arg_types[0] = &ffi_type_sint;
30
- cl_arg_types[1] = NULL;
31
-
32
- /* Initialize the cif */
33
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
34
- &ffi_type_sint, cl_arg_types) == FFI_OK);
35
-
36
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sint_fn, NULL, code) == FFI_OK);
37
-
38
- res = (*((cls_ret_sint)code))(65534);
39
- /* { dg-output "65534: 65534" } */
40
- printf("res: %d\n",res);
41
- /* { dg-output "\nres: 65534" } */
42
-
43
- exit(0);
44
- }
@@ -1,45 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value sshort.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20031108 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
- void* userdata __UNUSED__)
12
- {
13
- *(ffi_arg*)resp = *(signed short *)args[0];
14
- printf("%d: %d\n",*(signed short *)args[0],
15
- (int)*(ffi_arg *)(resp));
16
- CHECK(*(signed short *)args[0] == 255);
17
- CHECK((int)*(ffi_arg *)(resp) == 255);
18
- }
19
- typedef signed short (*cls_ret_sshort)(signed short);
20
-
21
- int main (void)
22
- {
23
- ffi_cif cif;
24
- void *code;
25
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
26
- ffi_type * cl_arg_types[2];
27
- signed short res;
28
-
29
- cl_arg_types[0] = &ffi_type_sshort;
30
- cl_arg_types[1] = NULL;
31
-
32
- /* Initialize the cif */
33
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
34
- &ffi_type_sshort, cl_arg_types) == FFI_OK);
35
-
36
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sshort_fn, NULL, code) == FFI_OK);
37
-
38
- res = (*((cls_ret_sshort)code))(255);
39
- /* { dg-output "255: 255" } */
40
- printf("res: %d\n",res);
41
- /* { dg-output "\nres: 255" } */
42
- CHECK(res == 255);
43
-
44
- exit(0);
45
- }
@@ -1,125 +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 } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
- #include "ffitest.h"
10
-
11
- struct small_tag
12
- {
13
- unsigned char a;
14
- unsigned char b;
15
- };
16
-
17
- struct large_tag
18
- {
19
- unsigned a;
20
- unsigned b;
21
- unsigned c;
22
- unsigned d;
23
- unsigned e;
24
- };
25
-
26
- static void
27
- test_fn (ffi_cif* cif __UNUSED__, void* resp,
28
- void** args, void* userdata __UNUSED__)
29
- {
30
- int n = *(int*)args[0];
31
- struct small_tag s1 = * (struct small_tag *) args[1];
32
- struct large_tag l1 = * (struct large_tag *) args[2];
33
- struct small_tag s2 = * (struct small_tag *) args[3];
34
-
35
- printf ("%d %d %d %d %d %d %d %d %d %d\n", n, s1.a, s1.b,
36
- l1.a, l1.b, l1.c, l1.d, l1.e,
37
- s2.a, s2.b);
38
- CHECK(n == 4);
39
- CHECK(s1.a == 5);
40
- CHECK(s1.b == 6);
41
- CHECK(l1.a == 10);
42
- CHECK(l1.b == 11);
43
- CHECK(l1.c == 12);
44
- CHECK(l1.d == 13);
45
- CHECK(l1.e == 14);
46
- CHECK(s2.a == 20);
47
- CHECK(s2.b == 21);
48
- * (ffi_arg*) resp = 42;
49
- }
50
-
51
- int
52
- main (void)
53
- {
54
- ffi_cif cif;
55
- void *code;
56
- ffi_closure *pcl = ffi_closure_alloc (sizeof (ffi_closure), &code);
57
- ffi_type* arg_types[5];
58
-
59
- ffi_arg res = 0;
60
-
61
- ffi_type s_type;
62
- ffi_type *s_type_elements[3];
63
-
64
- ffi_type l_type;
65
- ffi_type *l_type_elements[6];
66
-
67
- struct small_tag s1;
68
- struct small_tag s2;
69
- struct large_tag l1;
70
-
71
- int si;
72
-
73
- s_type.size = 0;
74
- s_type.alignment = 0;
75
- s_type.type = FFI_TYPE_STRUCT;
76
- s_type.elements = s_type_elements;
77
-
78
- s_type_elements[0] = &ffi_type_uchar;
79
- s_type_elements[1] = &ffi_type_uchar;
80
- s_type_elements[2] = NULL;
81
-
82
- l_type.size = 0;
83
- l_type.alignment = 0;
84
- l_type.type = FFI_TYPE_STRUCT;
85
- l_type.elements = l_type_elements;
86
-
87
- l_type_elements[0] = &ffi_type_uint;
88
- l_type_elements[1] = &ffi_type_uint;
89
- l_type_elements[2] = &ffi_type_uint;
90
- l_type_elements[3] = &ffi_type_uint;
91
- l_type_elements[4] = &ffi_type_uint;
92
- l_type_elements[5] = NULL;
93
-
94
- arg_types[0] = &ffi_type_sint;
95
- arg_types[1] = &s_type;
96
- arg_types[2] = &l_type;
97
- arg_types[3] = &s_type;
98
- arg_types[4] = NULL;
99
-
100
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint,
101
- arg_types) == FFI_OK);
102
-
103
- si = 4;
104
- s1.a = 5;
105
- s1.b = 6;
106
-
107
- s2.a = 20;
108
- s2.b = 21;
109
-
110
- l1.a = 10;
111
- l1.b = 11;
112
- l1.c = 12;
113
- l1.d = 13;
114
- l1.e = 14;
115
-
116
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_fn, NULL, code) == FFI_OK);
117
-
118
- res = ((int (*)(int, ...))(code))(si, s1, l1, s2);
119
- /* { dg-output "4 5 6 10 11 12 13 14 20 21" } */
120
- printf("res: %d\n", (int) res);
121
- /* { dg-output "\nres: 42" } */
122
- CHECK(res == 42);
123
-
124
- exit(0);
125
- }
@@ -1,45 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value uchar.
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_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
- void* userdata __UNUSED__)
12
- {
13
- *(ffi_arg*)resp = *(unsigned char *)args[0];
14
- printf("%d: %d\n",*(unsigned char *)args[0],
15
- (int)*(ffi_arg *)(resp));
16
- CHECK(*(unsigned char *)args[0] == 127);
17
- CHECK((int)*(ffi_arg *)(resp) == 127);
18
- }
19
- typedef unsigned char (*cls_ret_uchar)(unsigned char);
20
-
21
- int main (void)
22
- {
23
- ffi_cif cif;
24
- void *code;
25
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
26
- ffi_type * cl_arg_types[2];
27
- unsigned char res;
28
-
29
- cl_arg_types[0] = &ffi_type_uchar;
30
- cl_arg_types[1] = NULL;
31
-
32
- /* Initialize the cif */
33
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
34
- &ffi_type_uchar, cl_arg_types) == FFI_OK);
35
-
36
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uchar_fn, NULL, code) == FFI_OK);
37
-
38
- res = (*((cls_ret_uchar)code))(127);
39
- /* { dg-output "127: 127" } */
40
- printf("res: %d\n",res);
41
- /* { dg-output "\nres: 127" } */
42
- CHECK(res == 127);
43
-
44
- exit(0);
45
- }