ffi 1.9.18 → 1.9.21

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

Potentially problematic release.


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

Files changed (366) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/Rakefile +14 -3
  4. data/ext/ffi_c/AbstractMemory.c +6 -1
  5. data/ext/ffi_c/Platform.c +10 -2
  6. data/ext/ffi_c/extconf.rb +7 -2
  7. data/ext/ffi_c/libffi.bsd.mk +9 -3
  8. data/ext/ffi_c/libffi.darwin.mk +14 -4
  9. data/ext/ffi_c/libffi.gnu.mk +2 -1
  10. data/ext/ffi_c/libffi.mk +9 -4
  11. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  12. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  13. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  14. data/ext/ffi_c/libffi/LICENSE +1 -1
  15. data/ext/ffi_c/libffi/Makefile.am +166 -157
  16. data/ext/ffi_c/libffi/README +164 -52
  17. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  18. data/ext/ffi_c/libffi/autogen.sh +2 -0
  19. data/ext/ffi_c/libffi/configure.ac +148 -256
  20. data/ext/ffi_c/libffi/configure.host +265 -4
  21. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  22. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  23. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  24. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  25. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  26. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  27. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  28. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  29. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  30. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  31. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  32. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  33. data/ext/ffi_c/libffi/libtool-version +1 -1
  34. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  35. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  36. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  37. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  38. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  39. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  40. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  41. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  42. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  43. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  44. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  45. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  46. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  47. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  48. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  49. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  50. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  51. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  52. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  53. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  54. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  55. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  56. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  57. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  58. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  59. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  60. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  61. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  62. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  63. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  64. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  65. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  66. data/ext/ffi_c/libffi/src/closures.c +319 -44
  67. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  68. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  69. data/ext/ffi_c/libffi/src/debug.c +6 -1
  70. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  71. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  72. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  73. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  74. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  75. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  76. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  77. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  78. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  79. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  80. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  81. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  82. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  83. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  84. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  85. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  86. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  87. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  88. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  90. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  91. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  92. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  93. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  94. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  95. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  96. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  97. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  98. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  99. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  100. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  101. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  102. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  103. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  104. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  105. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  106. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  107. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  108. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  109. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  110. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  111. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  112. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  113. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  114. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  115. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  116. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  117. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  118. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  119. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  120. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  121. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  122. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  123. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  124. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  125. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  126. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  127. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  128. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  129. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  130. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  131. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  132. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  133. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  134. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  135. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  136. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  137. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  138. data/ext/ffi_c/libffi/src/types.c +43 -14
  139. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  140. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  141. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  143. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  144. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  145. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  146. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  147. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  148. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  149. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  150. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  151. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  152. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  153. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  154. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  155. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  156. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  157. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  158. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  159. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  262. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  263. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  284. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  315. data/ffi.gemspec +2 -2
  316. data/lib/ffi/enum.rb +124 -0
  317. data/lib/ffi/library.rb +65 -13
  318. data/lib/ffi/platform.rb +7 -2
  319. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  320. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  321. data/lib/ffi/pointer.rb +1 -0
  322. data/lib/ffi/struct.rb +0 -2
  323. data/lib/ffi/version.rb +1 -1
  324. data/spec/ffi/bitmask_spec.rb +575 -0
  325. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  326. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  327. data/spec/ffi/struct_spec.rb +0 -4
  328. metadata +143 -51
  329. data/ext/ffi_c/libffi/Makefile.in +0 -1820
  330. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  331. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  332. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  333. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  334. data/ext/ffi_c/libffi/compile +0 -143
  335. data/ext/ffi_c/libffi/config.guess +0 -1501
  336. data/ext/ffi_c/libffi/config.sub +0 -1705
  337. data/ext/ffi_c/libffi/configure +0 -17191
  338. data/ext/ffi_c/libffi/depcomp +0 -630
  339. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  340. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  341. data/ext/ffi_c/libffi/fficonfig.h.in +0 -199
  342. data/ext/ffi_c/libffi/include/Makefile.in +0 -487
  343. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  344. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  345. data/ext/ffi_c/libffi/install-sh +0 -520
  346. data/ext/ffi_c/libffi/ltmain.sh +0 -9636
  347. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  348. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  349. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  350. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  351. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  352. data/ext/ffi_c/libffi/man/Makefile.in +0 -466
  353. data/ext/ffi_c/libffi/mdate-sh +0 -201
  354. data/ext/ffi_c/libffi/missing +0 -376
  355. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  356. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  357. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  358. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  359. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  360. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  361. data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -500
  362. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  365. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  366. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
