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
@@ -103,51 +103,103 @@ ffi_call_pa32:
103
103
 
104
104
  /* Prepare to store the result; we need to recover flags and rvalue. */
105
105
  ldw -48(%r3), %r21 /* r21 <- flags */
106
- ldw -52(%r3), %r20 /* r20 <- rvalue */
107
106
 
108
- /* Store the result according to the return type. */
107
+ /* Adjust flags range from [-8, 15] to [0, 23]. */
108
+ addi 8, %r21, %r21
109
109
 
110
- .Lcheckint:
111
- comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8
112
- b .Ldone
113
- stw %ret0, 0(%r20)
110
+ blr %r21, %r0
111
+ ldw -52(%r3), %r20 /* r20 <- rvalue */
114
112
 
115
- .Lcheckint8:
116
- comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16
113
+ /* Giant jump table */
114
+ /* 8-byte small struct */
115
+ b,n .Lsmst8
116
+ nop
117
+ /* 7-byte small struct */
118
+ b,n .Lsmst7
119
+ nop
120
+ /* 6-byte small struct */
121
+ b,n .Lsmst6
122
+ nop
123
+ /* 5-byte small struct */
124
+ b,n .Lsmst5
125
+ nop
126
+ /* 4-byte small struct */
127
+ b,n .Lsmst4
128
+ nop
129
+ /* 3-byte small struct */
130
+ b,n .Lsmst3
131
+ nop
132
+ /* 2-byte small struct */
133
+ b,n .Lsmst2
134
+ nop
135
+ /* 1-byte small struct */
117
136
  b .Ldone
118
137
  stb %ret0, 0(%r20)
119
-
120
- .Lcheckint16:
121
- comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl
138
+ /* void */
139
+ b,n .Ldone
140
+ nop
141
+ /* int */
122
142
  b .Ldone
123
- sth %ret0, 0(%r20)
124
-
125
- .Lcheckdbl:
126
- comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat
143
+ stw %ret0, 0(%r20)
144
+ /* float */
145
+ b .Ldone
146
+ fstw %fr4L,0(%r20)
147
+ /* double */
127
148
  b .Ldone
128
149
  fstd %fr4,0(%r20)
129
-
130
- .Lcheckfloat:
131
- comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll
150
+ /* long double */
132
151
  b .Ldone
133
- fstw %fr4L,0(%r20)
152
+ fstd %fr4,0(%r20)
153
+ /* unsigned int8 */
154
+ b .Ldone
155
+ stw %ret0, 0(%r20)
156
+ /* sint8 */
157
+ b .Ldone
158
+ stw %ret0, 0(%r20)
159
+ /* unsigned int16 */
160
+ b .Ldone
161
+ stw %ret0, 0(%r20)
162
+ /* sint16 */
163
+ b .Ldone
164
+ stw %ret0, 0(%r20)
165
+ /* unsigned int32 */
166
+ b .Ldone
167
+ stw %ret0, 0(%r20)
168
+ /* sint32 */
169
+ b .Ldone
170
+ stw %ret0, 0(%r20)
171
+ /* unsigned int64 */
172
+ b,n .Luint64
173
+ nop
174
+ /* signed int64 */
175
+ b,n .Lsint64
176
+ nop
177
+ /* large struct */
178
+ b,n .Ldone
179
+ nop
180
+ /* pointer */
181
+ b .Ldone
182
+ stw %ret0, 0(%r20)
183
+ /* complex */
184
+ b,n .Ldone
185
+ nop
134
186
 
135
- .Lcheckll:
136
- comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2
187
+ /* Store the result according to the return type. */
188
+
189
+ .Luint64:
190
+ .Lsint64:
137
191
  stw %ret0, 0(%r20)
138
192
  b .Ldone
139
193
  stw %ret1, 4(%r20)
140
194
 
141
- .Lchecksmst2:
142
- comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3
195
+ .Lsmst2:
143
196
  /* 2-byte structs are returned in ret0 as ????xxyy. */
