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
@@ -31,15 +31,16 @@
31
31
 
32
32
  .file "ppc_closure.S"
33
33
 
34
- #ifndef __powerpc64__
34
+ #ifndef POWERPC64
35
35
 
36
+ FFI_HIDDEN(ffi_closure_SYSV)
36
37
  ENTRY(ffi_closure_SYSV)
37
- .LFB1:
38
+ .cfi_startproc
38
39
  stwu %r1,-144(%r1)
39
- .LCFI0:
40
+ .cfi_def_cfa_offset 144
40
41
  mflr %r0
41
- .LCFI1:
42
42
  stw %r0,148(%r1)
43
+ .cfi_offset 65, 4
43
44
 
44
45
  # we want to build up an areas for the parameters passed
45
46
  # in registers (both floating point and integer)
@@ -48,6 +49,17 @@ ENTRY(ffi_closure_SYSV)
48
49
  stw %r3, 16(%r1)
49
50
  stw %r4, 20(%r1)
50
51
  stw %r5, 24(%r1)
52
+
53
+ # set up registers for the routine that does the work
54
+
55
+ # closure->cif
56
+ lwz %r3,FFI_TRAMPOLINE_SIZE(%r11)
57
+ # closure->fun
58
+ lwz %r4,FFI_TRAMPOLINE_SIZE+4(%r11)
59
+ # closure->user_data
60
+ lwz %r5,FFI_TRAMPOLINE_SIZE+8(%r11)
61
+
62
+ .Ldoclosure:
51
63
  stw %r6, 28(%r1)
52
64
  stw %r7, 32(%r1)
53
65
  stw %r8, 36(%r1)
@@ -66,23 +78,18 @@ ENTRY(ffi_closure_SYSV)
66
78
  stfd %f8, 104(%r1)
67
79
  #endif
68
80
 
69
- # set up registers for the routine that actually does the work
70
- # get the context pointer from the trampoline
71
- mr %r3,%r11
81
+ # pointer to the result storage
82
+ addi %r6,%r1,112
72
83
 
73
- # now load up the pointer to the result storage
74
- addi %r4,%r1,112
84
+ # pointer to the saved gpr registers
85
+ addi %r7,%r1,16
75
86
 
76
- # now load up the pointer to the saved gpr registers
77
- addi %r5,%r1,16
87
+ # pointer to the saved fpr registers
88
+ addi %r8,%r1,48
78
89
 
79
- # now load up the pointer to the saved fpr registers */
80
- addi %r6,%r1,48
81
-
82
- # now load up the pointer to the outgoing parameter
83
- # stack in the previous frame
90
+ # pointer to the outgoing parameter save area in the previous frame
84
91
  # i.e. the previous frame pointer + 8
85
- addi %r7,%r1,152
92
+ addi %r9,%r1,152
86
93
 
87
94
  # make the call
88
95
  bl ffi_closure_helper_SYSV@local
@@ -101,7 +108,6 @@ ENTRY(ffi_closure_SYSV)
101
108
  add %r3,%r3,%r4 # add contents of table to table address
102
109
  mtctr %r3
103
110
  bctr # jump to it
104
- .LFE1:
105
111
 
106
112
  # Each of the ret_typeX code fragments has to be exactly 16 bytes long
107
113
  # (4 instructions). For cache effectiveness we align to a 16 byte boundary
@@ -111,7 +117,9 @@ ENTRY(ffi_closure_SYSV)
111
117
  .Lret_type0:
112
118
  mtlr %r0
113
119
  addi %r1,%r1,144
120
+ .cfi_def_cfa_offset 0
114
121
  blr
122
+ .cfi_def_cfa_offset 144
115
123
  nop
116
124
 
117
125
  # case FFI_TYPE_INT
@@ -119,61 +127,110 @@ ENTRY(ffi_closure_SYSV)
119
127
  mtlr %r0
120
128
  .Lfinish:
121
129
  addi %r1,%r1,144
130
+ .cfi_def_cfa_offset 0
122
131
  blr
