ffi 1.0.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +4 -0
  3. data/CHANGELOG.md +465 -0
  4. data/COPYING +49 -0
  5. data/Gemfile +21 -0
  6. data/LICENSE +21 -11
  7. data/LICENSE.SPECS +22 -0
  8. data/README.md +137 -0
  9. data/Rakefile +165 -148
  10. data/ext/ffi_c/AbstractMemory.c +716 -97
  11. data/ext/ffi_c/AbstractMemory.h +38 -17
  12. data/ext/ffi_c/ArrayType.c +102 -33
  13. data/ext/ffi_c/ArrayType.h +20 -18
  14. data/ext/ffi_c/Buffer.c +229 -54
  15. data/ext/ffi_c/Call.c +211 -100
  16. data/ext/ffi_c/Call.h +46 -28
  17. data/ext/ffi_c/ClosurePool.c +110 -81
  18. data/ext/ffi_c/ClosurePool.h +31 -1
  19. data/ext/ffi_c/DynamicLibrary.c +216 -54
  20. data/ext/ffi_c/DynamicLibrary.h +76 -0
  21. data/ext/ffi_c/Function.c +527 -164
  22. data/ext/ffi_c/Function.h +24 -20
  23. data/ext/ffi_c/FunctionInfo.c +151 -50
  24. data/ext/ffi_c/LastError.c +112 -28
  25. data/ext/ffi_c/LastError.h +29 -0
  26. data/ext/ffi_c/LongDouble.c +65 -0
  27. data/ext/ffi_c/LongDouble.h +47 -0
  28. data/ext/ffi_c/MappedType.c +107 -42
  29. data/ext/ffi_c/MappedType.h +20 -20
  30. data/ext/ffi_c/MemoryPointer.c +108 -46
  31. data/ext/ffi_c/MemoryPointer.h +33 -4
  32. data/ext/ffi_c/MethodHandle.c +71 -67
  33. data/ext/ffi_c/MethodHandle.h +26 -23
  34. data/ext/ffi_c/Platform.c +42 -25
  35. data/ext/ffi_c/Platform.h +32 -3
  36. data/ext/ffi_c/Pointer.c +324 -51
  37. data/ext/ffi_c/Pointer.h +29 -18
  38. data/ext/ffi_c/Struct.c +434 -161
  39. data/ext/ffi_c/Struct.h +47 -27
  40. data/ext/ffi_c/StructByValue.c +74 -37
  41. data/ext/ffi_c/StructByValue.h +20 -18
  42. data/ext/ffi_c/StructLayout.c +358 -87
  43. data/ext/ffi_c/Thread.c +129 -0
  44. data/ext/ffi_c/Thread.h +76 -0
  45. data/ext/ffi_c/Type.c +241 -76
  46. data/ext/ffi_c/Type.h +27 -11
  47. data/ext/ffi_c/Types.c +54 -34
  48. data/ext/ffi_c/Types.h +24 -24
  49. data/ext/ffi_c/Variadic.c +151 -55
  50. data/ext/ffi_c/compat.h +48 -38
  51. data/ext/ffi_c/extconf.rb +106 -34
  52. data/ext/ffi_c/ffi.c +35 -26
  53. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  54. data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
  55. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
  56. data/ext/ffi_c/libffi/.appveyor.yml +84 -0
  57. data/ext/ffi_c/libffi/.ci/ar-lib +270 -0
  58. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +58 -0
  59. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
  60. data/ext/ffi_c/libffi/.ci/build-in-container.sh +10 -0
  61. data/ext/ffi_c/libffi/.ci/build.sh +124 -0
  62. data/ext/ffi_c/libffi/.ci/compile +351 -0
  63. data/ext/ffi_c/libffi/.ci/install.sh +78 -0
  64. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +58 -0
  65. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +60 -0
  66. data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
  67. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +58 -0
  68. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +58 -0
  69. data/ext/ffi_c/libffi/.ci/site.exp +29 -0
  70. data/ext/ffi_c/libffi/.ci/wine-sim.exp +55 -0
  71. data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
  72. data/ext/ffi_c/libffi/.gitattributes +4 -0
  73. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  74. data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
  75. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
  76. data/ext/ffi_c/libffi/.gitignore +46 -0
  77. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.old} +6528 -3180
  78. data/ext/ffi_c/libffi/LICENSE +3 -3
  79. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +353 -0
  80. data/ext/ffi_c/libffi/Makefile.am +132 -162
  81. data/ext/ffi_c/libffi/Makefile.in +1339 -1003
  82. data/ext/ffi_c/libffi/README.md +531 -0
  83. data/ext/ffi_c/libffi/acinclude.m4 +289 -4
  84. data/ext/ffi_c/libffi/autogen.sh +2 -0
  85. data/ext/ffi_c/libffi/compile +227 -21
  86. data/ext/ffi_c/libffi/config.guess +1034 -778
  87. data/ext/ffi_c/libffi/config.sub +1394 -1204
  88. data/ext/ffi_c/libffi/configure +14327 -8503
  89. data/ext/ffi_c/libffi/configure.ac +294 -247
  90. data/ext/ffi_c/libffi/configure.host +330 -4
  91. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  92. data/ext/ffi_c/libffi/doc/Makefile.in +818 -0
  93. data/ext/ffi_c/libffi/doc/libffi.texi +572 -67
  94. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  95. data/ext/ffi_c/libffi/fficonfig.h.in +53 -46
  96. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +312 -0
  97. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  98. data/ext/ffi_c/libffi/include/Makefile.in +219 -79
  99. data/ext/ffi_c/libffi/include/ffi.h.in +230 -111
  100. data/ext/ffi_c/libffi/include/ffi_cfi.h +76 -0
  101. data/ext/ffi_c/libffi/include/ffi_common.h +78 -16
  102. data/ext/ffi_c/libffi/include/tramp.h +45 -0
  103. data/ext/ffi_c/libffi/install-sh +402 -184
  104. data/ext/ffi_c/libffi/libffi.map.in +81 -0
  105. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  106. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +997 -0
  107. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  108. data/ext/ffi_c/libffi/libtool-version +2 -2
  109. data/ext/ffi_c/libffi/ltmain.sh +5752 -2722
  110. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  111. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +50 -0
  112. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +198 -0
  113. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +158 -0
  114. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +53 -0
  115. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +119 -0
  116. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +49 -0
  117. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
  118. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +267 -0
  119. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
  120. data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
  121. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  122. data/ext/ffi_c/libffi/make_sunver.pl +333 -0
  123. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  124. data/ext/ffi_c/libffi/man/Makefile.in +174 -57
  125. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  126. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  127. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  128. data/ext/ffi_c/libffi/missing +155 -300
  129. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
  130. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
  131. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
  132. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
  133. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
  134. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +219 -0
  135. data/ext/ffi_c/libffi/msvcc.sh +353 -0
  136. data/ext/ffi_c/libffi/src/aarch64/ffi.c +1142 -0
  137. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +97 -0
  138. data/ext/ffi_c/libffi/src/aarch64/internal.h +100 -0
  139. data/ext/ffi_c/libffi/src/aarch64/sysv.S +695 -0
  140. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -0
  141. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  142. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  143. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  144. data/ext/ffi_c/libffi/src/alpha/osf.S +162 -246
  145. data/ext/ffi_c/libffi/src/arc/arcompact.S +210 -0
  146. data/ext/ffi_c/libffi/src/arc/ffi.c +443 -0
  147. data/ext/ffi_c/libffi/src/arc/ffitarget.h +67 -0
  148. data/ext/ffi_c/libffi/src/arm/ffi.c +806 -194
  149. data/ext/ffi_c/libffi/src/arm/ffitarget.h +43 -3
  150. data/ext/ffi_c/libffi/src/arm/internal.h +17 -0
  151. data/ext/ffi_c/libffi/src/arm/sysv.S +381 -231
  152. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
  153. data/ext/ffi_c/libffi/src/avr32/ffi.c +4 -2
  154. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +8 -3
  155. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  156. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  157. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  158. data/ext/ffi_c/libffi/src/closures.c +574 -100
  159. data/ext/ffi_c/libffi/src/cris/ffi.c +11 -8
  160. data/ext/ffi_c/libffi/src/cris/ffitarget.h +8 -3
  161. data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
  162. data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
  163. data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
  164. data/ext/ffi_c/libffi/src/debug.c +8 -3
  165. data/ext/ffi_c/libffi/src/dlmalloc.c +89 -17
  166. data/ext/ffi_c/libffi/src/frv/ffi.c +2 -2
  167. data/ext/ffi_c/libffi/src/frv/ffitarget.h +8 -7
  168. data/ext/ffi_c/libffi/src/ia64/ffi.c +48 -12
  169. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +10 -4
  170. data/ext/ffi_c/libffi/src/ia64/unix.S +28 -3
  171. data/ext/ffi_c/libffi/src/java_raw_api.c +24 -6
  172. data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
  173. data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
  174. data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
  175. data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
  176. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
  177. data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
  178. data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
  179. data/ext/ffi_c/libffi/src/m32r/ffi.c +32 -15
  180. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +8 -3
  181. data/ext/ffi_c/libffi/src/m68k/ffi.c +97 -13
  182. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +8 -3
  183. data/ext/ffi_c/libffi/src/m68k/sysv.S +148 -25
  184. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  185. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  186. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  187. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  188. data/ext/ffi_c/libffi/src/metag/ffitarget.h +53 -0
  189. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  190. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  191. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  192. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  193. data/ext/ffi_c/libffi/src/mips/ffi.c +392 -104
  194. data/ext/ffi_c/libffi/src/mips/ffitarget.h +40 -24
  195. data/ext/ffi_c/libffi/src/mips/n32.S +325 -93
  196. data/ext/ffi_c/libffi/src/mips/o32.S +211 -31
  197. data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
  198. data/ext/ffi_c/libffi/src/moxie/ffi.c +310 -0
  199. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  200. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  201. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  202. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  203. data/ext/ffi_c/libffi/src/or1k/ffi.c +341 -0
  204. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  205. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  206. data/ext/ffi_c/libffi/src/pa/ffi.c +68 -111
  207. data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
  208. data/ext/ffi_c/libffi/src/pa/ffitarget.h +34 -17
  209. data/ext/ffi_c/libffi/src/pa/hpux32.S +87 -38
  210. data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
  211. data/ext/ffi_c/libffi/src/pa/linux.S +109 -39
  212. data/ext/ffi_c/libffi/src/powerpc/aix.S +250 -8
  213. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +255 -4
  214. data/ext/ffi_c/libffi/src/powerpc/asm.h +3 -3
  215. data/ext/ffi_c/libffi/src/powerpc/darwin.S +211 -78
  216. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +356 -102
  217. data/ext/ffi_c/libffi/src/powerpc/ffi.c +108 -1375
  218. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +746 -210
  219. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1153 -0
  220. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +105 -0
  221. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  222. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +126 -48
  223. data/ext/ffi_c/libffi/src/powerpc/linux64.S +191 -85
  224. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +438 -108
  225. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  226. data/ext/ffi_c/libffi/src/powerpc/sysv.S +73 -119
  227. data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
  228. data/ext/ffi_c/libffi/src/prep_cif.c +141 -32
  229. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  230. data/ext/ffi_c/libffi/src/riscv/ffi.c +514 -0
  231. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
  232. data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
  233. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  234. data/ext/ffi_c/libffi/src/s390/ffitarget.h +13 -3
  235. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  236. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  237. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  238. data/ext/ffi_c/libffi/src/sh/ffitarget.h +8 -3
  239. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  240. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +8 -3
  241. data/ext/ffi_c/libffi/src/sparc/ffi.c +334 -491
  242. data/ext/ffi_c/libffi/src/sparc/ffi64.c +630 -0
  243. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -5
  244. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  245. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  246. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  247. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  248. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  249. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  250. data/ext/ffi_c/libffi/src/tramp.c +716 -0
  251. data/ext/ffi_c/libffi/src/types.c +48 -19
  252. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  253. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  254. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  255. data/ext/ffi_c/libffi/src/wasm32/ffi.c +947 -0
  256. data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
  257. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  258. data/ext/ffi_c/libffi/src/x86/ffi.c +690 -540
  259. data/ext/ffi_c/libffi/src/x86/ffi64.c +450 -126
  260. data/ext/ffi_c/libffi/src/x86/ffitarget.h +86 -42
  261. data/ext/ffi_c/libffi/src/x86/ffiw64.c +361 -0
  262. data/ext/ffi_c/libffi/src/x86/internal.h +43 -0
  263. data/ext/ffi_c/libffi/src/x86/internal64.h +36 -0
  264. data/ext/ffi_c/libffi/src/x86/sysv.S +1199 -381
  265. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +998 -0
  266. data/ext/ffi_c/libffi/src/x86/unix64.S +587 -298
  267. data/ext/ffi_c/libffi/src/x86/win64.S +251 -457
  268. data/ext/ffi_c/libffi/src/x86/win64_intel.S +238 -0
  269. data/ext/ffi_c/libffi/src/xtensa/ffi.c +306 -0
  270. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +57 -0
  271. data/ext/ffi_c/libffi/src/xtensa/sysv.S +268 -0
  272. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  273. data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -73
  274. data/ext/ffi_c/libffi/testsuite/Makefile.in +251 -117
  275. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
  276. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
  277. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
  278. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
  279. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
  280. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
  281. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +682 -0
  282. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +22 -2
  283. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +63 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1746 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +747 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +28 -10
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +4 -3
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +88 -42
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +15 -12
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +110 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +6 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +9 -10
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  324. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  326. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  327. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  328. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +63 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +78 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +134 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +134 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +140 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +67 -0
  350. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn0.c +3 -2
  351. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn1.c +2 -0
  352. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn2.c +2 -0
  353. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn3.c +21 -1
  354. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn4.c +2 -0
  355. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn5.c +2 -0
  356. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn6.c +2 -0
  357. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_loc_fn0.c +7 -6
  358. data/ext/ffi_c/libffi/testsuite/{libffi.call/closure_stdcall.c → libffi.closures/closure_simple.c} +13 -16
  359. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_12byte.c +22 -4
  360. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_16byte.c +26 -4
  361. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_18byte.c +28 -4
  362. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_19byte.c +33 -4
  363. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_1_1byte.c +8 -4
  364. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte.c +23 -5
  365. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte1.c +25 -5
  366. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_24byte.c +40 -8
  367. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_2byte.c +17 -4
  368. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3_1byte.c +23 -4
  369. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte1.c +17 -4
  370. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte2.c +17 -4
  371. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +113 -0
  372. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4_1byte.c +26 -4
  373. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4byte.c +17 -4
  374. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5_1_byte.c +33 -5
  375. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5byte.c +23 -5
  376. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_64byte.c +29 -5
  377. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6_1_byte.c +32 -5
  378. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6byte.c +28 -6
  379. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7_1_byte.c +43 -5
  380. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7byte.c +29 -5
  381. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_8byte.c +18 -4
  382. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte1.c +18 -5
  383. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte2.c +18 -6
  384. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_double.c +23 -5
  385. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_float.c +23 -5
  386. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble.c +24 -5
  387. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split.c +44 -31
  388. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split2.c +44 -9
  389. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_pointer.c +23 -5
  390. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint16.c +22 -5
  391. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint32.c +22 -7
  392. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint64.c +23 -5
  393. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint16.c +22 -5
  394. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint32.c +23 -5
  395. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint64.c +24 -5
  396. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_dbls_struct.c +7 -5
  397. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double_va.c +21 -9
  398. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_float.c +4 -0
  399. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble.c +13 -3
  400. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble_va.c +34 -11
  401. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +70 -0
  402. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +55 -0
  403. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_schar.c +5 -1
  404. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshort.c +6 -1
  405. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshortchar.c +9 -1
  406. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_uchar.c +9 -1
  407. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushort.c +6 -2
  408. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushortchar.c +9 -1
  409. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer.c +7 -2
  410. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer_stack.c +22 -10
  411. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_schar.c +3 -0
  412. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sint.c +2 -0
  413. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sshort.c +3 -0
  414. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +125 -0
  415. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar.c +3 -0
  416. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint.c +4 -0
  417. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +49 -0
  418. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +49 -0
  419. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulonglong.c +8 -5
  420. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort.c +3 -0
  421. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/err_bad_abi.c +2 -3
  422. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -0
  423. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/huge_struct.c +57 -56
  424. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct.c +38 -15
  425. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct1.c +9 -9
  426. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct10.c +19 -6
  427. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +137 -0
  428. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
  429. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
  430. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct2.c +15 -6
  431. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct3.c +15 -6
  432. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct4.c +14 -5
  433. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct5.c +14 -5
  434. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct6.c +17 -6
  435. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct7.c +14 -5
  436. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct8.c +17 -6
  437. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct9.c +17 -6
  438. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
  439. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
  440. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
  441. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large.c +7 -7
  442. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large2.c +7 -7
  443. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium.c +6 -6
  444. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium2.c +7 -6
  445. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/testclosure.c +8 -3
  446. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest.cc +4 -10
  447. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest_ffi_call.cc +4 -2
  448. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  449. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  450. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  451. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  452. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  453. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  454. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  455. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  456. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  457. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  458. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  459. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  460. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  461. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  462. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  463. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  464. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -10
  465. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  466. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  467. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  468. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  469. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  470. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  471. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  472. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  473. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  474. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  475. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  476. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  477. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  478. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  479. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  480. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  481. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  482. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  483. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  484. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  485. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  486. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  487. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  488. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  489. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  490. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  491. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  492. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  493. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  494. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  495. data/ext/ffi_c/libffi.bsd.mk +14 -8
  496. data/ext/ffi_c/libffi.darwin.mk +56 -26
  497. data/ext/ffi_c/libffi.gnu.mk +9 -6
  498. data/ext/ffi_c/libffi.mk +13 -8
  499. data/ext/ffi_c/libffi.vc.mk +26 -0
  500. data/ext/ffi_c/libffi.vc64.mk +26 -0
  501. data/ext/ffi_c/rbffi.h +34 -6
  502. data/ext/ffi_c/{endian.h → rbffi_endian.h} +21 -2
  503. data/ffi.gemspec +42 -0
  504. data/lib/ffi/abstract_memory.rb +44 -0
  505. data/lib/ffi/autopointer.rb +111 -52
  506. data/lib/ffi/compat.rb +43 -0
  507. data/lib/ffi/data_converter.rb +67 -0
  508. data/lib/ffi/dynamic_library.rb +118 -0
  509. data/lib/ffi/enum.rb +203 -22
  510. data/lib/ffi/errno.rb +27 -12
  511. data/lib/ffi/ffi.rb +88 -11
  512. data/lib/ffi/function.rb +71 -0
  513. data/lib/ffi/io.rb +35 -14
  514. data/lib/ffi/library.rb +382 -96
  515. data/lib/ffi/library_path.rb +109 -0
  516. data/lib/ffi/managedstruct.rb +64 -35
  517. data/lib/ffi/memorypointer.rb +1 -33
  518. data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
  519. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  520. data/lib/ffi/platform/aarch64-freebsd12/types.conf +181 -0
  521. data/lib/ffi/platform/aarch64-linux/types.conf +175 -0
  522. data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
  523. data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
  524. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  525. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  526. data/lib/ffi/platform/arm-linux/types.conf +132 -0
  527. data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
  528. data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
  529. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  530. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  531. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  532. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  533. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  534. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  535. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  536. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  537. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  538. data/lib/ffi/platform/i386-windows/types.conf +52 -0
  539. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  540. data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
  541. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  542. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  543. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  544. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  545. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  546. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  547. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  548. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  549. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  550. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  551. data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
  552. data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
  553. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  554. data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
  555. data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
  556. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  557. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  558. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  559. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  560. data/lib/ffi/platform/sparcv9-linux/types.conf +102 -0
  561. data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
  562. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  563. data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
  564. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  565. data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
  566. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
  567. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  568. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  569. data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
  570. data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
  571. data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
  572. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  573. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  574. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  575. data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
  576. data/lib/ffi/platform.rb +110 -34
  577. data/lib/ffi/pointer.rb +117 -90
  578. data/lib/ffi/struct.rb +101 -70
  579. data/lib/ffi/struct_by_reference.rb +72 -0
  580. data/lib/ffi/struct_layout.rb +96 -0
  581. data/lib/ffi/struct_layout_builder.rb +90 -21
  582. data/lib/ffi/tools/const_generator.rb +86 -31
  583. data/lib/ffi/tools/generator.rb +49 -2
  584. data/lib/ffi/tools/generator_task.rb +13 -16
  585. data/lib/ffi/tools/struct_generator.rb +6 -5
  586. data/lib/ffi/tools/types_generator.rb +25 -11
  587. data/lib/ffi/types.rb +105 -36
  588. data/lib/ffi/union.rb +23 -12
  589. data/lib/ffi/variadic.rb +44 -29
  590. data/lib/ffi/version.rb +3 -0
  591. data/lib/ffi.rb +25 -9
  592. data/rakelib/ffi_gem_helper.rb +65 -0
  593. data/samples/getlogin.rb +8 -0
  594. data/samples/getpid.rb +8 -0
  595. data/samples/gettimeofday.rb +18 -0
  596. data/samples/hello.rb +8 -0
  597. data/samples/hello_ractor.rb +11 -0
  598. data/samples/inotify.rb +60 -0
  599. data/samples/pty.rb +75 -0
  600. data/samples/qsort.rb +20 -0
  601. data/samples/qsort_ractor.rb +28 -0
  602. data/sig/ffi/abstract_memory.rbs +165 -0
  603. data/sig/ffi/auto_pointer.rbs +26 -0
  604. data/sig/ffi/buffer.rbs +18 -0
  605. data/sig/ffi/data_converter.rbs +10 -0
  606. data/sig/ffi/dynamic_library.rbs +9 -0
  607. data/sig/ffi/enum.rbs +38 -0
  608. data/sig/ffi/function.rbs +39 -0
  609. data/sig/ffi/library.rbs +42 -0
  610. data/sig/ffi/native_type.rbs +86 -0
  611. data/sig/ffi/pointer.rbs +42 -0
  612. data/sig/ffi/struct.rbs +76 -0
  613. data/sig/ffi/struct_by_reference.rbs +11 -0
  614. data/sig/ffi/struct_by_value.rbs +7 -0
  615. data/sig/ffi/struct_layout.rbs +9 -0
  616. data/sig/ffi/struct_layout_builder.rbs +5 -0
  617. data/sig/ffi/type.rbs +39 -0
  618. data/sig/ffi.rbs +26 -0
  619. data.tar.gz.sig +0 -0
  620. metadata +547 -248
  621. metadata.gz.sig +0 -0
  622. data/History.txt +0 -109
  623. data/README.rdoc +0 -70
  624. data/ext/ffi_c/DataConverter.c +0 -62
  625. data/ext/ffi_c/StructByReference.c +0 -150
  626. data/ext/ffi_c/StructByReference.h +0 -50
  627. data/ext/ffi_c/libffi/ChangeLog.libffi +0 -658
  628. data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
  629. data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
  630. data/ext/ffi_c/libffi/README +0 -306
  631. data/ext/ffi_c/libffi/aclocal.m4 +0 -8998
  632. data/ext/ffi_c/libffi/depcomp +0 -584
  633. data/ext/ffi_c/libffi/doc/libffi.info +0 -533
  634. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  635. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7360
  636. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -368
  637. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  638. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  639. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -92
  640. data/ext/ffi_c/libffi/mdate-sh +0 -201
  641. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  642. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  643. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  644. data/ext/ffi_c/libffi/src/x86/win32.S +0 -877
  645. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  646. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  647. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  648. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  649. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  650. data/gen/Rakefile +0 -14
  651. data/spec/ffi/async_callback_spec.rb +0 -23
  652. data/spec/ffi/bool_spec.rb +0 -24
  653. data/spec/ffi/buffer_spec.rb +0 -202
  654. data/spec/ffi/callback_spec.rb +0 -653
  655. data/spec/ffi/custom_param_type.rb +0 -31
  656. data/spec/ffi/custom_type_spec.rb +0 -73
  657. data/spec/ffi/enum_spec.rb +0 -183
  658. data/spec/ffi/errno_spec.rb +0 -13
  659. data/spec/ffi/ffi_spec.rb +0 -24
  660. data/spec/ffi/function_spec.rb +0 -73
  661. data/spec/ffi/library_spec.rb +0 -174
  662. data/spec/ffi/managed_struct_spec.rb +0 -56
  663. data/spec/ffi/number_spec.rb +0 -231
  664. data/spec/ffi/pointer_spec.rb +0 -210
  665. data/spec/ffi/rbx/attach_function_spec.rb +0 -28
  666. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -109
  667. data/spec/ffi/rbx/spec_helper.rb +0 -1
  668. data/spec/ffi/rbx/struct_spec.rb +0 -13
  669. data/spec/ffi/spec_helper.rb +0 -21
  670. data/spec/ffi/string_spec.rb +0 -103
  671. data/spec/ffi/strptr_spec.rb +0 -36
  672. data/spec/ffi/struct_callback_spec.rb +0 -64
  673. data/spec/ffi/struct_initialize_spec.rb +0 -30
  674. data/spec/ffi/struct_packed_spec.rb +0 -46
  675. data/spec/ffi/struct_spec.rb +0 -638
  676. data/spec/ffi/typedef_spec.rb +0 -62
  677. data/spec/ffi/union_spec.rb +0 -60
  678. data/spec/ffi/variadic_spec.rb +0 -84
  679. data/spec/spec.opts +0 -4
  680. data/tasks/ann.rake +0 -80
  681. data/tasks/extension.rake +0 -25
  682. data/tasks/gem.rake +0 -200
  683. data/tasks/git.rake +0 -41
  684. data/tasks/notes.rake +0 -27
  685. data/tasks/post_load.rake +0 -34
  686. data/tasks/rdoc.rake +0 -50
  687. data/tasks/rubyforge.rake +0 -55
  688. data/tasks/setup.rb +0 -301
  689. data/tasks/spec.rake +0 -54
  690. data/tasks/svn.rake +0 -47
  691. data/tasks/test.rake +0 -40
  692. /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
  693. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double.c +0 -0
  694. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/problem1.c +0 -0
