ffi 1.9.25 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (339) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +212 -0
  3. data/Gemfile +3 -4
  4. data/README.md +38 -18
  5. data/Rakefile +55 -146
  6. data/ext/ffi_c/AbstractMemory.c +29 -34
  7. data/ext/ffi_c/Buffer.c +4 -9
  8. data/ext/ffi_c/Call.c +16 -49
  9. data/ext/ffi_c/Call.h +4 -7
  10. data/ext/ffi_c/ClosurePool.c +75 -25
  11. data/ext/ffi_c/ClosurePool.h +3 -1
  12. data/ext/ffi_c/DynamicLibrary.c +2 -7
  13. data/ext/ffi_c/Function.c +47 -131
  14. data/ext/ffi_c/Function.h +0 -4
  15. data/ext/ffi_c/FunctionInfo.c +3 -8
  16. data/ext/ffi_c/LastError.c +49 -8
  17. data/ext/ffi_c/LongDouble.c +12 -10
  18. data/ext/ffi_c/LongDouble.h +0 -4
  19. data/ext/ffi_c/MemoryPointer.c +3 -8
  20. data/ext/ffi_c/MemoryPointer.h +0 -4
  21. data/ext/ffi_c/MethodHandle.c +21 -31
  22. data/ext/ffi_c/MethodHandle.h +3 -2
  23. data/ext/ffi_c/Platform.c +3 -54
  24. data/ext/ffi_c/Pointer.c +25 -26
  25. data/ext/ffi_c/Pointer.h +0 -4
  26. data/ext/ffi_c/Struct.c +49 -56
  27. data/ext/ffi_c/Struct.h +12 -6
  28. data/ext/ffi_c/StructByValue.c +2 -7
  29. data/ext/ffi_c/StructLayout.c +22 -20
  30. data/ext/ffi_c/Thread.c +4 -228
  31. data/ext/ffi_c/Thread.h +1 -20
  32. data/ext/ffi_c/Type.c +1 -19
  33. data/ext/ffi_c/Type.h +0 -1
  34. data/ext/ffi_c/Types.c +7 -8
  35. data/ext/ffi_c/Types.h +3 -4
  36. data/ext/ffi_c/Variadic.c +23 -24
  37. data/ext/ffi_c/compat.h +4 -0
  38. data/ext/ffi_c/extconf.rb +53 -30
  39. data/ext/ffi_c/ffi.c +3 -8
  40. data/ext/ffi_c/libffi.darwin.mk +1 -1
  41. data/ext/ffi_c/libffi/.appveyor.yml +29 -13
  42. data/ext/ffi_c/libffi/.gitattributes +4 -0
  43. data/ext/ffi_c/libffi/.travis.yml +51 -2
  44. data/ext/ffi_c/libffi/.travis/bfin-sim.exp +58 -0
  45. data/ext/ffi_c/libffi/.travis/build-cross-in-container.sh +14 -0
  46. data/ext/ffi_c/libffi/.travis/build-in-container.sh +12 -0
  47. data/ext/ffi_c/libffi/.travis/build.sh +116 -8
  48. data/ext/ffi_c/libffi/.travis/install.sh +65 -16
  49. data/ext/ffi_c/libffi/.travis/m32r-sim.exp +58 -0
  50. data/ext/ffi_c/libffi/.travis/moxie-sim.exp +1 -1
  51. data/ext/ffi_c/libffi/.travis/or1k-sim.exp +58 -0
  52. data/ext/ffi_c/libffi/.travis/powerpc-eabisim.exp +58 -0
  53. data/ext/ffi_c/libffi/.travis/site.exp +10 -1
  54. data/ext/ffi_c/libffi/.travis/wine-sim.exp +55 -0
  55. data/ext/ffi_c/libffi/{ChangeLog.libffi-3.1 → ChangeLog.old} +1407 -0
  56. data/ext/ffi_c/libffi/LICENSE +1 -1
  57. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +5 -4
  58. data/ext/ffi_c/libffi/Makefile.am +56 -72
  59. data/ext/ffi_c/libffi/README.md +33 -8
  60. data/ext/ffi_c/libffi/config.guess +552 -331
  61. data/ext/ffi_c/libffi/config.sub +1321 -1306
  62. data/ext/ffi_c/libffi/configure.ac +37 -12
  63. data/ext/ffi_c/libffi/configure.host +56 -27
  64. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  65. data/ext/ffi_c/libffi/doc/libffi.texi +997 -0
  66. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  67. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +2 -4
  68. data/ext/ffi_c/libffi/include/ffi.h.in +19 -7
  69. data/ext/ffi_c/libffi/include/ffi_common.h +5 -1
  70. data/ext/ffi_c/libffi/libffi.map.in +8 -12
  71. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +2 -48
  72. data/ext/ffi_c/libffi/libtool-version +1 -1
  73. data/ext/ffi_c/libffi/m4/asmcfi.m4 +1 -1
  74. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +5 -26
  75. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +5 -26
  76. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +2 -1
  77. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +5 -26
  78. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +7 -3
  79. data/ext/ffi_c/libffi/make_sunver.pl +333 -0
  80. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
  81. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
  82. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
  83. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
  84. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
  85. data/ext/ffi_c/libffi/msvcc.sh +38 -13
  86. data/ext/ffi_c/libffi/src/aarch64/ffi.c +153 -69
  87. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +19 -3
  88. data/ext/ffi_c/libffi/src/aarch64/internal.h +1 -0
  89. data/ext/ffi_c/libffi/src/aarch64/sysv.S +22 -9
  90. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -0
  91. data/ext/ffi_c/libffi/src/arm/ffi.c +62 -5
  92. data/ext/ffi_c/libffi/src/arm/ffitarget.h +8 -1
  93. data/ext/ffi_c/libffi/src/arm/sysv.S +6 -4
  94. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
  95. data/ext/ffi_c/libffi/src/closures.c +69 -14
  96. data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
  97. data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
  98. data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
  99. data/ext/ffi_c/libffi/src/dlmalloc.c +1 -1
  100. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  101. data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
  102. data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
  103. data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
  104. data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
  105. data/ext/ffi_c/libffi/src/metag/ffi.c +1 -1
  106. data/ext/ffi_c/libffi/src/mips/ffi.c +5 -1
  107. data/ext/ffi_c/libffi/src/mips/ffitarget.h +1 -1
  108. data/ext/ffi_c/libffi/src/mips/o32.S +2 -0
  109. data/ext/ffi_c/libffi/src/moxie/ffi.c +1 -1
  110. data/ext/ffi_c/libffi/src/pa/ffi.c +46 -91
  111. data/ext/ffi_c/libffi/src/pa/ffitarget.h +1 -6
  112. data/ext/ffi_c/libffi/src/pa/hpux32.S +4 -2
  113. data/ext/ffi_c/libffi/src/pa/linux.S +27 -4
  114. data/ext/ffi_c/libffi/src/powerpc/ffi.c +6 -4
  115. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +13 -1
  116. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +211 -32
  117. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +18 -7
  118. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +10 -4
  119. data/ext/ffi_c/libffi/src/powerpc/linux64.S +91 -28
  120. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +81 -5
  121. data/ext/ffi_c/libffi/src/powerpc/sysv.S +5 -7
  122. data/ext/ffi_c/libffi/src/prep_cif.c +4 -2
  123. data/ext/ffi_c/libffi/src/riscv/ffi.c +42 -6
  124. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +1 -0
  125. data/ext/ffi_c/libffi/src/riscv/sysv.S +86 -7
  126. data/ext/ffi_c/libffi/src/x86/ffi.c +29 -12
  127. data/ext/ffi_c/libffi/src/x86/ffi64.c +22 -11
  128. data/ext/ffi_c/libffi/src/x86/ffitarget.h +15 -2
  129. data/ext/ffi_c/libffi/src/x86/ffiw64.c +20 -10
  130. data/ext/ffi_c/libffi/src/x86/sysv.S +105 -10
  131. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +995 -0
  132. data/ext/ffi_c/libffi/src/x86/unix64.S +100 -4
  133. data/ext/ffi_c/libffi/src/x86/win64.S +12 -3
  134. data/ext/ffi_c/libffi/src/x86/win64_intel.S +3 -2
  135. data/ext/ffi_c/libffi/testsuite/Makefile.am +114 -109
  136. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +32 -8
  137. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +7 -2
  138. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +4 -4
  139. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2 -2
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +12 -1
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +9 -8
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +1 -1
  143. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +67 -0
  144. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn0.c +0 -0
  145. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn1.c +0 -0
  146. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn2.c +0 -0
  147. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn3.c +0 -0
  148. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn4.c +0 -0
  149. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn5.c +0 -0
  150. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn6.c +0 -0
  151. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_loc_fn0.c +0 -0
  152. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_simple.c +0 -0
  153. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_12byte.c +0 -0
  154. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_16byte.c +0 -0
  155. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_18byte.c +0 -0
  156. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_19byte.c +0 -0
  157. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_1_1byte.c +0 -0
  158. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte.c +0 -0
  159. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte1.c +0 -0
  160. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_24byte.c +0 -0
  161. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_2byte.c +0 -0
  162. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3_1byte.c +0 -0
  163. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte1.c +0 -0
  164. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte2.c +0 -0
  165. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3float.c +0 -0
  166. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4_1byte.c +0 -0
  167. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4byte.c +0 -0
  168. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5_1_byte.c +0 -0
  169. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5byte.c +0 -0
  170. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_64byte.c +0 -0
  171. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6_1_byte.c +0 -0
  172. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6byte.c +0 -0
  173. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7_1_byte.c +0 -0
  174. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7byte.c +0 -0
  175. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_8byte.c +0 -0
  176. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte1.c +0 -0
  177. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte2.c +0 -0
  178. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_double.c +0 -0
  179. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_float.c +0 -0
  180. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble.c +0 -0
  181. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split.c +0 -0
  182. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split2.c +0 -0
  183. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_pointer.c +0 -0
  184. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint16.c +0 -0
  185. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint32.c +0 -0
  186. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint64.c +0 -0
  187. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint16.c +0 -0
  188. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint32.c +0 -0
  189. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint64.c +0 -0
  190. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_dbls_struct.c +0 -0
  191. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double.c +0 -0
  192. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double_va.c +0 -0
  193. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_float.c +0 -0
  194. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble.c +0 -0
  195. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble_va.c +0 -0
  196. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_many_mixed_args.c +0 -0
  197. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_many_mixed_float_double.c +0 -0
  198. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_schar.c +0 -0
  199. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshort.c +0 -0
  200. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshortchar.c +0 -0
  201. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_uchar.c +0 -0
  202. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushort.c +0 -0
  203. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushortchar.c +0 -0
  204. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer.c +0 -0
  205. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer_stack.c +0 -0
  206. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_schar.c +0 -0
  207. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sint.c +0 -0
  208. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sshort.c +0 -0
  209. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_struct_va1.c +0 -0
  210. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar.c +0 -0
  211. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar_va.c +0 -0
  212. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint.c +0 -0
  213. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint_va.c +0 -0
  214. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulong_va.c +0 -0
  215. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulonglong.c +0 -0
  216. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort.c +0 -0
  217. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort_va.c +0 -0
  218. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/err_bad_abi.c +0 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +138 -0
  220. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/huge_struct.c +3 -1
  221. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct.c +0 -0
  222. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct1.c +0 -0
  223. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct10.c +0 -0
  224. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct11.c +0 -0
  225. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct2.c +0 -0
  226. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct3.c +0 -0
  227. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct4.c +0 -0
  228. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct5.c +0 -0
  229. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct6.c +0 -0
  230. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct7.c +0 -0
  231. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct8.c +0 -0
  232. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct9.c +0 -0
  233. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/problem1.c +0 -0
  234. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large.c +0 -0
  235. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large2.c +0 -0
  236. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium.c +0 -0
  237. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium2.c +0 -0
  238. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/testclosure.c +0 -0
  239. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/unwindtest.cc +0 -0
  240. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/unwindtest_ffi_call.cc +0 -0
  241. data/ext/ffi_c/rbffi.h +0 -2
  242. data/ffi.gemspec +13 -6
  243. data/lib/ffi.rb +10 -2
  244. data/lib/ffi/abstract_memory.rb +44 -0
  245. data/lib/ffi/autopointer.rb +1 -1
  246. data/lib/ffi/data_converter.rb +67 -0
  247. data/lib/ffi/ffi.rb +3 -0
  248. data/lib/ffi/io.rb +3 -3
  249. data/lib/ffi/library.rb +12 -8
  250. data/lib/ffi/managedstruct.rb +2 -2
  251. data/lib/ffi/platform.rb +34 -10
  252. data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
  253. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  254. data/lib/ffi/platform/aarch64-freebsd12/types.conf +128 -0
  255. data/lib/ffi/platform/aarch64-linux/types.conf +81 -81
  256. data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
  257. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  258. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  259. data/lib/ffi/platform/arm-linux/types.conf +110 -82
  260. data/lib/ffi/platform/i386-cygwin/types.conf +1 -1
  261. data/lib/ffi/platform/i386-darwin/types.conf +63 -63
  262. data/lib/ffi/platform/i386-freebsd/types.conf +89 -89
  263. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  264. data/lib/ffi/platform/i386-gnu/types.conf +84 -84
  265. data/lib/ffi/platform/i386-linux/types.conf +77 -77
  266. data/lib/ffi/platform/i386-netbsd/types.conf +87 -87
  267. data/lib/ffi/platform/i386-openbsd/types.conf +89 -89
  268. data/lib/ffi/platform/i386-solaris/types.conf +96 -96
  269. data/lib/ffi/platform/i386-windows/types.conf +43 -96
  270. data/lib/ffi/platform/ia64-linux/types.conf +79 -79
  271. data/lib/ffi/platform/mips-linux/types.conf +79 -79
  272. data/lib/ffi/platform/mips64-linux/types.conf +81 -81
  273. data/lib/ffi/platform/mips64el-linux/types.conf +81 -81
  274. data/lib/ffi/platform/mipsel-linux/types.conf +79 -79
  275. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +79 -79
  276. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +79 -79
  277. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +81 -81
  278. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +81 -81
  279. data/lib/ffi/platform/powerpc-aix/types.conf +155 -155
  280. data/lib/ffi/platform/powerpc-darwin/types.conf +63 -63
  281. data/lib/ffi/platform/powerpc-linux/types.conf +108 -78
  282. data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
  283. data/lib/ffi/platform/powerpc64-linux/types.conf +81 -81
  284. data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
  285. data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
  286. data/lib/ffi/platform/s390-linux/types.conf +79 -79
  287. data/lib/ffi/platform/s390x-linux/types.conf +79 -79
  288. data/lib/ffi/platform/sparc-linux/types.conf +79 -79
  289. data/lib/ffi/platform/sparc-solaris/types.conf +103 -103
  290. data/lib/ffi/platform/sparc64-linux/types.conf +79 -79
  291. data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
  292. data/lib/ffi/platform/sparcv9-solaris/types.conf +103 -103
  293. data/lib/ffi/platform/x86_64-cygwin/types.conf +1 -1
  294. data/lib/ffi/platform/x86_64-darwin/types.conf +88 -84
  295. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
  296. data/lib/ffi/platform/x86_64-freebsd/types.conf +90 -90
  297. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  298. data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
  299. data/lib/ffi/platform/x86_64-linux/types.conf +107 -77
  300. data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
  301. data/lib/ffi/platform/x86_64-netbsd/types.conf +89 -89
  302. data/lib/ffi/platform/x86_64-openbsd/types.conf +86 -86
  303. data/lib/ffi/platform/x86_64-solaris/types.conf +96 -96
  304. data/lib/ffi/platform/x86_64-windows/types.conf +42 -110
  305. data/lib/ffi/pointer.rb +26 -20
  306. data/lib/ffi/struct.rb +13 -68
  307. data/lib/ffi/struct_by_reference.rb +72 -0
  308. data/lib/ffi/struct_layout.rb +96 -0
  309. data/lib/ffi/tools/const_generator.rb +5 -4
  310. data/lib/ffi/tools/generator.rb +47 -2
  311. data/lib/ffi/tools/generator_task.rb +13 -17
  312. data/lib/ffi/tools/struct_generator.rb +4 -4
  313. data/lib/ffi/tools/types_generator.rb +7 -4
  314. data/lib/ffi/types.rb +1 -1
  315. data/lib/ffi/variadic.rb +1 -10
  316. data/lib/ffi/version.rb +1 -1
  317. data/rakelib/ffi_gem_helper.rb +65 -0
  318. data/samples/getlogin.rb +1 -1
  319. data/samples/getpid.rb +1 -1
  320. data/samples/gettimeofday.rb +8 -8
  321. data/samples/hello.rb +2 -1
  322. data/samples/inotify.rb +1 -1
  323. data/samples/pty.rb +1 -2
  324. data/samples/qsort.rb +0 -1
  325. metadata +160 -122
  326. data/.gitignore +0 -22
  327. data/.gitmodules +0 -3
  328. data/.travis.yml +0 -52
  329. data/.yardopts +0 -5
  330. data/appveyor.yml +0 -22
  331. data/ext/ffi_c/DataConverter.c +0 -91
  332. data/ext/ffi_c/StructByReference.c +0 -190
  333. data/ext/ffi_c/StructByReference.h +0 -50
  334. data/ext/ffi_c/libffi/ChangeLog.libffi +0 -584
  335. data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
  336. data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
  337. data/ext/ffi_c/win32/stdbool.h +0 -8
  338. data/ext/ffi_c/win32/stdint.h +0 -201
  339. data/samples/sample_helper.rb +0 -6
