ffi 1.0.0 → 1.17.1

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 (694) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +4 -0
  3. data/CHANGELOG.md +465 -0
  4. data/COPYING +49 -0
  5. data/Gemfile +21 -0
  6. data/LICENSE +21 -11
  7. data/LICENSE.SPECS +22 -0
  8. data/README.md +137 -0
  9. data/Rakefile +165 -148
  10. data/ext/ffi_c/AbstractMemory.c +716 -97
  11. data/ext/ffi_c/AbstractMemory.h +38 -17
  12. data/ext/ffi_c/ArrayType.c +102 -33
  13. data/ext/ffi_c/ArrayType.h +20 -18
  14. data/ext/ffi_c/Buffer.c +229 -54
  15. data/ext/ffi_c/Call.c +211 -100
  16. data/ext/ffi_c/Call.h +46 -28
  17. data/ext/ffi_c/ClosurePool.c +110 -81
  18. data/ext/ffi_c/ClosurePool.h +31 -1
  19. data/ext/ffi_c/DynamicLibrary.c +216 -54
  20. data/ext/ffi_c/DynamicLibrary.h +76 -0
  21. data/ext/ffi_c/Function.c +527 -164
  22. data/ext/ffi_c/Function.h +24 -20
  23. data/ext/ffi_c/FunctionInfo.c +151 -50
  24. data/ext/ffi_c/LastError.c +112 -28
  25. data/ext/ffi_c/LastError.h +29 -0
  26. data/ext/ffi_c/LongDouble.c +65 -0
  27. data/ext/ffi_c/LongDouble.h +47 -0
  28. data/ext/ffi_c/MappedType.c +107 -42
  29. data/ext/ffi_c/MappedType.h +20 -20
  30. data/ext/ffi_c/MemoryPointer.c +108 -46
  31. data/ext/ffi_c/MemoryPointer.h +33 -4
  32. data/ext/ffi_c/MethodHandle.c +71 -67
  33. data/ext/ffi_c/MethodHandle.h +26 -23
  34. data/ext/ffi_c/Platform.c +42 -25
  35. data/ext/ffi_c/Platform.h +32 -3
  36. data/ext/ffi_c/Pointer.c +324 -51
  37. data/ext/ffi_c/Pointer.h +29 -18
  38. data/ext/ffi_c/Struct.c +434 -161
  39. data/ext/ffi_c/Struct.h +47 -27
  40. data/ext/ffi_c/StructByValue.c +74 -37
  41. data/ext/ffi_c/StructByValue.h +20 -18
  42. data/ext/ffi_c/StructLayout.c +358 -87
  43. data/ext/ffi_c/Thread.c +129 -0
  44. data/ext/ffi_c/Thread.h +76 -0
  45. data/ext/ffi_c/Type.c +241 -76
  46. data/ext/ffi_c/Type.h +27 -11
  47. data/ext/ffi_c/Types.c +54 -34
  48. data/ext/ffi_c/Types.h +24 -24
  49. data/ext/ffi_c/Variadic.c +151 -55
  50. data/ext/ffi_c/compat.h +48 -38
  51. data/ext/ffi_c/extconf.rb +106 -34
  52. data/ext/ffi_c/ffi.c +35 -26
  53. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  54. data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
  55. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
  56. data/ext/ffi_c/libffi/.appveyor.yml +84 -0
  57. data/ext/ffi_c/libffi/.ci/ar-lib +270 -0
  58. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +58 -0
  59. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
  60. data/ext/ffi_c/libffi/.ci/build-in-container.sh +10 -0
  61. data/ext/ffi_c/libffi/.ci/build.sh +124 -0
  62. data/ext/ffi_c/libffi/.ci/compile +351 -0
  63. data/ext/ffi_c/libffi/.ci/install.sh +78 -0
  64. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +58 -0
  65. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +60 -0
  66. data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
  67. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +58 -0
  68. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +58 -0
  69. data/ext/ffi_c/libffi/.ci/site.exp +29 -0
  70. data/ext/ffi_c/libffi/.ci/wine-sim.exp +55 -0
  71. data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
  72. data/ext/ffi_c/libffi/.gitattributes +4 -0
  73. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  74. data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
  75. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
  76. data/ext/ffi_c/libffi/.gitignore +46 -0
  77. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.old} +6528 -3180
  78. data/ext/ffi_c/libffi/LICENSE +3 -3
  79. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +353 -0
  80. data/ext/ffi_c/libffi/Makefile.am +132 -162
  81. data/ext/ffi_c/libffi/Makefile.in +1339 -1003
  82. data/ext/ffi_c/libffi/README.md +531 -0
  83. data/ext/ffi_c/libffi/acinclude.m4 +289 -4
  84. data/ext/ffi_c/libffi/autogen.sh +2 -0
  85. data/ext/ffi_c/libffi/compile +227 -21
  86. data/ext/ffi_c/libffi/config.guess +1034 -778
  87. data/ext/ffi_c/libffi/config.sub +1394 -1204
  88. data/ext/ffi_c/libffi/configure +14327 -8503
  89. data/ext/ffi_c/libffi/configure.ac +294 -247
  90. data/ext/ffi_c/libffi/configure.host +330 -4
  91. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  92. data/ext/ffi_c/libffi/doc/Makefile.in +818 -0
  93. data/ext/ffi_c/libffi/doc/libffi.texi +572 -67
  94. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  95. data/ext/ffi_c/libffi/fficonfig.h.in +53 -46
  96. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +312 -0
  97. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  98. data/ext/ffi_c/libffi/include/Makefile.in +219 -79
  99. data/ext/ffi_c/libffi/include/ffi.h.in +230 -111
  100. data/ext/ffi_c/libffi/include/ffi_cfi.h +76 -0
  101. data/ext/ffi_c/libffi/include/ffi_common.h +78 -16
  102. data/ext/ffi_c/libffi/include/tramp.h +45 -0
  103. data/ext/ffi_c/libffi/install-sh +402 -184
  104. data/ext/ffi_c/libffi/libffi.map.in +81 -0
  105. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  106. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +997 -0
  107. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  108. data/ext/ffi_c/libffi/libtool-version +2 -2
  109. data/ext/ffi_c/libffi/ltmain.sh +5752 -2722
  110. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  111. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +50 -0
  112. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +198 -0
  113. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +158 -0
  114. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +53 -0
  115. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +119 -0
  116. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +49 -0
  117. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
  118. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +267 -0
  119. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
  120. data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
  121. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  122. data/ext/ffi_c/libffi/make_sunver.pl +333 -0
  123. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  124. data/ext/ffi_c/libffi/man/Makefile.in +174 -57
  125. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  126. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  127. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  128. data/ext/ffi_c/libffi/missing +155 -300
  129. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
  130. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
  131. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
  132. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
  133. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
  134. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +219 -0
  135. data/ext/ffi_c/libffi/msvcc.sh +353 -0
  136. data/ext/ffi_c/libffi/src/aarch64/ffi.c +1142 -0
  137. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +97 -0
  138. data/ext/ffi_c/libffi/src/aarch64/internal.h +100 -0
  139. data/ext/ffi_c/libffi/src/aarch64/sysv.S +695 -0
  140. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -0
  141. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  142. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  143. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  144. data/ext/ffi_c/libffi/src/alpha/osf.S +162 -246
  145. data/ext/ffi_c/libffi/src/arc/arcompact.S +210 -0
  146. data/ext/ffi_c/libffi/src/arc/ffi.c +443 -0
  147. data/ext/ffi_c/libffi/src/arc/ffitarget.h +67 -0
  148. data/ext/ffi_c/libffi/src/arm/ffi.c +806 -194
  149. data/ext/ffi_c/libffi/src/arm/ffitarget.h +43 -3
  150. data/ext/ffi_c/libffi/src/arm/internal.h +17 -0
  151. data/ext/ffi_c/libffi/src/arm/sysv.S +381 -231
  152. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
  153. data/ext/ffi_c/libffi/src/avr32/ffi.c +4 -2
  154. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +8 -3
  155. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  156. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  157. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  158. data/ext/ffi_c/libffi/src/closures.c +574 -100
  159. data/ext/ffi_c/libffi/src/cris/ffi.c +11 -8
  160. data/ext/ffi_c/libffi/src/cris/ffitarget.h +8 -3
  161. data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
  162. data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
  163. data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
  164. data/ext/ffi_c/libffi/src/debug.c +8 -3
  165. data/ext/ffi_c/libffi/src/dlmalloc.c +89 -17
  166. data/ext/ffi_c/libffi/src/frv/ffi.c +2 -2
  167. data/ext/ffi_c/libffi/src/frv/ffitarget.h +8 -7
  168. data/ext/ffi_c/libffi/src/ia64/ffi.c +48 -12
  169. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +10 -4
  170. data/ext/ffi_c/libffi/src/ia64/unix.S +28 -3
  171. data/ext/ffi_c/libffi/src/java_raw_api.c +24 -6
  172. data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
  173. data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
  174. data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
  175. data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
  176. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
  177. data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
  178. data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
  179. data/ext/ffi_c/libffi/src/m32r/ffi.c +32 -15
  180. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +8 -3
  181. data/ext/ffi_c/libffi/src/m68k/ffi.c +97 -13
  182. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +8 -3
  183. data/ext/ffi_c/libffi/src/m68k/sysv.S +148 -25
  184. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  185. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  186. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  187. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  188. data/ext/ffi_c/libffi/src/metag/ffitarget.h +53 -0
  189. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  190. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  191. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  192. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  193. data/ext/ffi_c/libffi/src/mips/ffi.c +392 -104
  194. data/ext/ffi_c/libffi/src/mips/ffitarget.h +40 -24
  195. data/ext/ffi_c/libffi/src/mips/n32.S +325 -93
  196. data/ext/ffi_c/libffi/src/mips/o32.S +211 -31
  197. data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
  198. data/ext/ffi_c/libffi/src/moxie/ffi.c +310 -0
  199. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  200. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  201. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  202. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  203. data/ext/ffi_c/libffi/src/or1k/ffi.c +341 -0
  204. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  205. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  206. data/ext/ffi_c/libffi/src/pa/ffi.c +68 -111
  207. data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
  208. data/ext/ffi_c/libffi/src/pa/ffitarget.h +34 -17
  209. data/ext/ffi_c/libffi/src/pa/hpux32.S +87 -38
  210. data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
  211. data/ext/ffi_c/libffi/src/pa/linux.S +109 -39
  212. data/ext/ffi_c/libffi/src/powerpc/aix.S +250 -8
  213. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +255 -4
  214. data/ext/ffi_c/libffi/src/powerpc/asm.h +3 -3
  215. data/ext/ffi_c/libffi/src/powerpc/darwin.S +211 -78
  216. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +356 -102
  217. data/ext/ffi_c/libffi/src/powerpc/ffi.c +108 -1375
  218. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +746 -210
  219. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1153 -0
  220. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +105 -0
  221. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  222. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +126 -48
  223. data/ext/ffi_c/libffi/src/powerpc/linux64.S +191 -85
  224. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +438 -108
  225. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  226. data/ext/ffi_c/libffi/src/powerpc/sysv.S +73 -119
  227. data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
  228. data/ext/ffi_c/libffi/src/prep_cif.c +141 -32
  229. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  230. data/ext/ffi_c/libffi/src/riscv/ffi.c +514 -0
  231. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
  232. data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
  233. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  234. data/ext/ffi_c/libffi/src/s390/ffitarget.h +13 -3
  235. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  236. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  237. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  238. data/ext/ffi_c/libffi/src/sh/ffitarget.h +8 -3
  239. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  240. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +8 -3
  241. data/ext/ffi_c/libffi/src/sparc/ffi.c +334 -491
  242. data/ext/ffi_c/libffi/src/sparc/ffi64.c +630 -0
  243. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -5
  244. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  245. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  246. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  247. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  248. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  249. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  250. data/ext/ffi_c/libffi/src/tramp.c +716 -0
  251. data/ext/ffi_c/libffi/src/types.c +48 -19
  252. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  253. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  254. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  255. data/ext/ffi_c/libffi/src/wasm32/ffi.c +947 -0
  256. data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
  257. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  258. data/ext/ffi_c/libffi/src/x86/ffi.c +690 -540
  259. data/ext/ffi_c/libffi/src/x86/ffi64.c +450 -126
  260. data/ext/ffi_c/libffi/src/x86/ffitarget.h +86 -42
  261. data/ext/ffi_c/libffi/src/x86/ffiw64.c +361 -0
  262. data/ext/ffi_c/libffi/src/x86/internal.h +43 -0
  263. data/ext/ffi_c/libffi/src/x86/internal64.h +36 -0
  264. data/ext/ffi_c/libffi/src/x86/sysv.S +1199 -381
  265. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +998 -0
  266. data/ext/ffi_c/libffi/src/x86/unix64.S +587 -298
  267. data/ext/ffi_c/libffi/src/x86/win64.S +251 -457
  268. data/ext/ffi_c/libffi/src/x86/win64_intel.S +238 -0
  269. data/ext/ffi_c/libffi/src/xtensa/ffi.c +306 -0
  270. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +57 -0
  271. data/ext/ffi_c/libffi/src/xtensa/sysv.S +268 -0
  272. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  273. data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -73
  274. data/ext/ffi_c/libffi/testsuite/Makefile.in +251 -117
  275. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
  276. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
  277. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
  278. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
  279. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
  280. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
  281. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +682 -0
  282. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +22 -2
  283. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +63 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1746 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +747 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +28 -10
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +4 -3
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +88 -42
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +15 -12
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +110 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +6 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +9 -10
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  324. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  326. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  327. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  328. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +63 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +78 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +134 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +134 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +140 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +67 -0
  350. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn0.c +3 -2
  351. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn1.c +2 -0
  352. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn2.c +2 -0
  353. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn3.c +21 -1
  354. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn4.c +2 -0
  355. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn5.c +2 -0
  356. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn6.c +2 -0
  357. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_loc_fn0.c +7 -6
  358. data/ext/ffi_c/libffi/testsuite/{libffi.call/closure_stdcall.c → libffi.closures/closure_simple.c} +13 -16
  359. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_12byte.c +22 -4
  360. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_16byte.c +26 -4
  361. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_18byte.c +28 -4
  362. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_19byte.c +33 -4
  363. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_1_1byte.c +8 -4
  364. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte.c +23 -5
  365. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte1.c +25 -5
  366. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_24byte.c +40 -8
  367. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_2byte.c +17 -4
  368. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3_1byte.c +23 -4
  369. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte1.c +17 -4
  370. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte2.c +17 -4
  371. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +113 -0
  372. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4_1byte.c +26 -4
  373. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4byte.c +17 -4
  374. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5_1_byte.c +33 -5
  375. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5byte.c +23 -5
  376. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_64byte.c +29 -5
  377. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6_1_byte.c +32 -5
  378. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6byte.c +28 -6
  379. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7_1_byte.c +43 -5
  380. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7byte.c +29 -5
  381. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_8byte.c +18 -4
  382. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte1.c +18 -5
  383. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte2.c +18 -6
  384. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_double.c +23 -5
  385. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_float.c +23 -5
  386. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble.c +24 -5
  387. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split.c +44 -31
  388. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split2.c +44 -9
  389. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_pointer.c +23 -5
  390. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint16.c +22 -5
  391. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint32.c +22 -7
  392. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint64.c +23 -5
  393. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint16.c +22 -5
  394. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint32.c +23 -5
  395. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint64.c +24 -5
  396. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_dbls_struct.c +7 -5
  397. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double_va.c +21 -9
  398. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_float.c +4 -0
  399. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble.c +13 -3
  400. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble_va.c +34 -11
  401. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +70 -0
  402. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +55 -0
  403. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_schar.c +5 -1
  404. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshort.c +6 -1
  405. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshortchar.c +9 -1
  406. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_uchar.c +9 -1
  407. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushort.c +6 -2
  408. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushortchar.c +9 -1
  409. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer.c +7 -2
  410. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer_stack.c +22 -10
  411. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_schar.c +3 -0
  412. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sint.c +2 -0
  413. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sshort.c +3 -0
  414. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +125 -0
  415. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar.c +3 -0
  416. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint.c +4 -0
  417. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +49 -0
  418. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +49 -0
  419. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulonglong.c +8 -5
  420. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort.c +3 -0
  421. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/err_bad_abi.c +2 -3
  422. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -0
  423. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/huge_struct.c +57 -56
  424. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct.c +38 -15
  425. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct1.c +9 -9
  426. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct10.c +19 -6
  427. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +137 -0
  428. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
  429. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
  430. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct2.c +15 -6
  431. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct3.c +15 -6
  432. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct4.c +14 -5
  433. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct5.c +14 -5
  434. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct6.c +17 -6
  435. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct7.c +14 -5
  436. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct8.c +17 -6
  437. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct9.c +17 -6
  438. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
  439. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
  440. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
  441. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large.c +7 -7
  442. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large2.c +7 -7
  443. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium.c +6 -6
  444. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium2.c +7 -6
  445. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/testclosure.c +8 -3
  446. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest.cc +4 -10
  447. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest_ffi_call.cc +4 -2
  448. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  449. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  450. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  451. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  452. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  453. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  454. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  455. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  456. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  457. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  458. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  459. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  460. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  461. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  462. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  463. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  464. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -10
  465. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  466. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  467. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  468. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  469. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  470. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  471. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  472. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  473. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  474. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  475. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  476. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  477. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  478. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  479. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  480. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  481. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  482. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  483. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  484. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  485. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  486. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  487. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  488. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  489. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  490. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  491. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  492. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  493. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  494. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  495. data/ext/ffi_c/libffi.bsd.mk +14 -8
  496. data/ext/ffi_c/libffi.darwin.mk +56 -26
  497. data/ext/ffi_c/libffi.gnu.mk +9 -6
  498. data/ext/ffi_c/libffi.mk +13 -8
  499. data/ext/ffi_c/libffi.vc.mk +26 -0
  500. data/ext/ffi_c/libffi.vc64.mk +26 -0
  501. data/ext/ffi_c/rbffi.h +34 -6
  502. data/ext/ffi_c/{endian.h → rbffi_endian.h} +21 -2
  503. data/ffi.gemspec +42 -0
  504. data/lib/ffi/abstract_memory.rb +44 -0
  505. data/lib/ffi/autopointer.rb +111 -52
  506. data/lib/ffi/compat.rb +43 -0
  507. data/lib/ffi/data_converter.rb +67 -0
  508. data/lib/ffi/dynamic_library.rb +118 -0
  509. data/lib/ffi/enum.rb +203 -22
  510. data/lib/ffi/errno.rb +27 -12
  511. data/lib/ffi/ffi.rb +88 -11
  512. data/lib/ffi/function.rb +71 -0
  513. data/lib/ffi/io.rb +35 -14
  514. data/lib/ffi/library.rb +382 -96
  515. data/lib/ffi/library_path.rb +109 -0
  516. data/lib/ffi/managedstruct.rb +64 -35
  517. data/lib/ffi/memorypointer.rb +1 -33
  518. data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
  519. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  520. data/lib/ffi/platform/aarch64-freebsd12/types.conf +181 -0
  521. data/lib/ffi/platform/aarch64-linux/types.conf +175 -0
  522. data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
  523. data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
  524. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  525. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  526. data/lib/ffi/platform/arm-linux/types.conf +132 -0
  527. data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
  528. data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
  529. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  530. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  531. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  532. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  533. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  534. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  535. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  536. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  537. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  538. data/lib/ffi/platform/i386-windows/types.conf +52 -0
  539. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  540. data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
  541. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  542. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  543. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  544. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  545. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  546. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  547. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  548. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  549. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  550. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  551. data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
  552. data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
  553. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  554. data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
  555. data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
  556. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  557. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  558. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  559. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  560. data/lib/ffi/platform/sparcv9-linux/types.conf +102 -0
  561. data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
  562. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  563. data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
  564. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  565. data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
  566. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
  567. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  568. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  569. data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
  570. data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
  571. data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
  572. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  573. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  574. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  575. data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
  576. data/lib/ffi/platform.rb +110 -34
  577. data/lib/ffi/pointer.rb +117 -90
  578. data/lib/ffi/struct.rb +101 -70
  579. data/lib/ffi/struct_by_reference.rb +72 -0
  580. data/lib/ffi/struct_layout.rb +96 -0
  581. data/lib/ffi/struct_layout_builder.rb +90 -21
  582. data/lib/ffi/tools/const_generator.rb +86 -31
  583. data/lib/ffi/tools/generator.rb +49 -2
  584. data/lib/ffi/tools/generator_task.rb +13 -16
  585. data/lib/ffi/tools/struct_generator.rb +6 -5
  586. data/lib/ffi/tools/types_generator.rb +25 -11
  587. data/lib/ffi/types.rb +105 -36
  588. data/lib/ffi/union.rb +23 -12
  589. data/lib/ffi/variadic.rb +44 -29
  590. data/lib/ffi/version.rb +3 -0
  591. data/lib/ffi.rb +25 -9
  592. data/rakelib/ffi_gem_helper.rb +65 -0
  593. data/samples/getlogin.rb +8 -0
  594. data/samples/getpid.rb +8 -0
  595. data/samples/gettimeofday.rb +18 -0
  596. data/samples/hello.rb +8 -0
  597. data/samples/hello_ractor.rb +11 -0
  598. data/samples/inotify.rb +60 -0
  599. data/samples/pty.rb +75 -0
  600. data/samples/qsort.rb +20 -0
  601. data/samples/qsort_ractor.rb +28 -0
  602. data/sig/ffi/abstract_memory.rbs +165 -0
  603. data/sig/ffi/auto_pointer.rbs +26 -0
  604. data/sig/ffi/buffer.rbs +18 -0
  605. data/sig/ffi/data_converter.rbs +10 -0
  606. data/sig/ffi/dynamic_library.rbs +9 -0
  607. data/sig/ffi/enum.rbs +38 -0
  608. data/sig/ffi/function.rbs +39 -0
  609. data/sig/ffi/library.rbs +42 -0
  610. data/sig/ffi/native_type.rbs +86 -0
  611. data/sig/ffi/pointer.rbs +42 -0
  612. data/sig/ffi/struct.rbs +76 -0
  613. data/sig/ffi/struct_by_reference.rbs +11 -0
  614. data/sig/ffi/struct_by_value.rbs +7 -0
  615. data/sig/ffi/struct_layout.rbs +9 -0
  616. data/sig/ffi/struct_layout_builder.rbs +5 -0
  617. data/sig/ffi/type.rbs +39 -0
  618. data/sig/ffi.rbs +26 -0
  619. data.tar.gz.sig +0 -0
  620. metadata +547 -248
  621. metadata.gz.sig +0 -0
  622. data/History.txt +0 -109
  623. data/README.rdoc +0 -70
  624. data/ext/ffi_c/DataConverter.c +0 -62
  625. data/ext/ffi_c/StructByReference.c +0 -150
  626. data/ext/ffi_c/StructByReference.h +0 -50
  627. data/ext/ffi_c/libffi/ChangeLog.libffi +0 -658
  628. data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
  629. data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
  630. data/ext/ffi_c/libffi/README +0 -306
  631. data/ext/ffi_c/libffi/aclocal.m4 +0 -8998
  632. data/ext/ffi_c/libffi/depcomp +0 -584
  633. data/ext/ffi_c/libffi/doc/libffi.info +0 -533
  634. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  635. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7360
  636. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -368
  637. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  638. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  639. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -92
  640. data/ext/ffi_c/libffi/mdate-sh +0 -201
  641. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  642. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  643. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  644. data/ext/ffi_c/libffi/src/x86/win32.S +0 -877
  645. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  646. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  647. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  648. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  649. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  650. data/gen/Rakefile +0 -14
  651. data/spec/ffi/async_callback_spec.rb +0 -23
  652. data/spec/ffi/bool_spec.rb +0 -24
  653. data/spec/ffi/buffer_spec.rb +0 -202
  654. data/spec/ffi/callback_spec.rb +0 -653
  655. data/spec/ffi/custom_param_type.rb +0 -31
  656. data/spec/ffi/custom_type_spec.rb +0 -73
  657. data/spec/ffi/enum_spec.rb +0 -183
  658. data/spec/ffi/errno_spec.rb +0 -13
  659. data/spec/ffi/ffi_spec.rb +0 -24
  660. data/spec/ffi/function_spec.rb +0 -73
  661. data/spec/ffi/library_spec.rb +0 -174
  662. data/spec/ffi/managed_struct_spec.rb +0 -56
  663. data/spec/ffi/number_spec.rb +0 -231
  664. data/spec/ffi/pointer_spec.rb +0 -210
  665. data/spec/ffi/rbx/attach_function_spec.rb +0 -28
  666. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -109
  667. data/spec/ffi/rbx/spec_helper.rb +0 -1
  668. data/spec/ffi/rbx/struct_spec.rb +0 -13
  669. data/spec/ffi/spec_helper.rb +0 -21
  670. data/spec/ffi/string_spec.rb +0 -103
  671. data/spec/ffi/strptr_spec.rb +0 -36
  672. data/spec/ffi/struct_callback_spec.rb +0 -64
  673. data/spec/ffi/struct_initialize_spec.rb +0 -30
  674. data/spec/ffi/struct_packed_spec.rb +0 -46
  675. data/spec/ffi/struct_spec.rb +0 -638
  676. data/spec/ffi/typedef_spec.rb +0 -62
  677. data/spec/ffi/union_spec.rb +0 -60
  678. data/spec/ffi/variadic_spec.rb +0 -84
  679. data/spec/spec.opts +0 -4
  680. data/tasks/ann.rake +0 -80
  681. data/tasks/extension.rake +0 -25
  682. data/tasks/gem.rake +0 -200
  683. data/tasks/git.rake +0 -41
  684. data/tasks/notes.rake +0 -27
  685. data/tasks/post_load.rake +0 -34
  686. data/tasks/rdoc.rake +0 -50
  687. data/tasks/rubyforge.rake +0 -55
  688. data/tasks/setup.rb +0 -301
  689. data/tasks/spec.rake +0 -54
  690. data/tasks/svn.rake +0 -47
  691. data/tasks/test.rake +0 -40
  692. /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
  693. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double.c +0 -0
  694. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/problem1.c +0 -0
