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
@@ -30,69 +30,183 @@
30
30
 
31
31
  .file "linux64_closure.S"
32
32
 
33
- #ifdef __powerpc64__
33
+ .machine altivec
34
+
35
+ #ifdef POWERPC64
34
36
  FFI_HIDDEN (ffi_closure_LINUX64)
35
- FFI_HIDDEN (.ffi_closure_LINUX64)
36
- .globl ffi_closure_LINUX64, .ffi_closure_LINUX64
37
+ .globl ffi_closure_LINUX64
38
+ .text
39
+ .cfi_startproc
40
+ # if _CALL_ELF == 2
41
+ ffi_closure_LINUX64:
42
+ # ifndef __PCREL__
43
+ addis %r2, %r12, .TOC.-ffi_closure_LINUX64@ha
44
+ addi %r2, %r2, .TOC.-ffi_closure_LINUX64@l
45
+ # endif
46
+ .localentry ffi_closure_LINUX64, . - ffi_closure_LINUX64
47
+ # else
37
48
  .section ".opd","aw"
38
49
  .align 3
39
50
  ffi_closure_LINUX64:
51
+ # ifdef _CALL_LINUX
52
+ .quad .L.ffi_closure_LINUX64,.TOC.@tocbase,0
53
+ .type ffi_closure_LINUX64,@function
54
+ .text
55
+ .L.ffi_closure_LINUX64:
56
+ # else
57
+ FFI_HIDDEN (.ffi_closure_LINUX64)
58
+ .globl .ffi_closure_LINUX64
40
59
  .quad .ffi_closure_LINUX64,.TOC.@tocbase,0
41
60
  .size ffi_closure_LINUX64,24
42
61
  .type .ffi_closure_LINUX64,@function
43
62
  .text
44
63
  .ffi_closure_LINUX64:
45
- .LFB1:
46
- # save general regs into parm save area
47
- std %r3, 48(%r1)
48
- std %r4, 56(%r1)
49
- std %r5, 64(%r1)
50
- std %r6, 72(%r1)
64
+ # endif
65
+ # endif
66
+
67
+ # if _CALL_ELF == 2
68
+ # ifdef __VEC__
69
+ # 32 byte special reg save area + 64 byte parm save area
70
+ # + 128 byte retval area + 13*8 fpr save area + 12*16 vec save area + round to 16
71
+ # define STACKFRAME 528
72
+ # else
73
+ # 32 byte special reg save area + 64 byte parm save area
74
+ # + 64 byte retval area + 13*8 fpr save area + round to 16
75
+ # define STACKFRAME 272
76
+ # endif
77
+ # define PARMSAVE 32
78
+ # define RETVAL PARMSAVE+64
79
+ # else
80
+ # 48 bytes special reg save area + 64 bytes parm save area
81
+ # + 16 bytes retval area + 13*8 bytes fpr save area + round to 16
82
+ # define STACKFRAME 240
83
+ # define PARMSAVE 48
84
+ # define RETVAL PARMSAVE+64
85
+ # endif
86
+
87
+ # if _CALL_ELF == 2
88
+ ld %r12, FFI_TRAMPOLINE_SIZE(%r11) # closure->cif
89
+ mflr %r0
90
+ lwz %r12, 28(%r12) # cif->flags
91
+ mtcrf 0x40, %r12
92
+ addi %r12, %r1, PARMSAVE
93
+ bt 7, 0f
94
+ # Our caller has not allocated a parameter save area.
95
+ # We need to allocate one here and use it to pass gprs to
96
+ # ffi_closure_helper_LINUX64.
97
+ addi %r12, %r1, -STACKFRAME+PARMSAVE
98
+ 0:
99
+ # Save general regs into parm save area
100
+ std %r3, 0(%r12)
101
+ std %r4, 8(%r12)
102
+ std %r5, 16(%r12)
103
+ std %r6, 24(%r12)
104
+ std %r7, 32(%r12)
105
+ std %r8, 40(%r12)
106
+ std %r9, 48(%r12)
107
+ std %r10, 56(%r12)
108
+
109
+ # load up the pointer to the parm save area
110
+ mr %r7, %r12
111
+ # else
112
+ # copy r2 to r11 and load TOC into r2
113
+ mr %r11, %r2
114
+ ld %r2, 16(%r2)
115
+
51
116
  mflr %r0
