ffi 1.9.18 → 1.9.21

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (366) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/Rakefile +14 -3
  4. data/ext/ffi_c/AbstractMemory.c +6 -1
  5. data/ext/ffi_c/Platform.c +10 -2
  6. data/ext/ffi_c/extconf.rb +7 -2
  7. data/ext/ffi_c/libffi.bsd.mk +9 -3
  8. data/ext/ffi_c/libffi.darwin.mk +14 -4
  9. data/ext/ffi_c/libffi.gnu.mk +2 -1
  10. data/ext/ffi_c/libffi.mk +9 -4
  11. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  12. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  13. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  14. data/ext/ffi_c/libffi/LICENSE +1 -1
  15. data/ext/ffi_c/libffi/Makefile.am +166 -157
  16. data/ext/ffi_c/libffi/README +164 -52
  17. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  18. data/ext/ffi_c/libffi/autogen.sh +2 -0
  19. data/ext/ffi_c/libffi/configure.ac +148 -256
  20. data/ext/ffi_c/libffi/configure.host +265 -4
  21. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  22. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  23. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  24. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  25. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  26. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  27. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  28. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  29. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  30. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  31. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  32. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  33. data/ext/ffi_c/libffi/libtool-version +1 -1
  34. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  35. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  36. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  37. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  38. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  39. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  40. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  41. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  42. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  43. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  44. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  45. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  46. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  47. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  48. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  49. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  50. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  51. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  52. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  53. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  54. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  55. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  56. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  57. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  58. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  59. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  60. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  61. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  62. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  63. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  64. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  65. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  66. data/ext/ffi_c/libffi/src/closures.c +319 -44
  67. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  68. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  69. data/ext/ffi_c/libffi/src/debug.c +6 -1
  70. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  71. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  72. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  73. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  74. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  75. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  76. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  77. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  78. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  79. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  80. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  81. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  82. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  83. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  84. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  85. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  86. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  87. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  88. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  90. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  91. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  92. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  93. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  94. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  95. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  96. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  97. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  98. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  99. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  100. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  101. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  102. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  103. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  104. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  105. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  106. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  107. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  108. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  109. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  110. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  111. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  112. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  113. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  114. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  115. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  116. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  117. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  118. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  119. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  120. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  121. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  122. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  123. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  124. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  125. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  126. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  127. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  128. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  129. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  130. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  131. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  132. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  133. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  134. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  135. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  136. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  137. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  138. data/ext/ffi_c/libffi/src/types.c +43 -14
  139. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  140. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  141. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  143. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  144. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  145. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  146. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  147. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  148. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  149. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  150. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  151. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  152. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  153. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  154. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  155. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  156. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  157. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  158. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  159. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  262. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  263. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  284. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  315. data/ffi.gemspec +2 -2
  316. data/lib/ffi/enum.rb +124 -0
  317. data/lib/ffi/library.rb +65 -13
  318. data/lib/ffi/platform.rb +7 -2
  319. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  320. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  321. data/lib/ffi/pointer.rb +1 -0
  322. data/lib/ffi/struct.rb +0 -2
  323. data/lib/ffi/version.rb +1 -1
  324. data/spec/ffi/bitmask_spec.rb +575 -0
  325. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  326. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  327. data/spec/ffi/struct_spec.rb +0 -4
  328. metadata +143 -51
  329. data/ext/ffi_c/libffi/Makefile.in +0 -1820
  330. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  331. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  332. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  333. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  334. data/ext/ffi_c/libffi/compile +0 -143
  335. data/ext/ffi_c/libffi/config.guess +0 -1501
  336. data/ext/ffi_c/libffi/config.sub +0 -1705
  337. data/ext/ffi_c/libffi/configure +0 -17191
  338. data/ext/ffi_c/libffi/depcomp +0 -630
  339. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  340. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  341. data/ext/ffi_c/libffi/fficonfig.h.in +0 -199
  342. data/ext/ffi_c/libffi/include/Makefile.in +0 -487
  343. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  344. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  345. data/ext/ffi_c/libffi/install-sh +0 -520
  346. data/ext/ffi_c/libffi/ltmain.sh +0 -9636
  347. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  348. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  349. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  350. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  351. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  352. data/ext/ffi_c/libffi/man/Makefile.in +0 -466
  353. data/ext/ffi_c/libffi/mdate-sh +0 -201
  354. data/ext/ffi_c/libffi/missing +0 -376
  355. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  356. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  357. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  358. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  359. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  360. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  361. data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -500
  362. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  365. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  366. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