@@ -1,14 +1,20 @@
1
1
  dnl Process this with autoconf to create configure
2
2
 
3
- AC_PREREQ(2.63)
3
+ AC_PREREQ([2.71])
4
4
 
5
- AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html])
5
+ AC_INIT([libffi],[3.4.6],[http://github.com/libffi/libffi/issues])
6
6
  AC_CONFIG_HEADERS([fficonfig.h])
7
7
 
8
- AC_CANONICAL_SYSTEM
8
+ AC_CANONICAL_TARGET
9
9
  target_alias=${target_alias-$host_alias}
10
10
 
11
- . ${srcdir}/configure.host
11
+ case "${host}" in
12
+ frv*-elf)
13
+ LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
14
+ ;;
15
+ esac
16
+
17
+ AX_ENABLE_BUILDDIR
12
18
 
13
19
  AM_INIT_AUTOMAKE
14
20
 
@@ -16,190 +22,80 @@ AM_INIT_AUTOMAKE
16
22
  # We must force CC to /not/ be precious variables; otherwise
17
23
  # the wrong, non-multilib-adjusted value will be used in multilibs.
18
24
  # As a side effect, we have to subst CFLAGS ourselves.
25
+ # Also save and restore CFLAGS, since AC_PROG_CC will come up with
26
+ # defaults of its own if none are provided.
19
27
 
20
28
  m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
21
29
  m4_define([_AC_ARG_VAR_PRECIOUS],[])
30
+ save_CFLAGS=$CFLAGS
22
31
  AC_PROG_CC
32
+ AC_PROG_CXX
33
+ CFLAGS=$save_CFLAGS
23
34
  m4_undefine([_AC_ARG_VAR_PRECIOUS])
24
- m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
35
+ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
25
36
 
26
37
  AC_SUBST(CFLAGS)
27
38
 
28
39
  AM_PROG_AS
29
40
  AM_PROG_CC_C_O
30
- AC_PROG_LIBTOOL
41
+ AC_PROG_EGREP
42
+ LT_INIT
31
43
  AC_CONFIG_MACRO_DIR([m4])
32
44
 
45
+ AC_CHECK_TOOL(READELF, readelf)
46
+
47
+ # Test for 64-bit build.
48
+ AC_CHECK_SIZEOF([size_t])
49
+
50
+ AX_COMPILER_VENDOR
51
+ AX_CC_MAXOPT
52
+ # The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro
53
+ # compiler.
54
+ if test "$ax_cv_c_compiler_vendor" != "sun"; then
55
+ AX_CFLAGS_WARN_ALL
56
+ fi
57
+
58
+ if test "x$GCC" = "xyes"; then
59
+ CFLAGS="$CFLAGS -fexceptions"
60
+ fi
61
+
62
+ cat > local.exp <<EOF
63
+ set CC_FOR_TARGET "$CC"
64
+ set CXX_FOR_TARGET "$CXX"
65
+ set compiler_vendor "$ax_cv_c_compiler_vendor"
66
+ EOF
67
+
33
68
  AM_MAINTAINER_MODE
34
69
 
35
- AC_CHECK_HEADERS(sys/mman.h)
36
- AC_CHECK_FUNCS(mmap)
37
- AC_FUNC_MMAP_BLACKLIST
70
+ AC_CHECK_HEADERS(sys/memfd.h)
71
+ AC_CHECK_FUNCS([memfd_create])
38
72
 
39
73
  dnl The -no-testsuite modules omit the test subdir.
40
74
  AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
41
75
 
42
76
  TARGETDIR="unknown"
43
- case "$host" in
44
- alpha*-*-*)
45
- TARGET=ALPHA; TARGETDIR=alpha;
46
- # Support 128-bit long double, changable via command-line switch.
47
- HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
48
- ;;
49
-
50
- arm*-*-*)
51
- TARGET=ARM; TARGETDIR=arm
52
- ;;
53
-
54
- amd64-*-freebsd* | amd64-*-openbsd*)
55
- TARGET=X86_64; TARGETDIR=x86
56
- ;;
57
-
58
- avr32*-*-*)
59
- TARGET=AVR32; TARGETDIR=avr32
60
- ;;
61
-
62
- cris-*-*)
63
- TARGET=LIBFFI_CRIS; TARGETDIR=cris
64
- ;;
65
-
66
- frv-*-*)
67
- TARGET=FRV; TARGETDIR=frv
68
- ;;
69
-
70
- hppa*-*-linux* | parisc*-*-linux*)
71
- TARGET=PA_LINUX; TARGETDIR=pa
72
- ;;
73
- hppa*64-*-hpux*)
74
- TARGET=PA64_HPUX; TARGETDIR=pa
75
- ;;
76
- hppa*-*-hpux*)
77
- TARGET=PA_HPUX; TARGETDIR=pa
78
- ;;
79
-
80
- i?86-*-freebsd* | i?86-*-openbsd*)
81
- TARGET=X86_FREEBSD; TARGETDIR=x86
82
- ;;
83
- i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*)
84
- TARGET=X86_WIN32; TARGETDIR=x86
85
- # All mingw/cygwin/win32 builds require this for sharedlib
86
- AM_LTLDFLAGS="-no-undefined"
87
- ;;
88
- i?86-*-darwin*)
89
- TARGET=X86_DARWIN; TARGETDIR=x86
90
- ;;
91
- i?86-*-solaris2.1[[0-9]]*)
92
- TARGET=X86_64; TARGETDIR=x86
93
- ;;
94
- i?86-*-*)
95
- TARGET=X86; TARGETDIR=x86
96
- ;;
97
-
98
- ia64*-*-*)
99
- TARGET=IA64; TARGETDIR=ia64
100
- ;;
101
-
102
- m32r*-*-*)
103
- TARGET=M32R; TARGETDIR=m32r
104
- ;;
105
-
106
- m68k-*-*)
107
- TARGET=M68K; TARGETDIR=m68k
108
- ;;
109
-
110
- mips-sgi-irix5.* | mips-sgi-irix6.*)
111
- TARGET=MIPS; TARGETDIR=mips
112
- ;;
113
- mips*-*-linux*)
114
- # Support 128-bit long double for NewABI.
115
- HAVE_LONG_DOUBLE='defined(__mips64)'
116
- TARGET=MIPS; TARGETDIR=mips
117
- ;;
118
-
119
- powerpc*-*-linux* | powerpc-*-sysv*)
120
- TARGET=POWERPC; TARGETDIR=powerpc
121
- ;;
122
- powerpc-*-beos*)
123
- TARGET=POWERPC; TARGETDIR=powerpc
124
- ;;
125
- powerpc-*-darwin*)
126
- TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
127
- ;;
128
- powerpc-*-aix* | rs6000-*-aix*)
129
- TARGET=POWERPC_AIX; TARGETDIR=powerpc
130
- ;;
131
- powerpc-*-freebsd*)
132
- TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
133
- ;;
134
- powerpc*-*-rtems*)
135
- TARGET=POWERPC; TARGETDIR=powerpc
136
- ;;
137
-
138
- s390-*-* | s390x-*-*)
139
- TARGET=S390; TARGETDIR=s390
140
- ;;
141
-
142
- sh-*-* | sh[[34]]*-*-*)
143
- TARGET=SH; TARGETDIR=sh
144
- ;;
145
- sh64-*-* | sh5*-*-*)
146
- TARGET=SH64; TARGETDIR=sh64
147
- ;;
148
-
149
- sparc*-*-*)
150
- TARGET=SPARC; TARGETDIR=sparc
151
- ;;
152
-
153
- x86_64-*-darwin*)
154
- TARGET=X86_DARWIN; TARGETDIR=x86
155
- ;;
156
-
157
- x86_64-*-cygwin* | x86_64-*-mingw*)
158
- TARGET=X86_WIN64; TARGETDIR=x86
159
- ;;
160
-
161
- x86_64-*-*)
162
- TARGET=X86_64; TARGETDIR=x86
163
- ;;
164
- esac
77
+ HAVE_LONG_DOUBLE_VARIANT=0
165
78
 