@@ -5,10 +5,8 @@
5
5
  Originator: Blake Chaffin 6/18/2007
6
6
  */
7
7
 
8
- /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
9
8
  /* { dg-do run { xfail strongarm*-*-* } } */
10
- /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */
11
- /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
9
+ /* { dg-options -mlong-double-128 { target powerpc64*-*-linux-gnu* } } */
12
10
 
13
11
  #include "ffitest.h"
14
12
 
@@ -22,7 +20,7 @@ typedef struct cls_struct_align {
22
20
  long double g;
23
21
  } cls_struct_align;
24
22
 
25
- cls_struct_align cls_struct_align_fn(
23
+ static cls_struct_align cls_struct_align_fn(
26
24
  cls_struct_align a1,
27
25
  cls_struct_align a2)
28
26
  {
@@ -42,6 +40,30 @@ cls_struct_align cls_struct_align_fn(
42
40
  a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g,
43
41
  r.a, r.b, r.c, r.d, r.e, r.f, r.g);
44
42
 
43
+ CHECK(a1.a == 1);
44
+ CHECK(a1.b == 2);
45
+ CHECK(a1.c == 3);
46
+ CHECK(a1.d == 4);
47
+ CHECK(a1.e == 5);
48
+ CHECK(a1.f == 6);
49
+ CHECK(a1.g == 7);
50
+
51
+ CHECK(a2.a == 8);
52
+ CHECK(a2.b == 9);
53
+ CHECK(a2.c == 10);
54
+ CHECK(a2.d == 11);
55
+ CHECK(a2.e == 12);
56
+ CHECK(a2.f == 13);
57
+ CHECK(a2.g == 14);
58
+
59
+ CHECK(r.a == 9);
60
+ CHECK(r.b == 11);
61
+ CHECK(r.c == 13);
62
+ CHECK(r.d == 15);
63
+ CHECK(r.e == 17);
64
+ CHECK(r.f == 19);
65
+ CHECK(r.g == 21);
66
+
45
67
  return r;
46
68
  }
47
69
 
@@ -67,15 +89,15 @@ int main (void)
67
89
  ffi_type cls_struct_type;
68
90
  ffi_type* dbl_arg_types[3];
69
91
 
92
+ struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
93
+ struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
94
+ struct cls_struct_align res_dbl;
95
+
70
96
  cls_struct_type.size = 0;
71
97
  cls_struct_type.alignment = 0;
72
98
  cls_struct_type.type = FFI_TYPE_STRUCT;
73
99
  cls_struct_type.elements = cls_struct_fields;
74
100
 
75
- struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
76
- struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
77
- struct cls_struct_align res_dbl;
78
-
79
101
  cls_struct_fields[0] = &ffi_type_longdouble;
80
102
  cls_struct_fields[1] = &ffi_type_longdouble;
81
103
  cls_struct_fields[2] = &ffi_type_longdouble;
@@ -101,6 +123,13 @@ int main (void)
101
123
  printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b,
102
124
  res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g);