1
+ # Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011, 2014 Free Software Foundation, Inc.
2
2
 
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -100,33 +100,44 @@ proc libffi-init { args } {
100
100
  global libffi_link_flags
101
101
  global tool_root_dir
102
102
  global ld_library_path
103
+ global compiler_vendor
104
+
105
+ if ![info exists blddirffi] {
106
+ set blddirffi [pwd]/..
107
+ }
103
108
 
104
- set blddirffi [pwd]/..
105
109
  verbose "libffi $blddirffi"
106
110
 
107
- set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
108
- if {$gccdir != ""} {
109
- set gccdir [file dirname $gccdir]
110
- }
111
- verbose "gccdir $gccdir"
112
-
113
- set ld_library_path "."
114
- append ld_library_path ":${gccdir}"
115
-
116
- set compiler "${gccdir}/xgcc"
117
- if { [is_remote host] == 0 && [which $compiler] != 0 } {
118
- foreach i "[exec $compiler --print-multi-lib]" {
119
- set mldir ""
120
- regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
121
- set mldir [string trimright $mldir "\;@"]
122
- if { "$mldir" == "." } {
123
- continue
124
- }
125
- if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
126
- append ld_library_path ":${gccdir}/${mldir}"
111
+ # Which compiler are we building with?
112
+ set tmp [grep "$blddirffi/config.log" "^ax_cv_c_compiler_vendor.*$"]
113
+ regexp -- {^[^=]*=(.*)$} $tmp nil compiler_vendor
114
+
115
+ if { [string match $compiler_vendor "gnu"] } {
116
+ set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
117
+ if {$gccdir != ""} {
118
+ set gccdir [file dirname $gccdir]
119
+ }
120
+ verbose "gccdir $gccdir"
121
+
122
+ set ld_library_path "."
123
+ append ld_library_path ":${gccdir}"
124
+
125
+ set compiler "${gccdir}/xgcc"
126
+ if { [is_remote host] == 0 && [which $compiler] != 0 } {
127
+ foreach i "[exec $compiler --print-multi-lib]" {
128
+ set mldir ""
129
+ regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
130
+ set mldir [string trimright $mldir "\;@"]
131
+ if { "$mldir" == "." } {
132
+ continue
133
+ }
134
+ if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
135
+ append ld_library_path ":${gccdir}/${mldir}"
136
+ }
127
137
  }
128
- }
138
+ }
129
139
  }
140
+
130
141
  # add the library path for libffi.
131
142
  append ld_library_path ":${blddirffi}/.libs"
132
143
 
@@ -164,7 +175,7 @@ proc libffi_target_compile { source dest type options } {
164
175
  global libffi_link_flags
165
176
  global libffi_include
166
177
  global target_triplet
167
-
178
+ global compiler_vendor
168
179
 
169
180
  if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
170
181
  lappend options "libs=${gluefile}"
@@ -174,7 +185,7 @@ proc libffi_target_compile { source dest type options } {
174
185
  # TOOL_OPTIONS must come first, so that it doesn't override testcase
175
186
  # specific options.
176
187
  if [info exists TOOL_OPTIONS] {
177
- lappend options [concat "additional_flags=$TOOL_OPTIONS" $options];
188
+ lappend options "additional_flags=$TOOL_OPTIONS"
178
189
  }
179
190
 
180
191
  # search for ffi_mips.h in srcdir, too
@@ -203,10 +214,42 @@ proc libffi_target_compile { source dest type options } {
203
214
 
204
215
  lappend options "libs= -lffi"
205
216
 
217
+ if { [string match "aarch64*-*-linux*" $target_triplet] } {
218
+ lappend options "libs= -lpthread"
219
+ }
220
+
221
+ # this may be required for g++, but just confused clang.
222
+ if { [string match "*.cc" $source] } {
223
+ lappend options "c++"
224
+ }
225
+
226
+ if { [string match "arc*-*-linux*" $target_triplet] } {
227
+ lappend options "libs= -lpthread"
228
+ }
229
+
206
230
  verbose "options: $options"
207
231
  return [target_compile $source $dest $type $options]
208
232
  }
209
233
 
234
+ # TEST should be a preprocessor condition. Returns true if it holds.
235
+ proc libffi_feature_test { test } {
236
+ set src "ffitest[pid].c"
237
+
238
+ set f [open $src "w"]
239
+ puts $f "#include <ffi.h>"
240
+ puts $f $test
241
+ puts $f "/* OK */"
242
+ puts $f "#else"
243
+ puts $f "# error Failed $test"
244
+ puts $f "#endif"
245
+ close $f
246
+
247
+ set lines [libffi_target_compile $src /dev/null assembly ""]
248
+ file delete $src
249
+
250
+ return [string match "" $lines]
251
+ }
252
+
210
253
  # Utility routines.
211
254
 
212
255
  #
@@ -254,6 +297,58 @@ proc libffi-dg-runtest { testcases default-extra-flags } {
254
297
  }
255
298
  }
256
299
 
300
+ proc run-many-tests { testcases extra_flags } {
301
+ global compiler_vendor
302
+ switch $compiler_vendor {
303
+ "clang" {
304
+ set common "-W -Wall"
305
+ set optimizations { "-O0" "-O1" "-O2" "-O3" "-Os" }
306
+ }
307
+ "gnu" {
308
+ set common "-W -Wall -Wno-psabi"
309
+ set optimizations { "-O0" "-O2" "-O3" "-Os" "-O2 -fomit-frame-pointer" }
310
+ }
311
+ default {
312
+ # Assume we are using the vendor compiler.
313
+ set common ""
314
+ set optimizations { "" }
315
+ }
316
+ }
317
+
318
+ set targetabis { "" }
319
+ if [string match $compiler_vendor "gnu"] {
320
+ if [istarget "i?86-*-*"] {
321
+ set targetabis {
322
+ ""
323
+ "-DABI_NUM=FFI_STDCALL -DABI_ATTR=__STDCALL__"
324
+ "-DABI_NUM=FFI_THISCALL -DABI_ATTR=__THISCALL__"
325
+ "-DABI_NUM=FFI_FASTCALL -DABI_ATTR=__FASTCALL__"
326
+ }
327
+ } elseif [istarget "x86_64-*-*"] {
328
+ set targetabis {
329
+ ""
330
+ "-DABI_NUM=FFI_WIN64 -DABI_ATTR=__MSABI__"
331
+ }
332
+ }
333
+ }
334
+
335
+ set common [ concat $common $extra_flags ]
336
+ foreach test $testcases {
337
+ set testname [file tail $test]
338
+ if [search_for $test "ABI_NUM"] {
339
+ set abis $targetabis
340
+ } else {
341
+ set abis { "" }
342
+ }
343
+ foreach opt $optimizations {
344
+ foreach abi $abis {
345
+ set options [concat $common $opt $abi]
346
+ verbose "Testing $testname, $options" 1
347
+ dg-test $test $options ""
348
+ }
349
+ }
350
+ }
351
+ }
257
352
 
258
353
  # Like check_conditional_xfail, but callable from a dg test.
259
354
 
@@ -25,7 +25,7 @@ set orig_ld_library64_path_saved 0
25
25
  set orig_ld_library_path_32_saved 0
26
26
  set orig_ld_library_path_64_saved 0
27
27
  set orig_dyld_library_path_saved 0
28
-
28
+ set orig_path_saved 0
29
29
 
30
30
  #######################################
31
31
  # proc set_ld_library_path_env_vars { }
@@ -42,6 +42,7 @@ proc set_ld_library_path_env_vars { } {
42
42
  global orig_ld_library_path_32_saved
43
43
  global orig_ld_library_path_64_saved
44
44
  global orig_dyld_library_path_saved
45
+ global orig_path_saved
45
46
  global orig_ld_library_path
46
47
  global orig_ld_run_path
47
48
  global orig_shlib_path
@@ -50,6 +51,7 @@ proc set_ld_library_path_env_vars { } {
50
51
  global orig_ld_library_path_32
51
52
  global orig_ld_library_path_64
52
53
  global orig_dyld_library_path
54
+ global orig_path
53
55
  global GCC_EXEC_PREFIX
54
56
 
55
57
  # Set the relocated compiler prefix, but only if the user hasn't specified one.
@@ -100,6 +102,10 @@ proc set_ld_library_path_env_vars { } {
100
102
  set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)"
101
103
  set orig_dyld_library_path_saved 1
102
104
  }
105
+ if [info exists env(PATH)] {
106
+ set orig_path "$env(PATH)"
107
+ set orig_path_saved 1
108
+ }
103
109
  }
104
110
 
105
111
  # We need to set ld library path in the environment. Currently,
@@ -169,6 +175,13 @@ proc set_ld_library_path_env_vars { } {
169
175
  } else {
170
176
  setenv DYLD_LIBRARY_PATH "$ld_library_path"
171
177
  }
178
+ if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } {
179
+ if { $orig_path_saved } {
180
+ setenv PATH "$ld_library_path:$orig_path"
181
+ } else {
182
+ setenv PATH "$ld_library_path"
183
+ }
184
+ }
172
185
 
173
186
  verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path"
174
187
  }
