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
@@ -1,877 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc.
3
- Copyright (c) 2001 John Beniton
4
- Copyright (c) 2002 Ranjit Mathew
5
-
6
-
7
- X86 Foreign Function Interface
8
-
9
- Permission is hereby granted, free of charge, to any person obtaining
10
- a copy of this software and associated documentation files (the
11
- ``Software''), to deal in the Software without restriction, including
12
- without limitation the rights to use, copy, modify, merge, publish,
13
- distribute, sublicense, and/or sell copies of the Software, and to
14
- permit persons to whom the Software is furnished to do so, subject to
15
- the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included
18
- in all copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
21
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27
- DEALINGS IN THE SOFTWARE.
28
- -----------------------------------------------------------------------
29
- */
30
-
31
- #define LIBFFI_ASM
32
- #include <fficonfig.h>
33
- #include <ffi.h>
34
-
35
- .text
36
-
37
- # This assumes we are using gas.
38
- .balign 16
39
- .globl _ffi_call_SYSV
40
- .def _ffi_call_SYSV; .scl 2; .type 32; .endef
41
- _ffi_call_SYSV:
42
- .LFB1:
43
- pushl %ebp
44
- .LCFI0:
45
- movl %esp,%ebp
46
- .LCFI1:
47
- # Make room for all of the new args.
48
- movl 16(%ebp),%ecx
49
- subl %ecx,%esp
50
-
51
- movl %esp,%eax
52
-
53
- # Place all of the ffi_prep_args in position
54
- pushl 12(%ebp)
55
- pushl %eax
56
- call *8(%ebp)
57
-
58
- # Return stack to previous state and call the function
59
- addl $8,%esp
60
-
61
- # FIXME: Align the stack to a 128-bit boundary to avoid
62
- # potential performance hits.
63
-
64
- call *28(%ebp)
65
-
66
- # Load %ecx with the return type code
67
- movl 20(%ebp),%ecx
68
-
69
- # If the return value pointer is NULL, assume no return value.
70
- cmpl $0,24(%ebp)
71
- jne 0f
72
-
73
- # Even if there is no space for the return value, we are
74
- # obliged to handle floating-point values.
75
- cmpl $FFI_TYPE_FLOAT,%ecx
76
- jne .Lnoretval
77
- fstp %st(0)
78
-
79
- jmp .Lepilogue
80
-
81
- 0:
82
- call 1f
83
- # Do not insert anything here between the call and the jump table.
84
- .Lstore_table:
85
- .long .Lnoretval /* FFI_TYPE_VOID */
86
- .long .Lretint /* FFI_TYPE_INT */
87
- .long .Lretfloat /* FFI_TYPE_FLOAT */
88
- .long .Lretdouble /* FFI_TYPE_DOUBLE */
89
- .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */
90
- .long .Lretuint8 /* FFI_TYPE_UINT8 */
91
- .long .Lretsint8 /* FFI_TYPE_SINT8 */
92
- .long .Lretuint16 /* FFI_TYPE_UINT16 */
93
- .long .Lretsint16 /* FFI_TYPE_SINT16 */
94
- .long .Lretint /* FFI_TYPE_UINT32 */
95
- .long .Lretint /* FFI_TYPE_SINT32 */
96
- .long .Lretint64 /* FFI_TYPE_UINT64 */
97
- .long .Lretint64 /* FFI_TYPE_SINT64 */
98
- .long .Lretstruct /* FFI_TYPE_STRUCT */
99
- .long .Lretint /* FFI_TYPE_POINTER */
100
- .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */
101
- .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */
102
- .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */
103
- 1:
104
- add %ecx, %ecx
105
- add %ecx, %ecx
106
- add (%esp),%ecx
107
- add $4, %esp
108
- jmp *(%ecx)
109
-
110
- /* Sign/zero extend as appropriate. */
111
- .Lretsint8:
112
- movsbl %al, %eax
113
- jmp .Lretint
114
-
115
- .Lretsint16:
116
- movswl %ax, %eax
117
- jmp .Lretint
118
-
119
- .Lretuint8:
120
- movzbl %al, %eax
121
- jmp .Lretint
122
-
123
- .Lretuint16:
124
- movzwl %ax, %eax
125
- jmp .Lretint
126
-
127
- .Lretint:
128
- # Load %ecx with the pointer to storage for the return value
129
- movl 24(%ebp),%ecx
130
- movl %eax,0(%ecx)
131
- jmp .Lepilogue
132
-
133
- .Lretfloat:
134
- # Load %ecx with the pointer to storage for the return value
135
- movl 24(%ebp),%ecx
136
- fstps (%ecx)
137
- jmp .Lepilogue
138
-
139
- .Lretdouble:
140
- # Load %ecx with the pointer to storage for the return value
141
- movl 24(%ebp),%ecx
142
- fstpl (%ecx)
143
- jmp .Lepilogue
144
-
145
- .Lretlongdouble:
146
- # Load %ecx with the pointer to storage for the return value
147
- movl 24(%ebp),%ecx
148
- fstpt (%ecx)
149
- jmp .Lepilogue
150
-
151
- .Lretint64:
152
- # Load %ecx with the pointer to storage for the return value
153
- movl 24(%ebp),%ecx
154
- movl %eax,0(%ecx)
155
- movl %edx,4(%ecx)
156
- jmp .Lepilogue
157
-
158
- .Lretstruct1b:
159
- # Load %ecx with the pointer to storage for the return value
160
- movl 24(%ebp),%ecx
161
- movb %al,0(%ecx)
162
- jmp .Lepilogue
163
-
164
- .Lretstruct2b:
165
- # Load %ecx with the pointer to storage for the return value
166
- movl 24(%ebp),%ecx
167
- movw %ax,0(%ecx)
168
- jmp .Lepilogue
169
-
170
- .Lretstruct4b:
171
- # Load %ecx with the pointer to storage for the return value
172
- movl 24(%ebp),%ecx
173
- movl %eax,0(%ecx)
174
- jmp .Lepilogue
175
-
176
- .Lretstruct:
177
- # Nothing to do!
178
-
179
- .Lnoretval:
180
- .Lepilogue:
181
- movl %ebp,%esp
182
- popl %ebp
183
- ret
184
- .ffi_call_SYSV_end:
185
- .LFE1:
186
-
187
- # This assumes we are using gas.
188
- .balign 16
189
- .globl _ffi_call_STDCALL
190
- .def _ffi_call_STDCALL; .scl 2; .type 32; .endef
191
- _ffi_call_STDCALL:
192
- .LFB2:
193
- pushl %ebp
194
- .LCFI2:
195
- movl %esp,%ebp
196
- .LCFI3:
197
- # Make room for all of the new args.
198
- movl 16(%ebp),%ecx
199
- subl %ecx,%esp
200
-
201
- movl %esp,%eax
202
-
203
- # Place all of the ffi_prep_args in position
204
- pushl 12(%ebp)
205
- pushl %eax
206
- call *8(%ebp)
207
-
208
- # Return stack to previous state and call the function
209
- addl $8,%esp
210
-
211
- # FIXME: Align the stack to a 128-bit boundary to avoid
212
- # potential performance hits.
213
-
214
- call *28(%ebp)
215
-
216
- # stdcall functions pop arguments off the stack themselves
217
-
218
- # Load %ecx with the return type code
219
- movl 20(%ebp),%ecx
220
-
221
- # If the return value pointer is NULL, assume no return value.
222
- cmpl $0,24(%ebp)
223
- jne 0f
224
-
225
- # Even if there is no space for the return value, we are
226
- # obliged to handle floating-point values.
227
- cmpl $FFI_TYPE_FLOAT,%ecx
228
- jne .Lsc_noretval
229
- fstp %st(0)
230
-
231
- jmp .Lsc_epilogue
232
-
233
- 0:
234
- call 1f
235
- # Do not insert anything here between the call and the jump table.
236
- .Lsc_store_table:
237
- .long .Lsc_noretval /* FFI_TYPE_VOID */
238
- .long .Lsc_retint /* FFI_TYPE_INT */
239
- .long .Lsc_retfloat /* FFI_TYPE_FLOAT */
240
- .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */
241
- .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */
242
- .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */
243
- .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */
244
- .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */
245
- .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */
246
- .long .Lsc_retint /* FFI_TYPE_UINT32 */
247
- .long .Lsc_retint /* FFI_TYPE_SINT32 */
248
- .long .Lsc_retint64 /* FFI_TYPE_UINT64 */
249
- .long .Lsc_retint64 /* FFI_TYPE_SINT64 */
250
- .long .Lsc_retstruct /* FFI_TYPE_STRUCT */
251
- .long .Lsc_retint /* FFI_TYPE_POINTER */
252
- .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */
253
- .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */
254
- .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */
255
-
256
- 1:
257
- add %ecx, %ecx
258
- add %ecx, %ecx
259
- add (%esp),%ecx
260
- add $4, %esp
261
- jmp *(%ecx)
262
-
263
- /* Sign/zero extend as appropriate. */
264
- .Lsc_retsint8:
265
- movsbl %al, %eax
266
- jmp .Lsc_retint
267
-
268
- .Lsc_retsint16:
269
- movswl %ax, %eax
270
- jmp .Lsc_retint
271
-
272
- .Lsc_retuint8:
273
- movzbl %al, %eax
274
- jmp .Lsc_retint
275
-
276
- .Lsc_retuint16:
277
- movzwl %ax, %eax
278
- jmp .Lsc_retint
279
-
280
- .Lsc_retint:
281
- # Load %ecx with the pointer to storage for the return value
282
- movl 24(%ebp),%ecx
283
- movl %eax,0(%ecx)
284
- jmp .Lsc_epilogue
285
-
286
- .Lsc_retfloat:
287
- # Load %ecx with the pointer to storage for the return value
288
- movl 24(%ebp),%ecx
289
- fstps (%ecx)
290
- jmp .Lsc_epilogue
291
-
292
- .Lsc_retdouble:
293
- # Load %ecx with the pointer to storage for the return value
294
- movl 24(%ebp),%ecx
295
- fstpl (%ecx)
296
- jmp .Lsc_epilogue
297
-
298
- .Lsc_retlongdouble:
299
- # Load %ecx with the pointer to storage for the return value
300
- movl 24(%ebp),%ecx
301
- fstpt (%ecx)
302
- jmp .Lsc_epilogue
303
-
304
- .Lsc_retint64:
305
- # Load %ecx with the pointer to storage for the return value
306
- movl 24(%ebp),%ecx
307
- movl %eax,0(%ecx)
308
- movl %edx,4(%ecx)
309
- jmp .Lsc_epilogue
310
-
311
- .Lsc_retstruct1b:
312
- # Load %ecx with the pointer to storage for the return value
313
- movl 24(%ebp),%ecx
314
- movb %al,0(%ecx)
315
- jmp .Lsc_epilogue
316
-
317
- .Lsc_retstruct2b:
318
- # Load %ecx with the pointer to storage for the return value
319
- movl 24(%ebp),%ecx
320
- movw %ax,0(%ecx)
321
- jmp .Lsc_epilogue
322
-
323
- .Lsc_retstruct4b:
324
- # Load %ecx with the pointer to storage for the return value
325
- movl 24(%ebp),%ecx
326
- movl %eax,0(%ecx)
327
- jmp .Lsc_epilogue
328
-
329
- .Lsc_retstruct:
330
- # Nothing to do!
331
-
332
- .Lsc_noretval:
333
- .Lsc_epilogue:
334
- movl %ebp,%esp
335
- popl %ebp
336
- ret
337
- .ffi_call_STDCALL_end:
338
- .LFE2:
339
-
340
- # This assumes we are using gas.
341
- .balign 16
342
- .globl _ffi_closure_SYSV
343
- .def _ffi_closure_SYSV; .scl 2; .type 32; .endef
344
- _ffi_closure_SYSV:
345
- .LFB3:
346
- pushl %ebp
347
- .LCFI4:
348
- movl %esp, %ebp
349
- .LCFI5:
350
- subl $40, %esp
351
- leal -24(%ebp), %edx
352
- movl %edx, -12(%ebp) /* resp */
353
- leal 8(%ebp), %edx
354
- movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */
355
- leal -12(%ebp), %edx
356
- movl %edx, (%esp) /* &resp */
357
- call _ffi_closure_SYSV_inner
358
- movl -12(%ebp), %ecx
359
-
360
- 0:
361
- call 1f
362
- # Do not insert anything here between the call and the jump table.
363
- .Lcls_store_table:
364
- .long .Lcls_noretval /* FFI_TYPE_VOID */
365
- .long .Lcls_retint /* FFI_TYPE_INT */
366
- .long .Lcls_retfloat /* FFI_TYPE_FLOAT */
367
- .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */
368
- .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */
369
- .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */
370
- .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */
371
- .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */
372
- .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */
373
- .long .Lcls_retint /* FFI_TYPE_UINT32 */
374
- .long .Lcls_retint /* FFI_TYPE_SINT32 */
375
- .long .Lcls_retllong /* FFI_TYPE_UINT64 */
376
- .long .Lcls_retllong /* FFI_TYPE_SINT64 */
377
- .long .Lcls_retstruct /* FFI_TYPE_STRUCT */
378
- .long .Lcls_retint /* FFI_TYPE_POINTER */
379
- .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
380
- .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
381
- .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
382
-
383
- 1:
384
- add %eax, %eax
385
- add %eax, %eax
386
- add (%esp),%eax
387
- add $4, %esp
388
- jmp *(%eax)
389
-
390
- /* Sign/zero extend as appropriate. */
391
- .Lcls_retsint8:
392
- movsbl (%ecx), %eax
393
- jmp .Lcls_epilogue
394
-
395
- .Lcls_retsint16:
396
- movswl (%ecx), %eax
397
- jmp .Lcls_epilogue
398
-
399
- .Lcls_retuint8:
400
- movzbl (%ecx), %eax
401
- jmp .Lcls_epilogue
402
-
403
- .Lcls_retuint16:
404
- movzwl (%ecx), %eax
405
- jmp .Lcls_epilogue
406
-
407
- .Lcls_retint:
408
- movl (%ecx), %eax
409
- jmp .Lcls_epilogue
410
-
411
- .Lcls_retfloat:
412
- flds (%ecx)
413
- jmp .Lcls_epilogue
414
-
415
- .Lcls_retdouble:
416
- fldl (%ecx)
417
- jmp .Lcls_epilogue
418
-
419
- .Lcls_retldouble:
420
- fldt (%ecx)
421
- jmp .Lcls_epilogue
422
-
423
- .Lcls_retllong:
424
- movl (%ecx), %eax
425
- movl 4(%ecx), %edx
426
- jmp .Lcls_epilogue
427
-
428
- .Lcls_retstruct1:
429
- movsbl (%ecx), %eax
430
- jmp .Lcls_epilogue
431
-
432
- .Lcls_retstruct2:
433
- movswl (%ecx), %eax
434
- jmp .Lcls_epilogue
435
-
436
- .Lcls_retstruct4:
437
- movl (%ecx), %eax
438
- jmp .Lcls_epilogue
439
-
440
- .Lcls_retstruct:
441
- # Caller expects us to pop struct return value pointer hidden arg.
442
- movl %ebp, %esp
443
- popl %ebp
444
- ret $0x4
445
-
446
- .Lcls_noretval:
447
- .Lcls_epilogue:
448
- movl %ebp, %esp
449
- popl %ebp
450
- ret
451
- .ffi_closure_SYSV_end:
452
- .LFE3:
453
-
454
- #if !FFI_NO_RAW_API
455
-
456
- #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
457
- #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
458
- #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
459
- #define CIF_FLAGS_OFFSET 20
460
-
461
- # This assumes we are using gas.
462
- .balign 16
463
- .globl _ffi_closure_raw_SYSV
464
- .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef
465
- _ffi_closure_raw_SYSV:
466
- .LFB4:
467
- pushl %ebp
468
- .LCFI6:
469
- movl %esp, %ebp
470
- .LCFI7:
471
- pushl %esi
472
- .LCFI8:
473
- subl $36, %esp
474
- movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
475
- movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
476
- movl %edx, 12(%esp) /* user_data */
477
- leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */
478
- movl %edx, 8(%esp) /* raw_args */
479
- leal -24(%ebp), %edx
480
- movl %edx, 4(%esp) /* &res */
481
- movl %esi, (%esp) /* cif */
482
- call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */
483
- movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */
484
- 0:
485
- call 1f
486
- # Do not insert anything here between the call and the jump table.
487
- .Lrcls_store_table:
488
- .long .Lrcls_noretval /* FFI_TYPE_VOID */
489
- .long .Lrcls_retint /* FFI_TYPE_INT */
490
- .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */
491
- .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */
492
- .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */
493
- .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */
494
- .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */
495
- .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */
496
- .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */
497
- .long .Lrcls_retint /* FFI_TYPE_UINT32 */
498
- .long .Lrcls_retint /* FFI_TYPE_SINT32 */
499
- .long .Lrcls_retllong /* FFI_TYPE_UINT64 */
500
- .long .Lrcls_retllong /* FFI_TYPE_SINT64 */
501
- .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */
502
- .long .Lrcls_retint /* FFI_TYPE_POINTER */
503
- .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
504
- .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
505
- .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
506
- 1:
507
- add %eax, %eax
508
- add %eax, %eax
509
- add (%esp),%eax
510
- add $4, %esp
511
- jmp *(%eax)
512
-
513
- /* Sign/zero extend as appropriate. */
514
- .Lrcls_retsint8:
515
- movsbl -24(%ebp), %eax
516
- jmp .Lrcls_epilogue
517
-
518
- .Lrcls_retsint16:
519
- movswl -24(%ebp), %eax
520
- jmp .Lrcls_epilogue
521
-
522
- .Lrcls_retuint8:
523
- movzbl -24(%ebp), %eax
524
- jmp .Lrcls_epilogue
525
-
526
- .Lrcls_retuint16:
527
- movzwl -24(%ebp), %eax
528
- jmp .Lrcls_epilogue
529
-
530
- .Lrcls_retint:
531
- movl -24(%ebp), %eax
532
- jmp .Lrcls_epilogue
533
-
534
- .Lrcls_retfloat:
535
- flds -24(%ebp)
536
- jmp .Lrcls_epilogue
537
-
538
- .Lrcls_retdouble:
539
- fldl -24(%ebp)
540
- jmp .Lrcls_epilogue
541
-
542
- .Lrcls_retldouble:
543
- fldt -24(%ebp)
544
- jmp .Lrcls_epilogue
545
-
546
- .Lrcls_retllong:
547
- movl -24(%ebp), %eax
548
- movl -20(%ebp), %edx
549
- jmp .Lrcls_epilogue
550
-
551
- .Lrcls_retstruct1:
552
- movsbl -24(%ebp), %eax
553
- jmp .Lrcls_epilogue
554
-
555
- .Lrcls_retstruct2:
556
- movswl -24(%ebp), %eax
557
- jmp .Lrcls_epilogue
558
-
559
- .Lrcls_retstruct4:
560
- movl -24(%ebp), %eax
561
- jmp .Lrcls_epilogue
562
-
563
- .Lrcls_retstruct:
564
- # Nothing to do!
565
-
566
- .Lrcls_noretval:
567
- .Lrcls_epilogue:
568
- addl $36, %esp
569
- popl %esi
570
- popl %ebp
571
- ret
572
- .ffi_closure_raw_SYSV_end:
573
- .LFE4:
574
-
575
- #endif /* !FFI_NO_RAW_API */
576
-
577
- # This assumes we are using gas.
578
- .balign 16
579
- .globl _ffi_closure_STDCALL
580
- .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef
581
- _ffi_closure_STDCALL:
582
- .LFB5:
583
- pushl %ebp
584
- .LCFI9:
585
- movl %esp, %ebp
586
- .LCFI10:
587
- subl $40, %esp
588
- leal -24(%ebp), %edx
589
- movl %edx, -12(%ebp) /* resp */
590
- leal 12(%ebp), %edx /* account for stub return address on stack */
591
- movl %edx, 4(%esp) /* args */
592
- leal -12(%ebp), %edx
593
- movl %edx, (%esp) /* &resp */
594
- call _ffi_closure_SYSV_inner
595
- movl -12(%ebp), %ecx
596
- 0:
597
- call 1f
598
- # Do not insert anything here between the call and the jump table.
599
- .Lscls_store_table:
600
- .long .Lscls_noretval /* FFI_TYPE_VOID */
601
- .long .Lscls_retint /* FFI_TYPE_INT */
602
- .long .Lscls_retfloat /* FFI_TYPE_FLOAT */
603
- .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */
604
- .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */
605
- .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */
606
- .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */
607
- .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */
608
- .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */
609
- .long .Lscls_retint /* FFI_TYPE_UINT32 */
610
- .long .Lscls_retint /* FFI_TYPE_SINT32 */
611
- .long .Lscls_retllong /* FFI_TYPE_UINT64 */
612
- .long .Lscls_retllong /* FFI_TYPE_SINT64 */
613
- .long .Lscls_retstruct /* FFI_TYPE_STRUCT */
614
- .long .Lscls_retint /* FFI_TYPE_POINTER */
615
- .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
616
- .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
617
- .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
618
- 1:
619
- add %eax, %eax
620
- add %eax, %eax
621
- add (%esp),%eax
622
- add $4, %esp
623
- jmp *(%eax)
624
-
625
- /* Sign/zero extend as appropriate. */
626
- .Lscls_retsint8:
627
- movsbl (%ecx), %eax
628
- jmp .Lscls_epilogue
629
-
630
- .Lscls_retsint16:
631
- movswl (%ecx), %eax
632
- jmp .Lscls_epilogue
633
-
634
- .Lscls_retuint8:
635
- movzbl (%ecx), %eax
636
- jmp .Lscls_epilogue
637
-
638
- .Lscls_retuint16:
639
- movzwl (%ecx), %eax
640
- jmp .Lscls_epilogue
641
-
642
- .Lscls_retint:
643
- movl (%ecx), %eax
644
- jmp .Lscls_epilogue
645
-
646
- .Lscls_retfloat:
647
- flds (%ecx)
648
- jmp .Lscls_epilogue
649
-
650
- .Lscls_retdouble:
651
- fldl (%ecx)
652
- jmp .Lscls_epilogue
653
-
654
- .Lscls_retldouble:
655
- fldt (%ecx)
656
- jmp .Lscls_epilogue
657
-
658
- .Lscls_retllong:
659
- movl (%ecx), %eax
660
- movl 4(%ecx), %edx
661
- jmp .Lscls_epilogue
662
-
663
- .Lscls_retstruct1:
664
- movsbl (%ecx), %eax
665
- jmp .Lscls_epilogue
666
-
667
- .Lscls_retstruct2:
668
- movswl (%ecx), %eax
669
- jmp .Lscls_epilogue
670
-
671
- .Lscls_retstruct4:
672
- movl (%ecx), %eax
673
- jmp .Lscls_epilogue
674
-
675
- .Lscls_retstruct:
676
- # Nothing to do!
677
-
678
- .Lscls_noretval:
679
- .Lscls_epilogue:
680
- movl %ebp, %esp
681
- popl %ebp
682
- ret
683
- .ffi_closure_STDCALL_end:
684
- .LFE5:
685
-
686
- .section .eh_frame,"w"
687
- .Lframe1:
688
- .LSCIE1:
689
- .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */
690
- .LASCIE1:
691
- .long 0x0 /* CIE Identifier Tag */
692
- .byte 0x1 /* CIE Version */
693
- #ifdef __PIC__
694
- .ascii "zR\0" /* CIE Augmentation */
695
- #else
696
- .ascii "\0" /* CIE Augmentation */
697
- #endif
698
- .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */
699
- .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */
700
- .byte 0x8 /* CIE RA Column */
701
- #ifdef __PIC__
702
- .byte 0x1 /* .uleb128 0x1; Augmentation size */
703
- .byte 0x1b /* FDE Encoding (pcrel sdata4) */
704
- #endif
705
- .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */
706
- .byte 0x4 /* .uleb128 0x4 */
707
- .byte 0x4 /* .uleb128 0x4 */
708
- .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */
709
- .byte 0x1 /* .uleb128 0x1 */
710
- .align 4
711
- .LECIE1:
712
-
713
- .LSFDE1:
714
- .long .LEFDE1-.LASFDE1 /* FDE Length */
715
- .LASFDE1:
716
- .long .LASFDE1-.Lframe1 /* FDE CIE offset */
717
- #if defined __PIC__ && defined HAVE_AS_X86_PCREL
718
- .long .LFB1-. /* FDE initial location */
719
- #else
720
- .long .LFB1
721
- #endif
722
- .long .LFE1-.LFB1 /* FDE address range */
723
- #ifdef __PIC__
724
- .byte 0x0 /* .uleb128 0x0; Augmentation size */
725
- #endif
726
- /* DW_CFA_xxx CFI instructions go here. */
727
-
728
- .byte 0x4 /* DW_CFA_advance_loc4 */
729
- .long .LCFI0-.LFB1
730
- .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
731
- .byte 0x8 /* .uleb128 0x8 */
732
- .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
733
- .byte 0x2 /* .uleb128 0x2 */
734
-
735
- .byte 0x4 /* DW_CFA_advance_loc4 */
736
- .long .LCFI1-.LCFI0
737
- .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
738
- .byte 0x5 /* .uleb128 0x5 */
739
-
740
- /* End of DW_CFA_xxx CFI instructions. */
741
- .align 4
742
- .LEFDE1:
743
-
744
-
745
- .LSFDE2:
746
- .long .LEFDE2-.LASFDE2 /* FDE Length */
747
- .LASFDE2:
748
- .long .LASFDE2-.Lframe1 /* FDE CIE offset */
749
- #if defined __PIC__ && defined HAVE_AS_X86_PCREL
750
- .long .LFB2-. /* FDE initial location */
751
- #else
752
- .long .LFB2
753
- #endif
754
- .long .LFE2-.LFB2 /* FDE address range */
755
- #ifdef __PIC__
756
- .byte 0x0 /* .uleb128 0x0; Augmentation size */
757
- #endif
758
- /* DW_CFA_xxx CFI instructions go here. */
759
-
760
- .byte 0x4 /* DW_CFA_advance_loc4 */
761
- .long .LCFI2-.LFB2
762
- .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
763
- .byte 0x8 /* .uleb128 0x8 */
764
- .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
765
- .byte 0x2 /* .uleb128 0x2 */
766
-
767
- .byte 0x4 /* DW_CFA_advance_loc4 */
768
- .long .LCFI3-.LCFI2
769
- .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
770
- .byte 0x5 /* .uleb128 0x5 */
771
-
772
- /* End of DW_CFA_xxx CFI instructions. */
773
- .align 4
774
- .LEFDE2:
775
-
776
-
777
- .LSFDE3:
778
- .long .LEFDE3-.LASFDE3 /* FDE Length */
779
- .LASFDE3:
780
- .long .LASFDE3-.Lframe1 /* FDE CIE offset */
781
- #if defined __PIC__ && defined HAVE_AS_X86_PCREL
782
- .long .LFB3-. /* FDE initial location */
783
- #else
784
- .long .LFB3
785
- #endif
786
- .long .LFE3-.LFB3 /* FDE address range */
787
- #ifdef __PIC__
788
- .byte 0x0 /* .uleb128 0x0; Augmentation size */
789
- #endif
790
- /* DW_CFA_xxx CFI instructions go here. */
791
-
792
- .byte 0x4 /* DW_CFA_advance_loc4 */
793
- .long .LCFI4-.LFB3
794
- .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
795
- .byte 0x8 /* .uleb128 0x8 */
796
- .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
797
- .byte 0x2 /* .uleb128 0x2 */
798
-
799
- .byte 0x4 /* DW_CFA_advance_loc4 */
800
- .long .LCFI5-.LCFI4
801
- .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
802
- .byte 0x5 /* .uleb128 0x5 */
803
-
804
- /* End of DW_CFA_xxx CFI instructions. */
805
- .align 4
806
- .LEFDE3:
807
-
808
- #if !FFI_NO_RAW_API
809
-
810
- .LSFDE4:
811
- .long .LEFDE4-.LASFDE4 /* FDE Length */
812
- .LASFDE4:
813
- .long .LASFDE4-.Lframe1 /* FDE CIE offset */
814
- #if defined __PIC__ && defined HAVE_AS_X86_PCREL
815
- .long .LFB4-. /* FDE initial location */
816
- #else
817
- .long .LFB4
818
- #endif
819
- .long .LFE4-.LFB4 /* FDE address range */
820
- #ifdef __PIC__
821
- .byte 0x0 /* .uleb128 0x0; Augmentation size */
822
- #endif
823
- /* DW_CFA_xxx CFI instructions go here. */
824
-
825
- .byte 0x4 /* DW_CFA_advance_loc4 */
826
- .long .LCFI6-.LFB4
827
- .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
828
- .byte 0x8 /* .uleb128 0x8 */
829
- .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
830
- .byte 0x2 /* .uleb128 0x2 */
831
-
832
- .byte 0x4 /* DW_CFA_advance_loc4 */
833
- .long .LCFI7-.LCFI6
834
- .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
835
- .byte 0x5 /* .uleb128 0x5 */
836
-
837
- .byte 0x4 /* DW_CFA_advance_loc4 */
838
- .long .LCFI8-.LCFI7
839
- .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */
840
- .byte 0x3 /* .uleb128 0x3 */
841
-
842
- /* End of DW_CFA_xxx CFI instructions. */
843
- .align 4
844
- .LEFDE4:
845
-
846
- #endif /* !FFI_NO_RAW_API */
847
-
848
- .LSFDE5:
849
- .long .LEFDE5-.LASFDE5 /* FDE Length */
850
- .LASFDE5:
851
- .long .LASFDE5-.Lframe1 /* FDE CIE offset */
852
- #if defined __PIC__ && defined HAVE_AS_X86_PCREL
853
- .long .LFB5-. /* FDE initial location */
854
- #else
855
- .long .LFB5
856
- #endif
857
- .long .LFE5-.LFB5 /* FDE address range */
858
- #ifdef __PIC__
859
- .byte 0x0 /* .uleb128 0x0; Augmentation size */
860
- #endif
861
- /* DW_CFA_xxx CFI instructions go here. */
862
-
863
- .byte 0x4 /* DW_CFA_advance_loc4 */
864
- .long .LCFI9-.LFB5
865
- .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
866
- .byte 0x8 /* .uleb128 0x8 */
867
- .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
868
- .byte 0x2 /* .uleb128 0x2 */
869
-
870
- .byte 0x4 /* DW_CFA_advance_loc4 */
871
- .long .LCFI10-.LCFI9
872
- .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
873
- .byte 0x5 /* .uleb128 0x5 */
874
-
875
- /* End of DW_CFA_xxx CFI instructions. */
876
- .align 4
877
- .LEFDE5: