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
@@ -15,14 +15,26 @@
15
15
 
16
16
  #define MAX_ARGS 256
17
17
 
18
- #define CHECK(x) !(x) ? abort() : 0
18
+ #define CHECK(x) (void)(!(x) ? (abort(), 1) : 0)
19
19
 
20
- /* Define __UNUSED__ that also other compilers than gcc can run the tests. */
20
+ /* Define macros so that compilers other than gcc can run the tests. */
21
21
  #undef __UNUSED__
22
22
  #if defined(__GNUC__)
23
23
  #define __UNUSED__ __attribute__((__unused__))
24
+ #define __STDCALL__ __attribute__((stdcall))
25
+ #define __THISCALL__ __attribute__((thiscall))
26
+ #define __FASTCALL__ __attribute__((fastcall))
27
+ #define __MSABI__ __attribute__((ms_abi))
24
28
  #else
25
29
  #define __UNUSED__
30
+ #define __STDCALL__ __stdcall
31
+ #define __THISCALL__ __thiscall
32
+ #define __FASTCALL__ __fastcall
33
+ #endif
34
+
35
+ #ifndef ABI_NUM
36
+ #define ABI_NUM FFI_DEFAULT_ABI
37
+ #define ABI_ATTR
26
38
  #endif
27
39
 
28
40
  /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
@@ -110,44 +122,15 @@
110
122
  #endif
111
123
  #endif
112
124
 
113
- #ifdef USING_MMAP
114
- static inline void *
115
- allocate_mmap (size_t size)
116
- {
117
- void *page;
118
- #if defined (HAVE_MMAP_DEV_ZERO)
119
- static int dev_zero_fd = -1;
120
- #endif
121
-
122
- #ifdef HAVE_MMAP_DEV_ZERO
123
- if (dev_zero_fd == -1)
124
- {
125
- dev_zero_fd = open ("/dev/zero", O_RDONLY);
126
- if (dev_zero_fd == -1)
127
- {
128
- perror ("open /dev/zero: %m");
129
- exit (1);
130
- }
131
- }
132
- #endif
133
-
134
-
135
- #ifdef HAVE_MMAP_ANON
136
- page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
137
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
138
- #endif
139
- #ifdef HAVE_MMAP_DEV_ZERO
140
- page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
141
- MAP_PRIVATE, dev_zero_fd, 0);
125
+ /* MSVC kludge. */
126
+ #if defined _MSC_VER
127
+ #define PRIuPTR "lu"
128
+ #define PRIu8 "u"
129
+ #define PRId8 "d"
130
+ #define PRIu64 "I64u"
131
+ #define PRId64 "I64d"
142
132
  #endif
143
133
 
144
- if (page == (void *) MAP_FAILED)
145
- {
146
- perror ("virtual memory exhausted");
147
- exit (1);
148
- }
149
-
150
- return page;
151
- }
152
-
134
+ #ifndef PRIuPTR
135
+ #define PRIuPTR "u"
153
136
  #endif
@@ -8,6 +8,8 @@
8
8
  #include "ffitest.h"
9
9
  #include "float.h"
10
10
 
11
+ #include <math.h>
12
+
11
13
  typedef union