117
+ # Save general regs into parm save area
118
+ # This is the parameter save area set up by our caller.
119
+ std %r3, PARMSAVE+0(%r1)
120
+ std %r4, PARMSAVE+8(%r1)
121
+ std %r5, PARMSAVE+16(%r1)
122
+ std %r6, PARMSAVE+24(%r1)
123
+ std %r7, PARMSAVE+32(%r1)
124
+ std %r8, PARMSAVE+40(%r1)
125
+ std %r9, PARMSAVE+48(%r1)
126
+ std %r10, PARMSAVE+56(%r1)
52
127
 
53
- std %r7, 80(%r1)
54
- std %r8, 88(%r1)
55
- std %r9, 96(%r1)
56
- std %r10, 104(%r1)
128
+ # load up the pointer to the parm save area
129
+ addi %r7, %r1, PARMSAVE
130
+ # endif
57
131
  std %r0, 16(%r1)
58
132
 
59
- # mandatory 48 bytes special reg save area + 64 bytes parm save area
60
- # + 16 bytes retval area + 13*8 bytes fpr save area + round to 16
61
- stdu %r1, -240(%r1)
62
- .LCFI0:
133
+ # closure->cif
134
+ ld %r3, FFI_TRAMPOLINE_SIZE(%r11)
135
+ # closure->fun
136
+ ld %r4, FFI_TRAMPOLINE_SIZE+8(%r11)
137
+ # closure->user_data
138
+ ld %r5, FFI_TRAMPOLINE_SIZE+16(%r11)
63
139
 
140
+ .Ldoclosure:
64
141
  # next save fpr 1 to fpr 13
65
- stfd %f1, 128+(0*8)(%r1)
66
- stfd %f2, 128+(1*8)(%r1)
67
- stfd %f3, 128+(2*8)(%r1)
68
- stfd %f4, 128+(3*8)(%r1)
69
- stfd %f5, 128+(4*8)(%r1)
70
- stfd %f6, 128+(5*8)(%r1)
71
- stfd %f7, 128+(6*8)(%r1)
72
- stfd %f8, 128+(7*8)(%r1)
73
- stfd %f9, 128+(8*8)(%r1)
74
- stfd %f10, 128+(9*8)(%r1)
75
- stfd %f11, 128+(10*8)(%r1)
76
- stfd %f12, 128+(11*8)(%r1)
77
- stfd %f13, 128+(12*8)(%r1)
78
-
79
- # set up registers for the routine that actually does the work
80
- # get the context pointer from the trampoline
81
- mr %r3, %r11
82
-
83
- # now load up the pointer to the result storage
84
- addi %r4, %r1, 112
85
-
86
- # now load up the pointer to the parameter save area
87
- # in the previous frame
88
- addi %r5, %r1, 240 + 48
89
-
90
- # now load up the pointer to the saved fpr registers */
91
- addi %r6, %r1, 128
142
+ stfd %f1, -104+(0*8)(%r1)
143
+ stfd %f2, -104+(1*8)(%r1)
144
+ stfd %f3, -104+(2*8)(%r1)
145
+ stfd %f4, -104+(3*8)(%r1)
146
+ stfd %f5, -104+(4*8)(%r1)
147
+ stfd %f6, -104+(5*8)(%r1)
148
+ stfd %f7, -104+(6*8)(%r1)
149
+ stfd %f8, -104+(7*8)(%r1)
150
+ stfd %f9, -104+(8*8)(%r1)
151
+ stfd %f10, -104+(9*8)(%r1)
152
+ stfd %f11, -104+(10*8)(%r1)
153
+ stfd %f12, -104+(11*8)(%r1)
154
+ stfd %f13, -104+(12*8)(%r1)
155
+
156
+ # load up the pointer to the saved fpr registers
157
+ addi %r8, %r1, -104
158
+
159
+ # ifdef __VEC__
160
+ # load up the pointer to the saved vector registers
161
+ # 8 bytes padding for 16-byte alignment at -112(%r1)
162
+ addi %r9, %r8, -24
163
+ stvx %v13, 0, %r9
164
+ addi %r9, %r9, -16
165
+ stvx %v12, 0, %r9
166
+ addi %r9, %r9, -16
167
+ stvx %v11, 0, %r9
168
+ addi %r9, %r9, -16
169
+ stvx %v10, 0, %r9
170
+ addi %r9, %r9, -16
171
+ stvx %v9, 0, %r9
172
+ addi %r9, %r9, -16
173
+ stvx %v8, 0, %r9
174
+ addi %r9, %r9, -16
175
+ stvx %v7, 0, %r9
176
+ addi %r9, %r9, -16
177
+ stvx %v6, 0, %r9
178
+ addi %r9, %r9, -16
179
+ stvx %v5, 0, %r9
180
+ addi %r9, %r9, -16
181
+ stvx %v4, 0, %r9
182
+ addi %r9, %r9, -16
183
+ stvx %v3, 0, %r9
184
+ addi %r9, %r9, -16
185
+ stvx %v2, 0, %r9
186
+ # endif
187
+
188
+ # load up the pointer to the result storage
189
+ addi %r6, %r1, -STACKFRAME+RETVAL
190
+
191
+ stdu %r1, -STACKFRAME(%r1)
192
+ .cfi_def_cfa_offset STACKFRAME
193
+ .cfi_offset 65, 16
92
194
 
