ffi 1.9.18 → 1.9.23

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 (468) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +22 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +52 -0
  5. data/.yardopts +5 -0
  6. data/Gemfile +15 -0
  7. data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
  8. data/README.md +3 -4
  9. data/Rakefile +41 -5
  10. data/appveyor.yml +22 -0
  11. data/ext/ffi_c/AbstractMemory.c +6 -1
  12. data/ext/ffi_c/Call.c +1 -22
  13. data/ext/ffi_c/Call.h +0 -9
  14. data/ext/ffi_c/Closure.c +54 -0
  15. data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
  16. data/ext/ffi_c/Function.c +16 -25
  17. data/ext/ffi_c/Function.h +1 -2
  18. data/ext/ffi_c/FunctionInfo.c +0 -4
  19. data/ext/ffi_c/MethodHandle.c +33 -268
  20. data/ext/ffi_c/Platform.c +10 -2
  21. data/ext/ffi_c/extconf.rb +10 -5
  22. data/ext/ffi_c/ffi.c +2 -2
  23. data/ext/ffi_c/libffi/.appveyor.yml +48 -0
  24. data/ext/ffi_c/libffi/.gitignore +36 -0
  25. data/ext/ffi_c/libffi/.travis/install.sh +14 -0
  26. data/ext/ffi_c/libffi/.travis.yml +30 -0
  27. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  28. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  29. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  30. data/ext/ffi_c/libffi/LICENSE +1 -1
  31. data/ext/ffi_c/libffi/Makefile.am +169 -158
  32. data/ext/ffi_c/libffi/Makefile.in +927 -938
  33. data/ext/ffi_c/libffi/README +164 -52
  34. data/ext/ffi_c/libffi/acinclude.m4 +387 -0
  35. data/ext/ffi_c/libffi/autogen.sh +2 -0
  36. data/ext/ffi_c/libffi/config.guess +336 -371
  37. data/ext/ffi_c/libffi/config.sub +246 -115
  38. data/ext/ffi_c/libffi/configure +6976 -2189
  39. data/ext/ffi_c/libffi/configure.ac +148 -256
  40. data/ext/ffi_c/libffi/configure.host +277 -4
  41. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  42. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  43. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  44. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  45. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  46. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
  47. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  48. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  49. data/ext/ffi_c/libffi/include/ffi.h.in +112 -50
  50. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  51. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  52. data/ext/ffi_c/libffi/install-sh +190 -202
  53. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  54. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  55. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
  56. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  57. data/ext/ffi_c/libffi/libtool-version +1 -1
  58. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  59. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  60. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  61. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  62. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  63. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  64. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  65. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  66. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  67. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  68. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  69. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  70. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  71. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  72. data/ext/ffi_c/libffi/missing +150 -311
  73. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  74. data/ext/ffi_c/libffi/src/aarch64/ffi.c +964 -0
  75. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  76. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  77. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  78. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  79. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  80. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  81. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  82. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  83. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  84. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  85. data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
  86. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  87. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  88. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  89. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  90. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  91. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  92. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  93. data/ext/ffi_c/libffi/src/closures.c +366 -45
  94. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  95. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  96. data/ext/ffi_c/libffi/src/debug.c +6 -1
  97. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  98. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  99. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  100. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  101. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  102. data/ext/ffi_c/libffi/src/ia64/unix.S +2 -0
  103. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  104. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  105. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  106. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  107. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  108. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  109. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  110. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  111. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  112. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  113. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  114. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  115. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  116. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  117. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  118. data/ext/ffi_c/libffi/src/mips/ffi.c +103 -28
  119. data/ext/ffi_c/libffi/src/mips/ffitarget.h +10 -3
  120. data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
  121. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  122. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  123. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  124. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  125. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  126. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  127. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  128. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  129. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  130. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  131. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  132. data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
  133. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
  134. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  135. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  136. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  137. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  138. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
  139. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  140. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  141. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  142. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
  143. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  144. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  145. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  146. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  147. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  148. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  149. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  150. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  151. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  152. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  153. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  154. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  155. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  156. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  157. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  158. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  159. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  160. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  161. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  162. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  163. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  164. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  165. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  166. data/ext/ffi_c/libffi/src/types.c +43 -14
  167. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  168. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  169. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  170. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  171. data/ext/ffi_c/libffi/src/x86/ffi.c +591 -500
  172. data/ext/ffi_c/libffi/src/x86/ffi64.c +359 -116
  173. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  174. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  175. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  176. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  177. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  178. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  179. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  180. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  181. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  182. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  183. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  184. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  185. data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -73
  186. data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
  187. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +121 -25
  188. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  292. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  293. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  314. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  345. data/ext/ffi_c/libffi.bsd.mk +11 -5
  346. data/ext/ffi_c/libffi.darwin.mk +14 -4
  347. data/ext/ffi_c/libffi.gnu.mk +3 -2
  348. data/ext/ffi_c/libffi.mk +10 -5
  349. data/ext/ffi_c/libffi.vc.mk +1 -1
  350. data/ext/ffi_c/libffi.vc64.mk +1 -1
  351. data/ffi.gemspec +16 -3
  352. data/lib/ffi/enum.rb +124 -0
  353. data/lib/ffi/library.rb +66 -14
  354. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  355. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  356. data/lib/ffi/platform.rb +7 -2
  357. data/lib/ffi/pointer.rb +1 -0
  358. data/lib/ffi/struct.rb +0 -2
  359. data/lib/ffi/version.rb +1 -2
  360. data/samples/getlogin.rb +8 -0
  361. data/samples/getpid.rb +8 -0
  362. data/samples/gettimeofday.rb +18 -0
  363. data/samples/hello.rb +7 -0
  364. data/samples/inotify.rb +60 -0
  365. data/samples/pty.rb +76 -0
  366. data/samples/qsort.rb +21 -0
  367. data/samples/sample_helper.rb +6 -0
  368. metadata +164 -115
  369. data/ext/ffi_c/ClosurePool.c +0 -283
  370. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  371. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  372. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  373. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  374. data/ext/ffi_c/libffi/compile +0 -143
  375. data/ext/ffi_c/libffi/depcomp +0 -630
  376. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  377. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  378. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  379. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  380. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  381. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  382. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  383. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  384. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  385. data/ext/ffi_c/libffi/mdate-sh +0 -201
  386. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  387. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  388. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  389. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  390. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  391. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  392. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  393. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  394. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  395. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  396. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  397. data/gen/Rakefile +0 -30
  398. data/libtest/Benchmark.c +0 -52
  399. data/libtest/BoolTest.c +0 -34
  400. data/libtest/BufferTest.c +0 -31
  401. data/libtest/ClosureTest.c +0 -205
  402. data/libtest/EnumTest.c +0 -51
  403. data/libtest/FunctionTest.c +0 -70
  404. data/libtest/GNUmakefile +0 -149
  405. data/libtest/GlobalVariable.c +0 -62
  406. data/libtest/LastErrorTest.c +0 -21
  407. data/libtest/NumberTest.c +0 -132
  408. data/libtest/PointerTest.c +0 -63
  409. data/libtest/ReferenceTest.c +0 -23
  410. data/libtest/StringTest.c +0 -34
  411. data/libtest/StructTest.c +0 -243
  412. data/libtest/UnionTest.c +0 -43
  413. data/libtest/VariadicTest.c +0 -99
  414. data/spec/ffi/async_callback_spec.rb +0 -35
  415. data/spec/ffi/bool_spec.rb +0 -32
  416. data/spec/ffi/buffer_spec.rb +0 -279
  417. data/spec/ffi/callback_spec.rb +0 -773
  418. data/spec/ffi/custom_param_type.rb +0 -37
  419. data/spec/ffi/custom_type_spec.rb +0 -74
  420. data/spec/ffi/dup_spec.rb +0 -52
  421. data/spec/ffi/enum_spec.rb +0 -423
  422. data/spec/ffi/errno_spec.rb +0 -20
  423. data/spec/ffi/ffi_spec.rb +0 -28
  424. data/spec/ffi/fixtures/Benchmark.c +0 -52
  425. data/spec/ffi/fixtures/BoolTest.c +0 -34
  426. data/spec/ffi/fixtures/BufferTest.c +0 -31
  427. data/spec/ffi/fixtures/ClosureTest.c +0 -205
  428. data/spec/ffi/fixtures/EnumTest.c +0 -51
  429. data/spec/ffi/fixtures/FunctionTest.c +0 -142
  430. data/spec/ffi/fixtures/GNUmakefile +0 -149
  431. data/spec/ffi/fixtures/GlobalVariable.c +0 -62
  432. data/spec/ffi/fixtures/LastErrorTest.c +0 -21
  433. data/spec/ffi/fixtures/NumberTest.c +0 -132
  434. data/spec/ffi/fixtures/PipeHelper.h +0 -21
  435. data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
  436. data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
  437. data/spec/ffi/fixtures/PointerTest.c +0 -63
  438. data/spec/ffi/fixtures/ReferenceTest.c +0 -23
  439. data/spec/ffi/fixtures/StringTest.c +0 -34
  440. data/spec/ffi/fixtures/StructTest.c +0 -243
  441. data/spec/ffi/fixtures/UnionTest.c +0 -43
  442. data/spec/ffi/fixtures/VariadicTest.c +0 -99
  443. data/spec/ffi/fixtures/classes.rb +0 -438
  444. data/spec/ffi/function_spec.rb +0 -97
  445. data/spec/ffi/io_spec.rb +0 -16
  446. data/spec/ffi/library_spec.rb +0 -286
  447. data/spec/ffi/long_double.rb +0 -30
  448. data/spec/ffi/managed_struct_spec.rb +0 -68
  449. data/spec/ffi/memorypointer_spec.rb +0 -78
  450. data/spec/ffi/number_spec.rb +0 -247
  451. data/spec/ffi/platform_spec.rb +0 -114
  452. data/spec/ffi/pointer_spec.rb +0 -285
  453. data/spec/ffi/rbx/attach_function_spec.rb +0 -34
  454. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
  455. data/spec/ffi/rbx/spec_helper.rb +0 -6
  456. data/spec/ffi/rbx/struct_spec.rb +0 -18
  457. data/spec/ffi/spec_helper.rb +0 -93
  458. data/spec/ffi/string_spec.rb +0 -118
  459. data/spec/ffi/strptr_spec.rb +0 -50
  460. data/spec/ffi/struct_by_ref_spec.rb +0 -43
  461. data/spec/ffi/struct_callback_spec.rb +0 -69
  462. data/spec/ffi/struct_initialize_spec.rb +0 -35
  463. data/spec/ffi/struct_packed_spec.rb +0 -50
  464. data/spec/ffi/struct_spec.rb +0 -886
  465. data/spec/ffi/typedef_spec.rb +0 -91
  466. data/spec/ffi/union_spec.rb +0 -67
  467. data/spec/ffi/variadic_spec.rb +0 -132
  468. data/spec/spec.opts +0 -4