132
+ .cfi_def_cfa_offset 144
123
133
 
124
134
  # case FFI_TYPE_FLOAT
135
+ #ifndef __NO_FPRS__
125
136
  lfs %f1,112+0(%r1)
137
+ #else
138
+ nop
139
+ #endif
126
140
  mtlr %r0
127
141
  addi %r1,%r1,144
142
+ .cfi_def_cfa_offset 0
128
143
  blr
144
+ .cfi_def_cfa_offset 144
129
145
 
130
146
  # case FFI_TYPE_DOUBLE
147
+ #ifndef __NO_FPRS__
131
148
  lfd %f1,112+0(%r1)
149
+ #else
150
+ nop
151
+ #endif
132
152
  mtlr %r0
133
153
  addi %r1,%r1,144
154
+ .cfi_def_cfa_offset 0
134
155
  blr
156
+ .cfi_def_cfa_offset 144
135
157
 
136
158
  # case FFI_TYPE_LONGDOUBLE
159
+ #ifndef __NO_FPRS__
137
160
  lfd %f1,112+0(%r1)
138
161
  lfd %f2,112+8(%r1)
139
162
  mtlr %r0
140
163
  b .Lfinish
164
+ #else
165
+ mtlr %r0
166
+ addi %r1,%r1,144
167
+ .cfi_def_cfa_offset 0
168
+ blr
169
+ .cfi_def_cfa_offset 144
170
+ nop
171
+ #endif
141
172
 
142
173
  # case FFI_TYPE_UINT8
174
+ #ifdef __LITTLE_ENDIAN__
175
+ lbz %r3,112+0(%r1)
176
+ #else
143
177
  lbz %r3,112+3(%r1)
178
+ #endif
144
179
  mtlr %r0
145
180
  addi %r1,%r1,144
181
+ .cfi_def_cfa_offset 0
146
182
  blr
183
+ .cfi_def_cfa_offset 144
147
184
 
148
185
  # case FFI_TYPE_SINT8
186
+ #ifdef __LITTLE_ENDIAN__
187
+ lbz %r3,112+0(%r1)
188
+ #else
149
189
  lbz %r3,112+3(%r1)
190
+ #endif
150
191
  extsb %r3,%r3
151
192
  mtlr %r0
152
193
  b .Lfinish
153
194
 
154
195
  # case FFI_TYPE_UINT16
196
+ #ifdef __LITTLE_ENDIAN__
197
+ lhz %r3,112+0(%r1)
198
+ #else
155
199
  lhz %r3,112+2(%r1)
200
+ #endif
156
201
  mtlr %r0
157
202
  addi %r1,%r1,144
203
+ .cfi_def_cfa_offset 0
158
204
  blr
205
+ .cfi_def_cfa_offset 144
159
206
 
160
207
  # case FFI_TYPE_SINT16
208
+ #ifdef __LITTLE_ENDIAN__
209
+ lha %r3,112+0(%r1)
210
+ #else
161
211
  lha %r3,112+2(%r1)
212
+ #endif
162
213
  mtlr %r0
163
214
  addi %r1,%r1,144
215
+ .cfi_def_cfa_offset 0
164
216
  blr
217
+ .cfi_def_cfa_offset 144
165
218
 
166
219
  # case FFI_TYPE_UINT32
167
220
  lwz %r3,112+0(%r1)
168
221
  mtlr %r0
169
222
  addi %r1,%r1,144
223
+ .cfi_def_cfa_offset 0
170
224
  blr
225
+ .cfi_def_cfa_offset 144
171
226
 
172
227
  # case FFI_TYPE_SINT32
173
228
  lwz %r3,112+0(%r1)
174
229
  mtlr %r0
175
230
  addi %r1,%r1,144
231
+ .cfi_def_cfa_offset 0
176
232
  blr
233
+ .cfi_def_cfa_offset 144
177
234
 
178
235
  # case FFI_TYPE_UINT64
179
236
  lwz %r3,112+0(%r1)