103
125
  /* { dg-output "\nres: 9 11 13 15 17 19 21" } */
126
+ CHECK(res_dbl.a == 9);
127
+ CHECK(res_dbl.b == 11);
128
+ CHECK(res_dbl.c == 13);
129
+ CHECK(res_dbl.d == 15);
130
+ CHECK(res_dbl.e == 17);
131
+ CHECK(res_dbl.f == 19);
132
+ CHECK(res_dbl.g == 21);
104
133
 
105
134
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
106
135
 
@@ -109,7 +138,13 @@ int main (void)
109
138
  printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b,
110
139
  res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g);
111
140
  /* { dg-output "\nres: 9 11 13 15 17 19 21" } */
112
-
141
+ CHECK(res_dbl.a == 9);
142
+ CHECK(res_dbl.b == 11);
143
+ CHECK(res_dbl.c == 13);
144
+ CHECK(res_dbl.d == 15);
145
+ CHECK(res_dbl.e == 17);
146
+ CHECK(res_dbl.f == 19);
147
+ CHECK(res_dbl.g == 21);
113
148
  exit(0);
114
149
  }
115
150
 
@@ -13,7 +13,7 @@ typedef struct cls_struct_align {
13
13
  unsigned char c;
14
14
  } cls_struct_align;
15
15
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
16
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
17
  struct cls_struct_align a2)