166
- AC_SUBST(AM_RUNTESTFLAGS)
167
- AC_SUBST(AM_LTLDFLAGS)
79
+ . ${srcdir}/configure.host
168
80
 
169
- if test $TARGETDIR = unknown; then
81
+ if test -n "${UNSUPPORTED}"; then
170
82
  AC_MSG_ERROR(["libffi has not been ported to $host."])
171
83
  fi
172
84
 
173
- AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
174
- AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
175
- AM_CONDITIONAL(X86, test x$TARGET = xX86)
176
- AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD)
177
- AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
178
- AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64)
179
- AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN)
180
- AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
181
- AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
182
- AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
183
- AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
184
- AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
185
- AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
186
- AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
187
- AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD)
188
- AM_CONDITIONAL(ARM, test x$TARGET = xARM)
189
- AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32)
190
- AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS)
191
- AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
192
- AM_CONDITIONAL(S390, test x$TARGET = xS390)
193
- AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
194
- AM_CONDITIONAL(SH, test x$TARGET = xSH)
195
- AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
196
- AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX)
197
- AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
198
- AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
199
-
200
- AC_HEADER_STDC
85
+ AC_SUBST(AM_RUNTESTFLAGS)
86
+ AC_SUBST(AM_LTLDFLAGS)
87
+
88
+ m4_warn([obsolete],
89
+ [The preprocessor macro `STDC_HEADERS' is obsolete.
90
+ Except in unusual embedded environments, you can safely include all
91
+ ISO C90 headers unconditionally.])dnl
92
+ # Autoupdate added the next two lines to ensure that your configure
93
+ # script's behavior did not change. They are probably safe to remove.
94
+ AC_CHECK_INCLUDES_DEFAULT
95
+ AC_PROG_EGREP
96
+
201
97
  AC_CHECK_FUNCS(memcpy)
202
- AC_FUNC_ALLOCA
98
+ AC_CHECK_HEADERS(alloca.h)
203
99
 
204
100
  AC_CHECK_SIZEOF(double)
205
101
  AC_CHECK_SIZEOF(long double)
@@ -207,39 +103,34 @@ AC_CHECK_SIZEOF(long double)
207
103
  # Also AC_SUBST this variable for ffi.h.
208
104
  if test -z "$HAVE_LONG_DOUBLE"; then
209
105
  HAVE_LONG_DOUBLE=0
210
- if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
211
- if test $ac_cv_sizeof_long_double != 0; then
106
+ if test $ac_cv_sizeof_long_double != 0; then
107
+ if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
108
+ AC_DEFINE(HAVE_LONG_DOUBLE_VARIANT, 1, [Define if you support more than one size of the long double type])
212
109
  HAVE_LONG_DOUBLE=1
213
- AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
110
+ else
111
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
112
+ HAVE_LONG_DOUBLE=1
113
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
114
+ fi
214
115
  fi
215
116
  fi
216
117
  fi
217
118
  AC_SUBST(HAVE_LONG_DOUBLE)
119
+ AC_SUBST(HAVE_LONG_DOUBLE_VARIANT)
218
120
 
219
121
  AC_C_BIGENDIAN
220
122
 
221
- AC_CACHE_CHECK([assembler .cfi pseudo-op support],
222
- libffi_cv_as_cfi_pseudo_op, [
223
- libffi_cv_as_cfi_pseudo_op=unknown
224
- AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
225
- [libffi_cv_as_cfi_pseudo_op=yes],
226
- [libffi_cv_as_cfi_pseudo_op=no])
227
- ])
228
- if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then
229
- AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
230
- [Define if your assembler supports .cfi_* directives.])
231
- fi
123
+ GCC_AS_CFI_PSEUDO_OP
232
124
 
233
- if test x$TARGET = xSPARC; then
125
+ case "$TARGET" in
126
+ SPARC)
234
127
  AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
235
128
  libffi_cv_as_sparc_ua_pcrel, [
236
129
  save_CFLAGS="$CFLAGS"
237
130
  save_LDFLAGS="$LDFLAGS"
238
131
  CFLAGS="$CFLAGS -fpic"
239
132
  LDFLAGS="$LDFLAGS -shared"
240
- AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],,
241
- [libffi_cv_as_sparc_ua_pcrel=yes],
242
- [libffi_cv_as_sparc_ua_pcrel=no])
133
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");]], [[]])],[libffi_cv_as_sparc_ua_pcrel=yes],[libffi_cv_as_sparc_ua_pcrel=no])
243
134
  CFLAGS="$save_CFLAGS"
244
135
  LDFLAGS="$save_LDFLAGS"])
245
136
  if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
@@ -251,83 +142,188 @@ if test x$TARGET = xSPARC; then
251
142
  libffi_cv_as_register_pseudo_op, [
252
143
  libffi_cv_as_register_pseudo_op=unknown
253
144
  # Check if we have .register
254
- AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
255
- [libffi_cv_as_register_pseudo_op=yes],
256
- [libffi_cv_as_register_pseudo_op=no])
145
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm (".register %g2, #scratch");]])],[libffi_cv_as_register_pseudo_op=yes],[libffi_cv_as_register_pseudo_op=no])
257
146
  ])
258
147
  if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
259
148
  AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
260
149
  [Define if your assembler supports .register.])
261
150
  fi
262
- fi
151
+ ;;
263
152
 
264
- if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
153
+ X86*)
265
154
  AC_CACHE_CHECK([assembler supports pc related relocs],
266
155
  libffi_cv_as_x86_pcrel, [
267
- libffi_cv_as_x86_pcrel=yes
156
+ libffi_cv_as_x86_pcrel=no
268
157
  echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
269
- if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
270
- libffi_cv_as_x86_pcrel=no
158
+ if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
159
+ libffi_cv_as_x86_pcrel=yes
271
160
  fi
272
161
  ])
273
162
  if test "x$libffi_cv_as_x86_pcrel" = xyes; then
274
163
  AC_DEFINE(HAVE_AS_X86_PCREL, 1,
275
164
  [Define if your assembler supports PC relative relocs.])
276
165
  fi
166
+ ;;
167
+
168
+ S390)
169
+ AC_CACHE_CHECK([compiler uses zarch features],
170
+ libffi_cv_as_s390_zarch, [
171
+ libffi_cv_as_s390_zarch=no
172
+ echo 'void foo(void) { bar(); bar(); }' > conftest.c
173
+ if $CC $CFLAGS -S conftest.c > /dev/null 2>&1; then
174
+ if grep -q brasl conftest.s; then
175
+ libffi_cv_as_s390_zarch=yes
176
+ fi
177
+ fi
178
+ ])
179
+ if test "x$libffi_cv_as_s390_zarch" = xyes; then
180
+ AC_DEFINE(HAVE_AS_S390_ZARCH, 1,
181
+ [Define if the compiler uses zarch features.])
182
+ fi
183
+ ;;
184
+ esac
185
+
186
+ AC_CACHE_CHECK([whether compiler supports pointer authentication],
187
+ libffi_cv_as_ptrauth, [
188
+ libffi_cv_as_ptrauth=unknown
189
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
190
+ #ifdef __clang__
191
+ # if __has_feature(ptrauth_calls)
192
+ # define HAVE_PTRAUTH 1
193
+ # endif
194
+ #endif
195
+
196
+ #ifndef HAVE_PTRAUTH
197
+ # error Pointer authentication not supported
198
+ #endif
199
+ ]])],[libffi_cv_as_ptrauth=yes],[libffi_cv_as_ptrauth=no])
200
+ ])
201
+ if test "x$libffi_cv_as_ptrauth" = xyes; then
202
+ AC_DEFINE(HAVE_PTRAUTH, 1,
203
+ [Define if your compiler supports pointer authentication.])
204
+ fi
205
+
206
+ # On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC;
207
+ # if EMUTRAMP is active too ffi could try mapping without PROT_EXEC,
208
+ # but the kernel needs to recognize the trampoline generated by ffi.
209
+ # Otherwise fallback to double mmap trick.
210
+ AC_ARG_ENABLE(pax_emutramp,
211
+ [ --enable-pax_emutramp enable pax emulated trampolines (experimental)],
212
+ if test "$enable_pax_emutramp" = "yes"; then
213
+ AC_MSG_WARN([EMUTRAMP is experimental only. Use --enable-pax_emutramp=experimental to enforce.])
214
+ elif test "$enable_pax_emutramp" = "experimental"; then
215
+ AC_DEFINE(FFI_MMAP_EXEC_EMUTRAMP_PAX, 1,
216
+ [Define this if you want to enable pax emulated trampolines (experimental)])
217
+ fi)
218
+
219
+ LT_SYS_SYMBOL_USCORE
220
+ if test "x$sys_symbol_underscore" = xyes; then
221
+ AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
277
222
  fi
278
223
 
224
+ FFI_EXEC_TRAMPOLINE_TABLE=0
279
225
  case "$target" in
280
- *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
226
+ *arm*-apple-* | aarch64-apple-*)
227
+ FFI_EXEC_TRAMPOLINE_TABLE=1
228
+ AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1,
229
+ [Cannot use PROT_EXEC on this target, so, we revert to
230
+ alternative means])
231
+ ;;
232
+ *-apple-* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris* | *-linux-android*)
281
233
  AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
282
234
  [Cannot use malloc on this target, so, we revert to
283
235
  alternative means])
284
236
  ;;
285
237
  esac
286
-
287
- AC_CACHE_CHECK([whether .eh_frame section should be read-only],
288
- libffi_cv_ro_eh_frame, [
289
- libffi_cv_ro_eh_frame=no
290
- echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
291
- if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
292
- if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
293
- libffi_cv_ro_eh_frame=yes
294
- elif grep '.section.*eh_frame.*#alloc' conftest.c \
295
- | grep -v '#write' > /dev/null; then
296
- libffi_cv_ro_eh_frame=yes
297
- fi
238
+ AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1)
239
+ AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE)
240
+
241
+ if test x$TARGET = xX86_64; then
242
+ AC_CACHE_CHECK([toolchain supports unwind section type],
243
+ libffi_cv_as_x86_64_unwind_section_type, [
244
+ cat > conftest1.s << EOF
245
+ .text
246
+ .globl foo
247
+ foo:
248
+ jmp bar
249
+ .section .eh_frame,"a",@unwind
250
+ bar:
251
+ EOF
252
+
253
+ cat > conftest2.c << EOF
254
+ extern void foo();
255
+ int main(){foo();}
256
+ EOF
257
+
258
+ libffi_cv_as_x86_64_unwind_section_type=no
259
+ # we ensure that we can compile _and_ link an assembly file containing an @unwind section
260
+ # since the compiler can support it and not the linker (ie old binutils)
261
+ if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \
262
+ $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then
263
+ libffi_cv_as_x86_64_unwind_section_type=yes
298
264
  fi
299
- rm -f conftest.*
300
- ])
301
- if test "x$libffi_cv_ro_eh_frame" = xyes; then
302
- AC_DEFINE(HAVE_RO_EH_FRAME, 1,
303
- [Define if .eh_frame sections should be read-only.])
304
- AC_DEFINE(EH_FRAME_FLAGS, "a",
305
- [Define to the flags needed for the .section .eh_frame directive.])
306
- else
307
- AC_DEFINE(EH_FRAME_FLAGS, "aw",
308
- [Define to the flags needed for the .section .eh_frame directive.])
265
+ ])
266
+ if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
267
+ AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
268
+ [Define if your assembler supports unwind section type.])
269
+ fi
309
270
  fi
310
271
 
311
- AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
312
- libffi_cv_hidden_visibility_attribute, [
313
- echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
314
- libffi_cv_hidden_visibility_attribute=no
315
- if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
316
- if grep '\.hidden.*foo' conftest.s >/dev/null; then
317
- libffi_cv_hidden_visibility_attribute=yes
272
+ if test "x$GCC" = "xyes"; then
273
+ AX_CHECK_COMPILE_FLAG(-fno-lto, libffi_cv_no_lto=-fno-lto)
274
+
275
+ AC_CACHE_CHECK([whether .eh_frame section should be read-only],
276
+ libffi_cv_ro_eh_frame, [
277
+ libffi_cv_ro_eh_frame=yes
278
+ echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
279
+ if $CC $CFLAGS -c -fpic -fexceptions $libffi_cv_no_lto -o conftest.o conftest.c > /dev/null 2>&1; then
280
+ if $READELF -WS conftest.o 2>/dev/null | grep -q -n 'eh_frame .* WA'; then
281
+ libffi_cv_ro_eh_frame=no
318
282
  fi
319
- fi
320
- rm -f conftest.*
321
- ])
322
- if test $libffi_cv_hidden_visibility_attribute = yes; then
323
- AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
324
- [Define if __attribute__((visibility("hidden"))) is supported.])
283
+ fi
284
+ rm -f conftest.*
285
+ ])
286
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
287
+ AC_DEFINE(HAVE_RO_EH_FRAME, 1,
288
+ [Define if .eh_frame sections should be read-only.])
289
+ AC_DEFINE(EH_FRAME_FLAGS, "a",
290
+ [Define to the flags needed for the .section .eh_frame directive. ])
291
+ else
292
+ AC_DEFINE(EH_FRAME_FLAGS, "aw",
293
+ [Define to the flags needed for the .section .eh_frame directive. ])
294
+ fi
295
+
296
+ AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
297
+ libffi_cv_hidden_visibility_attribute, [
298
+ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c
299
+ libffi_cv_hidden_visibility_attribute=no
300
+ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
301
+ if $EGREP '(\.hidden|\.private_extern).*foo|foo.*,hidden' conftest.s >/dev/null; then
302
+ libffi_cv_hidden_visibility_attribute=yes
303
+ fi
304
+ fi
305
+ rm -f conftest.*
306
+ ])
307
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
308
+ AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
309
+ [Define if __attribute__((visibility("hidden"))) is supported.])
310
+ fi
325
311
  fi
326
312
 
313
+ AC_ARG_ENABLE(docs,
314
+ AS_HELP_STRING([--disable-docs],[Disable building of docs (default: no)]),
315
+ [enable_docs=no],
316
+ [enable_docs=yes])
317
+ AM_CONDITIONAL(BUILD_DOCS, [test x$enable_docs = xyes])
318
+
327
319
  AH_BOTTOM([
328
320
  #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
329
321
  #ifdef LIBFFI_ASM
322
+ #ifdef __APPLE__
323
+ #define FFI_HIDDEN(name) .private_extern name
324
+ #else
330
325
  #define FFI_HIDDEN(name) .hidden name
326
+ #endif
331
327
  #else
332
328
  #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
333
329
  #endif
@@ -343,6 +339,14 @@ AH_BOTTOM([
343
339
  AC_SUBST(TARGET)
344
340
  AC_SUBST(TARGETDIR)
345
341
 
342
+ changequote(<,>)
343
+ TARGET_OBJ=
344
+ for i in $SOURCES; do
345
+ TARGET_OBJ="${TARGET_OBJ} src/${TARGETDIR}/"`echo $i | sed 's/[cS]$/lo/'`
346
+ done
347
+ changequote([,])
348
+ AC_SUBST(TARGET_OBJ)
349
+
346
350
  AC_SUBST(SHELL)
347
351
 
348
352
  AC_ARG_ENABLE(debug,
@@ -350,46 +354,87 @@ AC_ARG_ENABLE(debug,
350
354
  if test "$enable_debug" = "yes"; then
351
355
  AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
352
356
  fi)
357
+ AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
353
358
 
354
359
  AC_ARG_ENABLE(structs,
355
360
  [ --disable-structs omit code for struct support],
356
361
  if test "$enable_structs" = "no"; then
357
- AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
362
+ AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this if you do not want support for aggregate types.])
358
363
  fi)
364
+ AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
359
365
 
360
366
  AC_ARG_ENABLE(raw-api,
361
367
  [ --disable-raw-api make the raw api unavailable],
362
368
  if test "$enable_raw_api" = "no"; then
363
- AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
369
+ AC_DEFINE(FFI_NO_RAW_API, 1, [Define this if you do not want support for the raw API.])
364
370
  fi)
365
371
 
372
+ AC_ARG_ENABLE(exec-static-tramp,
373
+ [ --disable-exec-static-tramp disable use of static exec trampolines (enabled by default)])
374
+
375
+ if test "$enable_exec_static_tramp" != no; then
376
+ case "$target" in
377
+ *-cygwin* | *-msys*)
378
+ # Only define static trampolines if we are using the cygwin runtime.
379
+ # Will this need to be changed for mingw?
380
+ if test "x$GCC" = "xyes"; then
381
+ AC_DEFINE(FFI_EXEC_STATIC_TRAMP, 1,
382
+ [Define this if you want statically defined trampolines])
383
+ fi
384
+ ;;
385
+ *arm*-*-linux-* | aarch64*-*-linux-* | i*86-*-linux-* | x86_64-*-linux-* | loongarch*-*-linux-*)
386
+ AC_DEFINE(FFI_EXEC_STATIC_TRAMP, 1,
387
+ [Define this if you want statically defined trampolines])
388
+ ;;
389
+ esac
390
+ fi
391
+
366
392
  AC_ARG_ENABLE(purify-safety,
367
393
  [ --enable-purify-safety purify-safe mode],
368
394
  if test "$enable_purify_safety" = "yes"; then
369
395
  AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
370
396
  fi)
371
397
 
372
- if test -n "$with_cross_host" &&
373
- test x"$with_cross_host" != x"no"; then
374
- toolexecdir='$(exec_prefix)/$(target_alias)'
375
- toolexeclibdir='$(toolexecdir)/lib'
398
+ AC_ARG_ENABLE(multi-os-directory,
399
+ [ --disable-multi-os-directory
400
+ disable use of gcc --print-multi-os-directory to change the library installation directory])
401
+
402
+ # These variables are only ever used when we cross-build to X86_WIN32.
403
+ # And we only support this with GCC, so...
404
+ if test "x$GCC" = "xyes"; then
405
+ if test -n "$with_cross_host" &&
406
+ test x"$with_cross_host" != x"no"; then
407
+ toolexecdir='${exec_prefix}'/'$(target_alias)'
408
+ toolexeclibdir='${toolexecdir}'/lib
409
+ else
410
+ toolexecdir='${libdir}'/gcc-lib/'$(target_alias)'
411
+ toolexeclibdir='${libdir}'
412
+ fi
413
+ if test x"$enable_multi_os_directory" != x"no"; then
414
+ multi_os_directory=`$CC $CFLAGS -print-multi-os-directory`
415
+ case $multi_os_directory in
416
+ .) ;; # Avoid trailing /.
417
+ ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
418
+ esac
419
+ fi
420
+ AC_SUBST(toolexecdir)
376
421
  else
377
- toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
378
- toolexeclibdir='$(libdir)'
422
+ toolexeclibdir='${libdir}'
379
423
  fi
380
- multi_os_directory=`$CC -print-multi-os-directory`
381
- case $multi_os_directory in
382
- .) ;; # Avoid trailing /.
383
- *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
384
- esac
385
- AC_SUBST(toolexecdir)
386
424
  AC_SUBST(toolexeclibdir)
387
425
 
388
- if test "${multilib}" = "yes"; then
389
- multilib_arg="--enable-multilib"
390
- else
391
- multilib_arg=
392
- fi
426
+ # Conditionalize the makefile for this target machine.
427
+ tmake_file_=
428
+ for f in ${tmake_file}; do
429
+ if test -f ${srcdir}/src/$TARGETDIR/$f; then
430
+ tmake_file_="${tmake_file_} \$(srcdir)/src/$TARGETDIR/$f"
431
+ fi
432
+ done
433
+ tmake_file="${tmake_file_}"
434
+ AC_SUBST(tmake_file)
435
+
436
+ # Check linker support.
437
+ LIBFFI_ENABLE_SYMVERS
393
438
 
394
439
  AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
395
440
  AC_CONFIG_COMMANDS(src, [
@@ -397,8 +442,10 @@ test -d src || mkdir src
397
442
  test -d src/$TARGETDIR || mkdir src/$TARGETDIR
398
443
  ], [TARGETDIR="$TARGETDIR"])
399
444
 
400
- AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
401
-
402
- AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc)
445
+ AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile doc/Makefile libffi.pc)
403
446
 
404
447
  AC_OUTPUT
448
+
449
+ # Copy this file instead of using AC_CONFIG_LINK in order to support
450
+ # compiling with MSVC, which won't understand cygwin style symlinks.
451
+ cp ${srcdir}/src/$TARGETDIR/ffitarget.h include/ffitarget.h