93
195
  # make the call
196
+ # if defined _CALL_LINUX || _CALL_ELF == 2
197
+ # ifdef __PCREL__
198
+ bl ffi_closure_helper_LINUX64@notoc
199
+ .Lret:
200
+ # else
201
+ bl ffi_closure_helper_LINUX64
202
+ .Lret:
203
+ nop
204
+ # endif
205
+ # else
94
206
  bl .ffi_closure_helper_LINUX64
95
207
  .Lret:
208
+ nop
209
+ # endif
96
210
 
97
211
  # now r3 contains the return type
98
212
  # so use it to look up in a table
@@ -100,10 +214,12 @@ ffi_closure_LINUX64:
100
214
 
101
215
  # look up the proper starting point in table
102
216
  # by using return type as offset
217
+ ld %r0, STACKFRAME+16(%r1)
218
+ cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT
219
+ bge .Lsmall
103
220
  mflr %r4 # move address of .Lret to r4
104
221
  sldi %r3, %r3, 4 # now multiply return type by 16
105
222
  addi %r4, %r4, .Lret_type0 - .Lret
106
- ld %r0, 240+16(%r1)
107
223
  add %r3, %r3, %r4 # add contents of table to table address
108
224
  mtctr %r3
109
225
  bctr # jump to it
@@ -116,121 +232,335 @@ ffi_closure_LINUX64:
116
232
  .Lret_type0:
117
233
  # case FFI_TYPE_VOID
118
234
  mtlr %r0
119
- addi %r1, %r1, 240
235
+ addi %r1, %r1, STACKFRAME
236
+ .cfi_def_cfa_offset 0
120
237
  blr
238
+ .cfi_def_cfa_offset STACKFRAME
121
239
  nop
122
240
  # case FFI_TYPE_INT
123
- lwa %r3, 112+4(%r1)
241
+ # ifdef __LITTLE_ENDIAN__
242
+ lwa %r3, RETVAL+0(%r1)
243
+ # else
244
+ lwa %r3, RETVAL+4(%r1)
245
+ # endif
124
246
  mtlr %r0
125
- addi %r1, %r1, 240
247
+ addi %r1, %r1, STACKFRAME
248
+ .cfi_def_cfa_offset 0
126
249
  blr
250
+ .cfi_def_cfa_offset STACKFRAME
127
251
  # case FFI_TYPE_FLOAT
128
- lfs %f1, 112+0(%r1)
252
+ lfs %f1, RETVAL+0(%r1)
129
253
  mtlr %r0
130
- addi %r1, %r1, 240
254
+ addi %r1, %r1, STACKFRAME
255
+ .cfi_def_cfa_offset 0
131
256
  blr
257
+ .cfi_def_cfa_offset STACKFRAME
132
258
  # case FFI_TYPE_DOUBLE