144
197
  extru %ret0, 23, 8, %r22
145
198
  stbs,ma %r22, 1(%r20)
146
199
  b .Ldone
147
200
  stb %ret0, 0(%r20)
148
201
 
149
- .Lchecksmst3:
150
- comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4
202
+ .Lsmst3:
151
203
  /* 3-byte structs are returned in ret0 as ??xxyyzz. */
152
204
  extru %ret0, 15, 8, %r22
153
205
  stbs,ma %r22, 1(%r20)
@@ -156,8 +208,7 @@ ffi_call_pa32:
156
208
  b .Ldone
157
209
  stb %ret0, 0(%r20)
158
210
 
159
- .Lchecksmst4:
160
- comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5
211
+ .Lsmst4:
161
212
  /* 4-byte structs are returned in ret0 as wwxxyyzz. */
162
213
  extru %ret0, 7, 8, %r22
163
214
  stbs,ma %r22, 1(%r20)
@@ -168,8 +219,7 @@ ffi_call_pa32:
168
219
  b .Ldone
169
220
  stb %ret0, 0(%r20)
170
221
 
171
- .Lchecksmst5:
172
- comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6
222
+ .Lsmst5:
173
223
  /* 5 byte values are returned right justified:
174
224
  ret0 ret1
175
225
  5: ??????aa bbccddee */
@@ -183,8 +233,7 @@ ffi_call_pa32:
183
233
  b .Ldone
184
234
  stb %ret1, 0(%r20)
185
235
 
186
- .Lchecksmst6:
187
- comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7
236
+ .Lsmst6:
188
237
  /* 6 byte values are returned right justified:
189
238
  ret0 ret1
190
239
  6: ????aabb ccddeeff */
@@ -200,8 +249,7 @@ ffi_call_pa32:
200
249
  b .Ldone
201
250
  stb %ret1, 0(%r20)
202
251
 
203
- .Lchecksmst7:
204
- comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8
252
+ .Lsmst7:
205
253
  /* 7 byte values are returned right justified:
206
254
  ret0 ret1
207
255
  7: ??aabbcc ddeeffgg */
@@ -219,8 +267,7 @@ ffi_call_pa32:
219
267
  b .Ldone
220
268
  stb %ret1, 0(%r20)
221
269
 
222
- .Lchecksmst8:
223
- comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone
270
+ .Lsmst8:
224
271
  /* 8 byte values are returned right justified:
225
272
  ret0 ret1
226
273
  8: aabbccdd eeffgghh */
@@ -252,7 +299,7 @@ ffi_call_pa32:
252
299
  .LFE1:
253
300
 
254
301
  /* void ffi_closure_pa32(void);
255
- Called with closure argument in %r21 */
302
+ Called with closure argument in %r19 */
256
303
  .export ffi_closure_pa32,code
257
304
  .import ffi_closure_inner_pa32,code
258
305
 
@@ -277,7 +324,9 @@ ffi_closure_pa32:
277
324
  stw %arg2, -44(%r3)
278
325
  stw %arg3, -48(%r3)
279
326
 
280
- copy %r21, %arg0
327
+ /* Retrieve closure pointer and real gp. */
328
+ copy %r19, %arg0
329
+ ldw 8(%r19), %r19
281
330
  bl ffi_closure_inner_pa32, %r2
282
331
  copy %r3, %arg1
283
332
 
@@ -297,10 +346,18 @@ ffi_closure_pa32:
297
346
  .LSCIE1:
298
347
  .word 0x0 ;# CIE Identifier Tag
299
348
  .byte 0x1 ;# CIE Version
349
+ #ifdef __PIC__
350
+ .ascii "zR\0" ;# CIE Augmentation: 'z' - data, 'R' - DW_EH_PE_... data
351
+ #else
300
352
  .ascii "\0" ;# CIE Augmentation
353
+ #endif
301
354
  .uleb128 0x1 ;# CIE Code Alignment Factor