@@ -1,4 +1,4 @@
1
- @set UPDATED 23 August 2011
2
- @set UPDATED-MONTH August 2011
3
- @set EDITION 3.0.10
4
- @set VERSION 3.0.10
1
+ @set UPDATED 8 November 2014
2
+ @set UPDATED-MONTH November 2014
3
+ @set EDITION 3.2.1
4
+ @set VERSION 3.2.1
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env python
2
+ import subprocess
3
+ import os
4
+ import errno
5
+ import collections
6
+ import glob
7
+ import argparse
8
+
9
+ class Platform(object):
10
+ pass
11
+
12
+ class simulator_platform(Platform):
13
+ directory = 'darwin_ios'
14
+ sdk = 'iphonesimulator'
15
+ arch = 'i386'
16
+ triple = 'i386-apple-darwin11'
17
+ version_min = '-miphoneos-version-min=7.0'
18
+
19
+ prefix = "#ifdef __i386__\n\n"
20
+ suffix = "\n\n#endif"
21
+ src_dir = 'x86'
22
+ src_files = ['sysv.S', 'ffi.c']
23
+
24
+
25
+ class simulator64_platform(Platform):
26
+ directory = 'darwin_ios'
27
+ sdk = 'iphonesimulator'
28
+ arch = 'x86_64'
29
+ triple = 'x86_64-apple-darwin13'
30
+ version_min = '-miphoneos-version-min=7.0'
31
+
32
+ prefix = "#ifdef __x86_64__\n\n"
33
+ suffix = "\n\n#endif"
34
+ src_dir = 'x86'
35
+ src_files = ['unix64.S', 'ffi64.c']
36
+
37
+
38
+ class device_platform(Platform):
39
+ directory = 'darwin_ios'
40
+ sdk = 'iphoneos'
41
+ arch = 'armv7'
42
+ triple = 'arm-apple-darwin11'
43
+ version_min = '-miphoneos-version-min=7.0'
44
+
45
+ prefix = "#ifdef __arm__\n\n"
46
+ suffix = "\n\n#endif"
47
+ src_dir = 'arm'
48
+ src_files = ['sysv.S', 'trampoline.S', 'ffi.c']
49
+
50
+
51
+ class device64_platform(Platform):
52
+ directory = 'darwin_ios'
53
+ sdk = 'iphoneos'
54
+ arch = 'arm64'
55
+ triple = 'aarch64-apple-darwin13'
56
+ version_min = '-miphoneos-version-min=7.0'
57
+
58
+ prefix = "#ifdef __arm64__\n\n"
59
+ suffix = "\n\n#endif"
60
+ src_dir = 'aarch64'
61
+ src_files = ['sysv.S', 'ffi.c']
62
+
63
+
64
+ class desktop32_platform(Platform):
65
+ directory = 'darwin_osx'
66
+ sdk = 'macosx'
67
+ arch = 'i386'
68
+ triple = 'i386-apple-darwin10'
69
+ version_min = '-mmacosx-version-min=10.6'
70
+ src_dir = 'x86'
71
+ src_files = ['sysv.S', 'ffi.c']
72
+
73
+ prefix = "#ifdef __i386__\n\n"
74
+ suffix = "\n\n#endif"
75
+
76
+
77
+ class desktop64_platform(Platform):
78
+ directory = 'darwin_osx'
79
+ sdk = 'macosx'
80
+ arch = 'x86_64'
81
+ triple = 'x86_64-apple-darwin10'
82
+ version_min = '-mmacosx-version-min=10.6'
83
+
84
+ prefix = "#ifdef __x86_64__\n\n"
85
+ suffix = "\n\n#endif"
86
+ src_dir = 'x86'
87
+ src_files = ['unix64.S', 'ffi64.c']
88
+
89
+
90
+ def mkdir_p(path):
91
+ try:
92
+ os.makedirs(path)
93
+ except OSError as exc: # Python >2.5
94
+ if exc.errno != errno.EEXIST:
95
+ raise
96
+
97
+
98
+ def move_file(src_dir, dst_dir, filename, file_suffix=None, prefix='', suffix=''):
99
+ mkdir_p(dst_dir)
100
+ out_filename = filename
101
+
102
+ if file_suffix:
103
+ split_name = os.path.splitext(filename)
104
+ out_filename = "%s_%s%s" % (split_name[0], file_suffix, split_name[1])
105
+
106
+ with open(os.path.join(src_dir, filename)) as in_file:
107
+ with open(os.path.join(dst_dir, out_filename), 'w') as out_file:
108
+ if prefix:
109
+ out_file.write(prefix)
110
+
111
+ out_file.write(in_file.read())
112
+
113
+ if suffix:
114
+ out_file.write(suffix)
115
+
116
+
117
+ def list_files(src_dir, pattern=None, filelist=None):
118
+ if pattern: filelist = glob.iglob(os.path.join(src_dir, pattern))
119
+ for file in filelist:
120
+ yield os.path.basename(file)
121
+
122
+
123
+ def copy_files(src_dir, dst_dir, pattern=None, filelist=None, file_suffix=None, prefix=None, suffix=None):
124
+ for filename in list_files(src_dir, pattern=pattern, filelist=filelist):
125
+ move_file(src_dir, dst_dir, filename, file_suffix=file_suffix, prefix=prefix, suffix=suffix)
126
+
127
+
128
+ def copy_src_platform_files(platform):
129
+ src_dir = os.path.join('src', platform.src_dir)
130
+ dst_dir = os.path.join(platform.directory, 'src', platform.src_dir)
131
+ copy_files(src_dir, dst_dir, filelist=platform.src_files, file_suffix=platform.arch, prefix=platform.prefix, suffix=platform.suffix)
132
+
133
+
134
+ def build_target(platform, platform_headers):
135
+ def xcrun_cmd(cmd):
136
+ return 'xcrun -sdk %s %s -arch %s' % (platform.sdk, cmd, platform.arch)
137
+
138
+ tag='%s-%s' % (platform.sdk, platform.arch)
139
+ build_dir = 'build_%s' % tag
140
+ mkdir_p(build_dir)
141
+ env = dict(CC=xcrun_cmd('clang'),
142
+ LD=xcrun_cmd('ld'),
143
+ CFLAGS='%s' % (platform.version_min))
144
+ working_dir = os.getcwd()
145
+ try:
146
+ os.chdir(build_dir)
147
+ subprocess.check_call(['../configure', '-host', platform.triple], env=env)
148
+ finally:
149
+ os.chdir(working_dir)
150
+
151
+ for src_dir in [build_dir, os.path.join(build_dir, 'include')]:
152
+ copy_files(src_dir,
153
+ os.path.join(platform.directory, 'include'),
154
+ pattern='*.h',
155
+ file_suffix=platform.arch,
156
+ prefix=platform.prefix,
157
+ suffix=platform.suffix)
158
+
159
+ for filename in list_files(src_dir, pattern='*.h'):
160
+ platform_headers[filename].add((platform.prefix, platform.arch, platform.suffix))
161
+
162
+
163
+ def make_tramp():
164
+ with open('src/arm/trampoline.S', 'w') as tramp_out:
165
+ p = subprocess.Popen(['bash', 'src/arm/gentramp.sh'], stdout=tramp_out)
166
+ p.wait()
167
+
168
+
169
+ def generate_source_and_headers(generate_osx=True, generate_ios=True):
170
+ copy_files('src', 'darwin_common/src', pattern='*.c')
171
+ copy_files('include', 'darwin_common/include', pattern='*.h')
172
+
173
+ if generate_ios:
174
+ make_tramp()
175
+ copy_src_platform_files(simulator_platform)
176
+ copy_src_platform_files(simulator64_platform)
177
+ copy_src_platform_files(device_platform)
178
+ copy_src_platform_files(device64_platform)
179
+ if generate_osx:
180
+ copy_src_platform_files(desktop32_platform)
181
+ copy_src_platform_files(desktop64_platform)
182
+
183
+ platform_headers = collections.defaultdict(set)
184
+
185
+ if generate_ios:
186
+ build_target(simulator_platform, platform_headers)
187
+ build_target(simulator64_platform, platform_headers)
188
+ build_target(device_platform, platform_headers)
189
+ build_target(device64_platform, platform_headers)
190
+ if generate_osx:
191
+ build_target(desktop32_platform, platform_headers)
192
+ build_target(desktop64_platform, platform_headers)
193
+
194
+ mkdir_p('darwin_common/include')
195
+ for header_name, tag_tuples in platform_headers.iteritems():
196
+ basename, suffix = os.path.splitext(header_name)
197
+ with open(os.path.join('darwin_common/include', header_name), 'w') as header:
198
+ for tag_tuple in tag_tuples:
199
+ header.write('%s#include <%s_%s%s>\n%s\n' % (tag_tuple[0], basename, tag_tuple[1], suffix, tag_tuple[2]))
200
+
201
+ if __name__ == '__main__':
202
+ parser = argparse.ArgumentParser()
203
+ parser.add_argument('--only-ios', action='store_true', default=False)
204
+ parser.add_argument('--only-osx', action='store_true', default=False)
205
+ args = parser.parse_args()
206
+
207
+ generate_source_and_headers(generate_osx=not args.only_ios, generate_ios=not args.only_osx)
@@ -3,7 +3,7 @@
3
3
  AUTOMAKE_OPTIONS=foreign