133
- lfd %f1, 112+0(%r1)
259
+ lfd %f1, RETVAL+0(%r1)
134
260
  mtlr %r0
135
- addi %r1, %r1, 240
261
+ addi %r1, %r1, STACKFRAME
262
+ .cfi_def_cfa_offset 0
136
263
  blr
264
+ .cfi_def_cfa_offset STACKFRAME
137
265
  # case FFI_TYPE_LONGDOUBLE
138
- lfd %f1, 112+0(%r1)
266
+ lfd %f1, RETVAL+0(%r1)
139
267
  mtlr %r0
140
- lfd %f2, 112+8(%r1)
268
+ lfd %f2, RETVAL+8(%r1)
141
269
  b .Lfinish
142
270
  # case FFI_TYPE_UINT8
143
- lbz %r3, 112+7(%r1)
271
+ # ifdef __LITTLE_ENDIAN__
272
+ lbz %r3, RETVAL+0(%r1)
273
+ # else
274
+ lbz %r3, RETVAL+7(%r1)
275
+ # endif
144
276
  mtlr %r0
145
- addi %r1, %r1, 240
277
+ addi %r1, %r1, STACKFRAME
278
+ .cfi_def_cfa_offset 0
146
279
  blr
280
+ .cfi_def_cfa_offset STACKFRAME
147
281
  # case FFI_TYPE_SINT8
148
- lbz %r3, 112+7(%r1)
282
+ # ifdef __LITTLE_ENDIAN__
283
+ lbz %r3, RETVAL+0(%r1)
284
+ # else
285
+ lbz %r3, RETVAL+7(%r1)
286
+ # endif
149
287
  extsb %r3,%r3
150
288
  mtlr %r0
151
289
  b .Lfinish
152
290
  # case FFI_TYPE_UINT16
153
- lhz %r3, 112+6(%r1)
291
+ # ifdef __LITTLE_ENDIAN__
292
+ lhz %r3, RETVAL+0(%r1)
293
+ # else
294
+ lhz %r3, RETVAL+6(%r1)
295
+ # endif
154
296
  mtlr %r0
155
297
  .Lfinish:
156
- addi %r1, %r1, 240
298
+ addi %r1, %r1, STACKFRAME
299
+ .cfi_def_cfa_offset 0
157
300
  blr
301
+ .cfi_def_cfa_offset STACKFRAME
158
302
  # case FFI_TYPE_SINT16
159
- lha %r3, 112+6(%r1)
303
+ # ifdef __LITTLE_ENDIAN__
304
+ lha %r3, RETVAL+0(%r1)
305
+ # else
306
+ lha %r3, RETVAL+6(%r1)
307
+ # endif
160
308
  mtlr %r0
161
- addi %r1, %r1, 240
309
+ addi %r1, %r1, STACKFRAME
310
+ .cfi_def_cfa_offset 0
162
311
  blr
312
+ .cfi_def_cfa_offset STACKFRAME
163
313
  # case FFI_TYPE_UINT32
164
- lwz %r3, 112+4(%r1)
314
+ # ifdef __LITTLE_ENDIAN__
315
+ lwz %r3, RETVAL+0(%r1)
316
+ # else
317
+ lwz %r3, RETVAL+4(%r1)
318
+ # endif
165
319
  mtlr %r0
166
- addi %r1, %r1, 240
320
+ addi %r1, %r1, STACKFRAME
321
+ .cfi_def_cfa_offset 0
167
322
  blr
323
+ .cfi_def_cfa_offset STACKFRAME
168
324
  # case FFI_TYPE_SINT32
169
- lwa %r3, 112+4(%r1)
325
+ # ifdef __LITTLE_ENDIAN__
326
+ lwa %r3, RETVAL+0(%r1)
327
+ # else
328
+ lwa %r3, RETVAL+4(%r1)
329
+ # endif
170
330
  mtlr %r0
171
- addi %r1, %r1, 240
331
+ addi %r1, %r1, STACKFRAME
332
+ .cfi_def_cfa_offset 0
172
333
  blr
334
+ .cfi_def_cfa_offset STACKFRAME
173
335
  # case FFI_TYPE_UINT64
