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
@@ -13,10 +13,10 @@ int main (void)
13
13
  ffi_cif cif;
14
14
  ffi_type* arg_types[1];
15
15
 
16
- arg_types[0] = NULL;
17
-
18
16
  ffi_type badType = ffi_type_void;
19
17
 
18
+ arg_types[0] = NULL;
19
+
20
20
  badType.size = 0;
21
21
 
22
22
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &badType,
@@ -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
+ }