18
18
  {
19
19
  struct cls_struct_align result;
@@ -28,6 +28,18 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
28
28
  result.a, (uintptr_t)result.b,
29
29
  result.c);
30
30
 
31
+ CHECK(a1.a == 12);
32
+ CHECK(a1.b == (void *)4951);
33
+ CHECK(a1.c == 127);
34
+
35
+ CHECK(a2.a == 1);
36
+ CHECK(a2.b == (void *)9320);
37
+ CHECK(a2.c == 13);
38
+
39
+ CHECK(result.a == 13);
40
+ CHECK(result.b == (void *)14271);
41
+ CHECK(result.c == 140);
42
+
31
43
  return result;
32
44
  }
33
45
 
@@ -54,15 +66,15 @@ int main (void)
54
66
  ffi_type cls_struct_type;
55
67
  ffi_type* dbl_arg_types[5];
56
68
 
69
+ struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
70
+ struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
71
+ struct cls_struct_align res_dbl;
72
+
57
73
  cls_struct_type.size = 0;
58
74
  cls_struct_type.alignment = 0;
59
75
  cls_struct_type.type = FFI_TYPE_STRUCT;
60
76
  cls_struct_type.elements = cls_struct_fields;
61
77
 
62
- struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
63
- struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
64
- struct cls_struct_align res_dbl;
65
-
66
78
  cls_struct_fields[0] = &ffi_type_uchar;