4
4
 
5
5
  DISTCLEANFILES=ffitarget.h
6
- EXTRA_DIST=ffi.h.in ffi_common.h
6
+ noinst_HEADERS=ffi_common.h ffi_cfi.h
7
+ EXTRA_DIST=ffi.h.in
7
8
 
8
- includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
9
- nodist_includes_HEADERS = ffi.h ffitarget.h
9
+ nodist_include_HEADERS = ffi.h ffitarget.h
@@ -1,5 +1,5 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- libffi @VERSION@ - Copyright (c) 2011 Anthony Green
2
+ libffi @VERSION@ - Copyright (c) 2011, 2014 Anthony Green
3
3
  - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person
@@ -25,23 +25,14 @@
25
25
  ----------------------------------------------------------------------- */
26
26
 
27
27
  /* -------------------------------------------------------------------
28
- The basic API is described in the README file.
28
+ Most of the API is documented in doc/libffi.texi.
29
29
 
30
- The raw API is designed to bypass some of the argument packing
31
- and unpacking on architectures for which it can be avoided.
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.
32
34
 
33
- The closure API allows interpreted functions to be packaged up
34
- inside a C function pointer, so that they can be called as C functions,
35
- with no understanding on the client side that they are interpreted.
36
- It can also be used in other cases in which it is necessary to package
37
- up a user specified parameter and a function pointer as a single
38
- function pointer.
39
-
40
- The closure API must be implemented in order to get its functionality,
41
- e.g. for use by gij. Routines are provided to emulate the raw API
42
- if the underlying platform doesn't allow faster implementation.
43
-
44
- More details on the raw and cloure API can be found in:
35
+ More details on the raw API can be found in:
45
36
 
46
37
  http://gcc.gnu.org/ml/java/1999-q3/msg00138.html
47
38
 
@@ -68,7 +59,7 @@ extern "C" {
68
59
 
69
60
  #ifndef LIBFFI_ASM
70
61
 
71
- #ifdef _MSC_VER
62
+ #if defined(_MSC_VER) && !defined(__clang__)
72
63
  #define __attribute__(X)
73
64
  #endif
74
65
 
@@ -106,8 +97,8 @@ extern "C" {
106
97
  # endif
107
98
  #endif
108
99
 
109
- /* The closure code assumes that this works on pointers, i.e. a size_t */
110
- /* can hold a pointer. */
100
+ /* The closure code assumes that this works on pointers, i.e. a size_t
101
+ can hold a pointer. */
111
102
 