174
- ld %r3, 112+0(%r1)
336
+ ld %r3, RETVAL+0(%r1)
175
337
  mtlr %r0
176
- addi %r1, %r1, 240
338
+ addi %r1, %r1, STACKFRAME
339
+ .cfi_def_cfa_offset 0
177
340
  blr
341
+ .cfi_def_cfa_offset STACKFRAME
178
342
  # case FFI_TYPE_SINT64
179
- ld %r3, 112+0(%r1)
343
+ ld %r3, RETVAL+0(%r1)
180
344
  mtlr %r0
181
- addi %r1, %r1, 240
345
+ addi %r1, %r1, STACKFRAME
346
+ .cfi_def_cfa_offset 0
182
347
  blr
348
+ .cfi_def_cfa_offset STACKFRAME
183
349
  # case FFI_TYPE_STRUCT
184
350
  mtlr %r0
185
- addi %r1, %r1, 240
351
+ addi %r1, %r1, STACKFRAME
352
+ .cfi_def_cfa_offset 0
186
353
  blr
354
+ .cfi_def_cfa_offset STACKFRAME
187
355
  nop
188
356
  # case FFI_TYPE_POINTER
189
- ld %r3, 112+0(%r1)
357
+ ld %r3, RETVAL+0(%r1)
358
+ mtlr %r0
359
+ addi %r1, %r1, STACKFRAME
360
+ .cfi_def_cfa_offset 0
361
+ blr
362
+ .cfi_def_cfa_offset STACKFRAME
363
+ # case FFI_V2_TYPE_VECTOR
364
+ addi %r3, %r1, RETVAL
365
+ lvx %v2, 0, %r3
366
+ mtlr %r0
367
+ b .Lfinish
368
+ # case FFI_V2_TYPE_VECTOR_HOMOG
369
+ addi %r3, %r1, RETVAL
370
+ lvx %v2, 0, %r3
371
+ addi %r3, %r3, 16
372
+ b .Lmorevector
373
+ # case FFI_V2_TYPE_FLOAT_HOMOG
374
+ lfs %f1, RETVAL+0(%r1)
375
+ lfs %f2, RETVAL+4(%r1)
376
+ lfs %f3, RETVAL+8(%r1)
377
+ b .Lmorefloat
378
+ # case FFI_V2_TYPE_DOUBLE_HOMOG
379
+ lfd %f1, RETVAL+0(%r1)
380
+ lfd %f2, RETVAL+8(%r1)
381
+ lfd %f3, RETVAL+16(%r1)
382
+ lfd %f4, RETVAL+24(%r1)
383
+ mtlr %r0
384
+ lfd %f5, RETVAL+32(%r1)
385
+ lfd %f6, RETVAL+40(%r1)
386
+ lfd %f7, RETVAL+48(%r1)
387
+ lfd %f8, RETVAL+56(%r1)
388
+ addi %r1, %r1, STACKFRAME
389
+ .cfi_def_cfa_offset 0
390
+ blr
391
+ .cfi_def_cfa_offset STACKFRAME
392
+ .Lmorevector:
393
+ lvx %v3, 0, %r3
394
+ addi %r3, %r3, 16
395
+ lvx %v4, 0, %r3
396
+ addi %r3, %r3, 16
397
+ lvx %v5, 0, %r3
190
398
  mtlr %r0
191
- addi %r1, %r1, 240
399
+ addi %r3, %r3, 16
400
+ lvx %v6, 0, %r3
401
+ addi %r3, %r3, 16
402
+ lvx %v7, 0, %r3
403
+ addi %r3, %r3, 16
404
+ lvx %v8, 0, %r3
405
+ addi %r3, %r3, 16
406
+ lvx %v9, 0, %r3
407
+ addi %r1, %r1, STACKFRAME
408
+ .cfi_def_cfa_offset 0
192
409
  blr