67
79
  cls_struct_fields[1] = &ffi_type_pointer;
68
80
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -83,6 +95,9 @@ int main (void)
83
95
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
84
96
  printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c);
85
97
  /* { dg-output "\nres: 13 14271 140" } */
98
+ CHECK(res_dbl.a == 13);
99
+ CHECK(res_dbl.b == (void *)14271);
100
+ CHECK(res_dbl.c == 140);
86
101
 
87
102
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
88
103
 
@@ -90,6 +105,9 @@ int main (void)
90
105
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
91
106
  printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c);
92
107
  /* { dg-output "\nres: 13 14271 140" } */
108
+ CHECK(res_dbl.a == 13);
109
+ CHECK(res_dbl.b == (void *)14271);
110
+ CHECK(res_dbl.c == 140);
93
111
 
94
112
  exit(0);
95
113
  }
@@ -13,7 +13,7 @@ typedef struct cls_struct_align {
13
13
  unsigned char c;
14
14
  } cls_struct_align;
15
15
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
16
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
17
  struct cls_struct_align a2)
18
18
  {
19
19
  struct cls_struct_align result;
@@ -23,6 +23,17 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
23
23
  result.c = a1.c + a2.c;
24
24
 
25
25
  printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
26
+ CHECK(a1.a == 12);
27
+ CHECK(a1.b == 4951);
28
+ CHECK(a1.c == 127);
29
+
30
+ CHECK(a2.a == 1);
31
+ CHECK(a2.b == 9320);
32
+ CHECK(a2.c == 13);
33
+
34
+ CHECK(result.a == 13);
35
+ CHECK(result.b == 14271);
36
+ CHECK(result.c == 140);
26
37
 
27
38
  return result;
28
39
  }