112
103
  typedef struct _ffi_type
113
104
  {
@@ -166,25 +157,48 @@ typedef struct _ffi_type
166
157
  #error "long size not supported"
167
158
  #endif
168
159
 
169
- /* These are defined in types.c */
170
- extern ffi_type ffi_type_void;
171
- extern ffi_type ffi_type_uint8;
172
- extern ffi_type ffi_type_sint8;
173
- extern ffi_type ffi_type_uint16;
174
- extern ffi_type ffi_type_sint16;
175
- extern ffi_type ffi_type_uint32;
176
- extern ffi_type ffi_type_sint32;
177
- extern ffi_type ffi_type_uint64;
178
- extern ffi_type ffi_type_sint64;
179
- extern ffi_type ffi_type_float;
180
- extern ffi_type ffi_type_double;
181
- extern ffi_type ffi_type_pointer;
160
+ /* Need minimal decorations for DLLs to works on Windows. GCC has
161
+ autoimport and autoexport. Rely on Libtool to help MSVC export
162
+ from a DLL, but always declare data to be imported for MSVC
163
+ clients. This costs an extra indirection for MSVC clients using
164
+ the static version of the library, but don't worry about that.
165
+ Besides, as a workaround, they can define FFI_BUILDING if they
166
+ *know* they are going to link with the static library. */
167
+ #if defined _MSC_VER && !defined FFI_BUILDING
168
+ #define FFI_EXTERN extern __declspec(dllimport)
169
+ #else
170
+ #define FFI_EXTERN extern
171
+ #endif
172
+
173
+ /* These are defined in types.c. */
174
+ FFI_EXTERN ffi_type ffi_type_void;
175
+ FFI_EXTERN ffi_type ffi_type_uint8;
176
+ FFI_EXTERN ffi_type ffi_type_sint8;
177
+ FFI_EXTERN ffi_type ffi_type_uint16;
178
+ FFI_EXTERN ffi_type ffi_type_sint16;
179
+ FFI_EXTERN ffi_type ffi_type_uint32;
180
+ FFI_EXTERN ffi_type ffi_type_sint32;
181
+ FFI_EXTERN ffi_type ffi_type_uint64;
182
+ FFI_EXTERN ffi_type ffi_type_sint64;
183
+ FFI_EXTERN ffi_type ffi_type_float;
184
+ FFI_EXTERN ffi_type ffi_type_double;
185
+ FFI_EXTERN ffi_type ffi_type_pointer;
182
186
 
183
187
  #if @HAVE_LONG_DOUBLE@
184
- extern ffi_type ffi_type_longdouble;
188
+ FFI_EXTERN ffi_type ffi_type_longdouble;
185
189
  #else
186
190
  #define ffi_type_longdouble ffi_type_double
187
191
  #endif
192
+
193
+ #ifdef FFI_TARGET_HAS_COMPLEX_TYPE
194
+ FFI_EXTERN ffi_type ffi_type_complex_float;
195
+ FFI_EXTERN ffi_type ffi_type_complex_double;
196
+ #if @HAVE_LONG_DOUBLE@
197
+ FFI_EXTERN ffi_type ffi_type_complex_longdouble;
198
+ #else
199
+ #define ffi_type_complex_longdouble ffi_type_complex_double
200
+ #endif
201
+ #endif
188
202
  #endif /* LIBFFI_HIDE_BASIC_TYPES */
189
203
 
190
204
  typedef enum {
@@ -193,8 +207,6 @@ typedef enum {
193
207
  FFI_BAD_ABI
194
208
  } ffi_status;
195
209
 
196
- typedef unsigned FFI_TYPE;
197
-
198
210
  typedef struct {
199
211
  ffi_abi abi;
200
212
  unsigned nargs;
@@ -253,9 +265,9 @@ void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
253
265
  void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
254
266
  size_t ffi_raw_size (ffi_cif *cif);
255
267
 
256
- /* This is analogous to the raw API, except it uses Java parameter */
257
- /* packing, even on 64-bit machines. I.e. on 64-bit machines */
258
- /* longs and doubles are followed by an empty 64-bit word. */
268
+ /* This is analogous to the raw API, except it uses Java parameter
269
+ packing, even on 64-bit machines. I.e. on 64-bit machines longs
270
+ and doubles are followed by an empty 64-bit word. */
259
271
 
260
272
  void ffi_java_raw_call (ffi_cif *cif,
261
273
  void (*fn)(void),
@@ -274,14 +286,22 @@ size_t ffi_java_raw_size (ffi_cif *cif);
274
286
  __declspec(align(8))
275
287
  #endif
276
288
  typedef struct {
289
+ #if @FFI_EXEC_TRAMPOLINE_TABLE@
290
+ void *trampoline_table;
291
+ void *trampoline_table_entry;
292
+ #else
277
293
  char tramp[FFI_TRAMPOLINE_SIZE];
294
+ #endif
278
295
  ffi_cif *cif;
279
296
  void (*fun)(ffi_cif*,void*,void**,void*);
280
297
  void *user_data;
298
+ } ffi_closure
281
299
  #ifdef __GNUC__
282
- } ffi_closure __attribute__((aligned (8)));
283
- #else
284
- } ffi_closure;
300
+ __attribute__((aligned (8)))
301
+ #endif
302
+ ;
303
+
304
+ #ifndef __GNUC__
285
305
  # ifdef __sgi
286
306
  # pragma pack 0
287
307
  # endif
@@ -294,7 +314,8 @@ ffi_status
294
314
  ffi_prep_closure (ffi_closure*,
295
315
  ffi_cif *,
296
316
  void (*fun)(ffi_cif*,void*,void**,void*),
297
- void *user_data);
317
+ void *user_data)
318
+ __attribute__((deprecated ("use ffi_prep_closure_loc instead")));
298
319
 
299
320
  ffi_status
300
321
  ffi_prep_closure_loc (ffi_closure*,
@@ -307,15 +328,19 @@ ffi_prep_closure_loc (ffi_closure*,
307
328
  # pragma pack 8
308
329
  #endif
309
330
  typedef struct {
331
+ #if @FFI_EXEC_TRAMPOLINE_TABLE@
332
+ void *trampoline_table;
333
+ void *trampoline_table_entry;
334
+ #else
310
335
  char tramp[FFI_TRAMPOLINE_SIZE];
311
-
336
+ #endif
312
337
  ffi_cif *cif;
313
338
 
314
339
  #if !FFI_NATIVE_RAW_API
315
340
 
316
- /* if this is enabled, then a raw closure has the same layout
341
+ /* If this is enabled, then a raw closure has the same layout
317
342
  as a regular closure. We use this to install an intermediate
318
- handler to do the transaltion, void** -> ffi_raw*. */
343
+ handler to do the transaltion, void** -> ffi_raw*. */
319
344
 
320
345
  void (*translate_args)(ffi_cif*,void*,void**,void*);
321
346
  void *this_closure;
@@ -328,15 +353,20 @@ typedef struct {
328
353
  } ffi_raw_closure;
329
354
 
330
355
  typedef struct {
356
+ #if @FFI_EXEC_TRAMPOLINE_TABLE@
357
+ void *trampoline_table;
358
+ void *trampoline_table_entry;
359
+ #else
331
360
  char tramp[FFI_TRAMPOLINE_SIZE];
361
+ #endif
332
362
 
333
363
  ffi_cif *cif;
334
364
 
335
365
  #if !FFI_NATIVE_RAW_API
336
366
 
337
- /* if this is enabled, then a raw closure has the same layout
367
+ /* If this is enabled, then a raw closure has the same layout
338
368
  as a regular closure. We use this to install an intermediate
339
- handler to do the transaltion, void** -> ffi_raw*. */
369
+ handler to do the translation, void** -> ffi_raw*. */
340
370
 
341
371
  void (*translate_args)(ffi_cif*,void*,void**,void*);
342
372
  void *this_closure;
@@ -376,6 +406,22 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
376
406
 
377
407
  #endif /* FFI_CLOSURES */
378
408
 
409
+ #if FFI_GO_CLOSURES
410
+
411
+ typedef struct {
412
+ void *tramp;
413
+ ffi_cif *cif;
414
+ void (*fun)(ffi_cif*,void*,void**,void*);
415
+ } ffi_go_closure;
416
+
417
+ ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *,
418
+ void (*fun)(ffi_cif*,void*,void**,void*));
419
+
420
+ void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
421
+ void **avalue, void *closure);
422
+
423
+ #endif /* FFI_GO_CLOSURES */
424
+
379
425
  /* ---- Public interface definition -------------------------------------- */
380
426
 
381
427
  ffi_status ffi_prep_cif(ffi_cif *cif,
@@ -384,12 +430,22 @@ ffi_status ffi_prep_cif(ffi_cif *cif,
384
430
  ffi_type *rtype,
385
431
  ffi_type **atypes);
386
432
 
433
+ ffi_status ffi_prep_cif_var(ffi_cif *cif,
434
+ ffi_abi abi,
435
+ unsigned int nfixedargs,
436
+ unsigned int ntotalargs,
437
+ ffi_type *rtype,
438
+ ffi_type **atypes);
439
+
387
440
  void ffi_call(ffi_cif *cif,
388
441
  void (*fn)(void),
389
442
  void *rvalue,
390
443
  void **avalue);
391
444
 
392
- /* Useful for eliminating compiler warnings */
445
+ ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
446
+ size_t *offsets);
447
+
448
+ /* Useful for eliminating compiler warnings. */
393
449
  #define FFI_FN(f) ((void (*)(void))f)
394
450
 
395
451
  /* ---- Definitions shared with assembly code ---------------------------- */
@@ -416,9 +472,10 @@ void ffi_call(ffi_cif *cif,
416
472
  #define FFI_TYPE_SINT64 12
417
473
  #define FFI_TYPE_STRUCT 13
418
474
  #define FFI_TYPE_POINTER 14
475
+ #define FFI_TYPE_COMPLEX 15
419
476
 
420
- /* This should always refer to the last type code (for sanity checks) */
421
- #define FFI_TYPE_LAST FFI_TYPE_POINTER
477
+ /* This should always refer to the last type code (for sanity checks). */
478
+ #define FFI_TYPE_LAST FFI_TYPE_COMPLEX
422
479
 
423
480
  #ifdef __cplusplus
424
481
  }