12
14
  {
13
15
  double d;
@@ -47,7 +49,7 @@ int main (void)
47
49
 
48
50
  /* These are not always the same!! Check for a reasonable delta */
49
51
 
50
- CHECK(result[0].d - dblit(f) < DBL_EPSILON);
52
+ CHECK(fabs(result[0].d - dblit(f)) < DBL_EPSILON);
51
53
 
52
54
  /* Check the canary. */
53
55
  for (i = 0; i < sizeof (double); ++i)
@@ -3,13 +3,13 @@
3
3
  Limitations: none.
4
4
  PR: none.
5
5
  Originator: From the original ffitest.c */
6
-
7
- /* { dg-excess-errors "fails" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
8
- /* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
6
+ /* { dg-do run } */
9
7
 
10
8
  #include "ffitest.h"
11
9
  #include "float.h"
12
10
 
11
+ #include <math.h>
12
+
13
13
  static long double ldblit(float f)
14
14
  {
15
15
  return (long double) (((long double) f)/ (long double) 3.0);
@@ -22,6 +22,7 @@ int main (void)
22
22
  void *values[MAX_ARGS];
23
23
  float f;
24
24
  long double ld;
25
+ long double original;
25
26
 
26
27
  args[0] = &ffi_type_float;
27
28
  values[0] = &f;
@@ -49,7 +50,8 @@ int main (void)
49
50
  #endif
50
51
 
51
52
  /* These are not always the same!! Check for a reasonable delta */
52
- if (ld - ldblit(f) < LDBL_EPSILON)
53
+ original = ldblit(f);
54
+ if (((ld > original) ? (ld - original) : (original - ld)) < LDBL_EPSILON)
53
55
  puts("long double return value tests ok!");
54
56
  else
55
57
  CHECK(0);
@@ -9,6 +9,8 @@
9
9
  #include "ffitest.h"
10
10
  #include "float.h"
11
11
 
12
+ #include <math.h>
13
+
12
14
  static double floating_1(float a, double b, long double c)
13
15
  {
14
16
  return (double) a + b + (double) c;
@@ -49,7 +51,7 @@ int main (void)
49
51
 
50
52
  ffi_call(&cif, FFI_FN(floating_1), &rd, values);
51
53
 
52
- CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
54
+ CHECK(fabs(rd - floating_1(f, d, ld)) < DBL_EPSILON);
53
55
 
54
56
  args[0] = &ffi_type_longdouble;
55
57
  values[0] = &ld;
@@ -66,7 +68,7 @@ int main (void)
66
68
 
67
69
  ffi_call(&cif, FFI_FN(floating_2), &rd, values);
68
70
 
69
- CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
71
+ CHECK(fabs(rd - floating_2(ld, d, f)) < DBL_EPSILON);
70
72
 
71
73
  exit (0);
72
74
  }
@@ -0,0 +1,107 @@
1
+ /* Area: fp and variadics
2
+ Purpose: check fp inputs and returns work on variadics, even the fixed params
3
+ Limitations: None
4
+ PR: none
5
+ Originator: <david.gilbert@linaro.org> 2011-01-25
6
+
7
+ Intended to stress the difference in ABI on ARM vfp
8
+ */
9
+
10
+ /* { dg-do run } */
11
+
12
+ #include <stdarg.h>
13
+
14
+ #include "ffitest.h"
15
+
16
+ /* prints out all the parameters, and returns the sum of them all.
17
+ * 'x' is the number of variadic parameters all of which are double in this test
18
+ */
19
+ double float_va_fn(unsigned int x, double y,...)
20
+ {
21
+ double total=0.0;
22
+ va_list ap;
23
+ unsigned int i;
24
+
25
+ total+=(double)x;
26
+ total+=y;
27
+
28
+ printf("%u: %.1f :", x, y);
29
+
30
+ va_start(ap, y);
31
+ for(i=0;i<x;i++)
32
+ {
33
+ double arg=va_arg(ap, double);
34
+ total+=arg;
35
+ printf(" %d:%.1f ", i, arg);
36
+ }
37
+ va_end(ap);
38
+
39
+ printf(" total: %.1f\n", total);
40
+
41
+ return total;
42
+ }
43
+
44
+ int main (void)
45
+ {
46
+ ffi_cif cif;
47
+
48
+ ffi_type *arg_types[5];
49
+ void *values[5];
50
+ double doubles[5];
51
+ unsigned int firstarg;
52
+ double resfp;
53
+
54
+ /* First test, pass float_va_fn(0,2.0) - note there are no actual
55
+ * variadic parameters, but it's declared variadic so the ABI may be
56
+ * different. */
57
+ /* Call it statically and then via ffi */
58
+ resfp=float_va_fn(0,2.0);
59
+ /* { dg-output "0: 2.0 : total: 2.0" } */
60
+ printf("compiled: %.1f\n", resfp);
61
+ /* { dg-output "\ncompiled: 2.0" } */
62
+
63
+ arg_types[0] = &ffi_type_uint;
64
+ arg_types[1] = &ffi_type_double;
65
+ arg_types[2] = NULL;
66
+ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 2,
67
+ &ffi_type_double, arg_types) == FFI_OK);
68
+
69
+ firstarg = 0;
70
+ doubles[0] = 2.0;
71
+ values[0] = &firstarg;
72
+ values[1] = &doubles[0];
73
+ ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
74
+ /* { dg-output "\n0: 2.0 : total: 2.0" } */
75
+ printf("ffi: %.1f\n", resfp);
76
+ /* { dg-output "\nffi: 2.0" } */
77
+
78
+ /* Second test, float_va_fn(2,2.0,3.0,4.0), now with variadic params */
79
+ /* Call it statically and then via ffi */
80
+ resfp=float_va_fn(2,2.0,3.0,4.0);
81
+ /* { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } */
82
+ printf("compiled: %.1f\n", resfp);
83
+ /* { dg-output "\ncompiled: 11.0" } */
84
+
85
+ arg_types[0] = &ffi_type_uint;
86
+ arg_types[1] = &ffi_type_double;
87
+ arg_types[2] = &ffi_type_double;
88
+ arg_types[3] = &ffi_type_double;
89
+ arg_types[4] = NULL;
90
+ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 4,
91
+ &ffi_type_double, arg_types) == FFI_OK);
92
+
93
+ firstarg = 2;
94
+ doubles[0] = 2.0;
95
+ doubles[1] = 3.0;
96
+ doubles[2] = 4.0;
97
+ values[0] = &firstarg;
98
+ values[1] = &doubles[0];
99
+ values[2] = &doubles[1];
100
+ values[3] = &doubles[2];
101
+ ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
102
+ /* { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } */
103
+ printf("ffi: %.1f\n", resfp);
104
+ /* { dg-output "\nffi: 11.0" } */
105
+
106
+ exit(0);
107
+ }
@@ -5,10 +5,9 @@
5
5
  Originator: Blake Chaffin 6/18/2007
