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
@@ -50,15 +50,15 @@ int main (void)
50
50
  ffi_type cls_struct_type;
51
51
  ffi_type* dbl_arg_types[5];
52
52
 
53
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
54
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
55
+ struct cls_struct_align res_dbl;
56
+
53
57
  cls_struct_type.size = 0;
54
58
  cls_struct_type.alignment = 0;
55
59
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
60
  cls_struct_type.elements = cls_struct_fields;
57
61
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_uchar;
63
63
  cls_struct_fields[1] = &ffi_type_float;
64
64
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -51,15 +51,15 @@ int main (void)
51
51
  ffi_type cls_struct_type;
52
52
  ffi_type* dbl_arg_types[5];
53
53
 
54
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
55
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
56
+ struct cls_struct_align res_dbl;
57
+
54
58
  cls_struct_type.size = 0;
55
59
  cls_struct_type.alignment = 0;
56
60
  cls_struct_type.type = FFI_TYPE_STRUCT;
57
61
  cls_struct_type.elements = cls_struct_fields;
58
62
 
59
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
60
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
61
- struct cls_struct_align res_dbl;
62
-
63
63
  cls_struct_fields[0] = &ffi_type_uchar;
64
64
  cls_struct_fields[1] = &ffi_type_longdouble;
65
65
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -4,10 +4,8 @@
4
4
  PR: none.
5
5
  Originator: <hos@tamanegi.org> 20031203 */
6
6
 
7
- /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
8
7
  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
9
8
  /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
10
- /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
11
9
 
12
10
  #include "ffitest.h"
13
11
 
@@ -87,15 +85,15 @@ int main (void)
87
85
  ffi_type cls_struct_type;
88
86
  ffi_type* dbl_arg_types[3];
89
87
 
88
+ struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
89
+ struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
90
+ struct cls_struct_align res_dbl;
91
+
90
92
  cls_struct_type.size = 0;
91
93
  cls_struct_type.alignment = 0;
92
94
  cls_struct_type.type = FFI_TYPE_STRUCT;
93
95
  cls_struct_type.elements = cls_struct_fields;
94
96
 
95
- struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
96
- struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
97
- struct cls_struct_align res_dbl;
98
-
99
97
  cls_struct_fields[0] = &ffi_type_longdouble;
100
98
  cls_struct_fields[1] = &ffi_type_longdouble;
101
99
  cls_struct_fields[2] = &ffi_type_longdouble;
@@ -5,10 +5,8 @@
5
5
  Originator: Blake Chaffin 6/18/2007
6
6
  */
7
7
 
8
- /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
9
8
  /* { dg-do run { xfail strongarm*-*-* } } */
10
9
  /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
11
- /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
12
10
 
13
11
  #include "ffitest.h"
14
12
 
@@ -67,15 +65,15 @@ int main (void)
67
65
  ffi_type cls_struct_type;
68
66
  ffi_type* dbl_arg_types[3];
69
67
 
68
+ struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
69
+ struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
70
+ struct cls_struct_align res_dbl;
71
+
70
72
  cls_struct_type.size = 0;
71
73
  cls_struct_type.alignment = 0;
72
74
  cls_struct_type.type = FFI_TYPE_STRUCT;
73
75
  cls_struct_type.elements = cls_struct_fields;
74
76
 
75
- struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 };
76
- struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 };
77
- struct cls_struct_align res_dbl;
78
-
79
77
  cls_struct_fields[0] = &ffi_type_longdouble;
80
78
  cls_struct_fields[1] = &ffi_type_longdouble;
81
79
  cls_struct_fields[2] = &ffi_type_longdouble;
@@ -54,15 +54,15 @@ int main (void)
54
54
  ffi_type cls_struct_type;
55
55
  ffi_type* dbl_arg_types[5];
56
56
 
57
+ struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
58
+ struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
59
+ struct cls_struct_align res_dbl;
60
+
57
61
  cls_struct_type.size = 0;