@@ -190,63 +247,96 @@ ENTRY(ffi_closure_SYSV)
190
247
  # case FFI_TYPE_STRUCT
191
248
  mtlr %r0
192
249
  addi %r1,%r1,144
250
+ .cfi_def_cfa_offset 0
193
251
  blr
252
+ .cfi_def_cfa_offset 144
194
253
  nop
195
254
 
196
255
  # case FFI_TYPE_POINTER
197
256
  lwz %r3,112+0(%r1)
198
257
  mtlr %r0
199
258
  addi %r1,%r1,144
259
+ .cfi_def_cfa_offset 0
200
260
  blr
261
+ .cfi_def_cfa_offset 144
201
262
 
202
263
  # case FFI_TYPE_UINT128
203
264
  lwz %r3,112+0(%r1)
204
265
  lwz %r4,112+4(%r1)
205
266
  lwz %r5,112+8(%r1)
206
- bl .Luint128
267
+ b .Luint128
207
268
 
208
269
  # The return types below are only used when the ABI type is FFI_SYSV.
209
270
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
210
271
  lbz %r3,112+0(%r1)
211
272
  mtlr %r0
212
273
  addi %r1,%r1,144
274
+ .cfi_def_cfa_offset 0
213
275
  blr
276
+ .cfi_def_cfa_offset 144
214
277
 
215
278
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct.
216
279
  lhz %r3,112+0(%r1)
217
280
  mtlr %r0
218
281
  addi %r1,%r1,144
282
+ .cfi_def_cfa_offset 0
219
283
  blr
284
+ .cfi_def_cfa_offset 144
220
285
 
221
286
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
222
287
  lwz %r3,112+0(%r1)
288
+ #ifdef __LITTLE_ENDIAN__
289
+ mtlr %r0
290
+ addi %r1,%r1,144
291
+ .cfi_def_cfa_offset 0
292
+ blr
293
+ .cfi_def_cfa_offset 144
294
+ #else
223
295
  srwi %r3,%r3,8
224
296
  mtlr %r0
225
297
  b .Lfinish
298
+ #endif
226
299
 
227
300
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
228
301
  lwz %r3,112+0(%r1)
229
302
  mtlr %r0
230
303
  addi %r1,%r1,144
304
+ .cfi_def_cfa_offset 0
231
305
  blr
306
+ .cfi_def_cfa_offset 144
232
307
 
233
308
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
234
309
  lwz %r3,112+0(%r1)
235
310
  lwz %r4,112+4(%r1)
311
+ #ifdef __LITTLE_ENDIAN__
312
+ mtlr %r0
313
+ b .Lfinish
314
+ #else
236
315
  li %r5,24
237
316
  b .Lstruct567
317
+ #endif
238
318
 
239
319
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
240
320
  lwz %r3,112+0(%r1)
241
321
  lwz %r4,112+4(%r1)
322
+ #ifdef __LITTLE_ENDIAN__
323
+ mtlr %r0
324
+ b .Lfinish
325
+ #else
242
326
  li %r5,16
243
327
  b .Lstruct567
328
+ #endif
244
329
 
245
330
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
246
331
  lwz %r3,112+0(%r1)
247
332
  lwz %r4,112+4(%r1)
333
+ #ifdef __LITTLE_ENDIAN__
334
+ mtlr %r0
335
+ b .Lfinish
336
+ #else
248
337
  li %r5,8
249
338
  b .Lstruct567
339
+ #endif
250
340
 
251
341
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
252
342
  lwz %r3,112+0(%r1)
@@ -254,6 +344,7 @@ ENTRY(ffi_closure_SYSV)
254
344
  mtlr %r0
255
345
  b .Lfinish
256
346
 
347
+ #ifndef __LITTLE_ENDIAN__
257
348
  .Lstruct567:
258
349
  subfic %r6,%r5,32
259
350
  srw %r4,%r4,%r5
@@ -262,66 +353,45 @@ ENTRY(ffi_closure_SYSV)
262
353
  or %r4,%r6,%r4