302
355
  .sleb128 4 ;# CIE Data Alignment Factor
303
356
  .byte 0x2 ;# CIE RA Column
357
+ #ifdef __PIC__
358
+ .uleb128 0x1 ;# Augmentation size
359
+ .byte 0x1b ;# FDE Encoding (DW_EH_PE_pcrel|DW_EH_PE_sdata4)
360
+ #endif
304
361
  .byte 0xc ;# DW_CFA_def_cfa
305
362
  .uleb128 0x1e
306
363
  .uleb128 0x0
@@ -310,9 +367,15 @@ ffi_closure_pa32:
310
367
  .word .LEFDE1-.LASFDE1 ;# FDE Length
311
368
  .LASFDE1:
312
369
  .word .LASFDE1-.Lframe1 ;# FDE CIE offset
313
- .word .LFB1 ;# FDE initial location
370
+ #ifdef __PIC__
371
+ .word .LFB1-. ;# FDE initial location
372
+ #else
373
+ .word .LFB1 ;# FDE initial location
374
+ #endif
314
375
  .word .LFE1-.LFB1 ;# FDE address range
315
-
376
+ #ifdef __PIC__
377
+ .uleb128 0x0 ;# Augmentation size: no data
378
+ #endif
316
379
  .byte 0x4 ;# DW_CFA_advance_loc4
317
380
  .word .LCFI11-.LFB1
318
381
  .byte 0x83 ;# DW_CFA_offset, column 0x3
@@ -338,8 +401,15 @@ ffi_closure_pa32:
338
401
  .word .LEFDE2-.LASFDE2 ;# FDE Length
339
402
  .LASFDE2:
340
403
  .word .LASFDE2-.Lframe1 ;# FDE CIE offset
404
+ #ifdef __PIC__
405
+ .word .LFB2-. ;# FDE initial location
406
+ #else
341
407
  .word .LFB2 ;# FDE initial location
408
+ #endif
342
409
  .word .LFE2-.LFB2 ;# FDE address range
410
+ #ifdef __PIC__
411
+ .uleb128 0x0 ;# Augmentation size: no data
412
+ #endif
343
413
  .byte 0x4 ;# DW_CFA_advance_loc4
344
414
  .word .LCFI21-.LFB2
345
415
  .byte 0x83 ;# DW_CFA_offset, column 0x3
@@ -1,5 +1,5 @@
1
1
  /* -----------------------------------------------------------------------
2
- aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
2
+ aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
3
3
  based on darwin.S by John Hornkvist
4
4
 
5
5
  PowerPC Assembly glue.
@@ -79,6 +79,8 @@
79
79
  .set f20,20
80
80
  .set f21,21
81
81
 
82
+ .extern .ffi_prep_args
83
+
82
84
  #define LIBFFI_ASM
83
85
  #include <fficonfig.h>
84
86
  #include <ffi.h>
@@ -104,6 +106,10 @@ ffi_call_AIX:
104
106
  .llong .ffi_call_AIX, TOC[tc0], 0
105
107
  .csect .text[PR]
106
108
  .ffi_call_AIX:
109
+ .function .ffi_call_AIX,.ffi_call_AIX,16,044,LFE..0-LFB..0
110
+ .bf __LINE__
111
+ .line 1
112
+ LFB..0:
107
113
  /* Save registers we use. */
108
114
  mflr r0
109
115
 
@@ -113,8 +119,10 @@ ffi_call_AIX:
113
119
  std r31, -8(r1)
114
120
 
115
121
  std r0, 16(r1)
122
+ LCFI..0:
116
123
  mr r28, r1 /* our AP. */
117
124
  stdux r1, r1, r4
125
+ LCFI..1:
118
126
 
119
127
  /* Save arguments over call... */
120
128
  mr r31, r5 /* flags, */
@@ -125,6 +133,7 @@ ffi_call_AIX:
125
133
  /* Call ffi_prep_args. */
126
134
  mr r4, r1
127
135
  bl .ffi_prep_args