@@ -50,15 +61,15 @@ int main (void)
50
61
  ffi_type cls_struct_type;
51
62
  ffi_type* dbl_arg_types[5];
52
63
 
64
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
65
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
66
+ struct cls_struct_align res_dbl;
67
+
53
68
  cls_struct_type.size = 0;
54
69
  cls_struct_type.alignment = 0;
55
70
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
71
  cls_struct_type.elements = cls_struct_fields;
57
72
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
73
  cls_struct_fields[0] = &ffi_type_uchar;
63
74
  cls_struct_fields[1] = &ffi_type_sshort;
64
75
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -79,6 +90,9 @@ int main (void)
79
90
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
80
91
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
81
92
  /* { dg-output "\nres: 13 14271 140" } */
93
+ CHECK(res_dbl.a == 13);
94
+ CHECK(res_dbl.b == 14271);
95
+ CHECK(res_dbl.c == 140);
82
96
 
83
97
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
84
98
 
@@ -86,6 +100,9 @@ int main (void)
86
100
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
87
101
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
88
102
  /* { dg-output "\nres: 13 14271 140" } */
103
+ CHECK(res_dbl.a == 13);
104
+ CHECK(res_dbl.b == 14271);
105
+ CHECK(res_dbl.c == 140);
89
106
 
90
107
  exit(0);
91
108
  }
@@ -13,7 +13,7 @@ typedef struct cls_struct_align {
13
13
  unsigned char c;
14
14
  } cls_struct_align;
15
15
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
16
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
17
  struct cls_struct_align a2)
18
18
  {
19
19
  struct cls_struct_align result;
@@ -23,6 +23,17 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
23
23
  result.c = a1.c + a2.c;
24
24
 
25
25
  printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
26
+ CHECK(a1.a == 12);
27
+ CHECK(a1.b == 4951);
28
+ CHECK(a1.c == 127);
29
+
30
+ CHECK(a2.a == 1);
31
+ CHECK(a2.b == 9320);
32
+ CHECK(a2.c == 13);
33
+
34
+ CHECK(result.a == 13);
35
+ CHECK(result.b == 14271);
36
+ CHECK(result.c == 140);
26
37
 
27
38
  return result;
28
39
  }
@@ -50,15 +61,15 @@ int main (void)
50
61
  ffi_type cls_struct_type;
51
62
  ffi_type* dbl_arg_types[5];
52
63
 
64
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
65
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
66
+ struct cls_struct_align res_dbl;
67
+
53
68
  cls_struct_type.size = 0;
54
69
  cls_struct_type.alignment = 0;
55
70
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
71
  cls_struct_type.elements = cls_struct_fields;
57
72
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
73
  cls_struct_fields[0] = &ffi_type_uchar;
63
74
  cls_struct_fields[1] = &ffi_type_sint;
64
75
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -79,13 +90,17 @@ int main (void)
79
90
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
80
91
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
81
92
  /* { dg-output "\nres: 13 14271 140" } */
82
-
93
+ CHECK(res_dbl.a == 13);
94
+ CHECK(res_dbl.b == 14271);
95
+ CHECK(res_dbl.c == 140);
83
96
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
84
97
 
85
98
  res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl);
86
99
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
87
100
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
88
101
  /* { dg-output "\nres: 13 14271 140" } */
89
-
102
+ CHECK(res_dbl.a == 13);
103
+ CHECK(res_dbl.b == 14271);
104
+ CHECK(res_dbl.c == 140);
90
105
  exit(0);
91
106
  }
@@ -5,6 +5,7 @@
5
5
  Originator: <hos@tamanegi.org> 20031203 */
6
6
 
7
7
  /* { dg-do run } */
8
+ /* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */
8
9
  #include "ffitest.h"
9
10
 
10
11
  typedef struct cls_struct_align {
@@ -13,7 +14,7 @@ typedef struct cls_struct_align {
13
14
  unsigned char c;
14
15
  } cls_struct_align;
15
16
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
18
  struct cls_struct_align a2)
18
19
  {
19
20
  struct cls_struct_align result;
@@ -23,6 +24,17 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
23
24
  result.c = a1.c + a2.c;
24
25
 
25
26
  printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
27
+ CHECK(a1.a == 12);
28
+ CHECK(a1.b == 4951);
29
+ CHECK(a1.c == 127);
30
+
31
+ CHECK(a2.a == 1);
32
+ CHECK(a2.b == 9320);
33
+ CHECK(a2.c == 13);
34
+
35
+ CHECK(result.a == 13);
36
+ CHECK(result.b == 14271);
37
+ CHECK(result.c == 140);
26
38
 
27
39
  return result;
28
40
  }
@@ -50,15 +62,15 @@ int main (void)
50
62
  ffi_type cls_struct_type;