@@ -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,13 @@ 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
+ #if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 405)
319
+ __attribute__((deprecated ("use ffi_prep_closure_loc instead")))
320
+ #elif defined(__GNUC__) && __GNUC__ >= 3
321
+ __attribute__((deprecated))
322
+ #endif
323
+ ;
298
324
 
299
325
  ffi_status
300
326
  ffi_prep_closure_loc (ffi_closure*,
@@ -307,15 +333,19 @@ ffi_prep_closure_loc (ffi_closure*,
307
333
  # pragma pack 8
308
334
  #endif
309
335
  typedef struct {
336
+ #if @FFI_EXEC_TRAMPOLINE_TABLE@
337
+ void *trampoline_table;
338
+ void *trampoline_table_entry;
339
+ #else
310
340
  char tramp[FFI_TRAMPOLINE_SIZE];
311
-
341
+ #endif
312
342
  ffi_cif *cif;
313
343
 
314
344
  #if !FFI_NATIVE_RAW_API
315
345
 
316
- /* if this is enabled, then a raw closure has the same layout
346
+ /* If this is enabled, then a raw closure has the same layout
317
347
  as a regular closure. We use this to install an intermediate
318
- handler to do the transaltion, void** -> ffi_raw*. */
348
+ handler to do the transaltion, void** -> ffi_raw*. */
319
349
 
320
350
  void (*translate_args)(ffi_cif*,void*,void**,void*);
321
351
  void *this_closure;
@@ -328,15 +358,20 @@ typedef struct {
328
358
  } ffi_raw_closure;
329
359
 
330
360
  typedef struct {
361
+ #if @FFI_EXEC_TRAMPOLINE_TABLE@
362
+ void *trampoline_table;
363
+ void *trampoline_table_entry;
364
+ #else
331
365
  char tramp[FFI_TRAMPOLINE_SIZE];
366
+ #endif
332
367
 
333
368
  ffi_cif *cif;
334
369
 
335
370
  #if !FFI_NATIVE_RAW_API
336
371
 
337
- /* if this is enabled, then a raw closure has the same layout
372
+ /* If this is enabled, then a raw closure has the same layout
338
373
  as a regular closure. We use this to install an intermediate
339
- handler to do the transaltion, void** -> ffi_raw*. */
374
+ handler to do the translation, void** -> ffi_raw*. */
340
375
 
341
376
  void (*translate_args)(ffi_cif*,void*,void**,void*);
342
377
  void *this_closure;
@@ -376,6 +411,22 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
376
411
 
377
412
  #endif /* FFI_CLOSURES */
378
413
 
414
+ #if FFI_GO_CLOSURES
415
+
416
+ typedef struct {
417
+ void *tramp;
418
+ ffi_cif *cif;
419
+ void (*fun)(ffi_cif*,void*,void**,void*);
420
+ } ffi_go_closure;
421
+
422
+ ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *,
423
+ void (*fun)(ffi_cif*,void*,void**,void*));
424
+
425
+ void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
426
+ void **avalue, void *closure);
427
+
428
+ #endif /* FFI_GO_CLOSURES */
429
+
379
430
  /* ---- Public interface definition -------------------------------------- */
380
431
 
381
432
  ffi_status ffi_prep_cif(ffi_cif *cif,
@@ -384,12 +435,22 @@ ffi_status ffi_prep_cif(ffi_cif *cif,
384
435
  ffi_type *rtype,
385
436
  ffi_type **atypes);
386
437
 
438
+ ffi_status ffi_prep_cif_var(ffi_cif *cif,
439
+ ffi_abi abi,
440
+ unsigned int nfixedargs,
441
+ unsigned int ntotalargs,
442
+ ffi_type *rtype,
443
+ ffi_type **atypes);
444
+
387
445
  void ffi_call(ffi_cif *cif,
388
446
  void (*fn)(void),
389
447
  void *rvalue,
390
448
  void **avalue);
391
449
 
392
- /* Useful for eliminating compiler warnings */
450
+ ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
451
+ size_t *offsets);
452
+
453
+ /* Useful for eliminating compiler warnings. */
393
454
  #define FFI_FN(f) ((void (*)(void))f)
394
455
 
395
456
  /* ---- Definitions shared with assembly code ---------------------------- */
@@ -416,9 +477,10 @@ void ffi_call(ffi_cif *cif,
416
477
  #define FFI_TYPE_SINT64 12
417
478
  #define FFI_TYPE_STRUCT 13
418
479
  #define FFI_TYPE_POINTER 14
480
+ #define FFI_TYPE_COMPLEX 15
419
481
 
420
- /* This should always refer to the last type code (for sanity checks) */
421
- #define FFI_TYPE_LAST FFI_TYPE_POINTER
482
+ /* This should always refer to the last type code (for sanity checks). */
483
+ #define FFI_TYPE_LAST FFI_TYPE_COMPLEX
422
484
 
423
485
  #ifdef __cplusplus
424
486
  }
@@ -0,0 +1,55 @@
1
+ /* -----------------------------------------------------------------------
2
+ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc.
3
+
4
+ Conditionally assemble cfi directives. Only necessary for building libffi.
5
+ ----------------------------------------------------------------------- */
6
+
7
+ #ifndef FFI_CFI_H
8
+ #define FFI_CFI_H
9
+
10
+ #ifdef HAVE_AS_CFI_PSEUDO_OP
11
+
12
+ # define cfi_startproc .cfi_startproc
13
+ # define cfi_endproc .cfi_endproc
14
+ # define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off
15
+ # define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg
16
+ # define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
17
+ # define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
18
+ # define cfi_offset(reg, off) .cfi_offset reg, off
19
+ # define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off
20
+ # define cfi_register(r1, r2) .cfi_register r1, r2
21
+ # define cfi_return_column(reg) .cfi_return_column reg
22
+ # define cfi_restore(reg) .cfi_restore reg
23
+ # define cfi_same_value(reg) .cfi_same_value reg
24
+ # define cfi_undefined(reg) .cfi_undefined reg
25
+ # define cfi_remember_state .cfi_remember_state
26
+ # define cfi_restore_state .cfi_restore_state
27
+ # define cfi_window_save .cfi_window_save
28
+ # define cfi_personality(enc, exp) .cfi_personality enc, exp
29
+ # define cfi_lsda(enc, exp) .cfi_lsda enc, exp
30
+ # define cfi_escape(...) .cfi_escape __VA_ARGS__
31
+
32
+ #else
33
+
34
+ # define cfi_startproc
35
+ # define cfi_endproc
36
+ # define cfi_def_cfa(reg, off)
37
+ # define cfi_def_cfa_register(reg)
38
+ # define cfi_def_cfa_offset(off)
39
+ # define cfi_adjust_cfa_offset(off)
40
+ # define cfi_offset(reg, off)
41
+ # define cfi_rel_offset(reg, off)
42
+ # define cfi_register(r1, r2)
43
+ # define cfi_return_column(reg)
44
+ # define cfi_restore(reg)
45
+ # define cfi_same_value(reg)
46
+ # define cfi_undefined(reg)
47
+ # define cfi_remember_state
48
+ # define cfi_restore_state
49
+ # define cfi_window_save
50
+ # define cfi_personality(enc, exp)
51
+ # define cfi_lsda(enc, exp)
52
+ # define cfi_escape(...)
53
+
54
+ #endif /* HAVE_AS_CFI_PSEUDO_OP */
55
+ #endif /* FFI_CFI_H */
@@ -1,5 +1,5 @@
1
1
  /* -----------------------------------------------------------------------
2
- ffi_common.h - Copyright (C) 2011 Anthony Green
2
+ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green
3
3
  Copyright (C) 2007 Free Software Foundation, Inc
4
4
  Copyright (c) 1996 Red Hat, Inc.
5
5
 
@@ -19,10 +19,14 @@ extern "C" {
19
19
  /* Do not move this. Some versions of AIX are very picky about where
20
20
  this is positioned. */
21
21
  #ifdef __GNUC__
22
- /* mingw64 defines this already in malloc.h. */
23
- #ifndef alloca
24
- # define alloca __builtin_alloca
25
- #endif
22
+ # if HAVE_ALLOCA_H
23
+ # include <alloca.h>
24
+ # else
25
+ /* mingw64 defines this already in malloc.h. */
26
+ # ifndef alloca
27
+ # define alloca __builtin_alloca
28
+ # endif
29
+ # endif
26
30
  # define MAYBE_UNUSED __attribute__((__unused__))
27
31
  #else
28
32
  # define MAYBE_UNUSED
@@ -30,17 +34,17 @@ extern "C" {
30
34
  # include <alloca.h>
31
35
  # else
32
36
  # ifdef _AIX
33
- #pragma alloca
37
+ # pragma alloca
34
38
  # else
35
39
  # ifndef alloca /* predefined by HP cc +Olibcalls */
36
40
  # ifdef _MSC_VER
37
41
  # define alloca _alloca
38
42
  # else
39
43
  char *alloca ();
40
- # endif
41
44
  # endif
42
45
  # endif
43
46
  # endif
47
+ # endif
44
48
  #endif
45
49
 
46
50
  /* Check for the existence of memcpy. */
@@ -70,11 +74,28 @@ void ffi_type_test(ffi_type *a, char *file, int line);
70
74
  #define FFI_ASSERT_VALID_TYPE(x)
71
75
  #endif
72
76
 
73
- #define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
77
+ #define FFI_ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
74
78
  #define ALIGN_DOWN(v, a) (((size_t) (v)) & -a)
75
79
 
76
80
  /* Perform machine dependent cif processing */
77
81
  ffi_status ffi_prep_cif_machdep(ffi_cif *cif);
82
+ ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif,
83
+ unsigned int nfixedargs, unsigned int ntotalargs);
84
+
85
+
86
+ #if HAVE_LONG_DOUBLE_VARIANT
87
+ /* Used to adjust size/alignment of ffi types. */
88
+ void ffi_prep_types (ffi_abi abi);
89
+ #endif
90
+
91
+ /* Used internally, but overridden by some architectures */
92
+ ffi_status ffi_prep_cif_core(ffi_cif *cif,
93
+ ffi_abi abi,
94
+ unsigned int isvariadic,
95
+ unsigned int nfixedargs,
96
+ unsigned int ntotalargs,
97
+ ffi_type *rtype,
98
+ ffi_type **atypes);
78
99
 
79
100
  /* Extended cif, used in callback from assembly routine */
80
101
  typedef struct
@@ -85,7 +106,7 @@ typedef struct
85
106
  } extended_cif;
86
107
 
87
108
  /* Terse sized type definitions. */
88
- #if defined(_MSC_VER) || defined(__sgi)
109
+ #if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C)
89
110
  typedef unsigned char UINT8;
90
111
  typedef signed char SINT8;
91
112
  typedef unsigned short UINT16;
@@ -116,8 +137,8 @@ typedef float FLOAT32;
116
137
  #ifndef __GNUC__
117
138
  #define __builtin_expect(x, expected_value) (x)
118
139
  #endif
119
- #define LIKELY(x) __builtin_expect((x),1)
120
- #define UNLIKELY(x) __builtin_expect((x),1)
140
+ #define LIKELY(x) __builtin_expect(!!(x),1)
141
+ #define UNLIKELY(x) __builtin_expect((x)!=0,0)
121
142
 
122
143
  #ifdef __cplusplus
123
144
  }