136
+ nop
128
137
 
129
138
  /* Now do the call. */
130
139
  ld r0, 0(r29)
@@ -134,7 +143,7 @@ ffi_call_AIX:
134
143
  mtcrf 0x40, r31
135
144
  mtctr r0
136
145
  /* Load all those argument registers. */
137
- // We have set up a nice stack frame, just load it into registers.
146
+ /* We have set up a nice stack frame, just load it into registers. */
138
147
  ld r3, 40+(1*8)(r1)
139
148
  ld r4, 40+(2*8)(r1)
140
149
  ld r5, 40+(3*8)(r1)
@@ -147,7 +156,7 @@ ffi_call_AIX:
147
156
 
148
157
  L1:
149
158
  /* Load all the FP registers. */
150
- bf 6,L2 // 2f + 0x18
159
+ bf 6,L2 /* 2f + 0x18 */
151
160
  lfd f1,-32-(13*8)(r28)
152
161
  lfd f2,-32-(12*8)(r28)
153
162
  lfd f3,-32-(11*8)(r28)
@@ -199,12 +208,16 @@ L(fp_return_value):
199
208
  L(float_return_value):
200
209
  stfs f1, 0(r30)
201
210
  b L(done_return_value)
202
-
211
+ LFE..0:
203
212
  #else /* ! __64BIT__ */
204
213
 
205
214
  .long .ffi_call_AIX, TOC[tc0], 0
206
215
  .csect .text[PR]
207
216
  .ffi_call_AIX:
217
+ .function .ffi_call_AIX,.ffi_call_AIX,16,044,LFE..0-LFB..0
218
+ .bf __LINE__
219
+ .line 1
220
+ LFB..0:
208
221
  /* Save registers we use. */
209
222
  mflr r0
210
223
 
@@ -214,8 +227,10 @@ L(float_return_value):
214
227
  stw r31, -4(r1)
215
228
 
216
229
  stw r0, 8(r1)
230
+ LCFI..0:
217
231
  mr r28, r1 /* out AP. */
218
232
  stwux r1, r1, r4
233
+ LCFI..1:
219
234
 
220
235
  /* Save arguments over call... */
221
236
  mr r31, r5 /* flags, */
@@ -226,6 +241,7 @@ L(float_return_value):
226
241
  /* Call ffi_prep_args. */
227
242
  mr r4, r1
228
243
  bl .ffi_prep_args
244
+ nop
229
245
 
230
246
  /* Now do the call. */
231
247
  lwz r0, 0(r29)
@@ -235,7 +251,7 @@ L(float_return_value):
235
251
  mtcrf 0x40, r31
236
252
  mtctr r0
237
253
  /* Load all those argument registers. */
238
- // We have set up a nice stack frame, just load it into registers.
254
+ /* We have set up a nice stack frame, just load it into registers. */
239
255
  lwz r3, 20+(1*4)(r1)
240
256
  lwz r4, 20+(2*4)(r1)
241
257
  lwz r5, 20+(3*4)(r1)
@@ -248,7 +264,7 @@ L(float_return_value):
248
264
 
249
265
  L1:
250
266
  /* Load all the FP registers. */
251
- bf 6,L2 // 2f + 0x18
267
+ bf 6,L2 /* 2f + 0x18 */
252
268
  lfd f1,-16-(13*8)(r28)
253
269
  lfd f2,-16-(12*8)(r28)
254
270
  lfd f3,-16-(11*8)(r28)
@@ -300,10 +316,143 @@ L(fp_return_value):
300
316
  L(float_return_value):
301
317
  stfs f1, 0(r30)
302
318
  b L(done_return_value)
319
+ LFE..0:
303
320
  #endif
321
+ .ef __LINE__
304
322
  .long 0
305
323
  .byte 0,0,0,1,128,4,0,0