51
63
  ffi_type* dbl_arg_types[5];
52
64
 
65
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
66
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
67
+ struct cls_struct_align res_dbl;
68
+
53
69
  cls_struct_type.size = 0;
54
70
  cls_struct_type.alignment = 0;
55
71
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
72
  cls_struct_type.elements = cls_struct_fields;
57
73
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
74
  cls_struct_fields[0] = &ffi_type_uchar;
63
75
  cls_struct_fields[1] = &ffi_type_sint64;
64
76
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -79,6 +91,9 @@ int main (void)
79
91
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
80
92
  printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
81
93
  /* { dg-output "\nres: 13 14271 140" } */
94
+ CHECK(res_dbl.a == 13);
95
+ CHECK(res_dbl.b == 14271);
96
+ CHECK(res_dbl.c == 140);
82
97
 
83
98
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
84
99
 
@@ -86,6 +101,9 @@ int main (void)
86
101
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
87
102
  printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
88
103
  /* { dg-output "\nres: 13 14271 140" } */
104
+ CHECK(res_dbl.a == 13);
105
+ CHECK(res_dbl.b == 14271);
106
+ CHECK(res_dbl.c == 140);
89
107
 
90
108
  exit(0);
91
109
  }
@@ -13,7 +13,7 @@ typedef struct cls_struct_align {
13
13
  unsigned char c;
14
14
  } cls_struct_align;
15
15
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
16
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
17
  struct cls_struct_align a2)
18
18
  {
19
19
  struct cls_struct_align result;
@@ -23,6 +23,17 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
23
23
  result.c = a1.c + a2.c;
24
24
 
25
25
  printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
26
+ CHECK(a1.a == 12);
27
+ CHECK(a1.b == 4951);
28
+ CHECK(a1.c == 127);
29
+
30
+ CHECK(a2.a == 1);
31
+ CHECK(a2.b == 9320);
32
+ CHECK(a2.c == 13);
33
+
34
+ CHECK(result.a == 13);
35
+ CHECK(result.b == 14271);
36
+ CHECK(result.c == 140);
26
37
 
27
38
  return result;
28
39
  }
@@ -50,15 +61,15 @@ int main (void)
50
61
  ffi_type cls_struct_type;
51
62
  ffi_type* dbl_arg_types[5];
52
63
 
64
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
65
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
66
+ struct cls_struct_align res_dbl;
67
+
53
68
  cls_struct_type.size = 0;
54
69
  cls_struct_type.alignment = 0;
55
70
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
71
  cls_struct_type.elements = cls_struct_fields;
57
72
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
73
  cls_struct_fields[0] = &ffi_type_uchar;
63
74
  cls_struct_fields[1] = &ffi_type_ushort;
64
75
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -79,6 +90,9 @@ int main (void)
79
90
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
80
91
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
81
92
  /* { dg-output "\nres: 13 14271 140" } */
93
+ CHECK(res_dbl.a == 13);
94
+ CHECK(res_dbl.b == 14271);
95
+ CHECK(res_dbl.c == 140);
82
96
 
83
97
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
84
98
 
@@ -86,6 +100,9 @@ int main (void)
86
100
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
87
101
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
88
102
  /* { dg-output "\nres: 13 14271 140" } */
103
+ CHECK(res_dbl.a == 13);
104
+ CHECK(res_dbl.b == 14271);
105
+ CHECK(res_dbl.c == 140);
89
106
 
90
107
  exit(0);
91
108
  }
@@ -13,7 +13,7 @@ typedef struct cls_struct_align {
13
13
  unsigned char c;
14
14
  } cls_struct_align;
15
15
 
16
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
16
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
17
  struct cls_struct_align a2)
18
18
  {
19
19
  struct cls_struct_align result;
@@ -24,6 +24,18 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
24
24
 
25
25
  printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
26
26
 
27
+ CHECK(a1.a == 12);
28
+ CHECK(a1.b == 4951);
29
+ CHECK(a1.c == 127);
30
+
31
+ CHECK(a2.a == 1);
32
+ CHECK(a2.b == 9320);
33
+ CHECK(a2.c == 13);
34
+
35
+ CHECK(result.a == 13);
36
+ CHECK(result.b == 14271);
37
+ CHECK(result.c == 140);
38
+
27
39
  return result;
28
40
  }
29
41
 
@@ -50,15 +62,15 @@ int main (void)
50
62
  ffi_type cls_struct_type;
51
63
  ffi_type* dbl_arg_types[5];
52
64
 
65
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
66
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
67
+ struct cls_struct_align res_dbl;
68
+
53
69
  cls_struct_type.size = 0;
54
70
  cls_struct_type.alignment = 0;
55
71
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
72
  cls_struct_type.elements = cls_struct_fields;
57
73
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
74
  cls_struct_fields[0] = &ffi_type_uchar;
63
75
  cls_struct_fields[1] = &ffi_type_uint;
64
76
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -79,6 +91,9 @@ int main (void)
79
91
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
80
92
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
81
93
  /* { dg-output "\nres: 13 14271 140" } */
94
+ CHECK(res_dbl.a == 13);
95
+ CHECK(res_dbl.b == 14271);
96
+ CHECK(res_dbl.c == 140);
82
97
 
83
98
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
84
99
 
@@ -86,6 +101,9 @@ int main (void)
86
101
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
87
102
  printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
88
103
  /* { dg-output "\nres: 13 14271 140" } */
104
+ CHECK(res_dbl.a == 13);
105
+ CHECK(res_dbl.b == 14271);
106
+ CHECK(res_dbl.c == 140);
89
107
 
90
108
  exit(0);
91
109
  }
@@ -6,6 +6,7 @@
6
6
 
7
7
 
8
8
  /* { dg-do run } */
9
+ /* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */
9
10
  #include "ffitest.h"
10
11
 
11
12
  typedef struct cls_struct_align {
@@ -14,7 +15,7 @@ typedef struct cls_struct_align {
14
15
  unsigned char c;
15
16
  } cls_struct_align;
16
17
 
17
- cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
18
+ static cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
18
19
  struct cls_struct_align a2)
19
20
  {
20
21
  struct cls_struct_align result;
@@ -25,6 +26,18 @@ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
25
26
 
26
27
  printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
27
28
 
29
+ CHECK(a1.a == 12);
30
+ CHECK(a1.b == 4951);
31
+ CHECK(a1.c == 127);
32
+
33
+ CHECK(a2.a == 1);
34
+ CHECK(a2.b == 9320);
35
+ CHECK(a2.c == 13);
36
+
37
+ CHECK(result.a == 13);
38
+ CHECK(result.b == 14271);
39
+ CHECK(result.c == 140);
40
+
28
41
  return result;
29
42
  }