193
- # esac
194
- .LFE1:
410
+ .cfi_def_cfa_offset STACKFRAME
411
+ .Lmorefloat:
412
+ lfs %f4, RETVAL+12(%r1)
413
+ mtlr %r0
414
+ lfs %f5, RETVAL+16(%r1)
415
+ lfs %f6, RETVAL+20(%r1)
416
+ lfs %f7, RETVAL+24(%r1)
417
+ lfs %f8, RETVAL+28(%r1)
418
+ addi %r1, %r1, STACKFRAME
419
+ .cfi_def_cfa_offset 0
420
+ blr
421
+ .cfi_def_cfa_offset STACKFRAME
422
+ .Lsmall:
423
+ # ifdef __LITTLE_ENDIAN__
424
+ ld %r3,RETVAL+0(%r1)
425
+ mtlr %r0
426
+ ld %r4,RETVAL+8(%r1)
427
+ addi %r1, %r1, STACKFRAME
428
+ .cfi_def_cfa_offset 0
429
+ blr
430
+ # else
431
+ # A struct smaller than a dword is returned in the low bits of r3
432
+ # ie. right justified. Larger structs are passed left justified
433
+ # in r3 and r4. The return value area on the stack will have
434
+ # the structs as they are usually stored in memory.
435
+ cmpldi %r3, FFI_V2_TYPE_SMALL_STRUCT + 7 # size 8 bytes?
436
+ neg %r5, %r3
437
+ ld %r3,RETVAL+0(%r1)
438
+ blt .Lsmalldown
439
+ mtlr %r0
440
+ ld %r4,RETVAL+8(%r1)
441
+ addi %r1, %r1, STACKFRAME
442
+ .cfi_def_cfa_offset 0
443
+ blr
444
+ .cfi_def_cfa_offset STACKFRAME
445
+ .Lsmalldown:
446
+ addi %r5, %r5, FFI_V2_TYPE_SMALL_STRUCT + 7
447
+ mtlr %r0
448
+ sldi %r5, %r5, 3
449
+ addi %r1, %r1, STACKFRAME
450
+ .cfi_def_cfa_offset 0
451
+ srd %r3, %r3, %r5
452
+ blr
453
+ # endif
454
+
455
+ .cfi_endproc
456
+ # if _CALL_ELF == 2
457
+ .size ffi_closure_LINUX64,.-ffi_closure_LINUX64
458
+ # else
459
+ # ifdef _CALL_LINUX
460
+ .size ffi_closure_LINUX64,.-.L.ffi_closure_LINUX64
461
+ # else
195
462
  .long 0
196
463
  .byte 0,12,0,1,128,0,0,0
197
464
  .size .ffi_closure_LINUX64,.-.ffi_closure_LINUX64
465
+ # endif
466
+ # endif
467
+
198
468
 