@@ -187,6 +200,7 @@ proc restore_ld_library_path_env_vars { } {
187
200
  global orig_ld_library_path_32_saved
188
201
  global orig_ld_library_path_64_saved
189
202
  global orig_dyld_library_path_saved
203
+ global orig_path_saved
190
204
  global orig_ld_library_path
191
205
  global orig_ld_run_path
192
206
  global orig_shlib_path
@@ -195,6 +209,7 @@ proc restore_ld_library_path_env_vars { } {
195
209
  global orig_ld_library_path_32
196
210
  global orig_ld_library_path_64
197
211
  global orig_dyld_library_path
212
+ global orig_path
198
213
 
199
214
  if { $orig_environment_saved == 0 } {
200
215
  return
@@ -240,6 +255,11 @@ proc restore_ld_library_path_env_vars { } {
240
255
  } elseif [info exists env(DYLD_LIBRARY_PATH)] {
241
256
  unsetenv DYLD_LIBRARY_PATH
242
257
  }
258
+ if { $orig_path_saved } {
259
+ setenv PATH "$orig_path"
260
+ } elseif [info exists env(PATH)] {
261
+ unsetenv PATH
262
+ }
243
263
  }
244
264
 
245
265
  #######################################
@@ -0,0 +1,46 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check for proper argument alignment.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <twalljava@java.net> (from many_win32.c) */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ static float ABI_ATTR align_arguments(int i1,
12
+ double f2,
13
+ int i3,
14
+ double f4)
15
+ {
16
+ return i1+f2+i3+f4;
17
+ }
18
+
19
+ int main(void)
20
+ {
21
+ ffi_cif cif;
22
+ ffi_type *args[4] = {
23
+ &ffi_type_sint,
24
+ &ffi_type_double,
25
+ &ffi_type_sint,
26
+ &ffi_type_double
27
+ };
28
+ double fa[2] = {1,2};
29
+ int ia[2] = {1,2};
30
+ void *values[4] = {&ia[0], &fa[0], &ia[1], &fa[1]};
31
+ float f, ff;
32
+
33
+ /* Initialize the cif */
34
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 4,
35
+ &ffi_type_float, args) == FFI_OK);
36
+
37
+ ff = align_arguments(ia[0], fa[0], ia[1], fa[1]);
38
+
39
+ ffi_call(&cif, FFI_FN(align_arguments), &f, values);
40
+
41
+ if (f == ff)
42
+ printf("align arguments tests ok!\n");
43
+ else
44
+ CHECK(0);
45
+ exit(0);
46
+ }
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc.
1
+ # Copyright (C) 2003, 2006, 2009, 2010, 2014 Free Software Foundation, Inc.
2
2
 
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -19,11 +19,9 @@ libffi-init
19
19
 