263
354
  mtlr %r0
264
355
  addi %r1,%r1,144
356
+ .cfi_def_cfa_offset 0
265
357
  blr
358
+ .cfi_def_cfa_offset 144
359
+ #endif
266
360
 
267
361
  .Luint128:
268
362
  lwz %r6,112+12(%r1)
269
363
  mtlr %r0
270
364
  addi %r1,%r1,144
365
+ .cfi_def_cfa_offset 0
271
366
  blr
272
-
367
+ .cfi_endproc
273
368
  END(ffi_closure_SYSV)
274
369
 
275
- .section ".eh_frame",EH_FRAME_FLAGS,@progbits
276
- .Lframe1:
277
- .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
278
- .LSCIE1:
279
- .4byte 0x0 # CIE Identifier Tag
280
- .byte 0x1 # CIE Version
281
- #if defined _RELOCATABLE || defined __PIC__
282
- .ascii "zR\0" # CIE Augmentation
283
- #else
284
- .ascii "\0" # CIE Augmentation
285
- #endif
286
- .uleb128 0x1 # CIE Code Alignment Factor
287
- .sleb128 -4 # CIE Data Alignment Factor
288
- .byte 0x41 # CIE RA Column
289
- #if defined _RELOCATABLE || defined __PIC__
290
- .uleb128 0x1 # Augmentation size
291
- .byte 0x1b # FDE Encoding (pcrel sdata4)
292
- #endif
293
- .byte 0xc # DW_CFA_def_cfa
294
- .uleb128 0x1
295
- .uleb128 0x0
296
- .align 2
297
- .LECIE1:
298
- .LSFDE1:
299
- .4byte .LEFDE1-.LASFDE1 # FDE Length
300
- .LASFDE1:
301
- .4byte .LASFDE1-.Lframe1 # FDE CIE offset
302
- #if defined _RELOCATABLE || defined __PIC__
303
- .4byte .LFB1-. # FDE initial location
304
- #else
305
- .4byte .LFB1 # FDE initial location
306
- #endif
307
- .4byte .LFE1-.LFB1 # FDE address range
308
- #if defined _RELOCATABLE || defined __PIC__
309
- .uleb128 0x0 # Augmentation size
310
- #endif
311
- .byte 0x4 # DW_CFA_advance_loc4
312
- .4byte .LCFI0-.LFB1
313
- .byte 0xe # DW_CFA_def_cfa_offset
314
- .uleb128 144
315
- .byte 0x4 # DW_CFA_advance_loc4
316
- .4byte .LCFI1-.LCFI0
317
- .byte 0x11 # DW_CFA_offset_extended_sf
318
- .uleb128 0x41
319
- .sleb128 -1
320
- .align 2
321
- .LEFDE1:
322
370
 
323
- #endif
371
+ FFI_HIDDEN(ffi_go_closure_sysv)
372
+ ENTRY(ffi_go_closure_sysv)
373
+ .cfi_startproc
374
+ stwu %r1,-144(%r1)
375
+ .cfi_def_cfa_offset 144
376
+ mflr %r0
377
+ stw %r0,148(%r1)
378
+ .cfi_offset 65, 4
379
+
380
+ stw %r3, 16(%r1)
381
+ stw %r4, 20(%r1)
382
+ stw %r5, 24(%r1)
383
+
384
+ # closure->cif
385
+ lwz %r3,4(%r11)
386
+ # closure->fun
387
+ lwz %r4,8(%r11)
388
+ # user_data
389
+ mr %r5,%r11
390
+ b .Ldoclosure
391
+ .cfi_endproc
392
+ END(ffi_go_closure_sysv)
324
393
 
325
394
  #if defined __ELF__ && defined __linux__
326
395
  .section .note.GNU-stack,"",@progbits
327
396
  #endif
397
+ #endif
@@ -30,35 +30,36 @@
30
30
  #include <ffi.h>
31
31
  #include <powerpc/asm.h>
32
32
 
