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,94 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple signed 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 signed short test_func_fn(signed char a1, signed short a2,
11
- signed char a3, signed short a4)
12
- {
13
- signed 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 == 32765);
21
- CHECK(a3 == 127);
22
- CHECK(a4 == -128);
23
- CHECK(result == 32765);
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
- signed char a1, a3;
33
- signed short a2, a4;
34
-
35
- a1 = *(signed char *)avals[0];
36
- a2 = *(signed short *)avals[1];
37
- a3 = *(signed char *)avals[2];
38
- a4 = *(signed short *)avals[3];
39
-
40
- *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
41
-
42
- }
43
-
44
- typedef signed short (*test_type)(signed char, signed short,
45
- signed char, signed 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
- signed char a, c;
56
- signed short b, d, res_closure;
57
-
58
- a = 1;
59
- b = 32765;
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_schar;
70
- cl_arg_types[1] = &ffi_type_sshort;
71
- cl_arg_types[2] = &ffi_type_schar;
72
- cl_arg_types[3] = &ffi_type_sshort;
73
- cl_arg_types[4] = NULL;
74
-
75
- /* Initialize the cif */
76
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
77
- &ffi_type_sshort, cl_arg_types) == FFI_OK);
78
-
79
- ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
80
- /* { dg-output "1 32765 127 -128: 32765" } */
81
- printf("res: %d\n", (signed short)res_call);
82
- /* { dg-output "\nres: 32765" } */
83
- CHECK(res_call == 32765);
84
-
85
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
86
-
87
- res_closure = (*((test_type)code))(1, 32765, 127, -128);
88
- /* { dg-output "\n1 32765 127 -128: 32765" } */
89
- printf("res: %d\n", res_closure);
90
- /* { dg-output "\nres: 32765" } */
91
- CHECK(res_closure == 32765);
92
-
93
- exit(0);
94
- }
@@ -1,99 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check passing of multiple unsigned 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 char test_func_fn(unsigned char a1, unsigned char a2,
11
- unsigned char a3, unsigned char a4)
12
- {
13
- unsigned char 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 == 125);
23
- CHECK(result == 255);
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, a2, a3, a4;
33
-
34
- a1 = *(unsigned char *)avals[0];
35
- a2 = *(unsigned char *)avals[1];
36
- a3 = *(unsigned char *)avals[2];
37
- a4 = *(unsigned char *)avals[3];
38
-
39
- *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
40
-
41
- }
42
-
43
- typedef unsigned char (*test_type)(unsigned char, unsigned char,
44
- unsigned char, unsigned char);
45
-
46
- void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals,
47
- void *data __UNUSED__)
48
- {
49
- printf("%d %d %d %d\n", *(unsigned char *)avals[0],
50
- *(unsigned char *)avals[1], *(unsigned char *)avals[2],
51
- *(unsigned char *)avals[3]);
52
- }
53
- int main (void)
54
- {
55
- ffi_cif cif;
56
- void *code;
57
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
58
- void * args_dbl[5];
59
- ffi_type * cl_arg_types[5];
60
- ffi_arg res_call;
61
- unsigned char a, b, c, d, res_closure;
62
-
63
- a = 1;
64
- b = 2;
65
- c = 127;
66
- d = 125;
67
-
68
- args_dbl[0] = &a;
69
- args_dbl[1] = &b;
70
- args_dbl[2] = &c;
71
- args_dbl[3] = &d;
72
- args_dbl[4] = NULL;
73
-
74
- cl_arg_types[0] = &ffi_type_uchar;
75
- cl_arg_types[1] = &ffi_type_uchar;
76
- cl_arg_types[2] = &ffi_type_uchar;
77
- cl_arg_types[3] = &ffi_type_uchar;
78
- cl_arg_types[4] = NULL;
79
-
80
- /* Initialize the cif */
81
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
82
- &ffi_type_uchar, cl_arg_types) == FFI_OK);
83
-
84
- ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
85
- /* { dg-output "1 2 127 125: 255" } */
86
- printf("res: %d\n", (unsigned char)res_call);
87
- /* { dg-output "\nres: 255" } */
88
- CHECK((unsigned char)res_call == 255);
89
-
90
- CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK);
91
-
92
- res_closure = (*((test_type)code))(1, 2, 127, 125);
93
- /* { dg-output "\n1 2 127 125: 255" } */
94
- printf("res: %d\n", res_closure);
95
- /* { dg-output "\nres: 255" } */
96
- CHECK(res_closure == 255);
97
-
98
- exit(0);
99
- }
@@ -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(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
- }