6
6
  */
7
7
 
8
- /* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
9
8
  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
10
9
  /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
11
- /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
10
+ /* { dg-options -Wformat=0 { target moxie*-*-elf } } */
12
11
 
13
12
  #include "ffitest.h"
14
13
 
@@ -229,6 +228,19 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
229
228
  ffi_type* st_fields[51];
230
229
  BigStruct retVal;
231
230
 
231
+ uint8_t ui8 = 1;
232
+ int8_t si8 = 2;
233
+ uint16_t ui16 = 3;
234
+ int16_t si16 = 4;
235
+ uint32_t ui32 = 5;
236
+ int32_t si32 = 6;
237
+ uint64_t ui64 = 7;
238
+ int64_t si64 = 8;
239
+ float f = 9;
240
+ double d = 10;
241
+ long double ld = 11;
242
+ char* p = (char*)0x12345678;
243
+
232
244
  memset (&retVal, 0, sizeof(retVal));
233
245
 
234
246
  ret_struct_type.size = 0;
@@ -251,19 +263,6 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
251
263
 
252
264
  st_fields[50] = NULL;
253
265
 
254
- uint8_t ui8 = 1;
255
- int8_t si8 = 2;
256
- uint16_t ui16 = 3;
257
- int16_t si16 = 4;
258
- uint32_t ui32 = 5;
259
- int32_t si32 = 6;
260
- uint64_t ui64 = 7;
261
- int64_t si64 = 8;
262
- float f = 9;
263
- double d = 10;
264
- long double ld = 11;
265
- char* p = (char*)0x12345678;
266
-
267
266
  argTypes[0] = argTypes[12] = argTypes[24] = argTypes[36] = argTypes[48] = &ffi_type_uint8;
268
267
  argValues[0] = argValues[12] = argValues[24] = argValues[36] = argValues[48] = &ui8;
269
268
  argTypes[1] = argTypes[13] = argTypes[25] = argTypes[37] = argTypes[49] = &ffi_type_sint8;
@@ -295,7 +294,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
295
294
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
296
295
 
297
296
  ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
298
- // { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
297
+ /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
299
298
  printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
300
299
  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
301
300
  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
@@ -308,7 +307,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
308
307
  retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
309
308
  retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
310
309
  retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
311
- // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
310
+ /* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
312
311
 
313
312
  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
314
313
 
@@ -323,7 +322,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
323
322
  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
324
323
  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
325
324
  ui8, si8);
326
- // { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
325
+ /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
327
326
  printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
328
327
  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
329
328
  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
@@ -336,7 +335,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
336
335
  retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
337
336
  retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
338
337
  retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
339
- // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" }
338
+ /* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
340
339
 
341
340
  return 0;
342
341
  }
@@ -7,21 +7,11 @@
7
7
  /* { dg-do run } */
8
8
  #include "ffitest.h"
9
9
 
10
+ #include <stdlib.h>
10
11
  #include <float.h>
12
+ #include <math.h>
11
13
 
12
- static float many(float f1,
13
- float f2,
14
- float f3,
15
- float f4,
16
- float f5,
17
- float f6,
18
- float f7,
19
- float f8,
20
- float f9,
21
- float f10,
22
- float f11,
23
- float f12,
24
- float f13)
14
+ static float ABI_ATTR many(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13)
25
15
  {
26
16
  #if 0
27
17
  printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
@@ -30,7 +20,7 @@ static float many(float f1,
30
20
  (double) f11, (double) f12, (double) f13);
31
21
  #endif
32
22
 
33
- return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
23
+ return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13;
34
24
  }