199
- .section .eh_frame,EH_FRAME_FLAGS,@progbits
200
- .Lframe1:
201
- .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
202
- .LSCIE1:
203
- .4byte 0x0 # CIE Identifier Tag
204
- .byte 0x1 # CIE Version
205
- .ascii "zR\0" # CIE Augmentation
206
- .uleb128 0x1 # CIE Code Alignment Factor
207
- .sleb128 -8 # CIE Data Alignment Factor
208
- .byte 0x41 # CIE RA Column
209
- .uleb128 0x1 # Augmentation size
210
- .byte 0x14 # FDE Encoding (pcrel udata8)
211
- .byte 0xc # DW_CFA_def_cfa
212
- .uleb128 0x1
213
- .uleb128 0x0
214
- .align 3
215
- .LECIE1:
216
- .LSFDE1:
217
- .4byte .LEFDE1-.LASFDE1 # FDE Length
218
- .LASFDE1:
219
- .4byte .LASFDE1-.Lframe1 # FDE CIE offset
220
- .8byte .LFB1-. # FDE initial location
221
- .8byte .LFE1-.LFB1 # FDE address range
222
- .uleb128 0x0 # Augmentation size
223
- .byte 0x2 # DW_CFA_advance_loc1
224
- .byte .LCFI0-.LFB1
225
- .byte 0xe # DW_CFA_def_cfa_offset
226
- .uleb128 240
227
- .byte 0x11 # DW_CFA_offset_extended_sf
228
- .uleb128 0x41
229
- .sleb128 -2
230
- .align 3
231
- .LEFDE1:
469
+ FFI_HIDDEN (ffi_go_closure_linux64)
470
+ .globl ffi_go_closure_linux64
471
+ .text
472
+ .cfi_startproc
473
+ # if _CALL_ELF == 2
474
+ ffi_go_closure_linux64:
475
+ # ifndef __PCREL__
476
+ addis %r2, %r12, .TOC.-ffi_go_closure_linux64@ha
477
+ addi %r2, %r2, .TOC.-ffi_go_closure_linux64@l
478
+ # endif
479
+ .localentry ffi_go_closure_linux64, . - ffi_go_closure_linux64
480
+ # else
481
+ .section ".opd","aw"
482
+ .align 3
483
+ ffi_go_closure_linux64:
484
+ # ifdef _CALL_LINUX
485
+ .quad .L.ffi_go_closure_linux64,.TOC.@tocbase,0
486
+ .type ffi_go_closure_linux64,@function
487
+ .text
488
+ .L.ffi_go_closure_linux64:
489
+ # else
490
+ FFI_HIDDEN (.ffi_go_closure_linux64)
491
+ .globl .ffi_go_closure_linux64
492
+ .quad .ffi_go_closure_linux64,.TOC.@tocbase,0
493
+ .size ffi_go_closure_linux64,24
494
+ .type .ffi_go_closure_linux64,@function
495
+ .text
496
+ .ffi_go_closure_linux64:
497
+ # endif
498
+ # endif
499
+
500
+ # if _CALL_ELF == 2
501
+ ld %r12, 8(%r11) # closure->cif
502
+ mflr %r0
503
+ lwz %r12, 28(%r12) # cif->flags
504
+ mtcrf 0x40, %r12
505
+ addi %r12, %r1, PARMSAVE
506
+ bt 7, 0f
507
+ # Our caller has not allocated a parameter save area.
508
+ # We need to allocate one here and use it to pass gprs to
509
+ # ffi_closure_helper_LINUX64.
510
+ addi %r12, %r1, -STACKFRAME+PARMSAVE
511
+ 0:
512
+ # Save general regs into parm save area
513
+ std %r3, 0(%r12)
514
+ std %r4, 8(%r12)
515
+ std %r5, 16(%r12)
516
+ std %r6, 24(%r12)
517
+ std %r7, 32(%r12)
518
+ std %r8, 40(%r12)
519
+ std %r9, 48(%r12)
520
+ std %r10, 56(%r12)
521
+
522
+ # load up the pointer to the parm save area
523
+ mr %r7, %r12
524
+ # else
525
+ mflr %r0
526
+ # Save general regs into parm save area
527
+ # This is the parameter save area set up by our caller.
528
+ std %r3, PARMSAVE+0(%r1)
529
+ std %r4, PARMSAVE+8(%r1)
530
+ std %r5, PARMSAVE+16(%r1)
531
+ std %r6, PARMSAVE+24(%r1)
532
+ std %r7, PARMSAVE+32(%r1)
533
+ std %r8, PARMSAVE+40(%r1)
534
+ std %r9, PARMSAVE+48(%r1)
535
+ std %r10, PARMSAVE+56(%r1)
536
+
537
+ # load up the pointer to the parm save area
538
+ addi %r7, %r1, PARMSAVE
539
+ # endif
540
+ std %r0, 16(%r1)
541
+
542
+ # closure->cif
543
+ ld %r3, 8(%r11)
544
+ # closure->fun
545
+ ld %r4, 16(%r11)
546
+ # user_data
547
+ mr %r5, %r11
548
+ b .Ldoclosure
549
+
550
+ .cfi_endproc
551
+ # if _CALL_ELF == 2
552
+ .size ffi_go_closure_linux64,.-ffi_go_closure_linux64
553
+ # else
554
+ # ifdef _CALL_LINUX
555
+ .size ffi_go_closure_linux64,.-.L.ffi_go_closure_linux64
556
+ # else
557
+ .long 0
558
+ .byte 0,12,0,1,128,0,0,0
559
+ .size .ffi_go_closure_linux64,.-.ffi_go_closure_linux64
560
+ # endif
561
+ # endif
232
562
  #endif
233
563
 
234
- #if defined __ELF__ && defined __linux__
564
+ #if (defined __ELF__ && defined __linux__) || _CALL_ELF == 2
235
565
  .section .note.GNU-stack,"",@progbits
236
566
  #endif