306
- //END(ffi_call_AIX)
324
+ /* END(ffi_call_AIX) */
325
+
326
+ /* void ffi_call_go_AIX(extended_cif *ecif, unsigned long bytes,
327
+ * unsigned int flags, unsigned int *rvalue,
328
+ * void (*fn)(),
329
+ * void (*prep_args)(extended_cif*, unsigned *const),
330
+ * void *closure);
331
+ * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args, r9=closure
332
+ */
333
+
334
+ .csect .text[PR]
335
+ .align 2
336
+ .globl ffi_call_go_AIX
337
+ .globl .ffi_call_go_AIX
338
+ .csect ffi_call_go_AIX[DS]
339
+ ffi_call_go_AIX:
340
+ #ifdef __64BIT__
341
+ .llong .ffi_call_go_AIX, TOC[tc0], 0
342
+ .csect .text[PR]
343
+ .ffi_call_go_AIX:
344
+ .function .ffi_call_go_AIX,.ffi_call_go_AIX,16,044,LFE..1-LFB..1
345
+ .bf __LINE__
346
+ .line 1
347
+ LFB..1:
348
+ /* Save registers we use. */
349
+ mflr r0
350
+
351
+ std r28,-32(r1)
352
+ std r29,-24(r1)
353
+ std r30,-16(r1)
354
+ std r31, -8(r1)
355
+
356
+ std r9, 8(r1) /* closure, saved in cr field. */
357
+ std r0, 16(r1)
358
+ LCFI..2:
359
+ mr r28, r1 /* our AP. */
360
+ stdux r1, r1, r4
361
+ LCFI..3:
362
+
363
+ /* Save arguments over call... */
364
+ mr r31, r5 /* flags, */
365
+ mr r30, r6 /* rvalue, */
366
+ mr r29, r7 /* function address, */
367
+ std r2, 40(r1)
368
+
369
+ /* Call ffi_prep_args. */
370
+ mr r4, r1
371
+ bl .ffi_prep_args
372
+ nop
373
+
374
+ /* Now do the call. */
375
+ ld r0, 0(r29)
376
+ ld r2, 8(r29)
377
+ ld r11, 8(r28) /* closure */
378
+ /* Set up cr1 with bits 4-7 of the flags. */
379
+ mtcrf 0x40, r31
380
+ mtctr r0
381
+ /* Load all those argument registers. */
382
+ /* We have set up a nice stack frame, just load it into registers. */
383
+ ld r3, 40+(1*8)(r1)
384
+ ld r4, 40+(2*8)(r1)
385
+ ld r5, 40+(3*8)(r1)
386
+ ld r6, 40+(4*8)(r1)
387
+ nop
388
+ ld r7, 40+(5*8)(r1)
389
+ ld r8, 40+(6*8)(r1)
390
+ ld r9, 40+(7*8)(r1)
391
+ ld r10,40+(8*8)(r1)
392
+
393
+ b L1
394
+ LFE..1:
395
+ #else /* ! __64BIT__ */
396
+
397
+ .long .ffi_call_go_AIX, TOC[tc0], 0
398
+ .csect .text[PR]
399
+ .ffi_call_go_AIX:
400
+ .function .ffi_call_go_AIX,.ffi_call_go_AIX,16,044,LFE..1-LFB..1
401
+ .bf __LINE__
402
+ .line 1
403
+ /* Save registers we use. */
404
+ LFB..1:
405
+ mflr r0
406
+
407
+ stw r28,-16(r1)
408
+ stw r29,-12(r1)
409
+ stw r30, -8(r1)
410
+ stw r31, -4(r1)
411
+
412
+ stw r9, 4(r1) /* closure, saved in cr field. */
413
+ stw r0, 8(r1)
414
+ LCFI..2:
415
+ mr r28, r1 /* out AP. */
416
+ stwux r1, r1, r4
417
+ LCFI..3:
418
+
419
+ /* Save arguments over call... */
420
+ mr r31, r5 /* flags, */
421
+ mr r30, r6 /* rvalue, */
422
+ mr r29, r7 /* function address, */
423
+ stw r2, 20(r1)
424
+
425
+ /* Call ffi_prep_args. */
426
+ mr r4, r1
427
+ bl .ffi_prep_args
428
+ nop
429
+
430
+ /* Now do the call. */
431
+ lwz r0, 0(r29)
432
+ lwz r2, 4(r29)
433
+ lwz r11, 4(r28) /* closure */
434
+ /* Set up cr1 with bits 4-7 of the flags. */
435
+ mtcrf 0x40, r31
436
+ mtctr r0
437
+ /* Load all those argument registers. */
438
+ /* We have set up a nice stack frame, just load it into registers. */
439
+ lwz r3, 20+(1*4)(r1)
440
+ lwz r4, 20+(2*4)(r1)
441
+ lwz r5, 20+(3*4)(r1)
442
+ lwz r6, 20+(4*4)(r1)
443
+ nop
444
+ lwz r7, 20+(5*4)(r1)
445
+ lwz r8, 20+(6*4)(r1)
446
+ lwz r9, 20+(7*4)(r1)
447
+ lwz r10,20+(8*4)(r1)
448
+
449
+ b L1
450
+ LFE..1:
451
+ #endif
452
+ .ef __LINE__
453
+ .long 0
454
+ .byte 0,0,0,1,128,4,0,0
455
+ /* END(ffi_call_go_AIX) */
307
456
 