35
25
 
36
26
  int main (void)
@@ -50,7 +40,7 @@ int main (void)
50
40
  }
51
41
 
52
42
  /* Initialize the cif */
53
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13,
43
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 13,
54
44
  &ffi_type_float, args) == FFI_OK);
55
45
 
56
46
  ffi_call(&cif, FFI_FN(many), &f, values);
@@ -62,7 +52,7 @@ int main (void)
62
52
  fa[8], fa[9],
63
53
  fa[10],fa[11],fa[12]);
64
54
 
65
- if (f - ff < FLT_EPSILON)
55
+ if (fabs(f - ff) < FLT_EPSILON)
66
56
  exit(0);
67
57
  else
68
58
  abort();
@@ -0,0 +1,57 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check uint8_t arguments.
3
+ Limitations: none.
4
+ PR: PR45677.
5
+ Originator: Dan Witte <dwitte@gmail.com> 20100916 */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ #define NARGS 7
12
+
13
+ typedef unsigned char u8;
14
+
15
+ #ifdef __GNUC__
16
+ __attribute__((noinline))
17
+ #endif
18
+ uint8_t
19
+ foo (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
20
+ uint8_t e, uint8_t f, uint8_t g)
21
+ {
22
+ return a + b + c + d + e + f + g;
23
+ }
24
+
25
+ uint8_t ABI_ATTR
26
+ bar (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
27
+ uint8_t e, uint8_t f, uint8_t g)
28
+ {
29
+ return foo (a, b, c, d, e, f, g);
30
+ }
31
+
32
+ int
33
+ main (void)
34
+ {
35
+ ffi_type *ffitypes[NARGS];
36
+ int i;
37
+ ffi_cif cif;
38
+ ffi_arg result = 0;
39
+ uint8_t args[NARGS];
40
+ void *argptrs[NARGS];
41
+
42
+ for (i = 0; i < NARGS; ++i)
43
+ ffitypes[i] = &ffi_type_uint8;
44
+
45
+ CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS,
46
+ &ffi_type_uint8, ffitypes) == FFI_OK);
47
+
48
+ for (i = 0; i < NARGS; ++i)
49
+ {
50
+ args[i] = i;
51
+ argptrs[i] = &args[i];
52
+ }
53
+ ffi_call (&cif, FFI_FN (bar), &result, argptrs);
54
+
55
+ CHECK (result == 21);
56
+ return 0;
57
+ }
@@ -0,0 +1,70 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check return value double, with many arguments
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ #include <stdlib.h>
11
+ #include <float.h>
12
+ #include <math.h>
13
+
14
+ static double many(double f1,
15
+ double f2,
16
+ double f3,
17
+ double f4,
18
+ double f5,
19
+ double f6,
20
+ double f7,
21
+ double f8,
22
+ double f9,
23
+ double f10,
24
+ double f11,
25
+ double f12,
26
+ double f13)
27
+ {
28
+ #if 0
29
+ printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
30
+ (double) f1, (double) f2, (double) f3, (double) f4, (double) f5,
31
+ (double) f6, (double) f7, (double) f8, (double) f9, (double) f10,
32
+ (double) f11, (double) f12, (double) f13);
33
+ #endif
34
+
35
+ return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
36
+ }
37
+
38
+ int main (void)
39
+ {
40
+ ffi_cif cif;
41
+ ffi_type *args[13];
42
+ void *values[13];
43
+ double fa[13];
44
+ double f, ff;
45
+ int i;
46
+
47
+ for (i = 0; i < 13; i++)
48
+ {
49
+ args[i] = &ffi_type_double;
50
+ values[i] = &fa[i];
51
+ fa[i] = (double) i;
52
+ }
53
+
54
+ /* Initialize the cif */
55
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13,
56
+ &ffi_type_double, args) == FFI_OK);
57
+
58
+ ffi_call(&cif, FFI_FN(many), &f, values);
59
+
60
+ ff = many(fa[0], fa[1],
61
+ fa[2], fa[3],
62
+ fa[4], fa[5],
63
+ fa[6], fa[7],
64
+ fa[8], fa[9],
65
+ fa[10],fa[11],fa[12]);
66
+ if (fabs(f - ff) < FLT_EPSILON)
67
+ exit(0);
68
+ else
69
+ abort();
70
+ }
@@ -0,0 +1,78 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check return value double, with many arguments
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ #include <stdlib.h>
11
+ #include <float.h>
12
+ #include <math.h>
13
+
14
+ static double many(double f1,
15
+ double f2,
16
+ long int i1,
17
+ double f3,
18
+ double f4,
19
+ long int i2,
20
+ double f5,
21
+ double f6,
22
+ long int i3,
23
+ double f7,
24
+ double f8,
25
+ long int i4,
26
+ double f9,
27
+ double f10,
28
+ long int i5,
29
+ double f11,
30
+ double f12,
31
+ long int i6,
32
+ double f13)
33
+ {
34
+ return ((double) (i1 + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
35
+ }
36
+
37
+ int main (void)
38
+ {
39
+ ffi_cif cif;
40
+ ffi_type *args[19];
41
+ void *values[19];
42
+ double fa[19];
43
+ long int la[19];
44
+ double f, ff;
45
+ int i;
46
+
47
+ for (i = 0; i < 19; i++)
48
+ {
49
+ if( (i - 2) % 3 == 0) {
50
+ args[i] = &ffi_type_slong;
51
+ la[i] = (long int) i;
52
+ values[i] = &la[i];
53
+ }
54
+ else {
55
+ args[i] = &ffi_type_double;
56
+ fa[i] = (double) i;
57
+ values[i] = &fa[i];
58
+ }
59
+ }
60
+
61
+ /* Initialize the cif */
62
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19,
63
+ &ffi_type_double, args) == FFI_OK);
64
+
65
+ ffi_call(&cif, FFI_FN(many), &f, values);
66
+
67
+ ff = many(fa[0], fa[1], la[2],
68
+ fa[3], fa[4], la[5],
69
+ fa[6], fa[7], la[8],
70
+ fa[9], fa[10], la[11],
71
+ fa[12], fa[13], la[14],
72
+ fa[15], fa[16], la[17],
73
+ fa[18]);
74
+ if (fabs(f - ff) < FLT_EPSILON)
75
+ exit(0);
76
+ else
77
+ abort();
78
+ }
@@ -5,7 +5,6 @@
5
5
  Originator: From the original ffitest.c */