20
20
  global srcdir subdir
21
21
 
22
- dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O0 -W -Wall" ""
23
- dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2" ""
24
- dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O3" ""
25
- dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" ""
26
- dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2 -fomit-frame-pointer" ""
22
+ set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.{c,cc}]]
23
+
24
+ run-many-tests $tlist ""
27
25
 
28
26
  dg-finish
29
27
 
@@ -1,15 +1,14 @@
1
- /* Area: closure_call (stdcall convention)
2
- Purpose: Check handling when caller expects stdcall callee
1
+ /* Area: closure_call
2
+ Purpose: Check simple closure handling with all ABIs
3
3
  Limitations: none.
4
4
  PR: none.
5
5
  Originator: <twalljava@dev.java.net> */
6
6
 
7
- /* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */
7
+ /* { dg-do run } */
8
8
  #include "ffitest.h"
9
9
 
10
10
  static void
11
- closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args,
12
- void* userdata)
11
+ closure_test(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata)
13
12
  {
14
13
  *(ffi_arg*)resp =
15
14
  (int)*(int *)args[0] + (int)(*(int *)args[1])
@@ -23,7 +22,7 @@ closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args,
23
22
 
24
23
  }
25
24
 
26
- typedef int (__stdcall *closure_test_type0)(int, int, int, int);
25
+ typedef int (ABI_ATTR *closure_test_type0)(int, int, int, int);
27
26
 