58
62
  cls_struct_type.alignment = 0;
59
63
  cls_struct_type.type = FFI_TYPE_STRUCT;
60
64
  cls_struct_type.elements = cls_struct_fields;
61
65
 
62
- struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
63
- struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
64
- struct cls_struct_align res_dbl;
65
-
66
66
  cls_struct_fields[0] = &ffi_type_uchar;
67
67
  cls_struct_fields[1] = &ffi_type_pointer;
68
68
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -50,15 +50,15 @@ int main (void)
50
50
  ffi_type cls_struct_type;
51
51
  ffi_type* dbl_arg_types[5];
52
52
 
53
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
54
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
55
+ struct cls_struct_align res_dbl;
56
+
53
57
  cls_struct_type.size = 0;
54
58
  cls_struct_type.alignment = 0;
55
59
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
60
  cls_struct_type.elements = cls_struct_fields;
57
61
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_uchar;
63
63
  cls_struct_fields[1] = &ffi_type_sshort;
64
64
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -50,15 +50,15 @@ int main (void)
50
50
  ffi_type cls_struct_type;
51
51
  ffi_type* dbl_arg_types[5];
52
52
 
53
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
54
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
55
+ struct cls_struct_align res_dbl;
56
+
53
57
  cls_struct_type.size = 0;
54
58
  cls_struct_type.alignment = 0;
55
59
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
60
  cls_struct_type.elements = cls_struct_fields;
57
61
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_uchar;
63
63
  cls_struct_fields[1] = &ffi_type_sint;
64
64
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -51,15 +51,15 @@ int main (void)
51
51
  ffi_type cls_struct_type;
52
52
  ffi_type* dbl_arg_types[5];
53
53
 
54
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
55
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
56
+ struct cls_struct_align res_dbl;
57
+
54
58
  cls_struct_type.size = 0;
55
59
  cls_struct_type.alignment = 0;
56
60
  cls_struct_type.type = FFI_TYPE_STRUCT;
57
61
  cls_struct_type.elements = cls_struct_fields;
58
62
 
59
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
60
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
61
- struct cls_struct_align res_dbl;
62
-
63
63
  cls_struct_fields[0] = &ffi_type_uchar;
64
64
  cls_struct_fields[1] = &ffi_type_sint64;
65
65
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -50,15 +50,15 @@ int main (void)
50
50
  ffi_type cls_struct_type;
51
51
  ffi_type* dbl_arg_types[5];
52
52
 
53
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
54
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
55
+ struct cls_struct_align res_dbl;
56
+
53
57
  cls_struct_type.size = 0;
54
58
  cls_struct_type.alignment = 0;
55
59
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
60
  cls_struct_type.elements = cls_struct_fields;
57
61
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_uchar;
63
63
  cls_struct_fields[1] = &ffi_type_ushort;
64
64
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -50,15 +50,15 @@ int main (void)
50
50
  ffi_type cls_struct_type;
51
51
  ffi_type* dbl_arg_types[5];
52
52
 
53
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
54
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
55
+ struct cls_struct_align res_dbl;
56
+
53
57
  cls_struct_type.size = 0;
54
58
  cls_struct_type.alignment = 0;
55
59
  cls_struct_type.type = FFI_TYPE_STRUCT;
56
60
  cls_struct_type.elements = cls_struct_fields;
57
61
 
58
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
59
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
60
- struct cls_struct_align res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_uchar;
63
63
  cls_struct_fields[1] = &ffi_type_uint;
64
64
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -52,15 +52,15 @@ int main (void)
52
52
  ffi_type cls_struct_type;
53
53
  ffi_type* dbl_arg_types[5];
54
54
 
55
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
56
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
57
+ struct cls_struct_align res_dbl;
58
+
55
59
  cls_struct_type.size = 0;
56
60
  cls_struct_type.alignment = 0;
57
61
  cls_struct_type.type = FFI_TYPE_STRUCT;