30
43
 
@@ -51,15 +64,15 @@ int main (void)
51
64
  ffi_type cls_struct_type;
52
65
  ffi_type* dbl_arg_types[5];
53
66
 
67
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
68
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
69
+ struct cls_struct_align res_dbl;
70
+
54
71
  cls_struct_type.size = 0;
55
72
  cls_struct_type.alignment = 0;
56
73
  cls_struct_type.type = FFI_TYPE_STRUCT;
57
74
  cls_struct_type.elements = cls_struct_fields;
58
75
 
59
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
60
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
61
- struct cls_struct_align res_dbl;
62
-
63
76
  cls_struct_fields[0] = &ffi_type_uchar;
64
77
  cls_struct_fields[1] = &ffi_type_uint64;
65
78
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -80,6 +93,9 @@ int main (void)
80
93
  /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
81
94
  printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
82
95
  /* { dg-output "\nres: 13 14271 140" } */
96
+ CHECK(res_dbl.a == 13);
97
+ CHECK(res_dbl.b == 14271);
98
+ CHECK(res_dbl.c == 140);
83
99
 
84
100
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
85
101
 
@@ -87,6 +103,9 @@ int main (void)
87
103
  /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
88
104
  printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
89
105
  /* { dg-output "\nres: 13 14271 140" } */
106
+ CHECK(res_dbl.a == 13);
107
+ CHECK(res_dbl.b == 14271);
108
+ CHECK(res_dbl.c == 140);
90
109
 
91
110
  exit(0);
92
111
  }
@@ -17,6 +17,8 @@ void
17
17
  closure_test_fn(Dbls p)
18
18
  {
19
19
  printf("%.1f %.1f\n", p.x, p.y);
20
+ CHECK(p.x == 1);
21
+ CHECK(p.y == 2);
20
22
  }
21
23
 
22
24
  void
@@ -37,6 +39,8 @@ int main(int argc __UNUSED__, char** argv __UNUSED__)
37
39
  ffi_type ts1_type;
38
40
  ffi_type* ts1_type_elements[4];
39
41
 
42
+ Dbls arg = { 1.0, 2.0 };
43
+
40
44
  ts1_type.size = 0;
41
45
  ts1_type.alignment = 0;
42
46
  ts1_type.type = FFI_TYPE_STRUCT;
@@ -48,19 +52,17 @@ int main(int argc __UNUSED__, char** argv __UNUSED__)
48
52
 
49
53
  cl_arg_types[0] = &ts1_type;
50
54
 
51
- Dbls arg = { 1.0, 2.0 };
52
-
53
55
  /* Initialize the cif */
54
56
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
55
57
  &ffi_type_void, cl_arg_types) == FFI_OK);
56
58
 
57
59
  CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK);
58
60
 
59
- ((void*(*)(Dbls))(code))(arg);
60
- /* { dg-output "1.0 2.0\n" } */
61
+ ((void (*)(Dbls))(code))(arg);
62
+ /* { dg-output "1.0 2.0" } */
61
63
 
62
64
  closure_test_fn(arg);
63
- /* { dg-output "1.0 2.0\n" } */
65
+ /* { dg-output "\n1.0 2.0" } */
64
66
 
65
67
  return 0;
66
68
  }
@@ -6,16 +6,24 @@
6
6
 
7
7
  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
8
  /* { dg-output "" { xfail avr32*-*-* } } */
9
+ /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
10
+
9
11
  #include "ffitest.h"
10
12
 
13
+ #define BUF_SIZE 50
14
+ static char buffer[BUF_SIZE];
15
+
11
16
  static void
12
- cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp,
17
+ cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp,
13
18
  void** args, void* userdata __UNUSED__)
14
19
  {
15
20
  char* format = *(char**)args[0];
16
21
  double doubleValue = *(double*)args[1];
17
22
 
18
23
  *(ffi_arg*)resp = printf(format, doubleValue);
24
+ CHECK(*(ffi_arg*)resp == 4);
25
+ snprintf(buffer, BUF_SIZE, format, doubleValue);
26
+ CHECK(strncmp(buffer, "7.0\n", 4) == 0);
19
27
  }
20
28
 
21
29
  int main (void)
@@ -34,24 +42,28 @@ int main (void)
34
42
  arg_types[1] = &ffi_type_double;
35
43
  arg_types[2] = NULL;
36
44
 
37
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
38
- arg_types) == FFI_OK);
45
+ /* This printf call is variadic */
46
+ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
47
+ arg_types) == FFI_OK);
39
48
 
40
49
  args[0] = &format;
41
50
  args[1] = &doubleArg;
42
51
  args[2] = NULL;
43
52
 
44
53
  ffi_call(&cif, FFI_FN(printf), &res, args);
45
- // { dg-output "7.0" }
54
+ /* { dg-output "7.0" } */
46
55
  printf("res: %d\n", (int) res);
47
- // { dg-output "\nres: 4" }
56
+ /* { dg-output "\nres: 4" } */
57
+ CHECK(res == 4);
48
58
 
49
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK);
59
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL,
60
+ code) == FFI_OK);
50
61
 
51
- res = ((int(*)(char*, double))(code))(format, doubleArg);
52
- // { dg-output "\n7.0" }
62
+ res = ((int(*)(char*, ...))(code))(format, doubleArg);
63
+ /* { dg-output "\n7.0" } */
53
64
  printf("res: %d\n", (int) res);
54
- // { dg-output "\nres: 4" }
65
+ /* { dg-output "\nres: 4" } */
66
+ CHECK(res == 4);
55
67
 
56
68
  exit(0);
57
69
  }
@@ -14,6 +14,9 @@ static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
14
14
 
15
15
  printf("%g: %g\n",*(float *)args[0],
16
16
  *(float *)resp);
17
+
18
+ CHECK((int)(*(float *)args[0]) == -2122);
19
+ CHECK((int)(*(float *)resp) == -2122);
17
20
  }
18
21
 
19
22
  typedef float (*cls_ret_float)(float);
@@ -38,5 +41,6 @@ int main (void)
38
41
  /* { dg-output "\\-2122.12: \\-2122.12" } */
39
42
  printf("res: %.6f\n", res);
40
43
  /* { dg-output "\nres: \-2122.120117" } */
44
+ CHECK((int)res == -2122);
41
45
  exit(0);
42
46
  }