308
457
  .csect .text[PR]
309
458
  .align 2
@@ -321,4 +470,97 @@ ffi_call_DARWIN:
321
470
  blr
322
471
  .long 0
323
472
  .byte 0,0,0,0,0,0,0,0
324
- //END(ffi_call_DARWIN)
473
+ /* END(ffi_call_DARWIN) */
474
+
475
+ /* EH frame stuff. */
476
+
477
+ #define LR_REGNO 0x41 /* Link Register (65), see rs6000.md */
478
+ #ifdef __64BIT__
479
+ #define PTRSIZE 8
480
+ #define LOG2_PTRSIZE 3
481
+ #define FDE_ENCODING 0x1c /* DW_EH_PE_pcrel|DW_EH_PE_sdata8 */
482
+ #define EH_DATA_ALIGN_FACT 0x78 /* LEB128 -8 */
483
+ #else
484
+ #define PTRSIZE 4
485
+ #define LOG2_PTRSIZE 2
486
+ #define FDE_ENCODING 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4 */
487
+ #define EH_DATA_ALIGN_FACT 0x7c /* LEB128 -4 */
488
+ #endif
489
+ .csect _unwind.ro_[RO],4
490
+ .align LOG2_PTRSIZE
491
+ .globl _GLOBAL__F_libffi_src_powerpc_aix
492
+ _GLOBAL__F_libffi_src_powerpc_aix:
493
+ Lframe..1:
494
+ .vbyte 4,LECIE..1-LSCIE..1 /* CIE Length */
495
+ LSCIE..1:
496
+ .vbyte 4,0 /* CIE Identifier Tag */
497
+ .byte 0x3 /* CIE Version */
498
+ .byte "zR" /* CIE Augmentation */
499
+ .byte 0
500
+ .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */
501
+ .byte EH_DATA_ALIGN_FACT /* leb128 -4/-8; CIE Data Alignment Factor */
502
+ .byte 0x41 /* CIE RA Column */
503
+ .byte 0x1 /* uleb128 0x1; Augmentation size */
504
+ .byte FDE_ENCODING /* FDE Encoding (pcrel|sdata4/8) */
505
+ .byte 0xc /* DW_CFA_def_cfa */
506
+ .byte 0x1 /* uleb128 0x1; Register r1 */
507
+ .byte 0 /* uleb128 0x0; Offset 0 */
508
+ .align LOG2_PTRSIZE
509
+ LECIE..1:
510
+ LSFDE..1:
511
+ .vbyte 4,LEFDE..1-LASFDE..1 /* FDE Length */
512
+ LASFDE..1:
513
+ .vbyte 4,LASFDE..1-Lframe..1 /* FDE CIE offset */
514
+ .vbyte PTRSIZE,LFB..0-$ /* FDE initial location */
515
+ .vbyte PTRSIZE,LFE..0-LFB..0 /* FDE address range */
516
+ .byte 0 /* uleb128 0x0; Augmentation size */
517
+ .byte 0x4 /* DW_CFA_advance_loc4 */
518
+ .vbyte 4,LCFI..0-LFB..0
519
+ .byte 0x11 /* DW_CFA_def_offset_extended_sf */
520
+ .byte LR_REGNO /* uleb128 LR_REGNO; Register LR */
521
+ .byte 0x7e /* leb128 -2; Offset -2 (8/16) */
522
+ .byte 0x9f /* DW_CFA_offset Register r31 */
523
+ .byte 0x1 /* uleb128 0x1; Offset 1 (-4/-8) */
524
+ .byte 0x9e /* DW_CFA_offset Register r30 */
525
+ .byte 0x2 /* uleb128 0x2; Offset 2 (-8/-16) */
526
+ .byte 0x9d /* DW_CFA_offset Register r29 */
527
+ .byte 0x3 /* uleb128 0x3; Offset 3 (-12/-24) */
528
+ .byte 0x9c /* DW_CFA_offset Register r28 */
529
+ .byte 0x4 /* uleb128 0x4; Offset 4 (-16/-32) */
530
+ .byte 0x4 /* DW_CFA_advance_loc4 */
531
+ .vbyte 4,LCFI..1-LCFI..0
532
+ .byte 0xd /* DW_CFA_def_cfa_register */
533
+ .byte 0x1c /* uleb128 28; Register r28 */
534
+ .align LOG2_PTRSIZE
535
+ LEFDE..1:
536
+ LSFDE..2:
537
+ .vbyte 4,LEFDE..2-LASFDE..2 /* FDE Length */
538
+ LASFDE..2:
539
+ .vbyte 4,LASFDE..2-Lframe..1 /* FDE CIE offset */
540
+ .vbyte PTRSIZE,LFB..1-$ /* FDE initial location */
541
+ .vbyte PTRSIZE,LFE..1-LFB..1 /* FDE address range */
542
+ .byte 0 /* uleb128 0x0; Augmentation size */
543
+ .byte 0x4 /* DW_CFA_advance_loc4 */
544
+ .vbyte 4,LCFI..2-LFB..1
545
+ .byte 0x11 /* DW_CFA_def_offset_extended_sf */
546
+ .byte LR_REGNO /* uleb128 LR_REGNO; Register LR */
547
+ .byte 0x7e /* leb128 -2; Offset -2 (8/16) */
548
+ .byte 0x9f /* DW_CFA_offset Register r31 */
549
+ .byte 0x1 /* uleb128 0x1; Offset 1 (-4/-8) */
550
+ .byte 0x9e /* DW_CFA_offset Register r30 */
551
+ .byte 0x2 /* uleb128 0x2; Offset 2 (-8/-16) */
552
+ .byte 0x9d /* DW_CFA_offset Register r29 */
553
+ .byte 0x3 /* uleb128 0x3; Offset 3 (-12/-24) */
554
+ .byte 0x9c /* DW_CFA_offset Register r28 */
555
+ .byte 0x4 /* uleb128 0x4; Offset 4 (-16/-32) */
556
+ .byte 0x4 /* DW_CFA_advance_loc4 */
557
+ .vbyte 4,LCFI..3-LCFI..2
558
+ .byte 0xd /* DW_CFA_def_cfa_register */
559
+ .byte 0x1c /* uleb128 28; Register r28 */
560
+ .align LOG2_PTRSIZE
561
+ LEFDE..2:
562
+ .vbyte 4,0 /* End of FDEs */
563
+
564
+ .csect .text[PR]
565
+ .ref _GLOBAL__F_libffi_src_powerpc_aix /* Prevents garbage collection by AIX linker */
566
+