58
62
  cls_struct_type.elements = cls_struct_fields;
59
63
 
60
- struct cls_struct_align g_dbl = { 12, 4951, 127 };
61
- struct cls_struct_align f_dbl = { 1, 9320, 13 };
62
- struct cls_struct_align res_dbl;
63
-
64
64
  cls_struct_fields[0] = &ffi_type_uchar;
65
65
  cls_struct_fields[1] = &ffi_type_uint64;
66
66
  cls_struct_fields[2] = &ffi_type_uchar;
@@ -37,6 +37,8 @@ int main(int argc __UNUSED__, char** argv __UNUSED__)
37
37
  ffi_type ts1_type;
38
38
  ffi_type* ts1_type_elements[4];
39
39
 
40
+ Dbls arg = { 1.0, 2.0 };
41
+
40
42
  ts1_type.size = 0;
41
43
  ts1_type.alignment = 0;
42
44
  ts1_type.type = FFI_TYPE_STRUCT;
@@ -48,8 +50,6 @@ int main(int argc __UNUSED__, char** argv __UNUSED__)
48
50
 
49
51
  cl_arg_types[0] = &ts1_type;
50
52
 
51
- Dbls arg = { 1.0, 2.0 };
52
-
53
53
  /* Initialize the cif */
54
54
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
55
55
  &ffi_type_void, cl_arg_types) == FFI_OK);
@@ -57,10 +57,10 @@ int main(int argc __UNUSED__, char** argv __UNUSED__)
57
57
  CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK);
58
58
 
59
59
  ((void*(*)(Dbls))(code))(arg);
60
- /* { dg-output "1.0 2.0\n" } */
60
+ /* { dg-output "1.0 2.0" } */
61
61
 
62
62
  closure_test_fn(arg);
63
- /* { dg-output "1.0 2.0\n" } */
63
+ /* { dg-output "\n1.0 2.0" } */
64
64
 
65
65
  return 0;
66
66
  }
@@ -7,7 +7,6 @@
7
7
  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
8
  /* { dg-output "" { xfail avr32*-*-* } } */
9
9
  /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
10
- /* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
11
10
 
12
11
  #include "ffitest.h"
13
12
 
@@ -37,24 +36,26 @@ int main (void)
37
36
  arg_types[1] = &ffi_type_double;
38
37
  arg_types[2] = NULL;
39
38
 
40
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
41
- arg_types) == FFI_OK);
39
+ /* This printf call is variadic */
40
+ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
41
+ arg_types) == FFI_OK);
42
42
 
43
43
  args[0] = &format;
44
44
  args[1] = &doubleArg;
45
45
  args[2] = NULL;
46
46
 
47
47
  ffi_call(&cif, FFI_FN(printf), &res, args);
48
- // { dg-output "7.0" }
48
+ /* { dg-output "7.0" } */
49
49
  printf("res: %d\n", (int) res);
50
- // { dg-output "\nres: 4" }
50
+ /* { dg-output "\nres: 4" } */
51
51
 
52
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK);
52
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL,
53
+ code) == FFI_OK);
53
54
 
54
- res = ((int(*)(char*, double))(code))(format, doubleArg);
55
- // { dg-output "\n7.0" }
55
+ res = ((int(*)(char*, ...))(code))(format, doubleArg);
56
+ /* { dg-output "\n7.0" } */
56
57
  printf("res: %d\n", (int) res);
57
- // { dg-output "\nres: 4" }
58
+ /* { dg-output "\nres: 4" } */
58
59
 
59
60
  exit(0);
60
61
  }
@@ -4,10 +4,10 @@
4
4
  PR: none.
5
5
  Originator: Blake Chaffin */
6
6
 
7
- /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
8
- /* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */
7
+ /* This test is known to PASS on armv7l-unknown-linux-gnueabihf, so I have
8
+ remove the xfail for arm*-*-* below, until we know more. */
9
+ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
9
10
  /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
10
- /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
11
11
 