28
27
  int main (void)
29
28
  {
@@ -32,9 +31,6 @@ int main (void)
32
31
  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
33
32
  ffi_type * cl_arg_types[17];
34
33
  int res;
35
- void* sp_pre;
36
- void* sp_post;
37
- char buf[1024];
38
34
 
39
35
  cl_arg_types[0] = &ffi_type_uint;
40
36
  cl_arg_types[1] = &ffi_type_uint;
@@ -43,22 +39,17 @@ int main (void)
43
39
  cl_arg_types[4] = NULL;
44
40
 
45
41
  /* Initialize the cif */
46
- CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 4,
42
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 4,
47
43
  &ffi_type_sint, cl_arg_types) == FFI_OK);
48
44
 
49
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_stdcall,
45
+ CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test,
50
46
  (void *) 3 /* userdata */, code) == FFI_OK);
51
47
 
52
- asm volatile (" movl %%esp,%0" : "=g" (sp_pre));
53
48
  res = (*(closure_test_type0)code)(0, 1, 2, 3);
54
- asm volatile (" movl %%esp,%0" : "=g" (sp_post));
55
49
  /* { dg-output "0 1 2 3: 9" } */
56
50
 
57
51
  printf("res: %d\n",res);
58
52
  /* { dg-output "\nres: 9" } */
59
53
 
60
- sprintf(buf, "mismatch: pre=%p vs post=%p", sp_pre, sp_post);
61
- printf("stack pointer %s\n", (sp_pre == sp_post ? "match" : buf));
62
- /* { dg-output "\nstack pointer match" } */
63
54
  exit(0);
64
55
  }
@@ -49,15 +49,15 @@ int main (void)
49
49
  ffi_type cls_struct_type;
50
50
  ffi_type* dbl_arg_types[5];
51
51
 
52
+ struct cls_struct_12byte h_dbl = { 7, 4, 9 };
53
+ struct cls_struct_12byte j_dbl = { 1, 5, 3 };
54
+ struct cls_struct_12byte res_dbl;
55
+
52
56
  cls_struct_type.size = 0;
53
57
  cls_struct_type.alignment = 0;
54
58
  cls_struct_type.type = FFI_TYPE_STRUCT;
55
59
  cls_struct_type.elements = cls_struct_fields;
56
60
 
57
- struct cls_struct_12byte h_dbl = { 7, 4, 9 };
58
- struct cls_struct_12byte j_dbl = { 1, 5, 3 };
59
- struct cls_struct_12byte res_dbl;
60
-
61
61
  cls_struct_fields[0] = &ffi_type_sint;
62
62
  cls_struct_fields[1] = &ffi_type_sint;
63
63
  cls_struct_fields[2] = &ffi_type_sint;
@@ -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_16byte h_dbl = { 7, 8.0, 9 };
54
+ struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
55
+ struct cls_struct_16byte 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_16byte h_dbl = { 7, 8.0, 9 };
59
- struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
60
- struct cls_struct_16byte res_dbl;
61
-
62
62
  cls_struct_fields[0] = &ffi_type_sint;
63
63
  cls_struct_fields[1] = &ffi_type_double;
64
64
  cls_struct_fields[2] = &ffi_type_sint;
@@ -54,15 +54,15 @@ int main (void)
54
54
  ffi_type cls_struct_type;
55
55
  ffi_type* dbl_arg_types[3];
56
56
 
57
+ struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 };
58
+ struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
59
+ struct cls_struct_18byte 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_18byte g_dbl = { 1.0, 127, 126, 3.0 };
63
- struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
64
- struct cls_struct_18byte res_dbl;
65
-
66
66
  cls_struct_fields[0] = &ffi_type_double;
67
67
  cls_struct_fields[1] = &ffi_type_uchar;
68
68
  cls_struct_fields[2] = &ffi_type_uchar;