@@ -0,0 +1,33 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 12.00
3
+ # Visual Studio 15
4
+ VisualStudioVersion = 15.0.28302.56
5
+ MinimumVisualStudioVersion = 10.0.40219.1
6
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ffi_staticLib_arm64", "Ffi_staticLib.vcxproj", "{115502C0-BE05-4767-BF19-5C87D805FAD6}"
7
+ EndProject
8
+ Global
9
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
10
+ Debug|ARM64 = Debug|ARM64
11
+ Debug|x64 = Debug|x64
12
+ Debug|x86 = Debug|x86
13
+ Release|ARM64 = Release|ARM64
14
+ Release|x64 = Release|x64
15
+ Release|x86 = Release|x86
16
+ EndGlobalSection
17
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
18
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Debug|ARM64.ActiveCfg = Debug|ARM64
19
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Debug|ARM64.Build.0 = Debug|ARM64
20
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Debug|x64.ActiveCfg = Debug|ARM64
21
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Debug|x86.ActiveCfg = Debug|ARM64
22
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Release|ARM64.ActiveCfg = Release|ARM64
23
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Release|ARM64.Build.0 = Release|ARM64
24
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Release|x64.ActiveCfg = Release|ARM64
25
+ {115502C0-BE05-4767-BF19-5C87D805FAD6}.Release|x86.ActiveCfg = Release|ARM64
26
+ EndGlobalSection
27
+ GlobalSection(SolutionProperties) = preSolution
28
+ HideSolutionNode = FALSE
29
+ EndGlobalSection
30
+ GlobalSection(ExtensibilityGlobals) = postSolution
31
+ SolutionGuid = {241C54C7-20DD-4897-9376-E6B6D1B43BD5}
32
+ EndGlobalSection
33
+ EndGlobal
@@ -0,0 +1,130 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup Label="ProjectConfigurations">
4
+ <ProjectConfiguration Include="Debug|ARM64">
5
+ <Configuration>Debug</Configuration>
6
+ <Platform>ARM64</Platform>
7
+ </ProjectConfiguration>
8
+ <ProjectConfiguration Include="Release|ARM64">
9
+ <Configuration>Release</Configuration>
10
+ <Platform>ARM64</Platform>
11
+ </ProjectConfiguration>
12
+ </ItemGroup>
13
+ <PropertyGroup Label="Globals">
14
+ <VCProjectVersion>15.0</VCProjectVersion>
15
+ <ProjectGuid>{115502C0-BE05-4767-BF19-5C87D805FAD6}</ProjectGuid>
16
+ <Keyword>Win32Proj</Keyword>
17
+ <RootNamespace>FfistaticLib</RootNamespace>
18
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
19
+ <ProjectName>Ffi_staticLib_arm64</ProjectName>
20
+ </PropertyGroup>
21
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
22
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
23
+ <ConfigurationType>StaticLibrary</ConfigurationType>
24
+ <UseDebugLibraries>true</UseDebugLibraries>
25
+ <PlatformToolset>v141</PlatformToolset>
26
+ <CharacterSet>Unicode</CharacterSet>
27
+ </PropertyGroup>
28
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
29
+ <ConfigurationType>StaticLibrary</ConfigurationType>
30
+ <UseDebugLibraries>false</UseDebugLibraries>
31
+ <PlatformToolset>v141</PlatformToolset>
32
+ <WholeProgramOptimization>true</WholeProgramOptimization>
33
+ <CharacterSet>Unicode</CharacterSet>
34
+ </PropertyGroup>
35
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
36
+ <ImportGroup Label="ExtensionSettings">
37
+ </ImportGroup>
38
+ <ImportGroup Label="Shared">
39
+ </ImportGroup>
40
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
41
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
42
+ </ImportGroup>
43
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
44
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
45
+ </ImportGroup>
46
+ <PropertyGroup Label="UserMacros" />
47
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
48
+ <LinkIncremental>true</LinkIncremental>
49
+ </PropertyGroup>
50
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
51
+ <LinkIncremental>false</LinkIncremental>
52
+ </PropertyGroup>
53
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
54
+ <ClCompile>
55
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
56
+ <WarningLevel>Level3</WarningLevel>
57
+ <Optimization>Disabled</Optimization>
58
+ <SDLCheck>true</SDLCheck>
59
+ <PreprocessorDefinitions>FFI_BUILDING_DLL;_DEBUG;_LIB;USE_DL_PREFIX;ARM64;_M_ARM64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
60
+ <ConformanceMode>true</ConformanceMode>
61
+ <AdditionalIncludeDirectories>..\..\include;.\aarch64_include;..\..\src\aarch64;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
62
+ <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
63
+ <BrowseInformation>true</BrowseInformation>
64
+ <OmitFramePointers>
65
+ </OmitFramePointers>
66
+ <WholeProgramOptimization>false</WholeProgramOptimization>
67
+ </ClCompile>
68
+ <Link>
69
+ <SubSystem>Windows</SubSystem>
70
+ <GenerateDebugInformation>true</GenerateDebugInformation>
71
+ </Link>
72
+ </ItemDefinitionGroup>
73
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
74
+ <ClCompile>
75
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
76
+ <WarningLevel>Level3</WarningLevel>
77
+ <Optimization>MaxSpeed</Optimization>
78
+ <FunctionLevelLinking>true</FunctionLevelLinking>
79
+ <IntrinsicFunctions>true</IntrinsicFunctions>
80
+ <SDLCheck>true</SDLCheck>
81
+ <PreprocessorDefinitions>FFI_BUILDING_DLL;USE_DL_PREFIX;ARM64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
82
+ <ConformanceMode>true</ConformanceMode>
83
+ <AdditionalIncludeDirectories>..\..\include;.\aarch64_include;..\..\src\aarch64;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
84
+ <OmitFramePointers>true</OmitFramePointers>
85
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
86
+ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
87
+ <AdditionalUsingDirectories>..\..\src;..\..\src\aarch64;%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
88
+ </ClCompile>
89
+ <Link>
90
+ <SubSystem>Windows</SubSystem>
91
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
92
+ <OptimizeReferences>true</OptimizeReferences>
93
+ <GenerateDebugInformation>true</GenerateDebugInformation>
94
+ </Link>
95
+ <ProjectReference>
96
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
97
+ </ProjectReference>
98
+ </ItemDefinitionGroup>
99
+ <ItemGroup>
100
+ <ClInclude Include=".\aarch64_include\ffi.h" />
101
+ <ClInclude Include=".\aarch64_include\fficonfig.h" />
102
+ <ClInclude Include="..\..\src\aarch64\ffitarget.h" />
103
+ <ClInclude Include="..\include\ffi_cfi.h" />
104
+ <ClInclude Include="..\include\ffi_common.h" />
105
+ <ClInclude Include="..\..\src\aarch64\internal.h" />
106
+ </ItemGroup>
107
+ <ItemGroup>
108
+ <ClCompile Include="..\..\src\closures.c" />
109
+ <ClCompile Include="..\..\src\dlmalloc.c" />
110
+ <ClCompile Include="..\..\src\aarch64\ffi.c" />
111
+ <ClCompile Include="..\..\src\prep_cif.c" />
112
+ <ClCompile Include="..\..\src\types.c" />
113
+ </ItemGroup>
114
+ <!--ItemGroup>
115
+ <Object Include="..\..\..\..\Downloads\libffi-master-win64\src\aarch64\win64_armasm.obj" />
116
+ </ItemGroup-->
117
+ <ItemGroup>
118
+ <CustomBuild Include="..\..\src\aarch64\win64_armasm.S">
119
+ <!--ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild -->
120
+ <Command>
121
+ cl /FA /EP /nologo /I"..\..\include" /I".\aarch64_include" /I"..\..\src\aarch64" "%(FullPath)" &gt; $(IntDir)win64_armasm.i
122
+ armasm64 $(IntDir)win64_armasm.i /I"src\" /I"..\..\include" /I"..\..\src\aarch64" -o "$(IntDir)win64_armasm.obj"
123
+ </Command>
124
+ <Outputs>win64_armasm.obj;%(Outputs)</Outputs>
125
+ </CustomBuild>
126
+ </ItemGroup>
127
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
128
+ <ImportGroup Label="ExtensionTargets">
129
+ </ImportGroup>
130
+ </Project>
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup>
4
+ <Filter Include="Source Files">
5
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7
+ </Filter>
8
+ <Filter Include="Header Files">
9
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
11
+ </Filter>
12
+ <Filter Include="Resource Files">
13
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15
+ </Filter>
16
+ </ItemGroup>
17
+ <ItemGroup>
18
+ <ClInclude Include="..\include\ffi.h">
19
+ <Filter>Header Files</Filter>
20
+ </ClInclude>
21
+ <ClInclude Include="..\include\ffi_cfi.h">
22
+ <Filter>Header Files</Filter>
23
+ </ClInclude>
24
+ <ClInclude Include="..\include\ffi_common.h">
25
+ <Filter>Header Files</Filter>
26
+ </ClInclude>
27
+ <ClInclude Include="..\include\fficonfig.h">
28
+ <Filter>Header Files</Filter>
29
+ </ClInclude>
30
+ <ClInclude Include="..\include\ffitarget.h">
31
+ <Filter>Header Files</Filter>
32
+ </ClInclude>
33
+ <ClInclude Include="..\include\internal.h">
34
+ <Filter>Header Files</Filter>
35
+ </ClInclude>
36
+ </ItemGroup>
37
+ <ItemGroup>
38
+ <ClCompile Include="src\closures.c">
39
+ <Filter>Source Files</Filter>
40
+ </ClCompile>
41
+ <ClCompile Include="src\dlmalloc.c">
42
+ <Filter>Source Files</Filter>
43
+ </ClCompile>
44
+ <ClCompile Include="src\ffi.c">
45
+ <Filter>Source Files</Filter>
46
+ </ClCompile>
47
+ <ClCompile Include="src\prep_cif.c">
48
+ <Filter>Source Files</Filter>
49
+ </ClCompile>
50
+ <ClCompile Include="src\types.c">
51
+ <Filter>Source Files</Filter>
52
+ </ClCompile>
53
+ </ItemGroup>
54
+ <ItemGroup>
55
+ <CustomBuild Include="src\win64_armasm.S" />
56
+ </ItemGroup>
57
+ </Project>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <PropertyGroup />
4
+ </Project>
@@ -0,0 +1,511 @@
1
+ /* -----------------------------------------------------------------*-C-*-
2
+ libffi 3.3-rc0 - Copyright (c) 2011, 2014 Anthony Green
3
+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person
6
+ obtaining a copy of this software and associated documentation
7
+ files (the ``Software''), to deal in the Software without
8
+ restriction, including without limitation the rights to use, copy,
9
+ modify, merge, publish, distribute, sublicense, and/or sell copies
10
+ of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
24
+
25
+ ----------------------------------------------------------------------- */
26
+
27
+ /* -------------------------------------------------------------------
28
+ Most of the API is documented in doc/libffi.texi.
29
+
30
+ The raw API is designed to bypass some of the argument packing and
31
+ unpacking on architectures for which it can be avoided. Routines
32
+ are provided to emulate the raw API if the underlying platform
33
+ doesn't allow faster implementation.
34
+
35
+ More details on the raw API can be found in:
36
+
37
+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html
38
+
39
+ and
40
+
41
+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html
42
+ -------------------------------------------------------------------- */
43
+
44
+ #ifndef LIBFFI_H
45
+ #define LIBFFI_H
46
+
47
+ #ifdef __cplusplus
48
+ extern "C" {
49
+ #endif
50
+
51
+ /* Specify which architecture libffi is configured for. */
52
+ #ifndef AARCH64
53
+ #define AARCH64
54
+ #endif
55
+
56
+ /* ---- System configuration information --------------------------------- */
57
+
58
+ #include <ffitarget.h>
59
+
60
+ #ifndef LIBFFI_ASM
61
+
62
+ #if defined(_MSC_VER) && !defined(__clang__)
63
+ #define __attribute__(X)
64
+ #endif
65
+
66
+ #include <stddef.h>
67
+ #include <limits.h>
68
+
69
+ /* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
70
+ But we can find it either under the correct ANSI name, or under GNU
71
+ C's internal name. */
72
+
73
+ #define FFI_64_BIT_MAX 9223372036854775807
74
+
75
+ #ifdef LONG_LONG_MAX
76
+ # define FFI_LONG_LONG_MAX LONG_LONG_MAX
77
+ #else
78
+ # ifdef LLONG_MAX
79
+ # define FFI_LONG_LONG_MAX LLONG_MAX
80
+ # ifdef _AIX52 /* or newer has C99 LLONG_MAX */
81
+ # undef FFI_64_BIT_MAX
82
+ # define FFI_64_BIT_MAX 9223372036854775807LL
83
+ # endif /* _AIX52 or newer */
84
+ # else
85
+ # ifdef __GNUC__
86
+ # define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
87
+ # endif
88
+ # ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */
89
+ # ifndef __PPC64__
90
+ # if defined (__IBMC__) || defined (__IBMCPP__)
91
+ # define FFI_LONG_LONG_MAX LONGLONG_MAX
92
+ # endif
93
+ # endif /* __PPC64__ */
94
+ # undef FFI_64_BIT_MAX
95
+ # define FFI_64_BIT_MAX 9223372036854775807LL
96
+ # endif
97
+ # endif
98
+ #endif
99
+
100
+ /* The closure code assumes that this works on pointers, i.e. a size_t
101
+ can hold a pointer. */
102
+
103
+ typedef struct _ffi_type
104
+ {
105
+ size_t size;
106
+ unsigned short alignment;
107
+ unsigned short type;
108
+ struct _ffi_type **elements;
109
+ } ffi_type;
110
+
111
+ /* Need minimal decorations for DLLs to work on Windows. GCC has
112
+ autoimport and autoexport. Always mark externally visible symbols
113
+ as dllimport for MSVC clients, even if it means an extra indirection
114
+ when using the static version of the library.
115
+ Besides, as a workaround, they can define FFI_BUILDING if they
116
+ *know* they are going to link with the static library. */
117
+ #if defined _MSC_VER
118
+ # if defined FFI_BUILDING_DLL /* Building libffi.DLL with msvcc.sh */
119
+ # define FFI_API __declspec(dllexport)
120
+ # elif !defined FFI_BUILDING /* Importing libffi.DLL */
121
+ # define FFI_API __declspec(dllimport)
122
+ # else /* Building/linking static library */
123
+ # define FFI_API
124
+ # endif
125
+ #else
126
+ # define FFI_API
127
+ #endif
128
+
129
+ /* The externally visible type declarations also need the MSVC DLL
130
+ decorations, or they will not be exported from the object file. */
131
+ #if defined LIBFFI_HIDE_BASIC_TYPES
132
+ # define FFI_EXTERN FFI_API
133
+ #else
134
+ # define FFI_EXTERN extern FFI_API
135
+ #endif
136
+
137
+ #ifndef LIBFFI_HIDE_BASIC_TYPES
138
+ #if SCHAR_MAX == 127
139
+ # define ffi_type_uchar ffi_type_uint8
140
+ # define ffi_type_schar ffi_type_sint8
141
+ #else
142
+ #error "char size not supported"
143
+ #endif
144
+
145
+ #if SHRT_MAX == 32767
146
+ # define ffi_type_ushort ffi_type_uint16
147
+ # define ffi_type_sshort ffi_type_sint16
148
+ #elif SHRT_MAX == 2147483647
149
+ # define ffi_type_ushort ffi_type_uint32
150
+ # define ffi_type_sshort ffi_type_sint32
151
+ #else
152
+ #error "short size not supported"
153
+ #endif
154
+
155
+ #if INT_MAX == 32767
156
+ # define ffi_type_uint ffi_type_uint16
157
+ # define ffi_type_sint ffi_type_sint16
158
+ #elif INT_MAX == 2147483647
159
+ # define ffi_type_uint ffi_type_uint32
160
+ # define ffi_type_sint ffi_type_sint32
161
+ #elif INT_MAX == 9223372036854775807
162
+ # define ffi_type_uint ffi_type_uint64
163
+ # define ffi_type_sint ffi_type_sint64
164
+ #else
165
+ #error "int size not supported"
166
+ #endif
167
+
168
+ #if LONG_MAX == 2147483647
169
+ # if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX
170
+ #error "no 64-bit data type supported"
171
+ # endif
172
+ #elif LONG_MAX != FFI_64_BIT_MAX
173
+ #error "long size not supported"
174
+ #endif
175
+
176
+ #if LONG_MAX == 2147483647
177
+ # define ffi_type_ulong ffi_type_uint32
178
+ # define ffi_type_slong ffi_type_sint32
179
+ #elif LONG_MAX == FFI_64_BIT_MAX
180
+ # define ffi_type_ulong ffi_type_uint64
181
+ # define ffi_type_slong ffi_type_sint64
182
+ #else
183
+ #error "long size not supported"
184
+ #endif
185
+
186
+ /* These are defined in types.c. */
187
+ FFI_EXTERN ffi_type ffi_type_void;
188
+ FFI_EXTERN ffi_type ffi_type_uint8;
189
+ FFI_EXTERN ffi_type ffi_type_sint8;
190
+ FFI_EXTERN ffi_type ffi_type_uint16;
191
+ FFI_EXTERN ffi_type ffi_type_sint16;
192
+ FFI_EXTERN ffi_type ffi_type_uint32;
193
+ FFI_EXTERN ffi_type ffi_type_sint32;
194
+ FFI_EXTERN ffi_type ffi_type_uint64;
195
+ FFI_EXTERN ffi_type ffi_type_sint64;
196
+ FFI_EXTERN ffi_type ffi_type_float;
197
+ FFI_EXTERN ffi_type ffi_type_double;
198
+ FFI_EXTERN ffi_type ffi_type_pointer;
199
+
200
+ #ifndef _M_ARM64
201
+ FFI_EXTERN ffi_type ffi_type_longdouble;
202
+ #else
203
+ #define ffi_type_longdouble ffi_type_double
204
+ #endif
205
+
206
+ #ifdef FFI_TARGET_HAS_COMPLEX_TYPE
207
+ FFI_EXTERN ffi_type ffi_type_complex_float;
208
+ FFI_EXTERN ffi_type ffi_type_complex_double;
209
+ #if 1
210
+ FFI_EXTERN ffi_type ffi_type_complex_longdouble;
211
+ #else
212
+ #define ffi_type_complex_longdouble ffi_type_complex_double
213
+ #endif
214
+ #endif
215
+ #endif /* LIBFFI_HIDE_BASIC_TYPES */
216
+
217
+ typedef enum {
218
+ FFI_OK = 0,
219
+ FFI_BAD_TYPEDEF,
220
+ FFI_BAD_ABI
221
+ } ffi_status;
222
+
223
+ typedef struct {
224
+ ffi_abi abi;
225
+ unsigned nargs;
226
+ ffi_type **arg_types;
227
+ ffi_type *rtype;
228
+ unsigned bytes;
229
+ unsigned flags;
230
+ #ifdef FFI_EXTRA_CIF_FIELDS
231
+ FFI_EXTRA_CIF_FIELDS;
232
+ #endif
233
+ } ffi_cif;
234
+
235
+ /* ---- Definitions for the raw API -------------------------------------- */
236
+
237
+ #ifndef FFI_SIZEOF_ARG
238
+ # if LONG_MAX == 2147483647
239
+ # define FFI_SIZEOF_ARG 4
240
+ # elif LONG_MAX == FFI_64_BIT_MAX
241
+ # define FFI_SIZEOF_ARG 8
242
+ # endif
243
+ #endif
244
+
245
+ #ifndef FFI_SIZEOF_JAVA_RAW
246
+ # define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG
247
+ #endif
248
+
249
+ typedef union {
250
+ ffi_sarg sint;
251
+ ffi_arg uint;
252
+ float flt;
253
+ char data[FFI_SIZEOF_ARG];
254
+ void* ptr;
255
+ } ffi_raw;
256
+
257
+ #if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8
258
+ /* This is a special case for mips64/n32 ABI (and perhaps others) where
259
+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */
260
+ typedef union {
261
+ signed int sint;
262
+ unsigned int uint;
263
+ float flt;
264
+ char data[FFI_SIZEOF_JAVA_RAW];
265
+ void* ptr;
266
+ } ffi_java_raw;
267
+ #else
268
+ typedef ffi_raw ffi_java_raw;
269
+ #endif
270
+
271
+
272
+ FFI_API
273
+ void ffi_raw_call (ffi_cif *cif,
274
+ void (*fn)(void),
275
+ void *rvalue,
276
+ ffi_raw *avalue);
277
+
278
+ FFI_API void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
279
+ FFI_API void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
280
+ FFI_API size_t ffi_raw_size (ffi_cif *cif);
281
+
282
+ /* This is analogous to the raw API, except it uses Java parameter
283
+ packing, even on 64-bit machines. I.e. on 64-bit machines longs
284
+ and doubles are followed by an empty 64-bit word. */
285
+
286
+ FFI_API
287
+ void ffi_java_raw_call (ffi_cif *cif,
288
+ void (*fn)(void),
289
+ void *rvalue,
290
+ ffi_java_raw *avalue);
291
+
292
+ FFI_API
293
+ void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw);
294
+ FFI_API
295
+ void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args);
296
+ FFI_API
297
+ size_t ffi_java_raw_size (ffi_cif *cif);
298
+
299
+ /* ---- Definitions for closures ----------------------------------------- */
300
+
301
+ #if FFI_CLOSURES
302
+
303
+ #ifdef _MSC_VER
304
+ __declspec(align(8))
305
+ #endif
306
+ typedef struct {
307
+ #if 0
308
+ void *trampoline_table;
309
+ void *trampoline_table_entry;
310
+ #else
311
+ char tramp[FFI_TRAMPOLINE_SIZE];
312
+ #endif
313
+ ffi_cif *cif;
314
+ void (*fun)(ffi_cif*,void*,void**,void*);
315
+ void *user_data;
316
+ } ffi_closure
317
+ #ifdef __GNUC__
318
+ __attribute__((aligned (8)))
319
+ #endif
320
+ ;
321
+
322
+ #ifndef __GNUC__
323
+ # ifdef __sgi
324
+ # pragma pack 0
325
+ # endif
326
+ #endif
327
+
328
+ FFI_API void *ffi_closure_alloc (size_t size, void **code);
329
+ FFI_API void ffi_closure_free (void *);
330
+
331
+ FFI_API ffi_status
332
+ ffi_prep_closure (ffi_closure*,
333
+ ffi_cif *,
334
+ void (*fun)(ffi_cif*,void*,void**,void*),
335
+ void *user_data)
336
+ #if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 405)
337
+ __attribute__((deprecated ("use ffi_prep_closure_loc instead")))
338
+ #elif defined(__GNUC__) && __GNUC__ >= 3
339
+ __attribute__((deprecated))
340
+ #endif
341
+ ;
342
+
343
+ FFI_API ffi_status
344
+ ffi_prep_closure_loc (ffi_closure*,
345
+ ffi_cif *,
346
+ void (*fun)(ffi_cif*,void*,void**,void*),
347
+ void *user_data,
348
+ void*codeloc);
349
+
350
+ #ifdef __sgi
351
+ # pragma pack 8
352
+ #endif
353
+ typedef struct {
354
+ #if 0
355
+ void *trampoline_table;
356
+ void *trampoline_table_entry;
357
+ #else
358
+ char tramp[FFI_TRAMPOLINE_SIZE];
359
+ #endif
360
+ ffi_cif *cif;
361
+
362
+ #if !FFI_NATIVE_RAW_API
363
+
364
+ /* If this is enabled, then a raw closure has the same layout
365
+ as a regular closure. We use this to install an intermediate
366
+ handler to do the transaltion, void** -> ffi_raw*. */
367
+
368
+ void (*translate_args)(ffi_cif*,void*,void**,void*);
369
+ void *this_closure;
370
+
371
+ #endif
372
+
373
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*);
374
+ void *user_data;
375
+
376
+ } ffi_raw_closure;
377
+
378
+ typedef struct {
379
+ #if 0
380
+ void *trampoline_table;
381
+ void *trampoline_table_entry;
382
+ #else
383
+ char tramp[FFI_TRAMPOLINE_SIZE];
384
+ #endif
385
+
386
+ ffi_cif *cif;
387
+
388
+ #if !FFI_NATIVE_RAW_API
389
+
390
+ /* If this is enabled, then a raw closure has the same layout
391
+ as a regular closure. We use this to install an intermediate
392
+ handler to do the translation, void** -> ffi_raw*. */
393
+
394
+ void (*translate_args)(ffi_cif*,void*,void**,void*);
395
+ void *this_closure;
396
+
397
+ #endif
398
+
399
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*);
400
+ void *user_data;
401
+
402
+ } ffi_java_raw_closure;
403
+
404
+ FFI_API ffi_status
405
+ ffi_prep_raw_closure (ffi_raw_closure*,
406
+ ffi_cif *cif,
407
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
408
+ void *user_data);
409
+
410
+ FFI_API ffi_status
411
+ ffi_prep_raw_closure_loc (ffi_raw_closure*,
412
+ ffi_cif *cif,
413
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
414
+ void *user_data,
415
+ void *codeloc);
416
+
417
+ FFI_API ffi_status
418
+ ffi_prep_java_raw_closure (ffi_java_raw_closure*,
419
+ ffi_cif *cif,
420
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
421
+ void *user_data);
422
+
423
+ FFI_API ffi_status
424
+ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
425
+ ffi_cif *cif,
426
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
427
+ void *user_data,
428
+ void *codeloc);
429
+
430
+ #endif /* FFI_CLOSURES */
431
+
432
+ #if FFI_GO_CLOSURES
433
+
434
+ typedef struct {
435
+ void *tramp;
436
+ ffi_cif *cif;
437
+ void (*fun)(ffi_cif*,void*,void**,void*);
438
+ } ffi_go_closure;
439
+
440
+ FFI_API ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *,
441
+ void (*fun)(ffi_cif*,void*,void**,void*));
442
+
443
+ FFI_API void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
444
+ void **avalue, void *closure);
445
+
446
+ #endif /* FFI_GO_CLOSURES */
447
+
448
+ /* ---- Public interface definition -------------------------------------- */
449
+
450
+ FFI_API
451
+ ffi_status ffi_prep_cif(ffi_cif *cif,
452
+ ffi_abi abi,
453
+ unsigned int nargs,
454
+ ffi_type *rtype,
455
+ ffi_type **atypes);
456
+
457
+ FFI_API
458
+ ffi_status ffi_prep_cif_var(ffi_cif *cif,
459
+ ffi_abi abi,
460
+ unsigned int nfixedargs,
461
+ unsigned int ntotalargs,
462
+ ffi_type *rtype,
463
+ ffi_type **atypes);
464
+
465
+ FFI_API
466
+ void ffi_call(ffi_cif *cif,
467
+ void (*fn)(void),
468
+ void *rvalue,
469
+ void **avalue);
470
+
471
+ FFI_API
472
+ ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
473
+ size_t *offsets);
474
+
475
+ /* Useful for eliminating compiler warnings. */
476
+ #define FFI_FN(f) ((void (*)(void))f)
477
+
478
+ /* ---- Definitions shared with assembly code ---------------------------- */
479
+
480
+ #endif
481
+
482
+ /* If these change, update src/mips/ffitarget.h. */
483
+ #define FFI_TYPE_VOID 0
484
+ #define FFI_TYPE_INT 1
485
+ #define FFI_TYPE_FLOAT 2
486
+ #define FFI_TYPE_DOUBLE 3
487
+ #ifndef _M_ARM64
488
+ #define FFI_TYPE_LONGDOUBLE 4
489
+ #else
490
+ #define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
491
+ #endif
492
+ #define FFI_TYPE_UINT8 5
493
+ #define FFI_TYPE_SINT8 6
494
+ #define FFI_TYPE_UINT16 7
495
+ #define FFI_TYPE_SINT16 8
496
+ #define FFI_TYPE_UINT32 9
497
+ #define FFI_TYPE_SINT32 10
498
+ #define FFI_TYPE_UINT64 11
499
+ #define FFI_TYPE_SINT64 12
500
+ #define FFI_TYPE_STRUCT 13
501
+ #define FFI_TYPE_POINTER 14
502
+ #define FFI_TYPE_COMPLEX 15
503
+ /* This should always refer to the last type code (for sanity checks). */
504
+ #define FFI_TYPE_LAST FFI_TYPE_COMPLEX
505
+
506
+
507
+ #ifdef __cplusplus
508
+ }
509
+ #endif
510
+
511
+ #endif