12
12
  #include "ffitest.h"
13
13
 
@@ -7,7 +7,6 @@
7
7
  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
8
8
  /* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */
9
9
  /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */
10
- /* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */
11
10
 
12
11
  #include "ffitest.h"
13
12
 
@@ -37,24 +36,26 @@ int main (void)
37
36
  arg_types[1] = &ffi_type_longdouble;
38
37
  arg_types[2] = NULL;
39
38
 
40
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint,
41
- arg_types) == FFI_OK);
39
+ /* This printf call is variadic */
40
+ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint,
41
+ arg_types) == FFI_OK);
42
42
 
43
43
  args[0] = &format;
44
44
  args[1] = &ldArg;
45
45
  args[2] = NULL;
46
46
 
47
47
  ffi_call(&cif, FFI_FN(printf), &res, args);
48
- // { dg-output "7.0" }
48
+ /* { dg-output "7.0" } */
49
49
  printf("res: %d\n", (int) res);
50
- // { dg-output "\nres: 4" }
50
+ /* { dg-output "\nres: 4" } */
51
51
 
52
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK);
52
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL,
53
+ code) == FFI_OK);
53
54
 
54
- res = ((int(*)(char*, long double))(code))(format, ldArg);
55
- // { dg-output "\n7.0" }
55
+ res = ((int(*)(char*, ...))(code))(format, ldArg);
56
+ /* { dg-output "\n7.0" } */
56
57
  printf("res: %d\n", (int) res);
57
- // { dg-output "\nres: 4" }
58
+ /* { dg-output "\nres: 4" } */
58
59
 
59
60
  exit(0);
60
61
  }
@@ -0,0 +1,70 @@
1
+ /* Area: closure_call
2
+ Purpose: Check closures called with many args of mixed types
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <david.schneider@picle.org> */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+ #include <float.h>
10
+ #include <math.h>
11
+
12
+ #define NARGS 16
13
+
14
+ static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
15
+ void* userdata __UNUSED__)
16
+ {
17
+ int i;
18
+ double r = 0;
19
+ double t;
20
+ for(i = 0; i < NARGS; i++)
21
+ {
22
+ if(i == 4 || i == 9 || i == 11 || i == 13 || i == 15)
23
+ {
24
+ t = *(long int *)args[i];
25
+ CHECK(t == i+1);
26
+ }
27
+ else
28
+ {
29
+ t = *(double *)args[i];
30
+ CHECK(fabs(t - ((i+1) * 0.1)) < FLT_EPSILON);
31
+ }
32
+ r += t;
33
+ }
34
+ *(double *)resp = r;
35
+ }
36
+ typedef double (*cls_ret_double)(double, double, double, double, long int,
37
+ double, double, double, double, long int, double, long int, double, long int,
38
+ double, long int);
39
+
40
+ int main (void)
41
+ {
42
+ ffi_cif cif;
43
+ void *code;
44
+ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
45
+ ffi_type * cl_arg_types[NARGS];
46
+ double res;
47
+ int i;
48
+ double expected = 64.9;
49
+
50
+ for(i = 0; i < NARGS; i++)
51
+ {
52
+ if(i == 4 || i == 9 || i == 11 || i == 13 || i == 15)
53
+ cl_arg_types[i] = &ffi_type_slong;
54
+ else
55
+ cl_arg_types[i] = &ffi_type_double;
56
+ }
57
+
58
+ /* Initialize the cif */
59
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, NARGS,
60
+ &ffi_type_double, cl_arg_types) == FFI_OK);
61
+
62
+ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK);
63
+
64
+ res = (((cls_ret_double)code))(0.1, 0.2, 0.3, 0.4, 5, 0.6, 0.7, 0.8, 0.9, 10,
65
+ 1.1, 12, 1.3, 14, 1.5, 16);
66
+ if (fabs(res - expected) < FLT_EPSILON)
67
+ exit(0);
68
+ else
69
+ abort();
70
+ }