33
- #ifndef __powerpc64__
34
- .globl ffi_prep_args_SYSV
33
+ #ifndef POWERPC64
34
+ FFI_HIDDEN(ffi_call_SYSV)
35
35
  ENTRY(ffi_call_SYSV)
36
- .LFB1:
36
+ .cfi_startproc
37
37
  /* Save the old stack pointer as AP. */
38
- mr %r8,%r1
38
+ mr %r10,%r1
39
+ .cfi_def_cfa_register 10
39
40
 
40
- .LCFI0:
41
41
  /* Allocate the stack space we need. */
42
- stwux %r1,%r1,%r4
42
+ stwux %r1,%r1,%r8
43
43
  /* Save registers we use. */
44
44
  mflr %r9
45
- stw %r28,-16(%r8)
46
- .LCFI1:
47
- stw %r29,-12(%r8)
48
- .LCFI2:
49
- stw %r30, -8(%r8)
50
- .LCFI3:
51
- stw %r31, -4(%r8)
52
- .LCFI4:
53
- stw %r9, 4(%r8)
54
- .LCFI5:
45
+ stw %r28,-16(%r10)
46
+ stw %r29,-12(%r10)
47
+ stw %r30, -8(%r10)
48
+ stw %r31, -4(%r10)
49
+ stw %r9, 4(%r10)
50
+ .cfi_offset 65, 4
51
+ .cfi_offset 31, -4
52
+ .cfi_offset 30, -8
53
+ .cfi_offset 29, -12
54
+ .cfi_offset 28, -16
55
55
 
56
56
  /* Save arguments over call... */
57
- mr %r31,%r5 /* flags, */
58
- mr %r30,%r6 /* rvalue, */
59
- mr %r29,%r7 /* function address, */
60
- mr %r28,%r8 /* our AP. */
61
- .LCFI6:
57
+ stw %r7, -20(%r10) /* closure, */
58
+ mr %r31,%r6 /* flags, */
59
+ mr %r30,%r5 /* rvalue, */
60
+ mr %r29,%r4 /* function address, */
61
+ mr %r28,%r10 /* our AP. */
62
+ .cfi_def_cfa_register 28
62
63
 
63
64
  /* Call ffi_prep_args_SYSV. */
64
65
  mr %r4,%r1
@@ -70,45 +71,49 @@ ENTRY(ffi_call_SYSV)
70
71
  /* Get the address to call into CTR. */
71
72
  mtctr %r29
72
73
  /* Load all those argument registers. */
73
- lwz %r3,-16-(8*4)(%r28)
74
- lwz %r4,-16-(7*4)(%r28)
75
- lwz %r5,-16-(6*4)(%r28)
76
- lwz %r6,-16-(5*4)(%r28)
74
+ lwz %r3,-24-(8*4)(%r28)
75
+ lwz %r4,-24-(7*4)(%r28)
76
+ lwz %r5,-24-(6*4)(%r28)
77
+ lwz %r6,-24-(5*4)(%r28)
77
78
  bf- 5,1f
78
79
  nop
79
- lwz %r7,-16-(4*4)(%r28)
80
- lwz %r8,-16-(3*4)(%r28)
81
- lwz %r9,-16-(2*4)(%r28)
82
- lwz %r10,-16-(1*4)(%r28)
80
+ lwz %r7,-24-(4*4)(%r28)
81
+ lwz %r8,-24-(3*4)(%r28)
82
+ lwz %r9,-24-(2*4)(%r28)
83
+ lwz %r10,-24-(1*4)(%r28)
83
84
  nop
84
85
  1:
85
86
 
87
+ #ifndef __NO_FPRS__
86
88
  /* Load all the FP registers. */
87
89
  bf- 6,2f
88
- lfd %f1,-16-(8*4)-(8*8)(%r28)
89
- lfd %f2,-16-(8*4)-(7*8)(%r28)
90
- lfd %f3,-16-(8*4)-(6*8)(%r28)
91
- lfd %f4,-16-(8*4)-(5*8)(%r28)
90
+ lfd %f1,-24-(8*4)-(8*8)(%r28)
91
+ lfd %f2,-24-(8*4)-(7*8)(%r28)
92
+ lfd %f3,-24-(8*4)-(6*8)(%r28)
93
+ lfd %f4,-24-(8*4)-(5*8)(%r28)
92
94
  nop
