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
@@ -0,0 +1,998 @@
1
+ /* -----------------------------------------------------------------------
2
+ sysv.S - Copyright (c) 2017, 2022 Anthony Green
3
+ - Copyright (c) 2013 The Written Word, Inc.
4
+ - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc.
5
+
6
+ X86 Foreign Function Interface
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining
9
+ a copy of this software and associated documentation files (the
10
+ ``Software''), to deal in the Software without restriction, including
11
+ without limitation the rights to use, copy, modify, merge, publish,
12
+ distribute, sublicense, and/or sell copies of the Software, and to
13
+ permit persons to whom the Software is furnished to do so, subject to
14
+ the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included
17
+ in all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
+ DEALINGS IN THE SOFTWARE.
27
+ ----------------------------------------------------------------------- */
28
+
29
+ #ifndef __x86_64__
30
+ #ifdef _MSC_VER
31
+
32
+ #define LIBFFI_ASM
33
+ #include <fficonfig.h>
34
+ #include <ffi.h>
35
+ #include <ffi_cfi.h>
36
+ #include "internal.h"
37
+
38
+ #define C2(X, Y) X ## Y
39
+ #define C1(X, Y) C2(X, Y)
40
+ #define L(X) C1(L, X)
41
+ # define ENDF(X) X ENDP
42
+
43
+ /* This macro allows the safe creation of jump tables without an
44
+ actual table. The entry points into the table are all 8 bytes.
45
+ The use of ORG asserts that we're at the correct location. */
46
+ /* ??? The clang assembler doesn't handle .org with symbolic expressions. */
47
+ #if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__))
48
+ # define E(BASE, X) ALIGN 8
49
+ #else
50
+ # define E(BASE, X) ALIGN 8; ORG BASE + X * 8
51
+ #endif
52
+
53
+ .686P
54
+ .MODEL FLAT
55
+
56
+ EXTRN @ffi_closure_inner@8:PROC
57
+ _TEXT SEGMENT
58
+
59
+ /* This is declared as
60
+
61
+ void ffi_call_i386(struct call_frame *frame, char *argp)
62
+ __attribute__((fastcall));
63
+
64
+ Thus the arguments are present in
65
+
66
+ ecx: frame
67
+ edx: argp
68
+ */
69
+
70
+ ALIGN 16
71
+ PUBLIC @ffi_call_i386@8
72
+ @ffi_call_i386@8 PROC
73
+ L(UW0):
74
+ cfi_startproc
75
+ #if !HAVE_FASTCALL
76
+ mov ecx, [esp+4]
77
+ mov edx, [esp+8]
78
+ #endif
79
+ mov eax, [esp] /* move the return address */
80
+ mov [ecx], ebp /* store ebp into local frame */
81
+ mov [ecx+4], eax /* store retaddr into local frame */
82
+
83
+ /* New stack frame based off ebp. This is a itty bit of unwind
84
+ trickery in that the CFA *has* changed. There is no easy way
85
+ to describe it correctly on entry to the function. Fortunately,
86
+ it doesn't matter too much since at all points we can correctly
87
+ unwind back to ffi_call. Note that the location to which we
88
+ moved the return address is (the new) CFA-4, so from the
89
+ perspective of the unwind info, it hasn't moved. */
90
+ mov ebp, ecx
91
+ L(UW1):
92
+ /* cfi_def_cfa(%ebp, 8) */
93
+ /* cfi_rel_offset(%ebp, 0) */
94
+
95
+ mov esp, edx /* set outgoing argument stack */
96
+ mov eax, [20+R_EAX*4+ebp] /* set register arguments */
97
+ mov edx, [20+R_EDX*4+ebp]
98
+ mov ecx, [20+R_ECX*4+ebp]
99
+
100
+ call dword ptr [ebp+8]
101
+
102
+ mov ecx, [12+ebp] /* load return type code */
103
+ mov [ebp+8], ebx /* preserve %ebx */
104
+ L(UW2):
105
+ /* cfi_rel_offset(%ebx, 8) */
106
+
107
+ and ecx, X86_RET_TYPE_MASK
108
+ lea ebx, [L(store_table) + ecx * 8]
109
+ mov ecx, [ebp+16] /* load result address */
110
+ jmp ebx
111
+
112
+ ALIGN 8
113
+ L(store_table):
114
+ E(L(store_table), X86_RET_FLOAT)
115
+ fstp DWORD PTR [ecx]
116
+ jmp L(e1)
117
+ E(L(store_table), X86_RET_DOUBLE)
118
+ fstp QWORD PTR [ecx]
119
+ jmp L(e1)
120
+ E(L(store_table), X86_RET_LDOUBLE)
121
+ fstp QWORD PTR [ecx]
122
+ jmp L(e1)
123
+ E(L(store_table), X86_RET_SINT8)
124
+ movsx eax, al
125
+ mov [ecx], eax
126
+ jmp L(e1)
127
+ E(L(store_table), X86_RET_SINT16)
128
+ movsx eax, ax
129
+ mov [ecx], eax
130
+ jmp L(e1)
131
+ E(L(store_table), X86_RET_UINT8)
132
+ movzx eax, al
133
+ mov [ecx], eax
134
+ jmp L(e1)
135
+ E(L(store_table), X86_RET_UINT16)
136
+ movzx eax, ax
137
+ mov [ecx], eax
138
+ jmp L(e1)
139
+ E(L(store_table), X86_RET_INT64)
140
+ mov [ecx+4], edx
141
+ /* fallthru */
142
+ E(L(store_table), X86_RET_int 32)
143
+ mov [ecx], eax
144
+ /* fallthru */
145
+ E(L(store_table), X86_RET_VOID)
146
+ L(e1):
147
+ mov ebx, [ebp+8]
148
+ mov esp, ebp
149
+ pop ebp
150
+ L(UW3):
151
+ /* cfi_remember_state */
152
+ /* cfi_def_cfa(%esp, 4) */
153
+ /* cfi_restore(%ebx) */
154
+ /* cfi_restore(%ebp) */
155
+ ret
156
+ L(UW4):
157
+ /* cfi_restore_state */
158
+
159
+ E(L(store_table), X86_RET_STRUCTPOP)
160
+ jmp L(e1)
161
+ E(L(store_table), X86_RET_STRUCTARG)
162
+ jmp L(e1)
163
+ E(L(store_table), X86_RET_STRUCT_1B)
164
+ mov [ecx], al
165
+ jmp L(e1)
166
+ E(L(store_table), X86_RET_STRUCT_2B)
167
+ mov [ecx], ax
168
+ jmp L(e1)
169
+
170
+ /* Fill out the table so that bad values are predictable. */
171
+ E(L(store_table), X86_RET_UNUSED14)
172
+ int 3
173
+ E(L(store_table), X86_RET_UNUSED15)
174
+ int 3
175
+
176
+ L(UW5):
177
+ /* cfi_endproc */
178
+ ENDF(@ffi_call_i386@8)
179
+
180
+ /* The inner helper is declared as
181
+
182
+ void ffi_closure_inner(struct closure_frame *frame, char *argp)
183
+ __attribute_((fastcall))
184
+
185
+ Thus the arguments are placed in
186
+
187
+ ecx: frame
188
+ edx: argp
189
+ */
190
+
191
+ /* Macros to help setting up the closure_data structure. */
192
+
193
+ #if HAVE_FASTCALL
194
+ # define closure_FS (40 + 4)
195
+ # define closure_CF 0
196
+ #else
197
+ # define closure_FS (8 + 40 + 12)
198
+ # define closure_CF 8
199
+ #endif
200
+
201
+ FFI_CLOSURE_SAVE_REGS MACRO
202
+ mov [esp + closure_CF+16+R_EAX*4], eax
203
+ mov [esp + closure_CF+16+R_EDX*4], edx
204
+ mov [esp + closure_CF+16+R_ECX*4], ecx
205
+ ENDM
206
+
207
+ FFI_CLOSURE_COPY_TRAMP_DATA MACRO
208
+ mov edx, [eax+FFI_TRAMPOLINE_SIZE] /* copy cif */
209
+ mov ecx, [eax+FFI_TRAMPOLINE_SIZE+4] /* copy fun */
210
+ mov eax, [eax+FFI_TRAMPOLINE_SIZE+8]; /* copy user_data */
211
+ mov [esp+closure_CF+28], edx
212
+ mov [esp+closure_CF+32], ecx
213
+ mov [esp+closure_CF+36], eax
214
+ ENDM
215
+
216
+ #if HAVE_FASTCALL
217
+ FFI_CLOSURE_PREP_CALL MACRO
218
+ mov ecx, esp /* load closure_data */
219
+ lea edx, [esp+closure_FS+4] /* load incoming stack */
220
+ ENDM
221
+ #else
222
+ FFI_CLOSURE_PREP_CALL MACRO
223
+ lea ecx, [esp+closure_CF] /* load closure_data */
224
+ lea edx, [esp+closure_FS+4] /* load incoming stack */
225
+ mov [esp], ecx
226
+ mov [esp+4], edx
227
+ ENDM
228
+ #endif
229
+
230
+ FFI_CLOSURE_CALL_INNER MACRO UWN
231
+ call @ffi_closure_inner@8
232
+ ENDM
233
+
234
+ FFI_CLOSURE_MASK_AND_JUMP MACRO LABEL
235
+ and eax, X86_RET_TYPE_MASK
236
+ lea edx, [LABEL+eax*8]
237
+ mov eax, [esp+closure_CF] /* optimiztic load */
238
+ jmp edx
239
+ ENDM
240
+
241
+ ALIGN 16
242
+ PUBLIC ffi_go_closure_EAX
243
+ ffi_go_closure_EAX PROC C
244
+ L(UW6):
245
+ /* cfi_startproc */
246
+ sub esp, closure_FS
247
+ L(UW7):
248
+ /* cfi_def_cfa_offset(closure_FS + 4) */
249
+ FFI_CLOSURE_SAVE_REGS
250
+ mov edx, [eax+4] /* copy cif */
251
+ mov ecx, [eax +8] /* copy fun */
252
+ mov [esp+closure_CF+28], edx
253
+ mov [esp+closure_CF+32], ecx
254
+ mov [esp+closure_CF+36], eax /* closure is user_data */
255
+ jmp L(do_closure_i386)
256
+ L(UW8):
257
+ /* cfi_endproc */
258
+ ENDF(ffi_go_closure_EAX)
259
+
260
+ ALIGN 16
261
+ PUBLIC ffi_go_closure_ECX
262
+ ffi_go_closure_ECX PROC C
263
+ L(UW9):
264
+ /* cfi_startproc */
265
+ sub esp, closure_FS
266
+ L(UW10):
267
+ /* cfi_def_cfa_offset(closure_FS + 4) */
268
+ FFI_CLOSURE_SAVE_REGS
269
+ mov edx, [ecx+4] /* copy cif */
270
+ mov eax, [ecx+8] /* copy fun */
271
+ mov [esp+closure_CF+28], edx
272
+ mov [esp+closure_CF+32], eax
273
+ mov [esp+closure_CF+36], ecx /* closure is user_data */
274
+ jmp L(do_closure_i386)
275
+ L(UW11):
276
+ /* cfi_endproc */
277
+ ENDF(ffi_go_closure_ECX)
278
+
279
+ /* The closure entry points are reached from the ffi_closure trampoline.
280
+ On entry, %eax contains the address of the ffi_closure. */
281
+
282
+ ALIGN 16
283
+ PUBLIC ffi_closure_i386
284
+ ffi_closure_i386 PROC C
285
+ L(UW12):
286
+ /* cfi_startproc */
287
+ sub esp, closure_FS
288
+ L(UW13):
289
+ /* cfi_def_cfa_offset(closure_FS + 4) */
290
+
291
+ FFI_CLOSURE_SAVE_REGS
292
+ FFI_CLOSURE_COPY_TRAMP_DATA
293
+
294
+ /* Entry point from preceeding Go closures. */
295
+ L(do_closure_i386)::
296
+
297
+ FFI_CLOSURE_PREP_CALL
298
+ FFI_CLOSURE_CALL_INNER(14)
299
+ FFI_CLOSURE_MASK_AND_JUMP L(C1(load_table,2))
300
+
301
+ ALIGN 8
302
+ L(load_table2):
303
+ E(L(load_table2), X86_RET_FLOAT)
304
+ fld dword ptr [esp+closure_CF]
305
+ jmp L(e2)
306
+ E(L(load_table2), X86_RET_DOUBLE)
307
+ fld qword ptr [esp+closure_CF]
308
+ jmp L(e2)
309
+ E(L(load_table2), X86_RET_LDOUBLE)
310
+ fld qword ptr [esp+closure_CF]
311
+ jmp L(e2)
312
+ E(L(load_table2), X86_RET_SINT8)
313
+ movsx eax, al
314
+ jmp L(e2)
315
+ E(L(load_table2), X86_RET_SINT16)
316
+ movsx eax, ax
317
+ jmp L(e2)
318
+ E(L(load_table2), X86_RET_UINT8)
319
+ movzx eax, al
320
+ jmp L(e2)
321
+ E(L(load_table2), X86_RET_UINT16)
322
+ movzx eax, ax
323
+ jmp L(e2)
324
+ E(L(load_table2), X86_RET_INT64)
325
+ mov edx, [esp+closure_CF+4]
326
+ jmp L(e2)
327
+ E(L(load_table2), X86_RET_INT32)
328
+ nop
329
+ /* fallthru */
330
+ E(L(load_table2), X86_RET_VOID)
331
+ L(e2):
332
+ add esp, closure_FS
333
+ L(UW16):
334
+ /* cfi_adjust_cfa_offset(-closure_FS) */
335
+ ret
336
+ L(UW17):
337
+ /* cfi_adjust_cfa_offset(closure_FS) */
338
+ E(L(load_table2), X86_RET_STRUCTPOP)
339
+ add esp, closure_FS
340
+ L(UW18):
341
+ /* cfi_adjust_cfa_offset(-closure_FS) */
342
+ ret 4
343
+ L(UW19):
344
+ /* cfi_adjust_cfa_offset(closure_FS) */
345
+ E(L(load_table2), X86_RET_STRUCTARG)
346
+ jmp L(e2)
347
+ E(L(load_table2), X86_RET_STRUCT_1B)
348
+ movzx eax, al
349
+ jmp L(e2)
350
+ E(L(load_table2), X86_RET_STRUCT_2B)
351
+ movzx eax, ax
352
+ jmp L(e2)
353
+
354
+ /* Fill out the table so that bad values are predictable. */
355
+ E(L(load_table2), X86_RET_UNUSED14)
356
+ int 3
357
+ E(L(load_table2), X86_RET_UNUSED15)
358
+ int 3
359
+
360
+ L(UW20):
361
+ /* cfi_endproc */
362
+ ENDF(ffi_closure_i386)
363
+
364
+ ALIGN 16
365
+ PUBLIC ffi_go_closure_STDCALL
366
+ ffi_go_closure_STDCALL PROC C
367
+ L(UW21):
368
+ /* cfi_startproc */
369
+ sub esp, closure_FS
370
+ L(UW22):
371
+ /* cfi_def_cfa_offset(closure_FS + 4) */
372
+ FFI_CLOSURE_SAVE_REGS
373
+ mov edx, [ecx+4] /* copy cif */
374
+ mov eax, [ecx+8] /* copy fun */
375
+ mov [esp+closure_CF+28], edx
376
+ mov [esp+closure_CF+32], eax
377
+ mov [esp+closure_CF+36], ecx /* closure is user_data */
378
+ jmp L(do_closure_STDCALL)
379
+ L(UW23):
380
+ /* cfi_endproc */
381
+ ENDF(ffi_go_closure_STDCALL)
382
+
383
+ /* For REGISTER, we have no available parameter registers, and so we
384
+ enter here having pushed the closure onto the stack. */
385
+
386
+ ALIGN 16
387
+ PUBLIC ffi_closure_REGISTER
388
+ ffi_closure_REGISTER PROC C
389
+ L(UW24):
390
+ /* cfi_startproc */
391
+ /* cfi_def_cfa(%esp, 8) */
392
+ /* cfi_offset(%eip, -8) */
393
+ sub esp, closure_FS-4
394
+ L(UW25):
395
+ /* cfi_def_cfa_offset(closure_FS + 4) */
396
+ FFI_CLOSURE_SAVE_REGS
397
+ mov ecx, [esp+closure_FS-4] /* load retaddr */
398
+ mov eax, [esp+closure_FS] /* load closure */
399
+ mov [esp+closure_FS], ecx /* move retaddr */
400
+ jmp L(do_closure_REGISTER)
401
+ L(UW26):
402
+ /* cfi_endproc */
403
+ ENDF(ffi_closure_REGISTER)
404
+
405
+ /* For STDCALL (and others), we need to pop N bytes of arguments off
406
+ the stack following the closure. The amount needing to be popped
407
+ is returned to us from ffi_closure_inner. */
408
+
409
+ ALIGN 16
410
+ PUBLIC ffi_closure_STDCALL
411
+ ffi_closure_STDCALL PROC C
412
+ L(UW27):
413
+ /* cfi_startproc */
414
+ sub esp, closure_FS
415
+ L(UW28):
416
+ /* cfi_def_cfa_offset(closure_FS + 4) */
417
+
418
+ FFI_CLOSURE_SAVE_REGS
419
+
420
+ /* Entry point from ffi_closure_REGISTER. */
421
+ L(do_closure_REGISTER)::
422
+
423
+ FFI_CLOSURE_COPY_TRAMP_DATA
424
+
425
+ /* Entry point from preceeding Go closure. */
426
+ L(do_closure_STDCALL)::
427
+
428
+ FFI_CLOSURE_PREP_CALL
429
+ FFI_CLOSURE_CALL_INNER(29)
430
+
431
+ mov ecx, eax
432
+ shr ecx, X86_RET_POP_SHIFT /* isolate pop count */
433
+ lea ecx, [esp+closure_FS+ecx] /* compute popped esp */
434
+ mov edx, [esp+closure_FS] /* move return address */
435
+ mov [ecx], edx
436
+
437
+ /* From this point on, the value of %esp upon return is %ecx+4,
438
+ and we've copied the return address to %ecx to make return easy.
439
+ There's no point in representing this in the unwind info, as
440
+ there is always a window between the mov and the ret which
441
+ will be wrong from one point of view or another. */
442
+
443
+ FFI_CLOSURE_MASK_AND_JUMP L(C1(load_table,3))
444
+
445
+ ALIGN 8
446
+ L(load_table3):
447
+ E(L(load_table3), X86_RET_FLOAT)
448
+ fld DWORD PTR [esp+closure_CF]
449
+ mov esp, ecx
450
+ ret
451
+ E(L(load_table3), X86_RET_DOUBLE)
452
+ fld QWORD PTR [esp+closure_CF]
453
+ mov esp, ecx
454
+ ret
455
+ E(L(load_table3), X86_RET_LDOUBLE)
456
+ fld QWORD PTR [esp+closure_CF]
457
+ mov esp, ecx
458
+ ret
459
+ E(L(load_table3), X86_RET_SINT8)
460
+ movsx eax, al
461
+ mov esp, ecx
462
+ ret
463
+ E(L(load_table3), X86_RET_SINT16)
464
+ movsx eax, ax
465
+ mov esp, ecx
466
+ ret
467
+ E(L(load_table3), X86_RET_UINT8)
468
+ movzx eax, al
469
+ mov esp, ecx
470
+ ret
471
+ E(L(load_table3), X86_RET_UINT16)
472
+ movzx eax, ax
473
+ mov esp, ecx
474
+ ret
475
+ E(L(load_table3), X86_RET_INT64)
476
+ mov edx, [esp+closure_CF+4]
477
+ mov esp, ecx
478
+ ret
479
+ E(L(load_table3), X86_RET_int 32)
480
+ mov esp, ecx
481
+ ret
482
+ E(L(load_table3), X86_RET_VOID)
483
+ mov esp, ecx
484
+ ret
485
+ E(L(load_table3), X86_RET_STRUCTPOP)
486
+ mov esp, ecx
487
+ ret
488
+ E(L(load_table3), X86_RET_STRUCTARG)
489
+ mov esp, ecx
490
+ ret
491
+ E(L(load_table3), X86_RET_STRUCT_1B)
492
+ movzx eax, al
493
+ mov esp, ecx
494
+ ret
495
+ E(L(load_table3), X86_RET_STRUCT_2B)
496
+ movzx eax, ax
497
+ mov esp, ecx
498
+ ret
499
+
500
+ /* Fill out the table so that bad values are predictable. */
501
+ E(L(load_table3), X86_RET_UNUSED14)
502
+ int 3
503
+ E(L(load_table3), X86_RET_UNUSED15)
504
+ int 3
505
+
506
+ L(UW31):
507
+ /* cfi_endproc */
508
+ ENDF(ffi_closure_STDCALL)
509
+
510
+ #if !FFI_NO_RAW_API
511
+
512
+ #define raw_closure_S_FS (16+16+12)
513
+
514
+ ALIGN 16
515
+ PUBLIC ffi_closure_raw_SYSV
516
+ ffi_closure_raw_SYSV PROC C
517
+ L(UW32):
518
+ /* cfi_startproc */
519
+ sub esp, raw_closure_S_FS
520
+ L(UW33):
521
+ /* cfi_def_cfa_offset(raw_closure_S_FS + 4) */
522
+ mov [esp+raw_closure_S_FS-4], ebx
523
+ L(UW34):
524
+ /* cfi_rel_offset(%ebx, raw_closure_S_FS-4) */
525
+
526
+ mov edx, [eax+FFI_TRAMPOLINE_SIZE+8] /* load cl->user_data */
527
+ mov [esp+12], edx
528
+ lea edx, [esp+raw_closure_S_FS+4] /* load raw_args */
529
+ mov [esp+8], edx
530
+ lea edx, [esp+16] /* load &res */
531
+ mov [esp+4], edx
532
+ mov ebx, [eax+FFI_TRAMPOLINE_SIZE] /* load cl->cif */
533
+ mov [esp], ebx
534
+ call DWORD PTR [eax+FFI_TRAMPOLINE_SIZE+4] /* call cl->fun */
535
+
536
+ mov eax, [ebx+20] /* load cif->flags */
537
+ and eax, X86_RET_TYPE_MASK
538
+ /* #ifdef __PIC__ */
539
+ /* call __x86.get_pc_thunk.bx */
540
+ /* L(pc4): */
541
+ /* lea ecx, L(load_table4)-L(pc4)(%ebx, %eax, 8), %ecx */
542
+ /* #else */
543
+ lea ecx, [L(load_table4)+eax+8]
544
+ /* #endif */
545
+ mov ebx, [esp+raw_closure_S_FS-4]
546
+ L(UW35):
547
+ /* cfi_restore(%ebx) */
548
+ mov eax, [esp+16] /* Optimistic load */
549
+ jmp dword ptr [ecx]
550
+
551
+ ALIGN 8
552
+ L(load_table4):
553
+ E(L(load_table4), X86_RET_FLOAT)
554
+ fld DWORD PTR [esp +16]
555
+ jmp L(e4)
556
+ E(L(load_table4), X86_RET_DOUBLE)
557
+ fld QWORD PTR [esp +16]
558
+ jmp L(e4)
559
+ E(L(load_table4), X86_RET_LDOUBLE)
560
+ fld QWORD PTR [esp +16]
561
+ jmp L(e4)
562
+ E(L(load_table4), X86_RET_SINT8)
563
+ movsx eax, al
564
+ jmp L(e4)
565
+ E(L(load_table4), X86_RET_SINT16)
566
+ movsx eax, ax
567
+ jmp L(e4)
568
+ E(L(load_table4), X86_RET_UINT8)
569
+ movzx eax, al
570
+ jmp L(e4)
571
+ E(L(load_table4), X86_RET_UINT16)
572
+ movzx eax, ax
573
+ jmp L(e4)
574
+ E(L(load_table4), X86_RET_INT64)
575
+ mov edx, [esp+16+4]
576
+ jmp L(e4)
577
+ E(L(load_table4), X86_RET_int 32)
578
+ nop
579
+ /* fallthru */
580
+ E(L(load_table4), X86_RET_VOID)
581
+ L(e4):
582
+ add esp, raw_closure_S_FS
583
+ L(UW36):
584
+ /* cfi_adjust_cfa_offset(-raw_closure_S_FS) */
585
+ ret
586
+ L(UW37):
587
+ /* cfi_adjust_cfa_offset(raw_closure_S_FS) */
588
+ E(L(load_table4), X86_RET_STRUCTPOP)
589
+ add esp, raw_closure_S_FS
590
+ L(UW38):
591
+ /* cfi_adjust_cfa_offset(-raw_closure_S_FS) */
592
+ ret 4
593
+ L(UW39):
594
+ /* cfi_adjust_cfa_offset(raw_closure_S_FS) */
595
+ E(L(load_table4), X86_RET_STRUCTARG)
596
+ jmp L(e4)
597
+ E(L(load_table4), X86_RET_STRUCT_1B)
598
+ movzx eax, al
599
+ jmp L(e4)
600
+ E(L(load_table4), X86_RET_STRUCT_2B)
601
+ movzx eax, ax
602
+ jmp L(e4)
603
+
604
+ /* Fill out the table so that bad values are predictable. */
605
+ E(L(load_table4), X86_RET_UNUSED14)
606
+ int 3
607
+ E(L(load_table4), X86_RET_UNUSED15)
608
+ int 3
609
+
610
+ L(UW40):
611
+ /* cfi_endproc */
612
+ ENDF(ffi_closure_raw_SYSV)
613
+
614
+ #define raw_closure_T_FS (16+16+8)
615
+
616
+ ALIGN 16
617
+ PUBLIC ffi_closure_raw_THISCALL
618
+ ffi_closure_raw_THISCALL PROC C
619
+ L(UW41):
620
+ /* cfi_startproc */
621
+ /* Rearrange the stack such that %ecx is the first argument.
622
+ This means moving the return address. */
623
+ pop edx
624
+ L(UW42):
625
+ /* cfi_def_cfa_offset(0) */
626
+ /* cfi_register(%eip, %edx) */
627
+ push ecx
628
+ L(UW43):
629
+ /* cfi_adjust_cfa_offset(4) */
630
+ push edx
631
+ L(UW44):
632
+ /* cfi_adjust_cfa_offset(4) */
633
+ /* cfi_rel_offset(%eip, 0) */
634
+ sub esp, raw_closure_T_FS
635
+ L(UW45):
636
+ /* cfi_adjust_cfa_offset(raw_closure_T_FS) */
637
+ mov [esp+raw_closure_T_FS-4], ebx
638
+ L(UW46):
639
+ /* cfi_rel_offset(%ebx, raw_closure_T_FS-4) */
640
+
641
+ mov edx, [eax+FFI_TRAMPOLINE_SIZE+8] /* load cl->user_data */
642
+ mov [esp+12], edx
643
+ lea edx, [esp+raw_closure_T_FS+4] /* load raw_args */
644
+ mov [esp+8], edx
645
+ lea edx, [esp+16] /* load &res */
646
+ mov [esp+4], edx
647
+ mov ebx, [eax+FFI_TRAMPOLINE_SIZE] /* load cl->cif */
648
+ mov [esp], ebx
649
+ call DWORD PTR [eax+FFI_TRAMPOLINE_SIZE+4] /* call cl->fun */
650
+
651
+ mov eax, [ebx+20] /* load cif->flags */
652
+ and eax, X86_RET_TYPE_MASK
653
+ /* #ifdef __PIC__ */
654
+ /* call __x86.get_pc_thunk.bx */
655
+ /* L(pc5): */
656
+ /* leal L(load_table5)-L(pc5)(%ebx, %eax, 8), %ecx */
657
+ /* #else */
658
+ lea ecx, [L(load_table5)+eax*8]
659
+ /*#endif */
660
+ mov ebx, [esp+raw_closure_T_FS-4]
661
+ L(UW47):
662
+ /* cfi_restore(%ebx) */
663
+ mov eax, [esp+16] /* Optimistic load */
664
+ jmp DWORD PTR [ecx]
665
+
666
+ AlIGN 4
667
+ L(load_table5):
668
+ E(L(load_table5), X86_RET_FLOAT)
669
+ fld DWORD PTR [esp +16]
670
+ jmp L(e5)
671
+ E(L(load_table5), X86_RET_DOUBLE)
672
+ fld QWORD PTR [esp +16]
673
+ jmp L(e5)
674
+ E(L(load_table5), X86_RET_LDOUBLE)
675
+ fld QWORD PTR [esp+16]
676
+ jmp L(e5)
677
+ E(L(load_table5), X86_RET_SINT8)
678
+ movsx eax, al
679
+ jmp L(e5)
680
+ E(L(load_table5), X86_RET_SINT16)
681
+ movsx eax, ax
682
+ jmp L(e5)
683
+ E(L(load_table5), X86_RET_UINT8)
684
+ movzx eax, al
685
+ jmp L(e5)
686
+ E(L(load_table5), X86_RET_UINT16)
687
+ movzx eax, ax
688
+ jmp L(e5)
689
+ E(L(load_table5), X86_RET_INT64)
690
+ mov edx, [esp+16+4]
691
+ jmp L(e5)
692
+ E(L(load_table5), X86_RET_int 32)
693
+ nop
694
+ /* fallthru */
695
+ E(L(load_table5), X86_RET_VOID)
696
+ L(e5):
697
+ add esp, raw_closure_T_FS
698
+ L(UW48):
699
+ /* cfi_adjust_cfa_offset(-raw_closure_T_FS) */
700
+ /* Remove the extra %ecx argument we pushed. */
701
+ ret 4
702
+ L(UW49):
703
+ /* cfi_adjust_cfa_offset(raw_closure_T_FS) */
704
+ E(L(load_table5), X86_RET_STRUCTPOP)
705
+ add esp, raw_closure_T_FS
706
+ L(UW50):
707
+ /* cfi_adjust_cfa_offset(-raw_closure_T_FS) */
708
+ ret 8
709
+ L(UW51):
710
+ /* cfi_adjust_cfa_offset(raw_closure_T_FS) */
711
+ E(L(load_table5), X86_RET_STRUCTARG)
712
+ jmp L(e5)
713
+ E(L(load_table5), X86_RET_STRUCT_1B)
714
+ movzx eax, al
715
+ jmp L(e5)
716
+ E(L(load_table5), X86_RET_STRUCT_2B)
717
+ movzx eax, ax
718
+ jmp L(e5)
719
+
720
+ /* Fill out the table so that bad values are predictable. */
721
+ E(L(load_table5), X86_RET_UNUSED14)
722
+ int 3
723
+ E(L(load_table5), X86_RET_UNUSED15)
724
+ int 3
725
+
726
+ L(UW52):
727
+ /* cfi_endproc */
728
+ ENDF(ffi_closure_raw_THISCALL)
729
+
730
+ #endif /* !FFI_NO_RAW_API */
731
+
732
+ #ifdef X86_DARWIN
733
+ # define COMDAT(X) \
734
+ .section __TEXT,__text,coalesced,pure_instructions; \
735
+ .weak_definition X; \
736
+ FFI_HIDDEN(X)
737
+ #elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__))
738
+ # define COMDAT(X) \
739
+ .section .text.X,"axG",@progbits,X,comdat; \
740
+ PUBLIC X; \
741
+ FFI_HIDDEN(X)
742
+ #else
743
+ # define COMDAT(X)
744
+ #endif
745
+
746
+ #if 0
747
+ #if defined(__PIC__)
748
+ COMDAT(C(__x86.get_pc_thunk.bx))
749
+ C(__x86.get_pc_thunk.bx):
750
+ movl (%esp), %ebx
751
+ ret
752
+ ENDF(C(__x86.get_pc_thunk.bx))
753
+ # if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
754
+ COMDAT(C(__x86.get_pc_thunk.dx))
755
+ C(__x86.get_pc_thunk.dx):
756
+ movl (%esp), %edx
757
+ ret
758
+ ENDF(C(__x86.get_pc_thunk.dx))
759
+ #endif /* DARWIN || HIDDEN */
760
+ #endif /* __PIC__ */
761
+ #endif
762
+
763
+
764
+ #if 0
765
+ /* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */
766
+
767
+ #ifdef __APPLE__
768
+ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
769
+ EHFrame0:
770
+ #elif defined(X86_WIN32)
771
+ .section .eh_frame,"r"
772
+ #elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE)
773
+ .section .eh_frame,EH_FRAME_FLAGS,@unwind
774
+ #else
775
+ .section .eh_frame,EH_FRAME_FLAGS,@progbits
776
+ #endif
777
+
778
+ #ifdef HAVE_AS_X86_PCREL
779
+ # define PCREL(X) X - .
780
+ #else
781
+ # define PCREL(X) X@rel
782
+ #endif
783
+
784
+ /* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */
785
+ #define ADV(N, P) .byte 2, L(N)-L(P)
786
+
787
+ .balign 4
788
+ L(CIE):
789
+ .set L(set0),L(ECIE)-L(SCIE)
790
+ .long L(set0) /* CIE Length */
791
+ L(SCIE):
792
+ .long 0 /* CIE Identifier Tag */
793
+ .byte 1 /* CIE Version */
794
+ .ascii "zR\0" /* CIE Augmentation */
795
+ .byte 1 /* CIE Code Alignment Factor */
796
+ .byte 0x7c /* CIE Data Alignment Factor */
797
+ .byte 0x8 /* CIE RA Column */
798
+ .byte 1 /* Augmentation size */
799
+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */
800
+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */
801
+ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */
802
+ .balign 4
803
+ L(ECIE):
804
+
805
+ .set L(set1),L(EFDE1)-L(SFDE1)
806
+ .long L(set1) /* FDE Length */
807
+ L(SFDE1):
808
+ .long L(SFDE1)-L(CIE) /* FDE CIE offset */
809
+ .long PCREL(L(UW0)) /* Initial location */
810
+ .long L(UW5)-L(UW0) /* Address range */
811
+ .byte 0 /* Augmentation size */
812
+ ADV(UW1, UW0)
813
+ .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */
814
+ .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */
815
+ ADV(UW2, UW1)
816
+ .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */
817
+ ADV(UW3, UW2)
818
+ .byte 0xa /* DW_CFA_remember_state */
819
+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */
820
+ .byte 0xc0+3 /* DW_CFA_restore, %ebx */
821
+ .byte 0xc0+5 /* DW_CFA_restore, %ebp */
822
+ ADV(UW4, UW3)
823
+ .byte 0xb /* DW_CFA_restore_state */
824
+ .balign 4
825
+ L(EFDE1):
826
+
827
+ .set L(set2),L(EFDE2)-L(SFDE2)
828
+ .long L(set2) /* FDE Length */
829
+ L(SFDE2):
830
+ .long L(SFDE2)-L(CIE) /* FDE CIE offset */
831
+ .long PCREL(L(UW6)) /* Initial location */
832
+ .long L(UW8)-L(UW6) /* Address range */
833
+ .byte 0 /* Augmentation size */
834
+ ADV(UW7, UW6)
835
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
836
+ .balign 4
837
+ L(EFDE2):
838
+
839
+ .set L(set3),L(EFDE3)-L(SFDE3)
840
+ .long L(set3) /* FDE Length */
841
+ L(SFDE3):
842
+ .long L(SFDE3)-L(CIE) /* FDE CIE offset */
843
+ .long PCREL(L(UW9)) /* Initial location */
844
+ .long L(UW11)-L(UW9) /* Address range */
845
+ .byte 0 /* Augmentation size */
846
+ ADV(UW10, UW9)
847
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
848
+ .balign 4
849
+ L(EFDE3):
850
+
851
+ .set L(set4),L(EFDE4)-L(SFDE4)
852
+ .long L(set4) /* FDE Length */
853
+ L(SFDE4):
854
+ .long L(SFDE4)-L(CIE) /* FDE CIE offset */
855
+ .long PCREL(L(UW12)) /* Initial location */
856
+ .long L(UW20)-L(UW12) /* Address range */
857
+ .byte 0 /* Augmentation size */
858
+ ADV(UW13, UW12)
859
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
860
+ #ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX
861
+ ADV(UW14, UW13)
862
+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */
863
+ ADV(UW15, UW14)
864
+ .byte 0xc0+3 /* DW_CFA_restore %ebx */
865
+ ADV(UW16, UW15)
866
+ #else
867
+ ADV(UW16, UW13)
868
+ #endif
869
+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */
870
+ ADV(UW17, UW16)
871
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
872
+ ADV(UW18, UW17)
873
+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */
874
+ ADV(UW19, UW18)
875
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
876
+ .balign 4
877
+ L(EFDE4):
878
+
879
+ .set L(set5),L(EFDE5)-L(SFDE5)
880
+ .long L(set5) /* FDE Length */
881
+ L(SFDE5):
882
+ .long L(SFDE5)-L(CIE) /* FDE CIE offset */
883
+ .long PCREL(L(UW21)) /* Initial location */
884
+ .long L(UW23)-L(UW21) /* Address range */
885
+ .byte 0 /* Augmentation size */
886
+ ADV(UW22, UW21)
887
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
888
+ .balign 4
889
+ L(EFDE5):
890
+
891
+ .set L(set6),L(EFDE6)-L(SFDE6)
892
+ .long L(set6) /* FDE Length */
893
+ L(SFDE6):
894
+ .long L(SFDE6)-L(CIE) /* FDE CIE offset */
895
+ .long PCREL(L(UW24)) /* Initial location */
896
+ .long L(UW26)-L(UW24) /* Address range */
897
+ .byte 0 /* Augmentation size */
898
+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */
899
+ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */
900
+ ADV(UW25, UW24)
901
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
902
+ .balign 4
903
+ L(EFDE6):
904
+
905
+ .set L(set7),L(EFDE7)-L(SFDE7)
906
+ .long L(set7) /* FDE Length */
907
+ L(SFDE7):
908
+ .long L(SFDE7)-L(CIE) /* FDE CIE offset */
909
+ .long PCREL(L(UW27)) /* Initial location */
910
+ .long L(UW31)-L(UW27) /* Address range */
911
+ .byte 0 /* Augmentation size */
912
+ ADV(UW28, UW27)
913
+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */
914
+ #ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX
915
+ ADV(UW29, UW28)
916
+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */
917
+ ADV(UW30, UW29)
918
+ .byte 0xc0+3 /* DW_CFA_restore %ebx */
919
+ #endif
920
+ .balign 4
921
+ L(EFDE7):
922
+
923
+ #if !FFI_NO_RAW_API
924
+ .set L(set8),L(EFDE8)-L(SFDE8)
925
+ .long L(set8) /* FDE Length */
926
+ L(SFDE8):
927
+ .long L(SFDE8)-L(CIE) /* FDE CIE offset */
928
+ .long PCREL(L(UW32)) /* Initial location */
929
+ .long L(UW40)-L(UW32) /* Address range */
930
+ .byte 0 /* Augmentation size */
931
+ ADV(UW33, UW32)
932
+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */
933
+ ADV(UW34, UW33)
934
+ .byte 0x80+3, 2 /* DW_CFA_offset %ebx 2*-4 */
935
+ ADV(UW35, UW34)
936
+ .byte 0xc0+3 /* DW_CFA_restore %ebx */
937
+ ADV(UW36, UW35)
938
+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */
939
+ ADV(UW37, UW36)
940
+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */
941
+ ADV(UW38, UW37)
942
+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */
943
+ ADV(UW39, UW38)
944
+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */
945
+ .balign 4
946
+ L(EFDE8):
947
+
948
+ .set L(set9),L(EFDE9)-L(SFDE9)
949
+ .long L(set9) /* FDE Length */
950
+ L(SFDE9):
951
+ .long L(SFDE9)-L(CIE) /* FDE CIE offset */
952
+ .long PCREL(L(UW41)) /* Initial location */
953
+ .long L(UW52)-L(UW41) /* Address range */
954
+ .byte 0 /* Augmentation size */
955
+ ADV(UW42, UW41)
956
+ .byte 0xe, 0 /* DW_CFA_def_cfa_offset */
957
+ .byte 0x9, 8, 2 /* DW_CFA_register %eip, %edx */
958
+ ADV(UW43, UW42)
959
+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */
960
+ ADV(UW44, UW43)
961
+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */
962
+ .byte 0x80+8, 2 /* DW_CFA_offset %eip 2*-4 */
963
+ ADV(UW45, UW44)
964
+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */
965
+ ADV(UW46, UW45)
966
+ .byte 0x80+3, 3 /* DW_CFA_offset %ebx 3*-4 */
967
+ ADV(UW47, UW46)
968
+ .byte 0xc0+3 /* DW_CFA_restore %ebx */
969
+ ADV(UW48, UW47)
970
+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */
971
+ ADV(UW49, UW48)
972
+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */
973
+ ADV(UW50, UW49)
974
+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */
975
+ ADV(UW51, UW50)
976
+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */
977
+ .balign 4
978
+ L(EFDE9):
979
+ #endif /* !FFI_NO_RAW_API */
980
+
981
+ #ifdef _WIN32
982
+ .def @feat.00;
983
+ .scl 3;
984
+ .type 0;
985
+ .endef
986
+ PUBLIC @feat.00
987
+ @feat.00 = 1
988
+ #endif
989
+
990
+ #endif /* ifndef _MSC_VER */
991
+ #endif /* ifndef __x86_64__ */
992
+
993
+ #if defined __ELF__ && defined __linux__
994
+ .section .note.GNU-stack,"",@progbits
995
+ #endif
996
+ #endif
997
+
998
+ END