6
6
 
7
7
  /* { dg-do run } */
8
- /* { dg-options -O2 } */
9
8
 
10
9
  #include "ffitest.h"
11
10
 
@@ -77,6 +77,12 @@ int main (void)
77
77
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
78
78
  ffi_type* dbl_arg_types[5];
79
79
 
80
+ struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
81
+ struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
82
+ struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
83
+ {3, 1.0, 8.0}};
84
+ struct cls_struct_combined res_dbl;
85
+
80
86
  cls_struct_type.size = 0;
81
87
  cls_struct_type.alignment = 0;
82
88
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -92,12 +98,6 @@ int main (void)
92
98
  cls_struct_type2.type = FFI_TYPE_STRUCT;
93
99
  cls_struct_type2.elements = cls_struct_fields2;
94
100
 
95
- struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
96
- struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
97
- struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
98
- {3, 1.0, 8.0}};
99
- struct cls_struct_combined res_dbl;
100
-
101
101
  cls_struct_fields[0] = &ffi_type_double;
102
102
  cls_struct_fields[1] = &ffi_type_float;
103
103
  cls_struct_fields[2] = &ffi_type_sint;
@@ -81,6 +81,13 @@ int main (void)
81
81
  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
82
82
  ffi_type* dbl_arg_types[5];
83
83
 
84
+ struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
85
+ struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
86
+ struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
87
+ {3, 1.0, 8.0}};
88
+ struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
89
+ struct cls_struct_combined res_dbl;
90
+
84
91
  cls_struct_type.size = 0;
85
92
  cls_struct_type.alignment = 0;
86
93
  cls_struct_type.type = FFI_TYPE_STRUCT;
@@ -96,13 +103,6 @@ int main (void)
96
103
  cls_struct_type2.type = FFI_TYPE_STRUCT;
97
104
  cls_struct_type2.elements = cls_struct_fields2;
98
105
 
99
- struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
100
- struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
101
- struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
102
- {3, 1.0, 8.0}};
103
- struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
104
- struct cls_struct_combined res_dbl;
105
-
106
106
  cls_struct_fields[0] = &ffi_type_double;
107
107
  cls_struct_fields[1] = &ffi_type_float;
108
108
  cls_struct_fields[2] = &ffi_type_sint;
@@ -156,6 +156,6 @@ int main (void)
156
156
  CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii));
157
157
  CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd));
158
158
  CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff));
159
- // CHECK( 1 == 0);
159
+ /* CHECK( 1 == 0); */
160
160
  exit(0);
161
161
  }