93
- lfd %f5,-16-(8*4)-(4*8)(%r28)
94
- lfd %f6,-16-(8*4)-(3*8)(%r28)
95
- lfd %f7,-16-(8*4)-(2*8)(%r28)
96
- lfd %f8,-16-(8*4)-(1*8)(%r28)
95
+ lfd %f5,-24-(8*4)-(4*8)(%r28)
96
+ lfd %f6,-24-(8*4)-(3*8)(%r28)
97
+ lfd %f7,-24-(8*4)-(2*8)(%r28)
98
+ lfd %f8,-24-(8*4)-(1*8)(%r28)
99
+ #endif
97
100
  2:
98
101
 
99
102
  /* Make the call. */
103
+ lwz %r11, -20(%r28)
100
104
  bctrl
101
105
 
102
106
  /* Now, deal with the return value. */
103
- mtcrf 0x01,%r31 /* cr7 */
107
+ mtcrf 0x03,%r31 /* cr6-cr7 */
104
108
  bt- 31,L(small_struct_return_value)
105
109
  bt- 30,L(done_return_value)
110
+ #ifndef __NO_FPRS__
106
111
  bt- 29,L(fp_return_value)
112
+ #endif
107
113
  stw %r3,0(%r30)
108
- bf+ 28,L(done_return_value)
114
+ bf+ 27,L(done_return_value)
109
115
  stw %r4,4(%r30)
110
- mtcrf 0x02,%r31 /* cr6 */
111
- bf 27,L(done_return_value)
116
+ bf 26,L(done_return_value)
112
117
  stw %r5,8(%r30)
113
118
  stw %r6,12(%r30)
114
119
  /* Fall through... */
@@ -121,99 +126,48 @@ L(done_return_value):
121
126
  lwz %r30, -8(%r28)
122
127
  lwz %r29,-12(%r28)
123
128
  lwz %r28,-16(%r28)
129
+ .cfi_remember_state
130
+ /* At this point we don't have a cfa register. Say all our
131
+ saved regs have been restored. */
132
+ .cfi_same_value 65
133
+ .cfi_same_value 31
134
+ .cfi_same_value 30
135
+ .cfi_same_value 29
136
+ .cfi_same_value 28
137
+ /* Hopefully this works.. */
138
+ .cfi_def_cfa_register 1
139
+ .cfi_offset 1, 0
124
140
  lwz %r1,0(%r1)
141
+ .cfi_same_value 1
125
142
  blr
126
143
 
144
+ #ifndef __NO_FPRS__
127
145
  L(fp_return_value):
128
- bf 28,L(float_return_value)
146
+ .cfi_restore_state
147
+ bf 27,L(float_return_value)
129
148
  stfd %f1,0(%r30)
130
- mtcrf 0x02,%r31 /* cr6 */
131
- bf 27,L(done_return_value)
149
+ bf 26,L(done_return_value)
132
150
  stfd %f2,8(%r30)
133
151
  b L(done_return_value)
134
152
  L(float_return_value):
135
153
  stfs %f1,0(%r30)
136
154
  b L(done_return_value)
155
+ #endif
137
156
 
138
157
  L(small_struct_return_value):
139
- extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */
140
- mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */
141
- extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */
142
- subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */
143
- bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */
144
- /* smst_one_register: */
145
- slw %r3,%r3,%r5 /* Left-justify value in r3 */
146
- mtxer %r6 /* move byte count to XER ... */
147
- stswx %r3,0,%r30 /* ... and store that many bytes */
148
- bf+ 26,L(done_return_value) /* struct in r3:r4 ? */
149
- add %r6,%r6,%r30 /* adjust pointer */
150
- stswi %r4,%r6,4 /* store last four bytes */
151
- b L(done_return_value)
158
+ /*
159
+ * The C code always allocates a properly-aligned 8-byte bounce
160
+ * buffer to make this assembly code very simple. Just write out
161
+ * r3 and r4 to the buffer to allow the C code to handle the rest.
162
+ */
163
+ stw %r3, 0(%r30)
164
+ stw %r4, 4(%r30)
165
+ b L(done_return_value)
166
+ .cfi_endproc
152
167
 
153
- .LFE1:
154
168
  END(ffi_call_SYSV)
155
169
 
156
- .section ".eh_frame",EH_FRAME_FLAGS,@progbits
157
- .Lframe1:
158
- .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */
159
- .LSCIE1:
160
- .4byte 0x0 /* CIE Identifier Tag */
161
- .byte 0x1 /* CIE Version */
162
- #if defined _RELOCATABLE || defined __PIC__
163
- .ascii "zR\0" /* CIE Augmentation */
164
- #else
165
- .ascii "\0" /* CIE Augmentation */
166
- #endif
167
- .uleb128 0x1 /* CIE Code Alignment Factor */
168
- .sleb128 -4 /* CIE Data Alignment Factor */
169
- .byte 0x41 /* CIE RA Column */
170
- #if defined _RELOCATABLE || defined __PIC__
171
- .uleb128 0x1 /* Augmentation size */
172
- .byte 0x1b /* FDE Encoding (pcrel sdata4) */
173
- #endif
174
- .byte 0xc /* DW_CFA_def_cfa */
175
- .uleb128 0x1
176
- .uleb128 0x0
177
- .align 2
178
- .LECIE1:
179
- .LSFDE1:
180
- .4byte .LEFDE1-.LASFDE1 /* FDE Length */
181
- .LASFDE1:
182
- .4byte .LASFDE1-.Lframe1 /* FDE CIE offset */
183
- #if defined _RELOCATABLE || defined __PIC__
184
- .4byte .LFB1-. /* FDE initial location */
185
- #else
186
- .4byte .LFB1 /* FDE initial location */
187
- #endif
188
- .4byte .LFE1-.LFB1 /* FDE address range */
189
- #if defined _RELOCATABLE || defined __PIC__
190
- .uleb128 0x0 /* Augmentation size */
191
- #endif
192
- .byte 0x4 /* DW_CFA_advance_loc4 */
193
- .4byte .LCFI0-.LFB1
194
- .byte 0xd /* DW_CFA_def_cfa_register */
195
- .uleb128 0x08
196
- .byte 0x4 /* DW_CFA_advance_loc4 */
197
- .4byte .LCFI5-.LCFI0
198
- .byte 0x11 /* DW_CFA_offset_extended_sf */
199
- .uleb128 0x41
200
- .sleb128 -1
201
- .byte 0x9f /* DW_CFA_offset, column 0x1f */
202
- .uleb128 0x1
203
- .byte 0x9e /* DW_CFA_offset, column 0x1e */
204
- .uleb128 0x2
205
- .byte 0x9d /* DW_CFA_offset, column 0x1d */
206
- .uleb128 0x3
207
- .byte 0x9c /* DW_CFA_offset, column 0x1c */
208
- .uleb128 0x4
209
- .byte 0x4 /* DW_CFA_advance_loc4 */
210
- .4byte .LCFI6-.LCFI5
211
- .byte 0xd /* DW_CFA_def_cfa_register */
212
- .uleb128 0x1c
213
- .align 2
214
- .LEFDE1:
215
- #endif
216
-
217
170
  #if defined __ELF__ && defined __linux__
218
171
  .section .note.GNU-stack,"",@progbits
219
172
  #endif
173
+ #endif
@@ -0,0 +1,5 @@
1
+ # This file is needed by GCC in order to correctly build AIX FAT
2
+ # library for libffi.
3
+ # However, it has no sense to include this code here, as it depends
4
+ # on GCC multilib architecture.
5
+ # Thus, this file is a simple stub replaced in GCC repository.