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
@@ -0,0 +1,49 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check strlen function call with additional arguments.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ static size_t ABI_ATTR my_f(char *s, float a)
12
+ {
13
+ return (size_t) ((int) strlen(s) + (int) a);
14
+ }
15
+
16
+ int main (void)
17
+ {
18
+ ffi_cif cif;
19
+ ffi_type *args[MAX_ARGS];
20
+ void *values[MAX_ARGS];
21
+ ffi_arg rint;
22
+ char *s;
23
+ float v2;
24
+ args[0] = &ffi_type_pointer;
25
+ args[1] = &ffi_type_float;
26
+ values[0] = (void*) &s;
27
+ values[1] = (void*) &v2;
28
+
29
+ /* Initialize the cif */
30
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
31
+ &ffi_type_sint, args) == FFI_OK);
32
+
33
+ s = "a";
34
+ v2 = 0.0;
35
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
36
+ CHECK(rint == 1);
37
+
38
+ s = "1234567";
39
+ v2 = -1.0;
40
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
41
+ CHECK(rint == 6);
42
+
43
+ s = "1234567890123456789012345";
44
+ v2 = 1.0;
45
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
46
+ CHECK(rint == 26);
47
+
48
+ exit(0);
49
+ }
@@ -0,0 +1,49 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check strlen function call with additional arguments.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ static size_t ABI_ATTR my_f(float a, char *s)
12
+ {
13
+ return (size_t) ((int) strlen(s) + (int) a);
14
+ }
15
+
16
+ int main (void)
17
+ {
18
+ ffi_cif cif;
19
+ ffi_type *args[MAX_ARGS];
20
+ void *values[MAX_ARGS];
21
+ ffi_arg rint;
22
+ char *s;
23
+ float v2;
24
+ args[1] = &ffi_type_pointer;
25
+ args[0] = &ffi_type_float;
26
+ values[1] = (void*) &s;
27
+ values[0] = (void*) &v2;
28
+
29
+ /* Initialize the cif */
30
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
31
+ &ffi_type_sint, args) == FFI_OK);
32
+
33
+ s = "a";
34
+ v2 = 0.0;
35
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
36
+ CHECK(rint == 1);
37
+
38
+ s = "1234567";
39
+ v2 = -1.0;
40
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
41
+ CHECK(rint == 6);
42
+
43
+ s = "1234567890123456789012345";
44
+ v2 = 1.0;
45
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
46
+ CHECK(rint == 26);
47
+
48
+ exit(0);
49
+ }
@@ -0,0 +1,55 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check strlen function call with additional arguments.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ static size_t ABI_ATTR my_f(float a, char *s, int i)
12
+ {
13
+ return (size_t) ((int) strlen(s) + (int) a + i);
14
+ }
15
+
16
+ int main (void)
17
+ {
18
+ ffi_cif cif;
19
+ ffi_type *args[MAX_ARGS];
20
+ void *values[MAX_ARGS];
21
+ ffi_arg rint;
22
+ char *s;
23
+ int v1;
24
+ float v2;
25
+ args[2] = &ffi_type_sint;
26
+ args[1] = &ffi_type_pointer;
27
+ args[0] = &ffi_type_float;
28
+ values[2] = (void*) &v1;
29
+ values[1] = (void*) &s;
30
+ values[0] = (void*) &v2;
31
+
32
+ /* Initialize the cif */
33
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 3,
34
+ &ffi_type_sint, args) == FFI_OK);
35
+
36
+ s = "a";
37
+ v1 = 1;
38
+ v2 = 0.0;
39
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
40
+ CHECK(rint == 2);
41
+
42
+ s = "1234567";
43
+ v2 = -1.0;
44
+ v1 = -2;
45
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
46
+ CHECK(rint == 4);
47
+
48
+ s = "1234567890123456789012345";
49
+ v2 = 1.0;
50
+ v1 = 2;
51
+ ffi_call(&cif, FFI_FN(my_f), &rint, values);
52
+ CHECK(rint == 28);
53
+
54
+ exit(0);
55
+ }
@@ -14,7 +14,7 @@ typedef struct
14
14
  unsigned int ui;
15
15
  } test_structure_1;
16
16
 
17
- static test_structure_1 struct1(test_structure_1 ts)
17
+ static test_structure_1 ABI_ATTR struct1(test_structure_1 ts)
18
18
  {
19
19
  ts.uc++;
20
20
  ts.d--;
@@ -30,6 +30,13 @@ int main (void)
30
30
  void *values[MAX_ARGS];
31
31
  ffi_type ts1_type;
32
32
  ffi_type *ts1_type_elements[4];
33
+
34
+ test_structure_1 ts1_arg;
35
+
36
+ /* This is a hack to get a properly aligned result buffer */
37
+ test_structure_1 *ts1_result =
38
+ (test_structure_1 *) malloc (sizeof(test_structure_1));
39
+
33
40
  ts1_type.size = 0;
34
41
  ts1_type.alignment = 0;
35
42
  ts1_type.type = FFI_TYPE_STRUCT;
@@ -39,16 +46,11 @@ int main (void)
39
46
  ts1_type_elements[2] = &ffi_type_uint;
40
47
  ts1_type_elements[3] = NULL;
41
48
 
42
- test_structure_1 ts1_arg;
43
- /* This is a hack to get a properly aligned result buffer */
44
- test_structure_1 *ts1_result =
45
- (test_structure_1 *) malloc (sizeof(test_structure_1));
46
-
47
49
  args[0] = &ts1_type;
48
50
  values[0] = &ts1_arg;
49
51
 
50
52
  /* Initialize the cif */
51
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
53
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
52
54
  &ts1_type, args) == FFI_OK);
53
55
 
54
56
  ts1_arg.uc = '\x01';
@@ -13,7 +13,7 @@ typedef struct
13
13
  double d2;
14
14
  } test_structure_2;
15
15
 
16
- static test_structure_2 struct2(test_structure_2 ts)
16
+ static test_structure_2 ABI_ATTR struct2(test_structure_2 ts)
17
17
  {
18
18
  ts.d1--;
19
19
  ts.d2--;
@@ -29,6 +29,11 @@ int main (void)
29
29
  test_structure_2 ts2_arg;
30
30
  ffi_type ts2_type;
31
31
  ffi_type *ts2_type_elements[3];
32
+
33
+ /* This is a hack to get a properly aligned result buffer */
34
+ test_structure_2 *ts2_result =
35
+ (test_structure_2 *) malloc (sizeof(test_structure_2));
36
+
32
37
  ts2_type.size = 0;
33
38
  ts2_type.alignment = 0;
34
39
  ts2_type.type = FFI_TYPE_STRUCT;
@@ -37,16 +42,11 @@ int main (void)
37
42
  ts2_type_elements[1] = &ffi_type_double;
38
43
  ts2_type_elements[2] = NULL;
39
44
 
40
-
41
- /* This is a hack to get a properly aligned result buffer */
42
- test_structure_2 *ts2_result =
43
- (test_structure_2 *) malloc (sizeof(test_structure_2));
44
-
45
45
  args[0] = &ts2_type;
46
46
  values[0] = &ts2_arg;
47
47
 
48
48
  /* Initialize the cif */
49
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts2_type, args) == FFI_OK);
49
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK);
50
50
 
51
51
  ts2_arg.d1 = 5.55;
52
52
  ts2_arg.d2 = 6.66;
@@ -12,7 +12,7 @@ typedef struct
12
12
  int si;
13
13
  } test_structure_3;
14
14
 
15
- static test_structure_3 struct3(test_structure_3 ts)
15
+ static test_structure_3 ABI_ATTR struct3(test_structure_3 ts)
16
16
  {
17
17
  ts.si = -(ts.si*2);
18
18
 
@@ -27,6 +27,11 @@ int main (void)
27
27
  int compare_value;
28
28
  ffi_type ts3_type;
29
29
  ffi_type *ts3_type_elements[2];
30
+
31
+ test_structure_3 ts3_arg;
32
+ test_structure_3 *ts3_result =
33
+ (test_structure_3 *) malloc (sizeof(test_structure_3));
34
+
30
35
  ts3_type.size = 0;
31
36
  ts3_type.alignment = 0;
32
37
  ts3_type.type = FFI_TYPE_STRUCT;
@@ -34,15 +39,11 @@ int main (void)
34
39
  ts3_type_elements[0] = &ffi_type_sint;
35
40
  ts3_type_elements[1] = NULL;
36
41
 
37
- test_structure_3 ts3_arg;
38
- test_structure_3 *ts3_result =
39
- (test_structure_3 *) malloc (sizeof(test_structure_3));
40
-
41
42
  args[0] = &ts3_type;
42
43
  values[0] = &ts3_arg;
43
44
 
44
45
  /* Initialize the cif */
45
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
46
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
46
47
  &ts3_type, args) == FFI_OK);
47
48
 
48
49
  ts3_arg.si = -123;
@@ -14,7 +14,7 @@ typedef struct
14
14
  unsigned ui3;
15
15
  } test_structure_4;
16
16
 
17
- static test_structure_4 struct4(test_structure_4 ts)
17
+ static test_structure_4 ABI_ATTR struct4(test_structure_4 ts)
18
18
  {
19
19
  ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3;
20
20
 
@@ -28,26 +28,27 @@ int main (void)
28
28
  void *values[MAX_ARGS];
29
29
  ffi_type ts4_type;
30
30
  ffi_type *ts4_type_elements[4];
31
+
32
+ test_structure_4 ts4_arg;
33
+
34
+ /* This is a hack to get a properly aligned result buffer */
35
+ test_structure_4 *ts4_result =
36
+ (test_structure_4 *) malloc (sizeof(test_structure_4));
37
+
31
38
  ts4_type.size = 0;
32
39
  ts4_type.alignment = 0;
33
40
  ts4_type.type = FFI_TYPE_STRUCT;
34
- test_structure_4 ts4_arg;
35
41
  ts4_type.elements = ts4_type_elements;
36
42
  ts4_type_elements[0] = &ffi_type_uint;
37
43
  ts4_type_elements[1] = &ffi_type_uint;
38
44
  ts4_type_elements[2] = &ffi_type_uint;
39
45
  ts4_type_elements[3] = NULL;
40
46
 
41
-
42
- /* This is a hack to get a properly aligned result buffer */
43
- test_structure_4 *ts4_result =
44
- (test_structure_4 *) malloc (sizeof(test_structure_4));
45
-
46
47
  args[0] = &ts4_type;
47
48
  values[0] = &ts4_arg;
48
49
 
49
50
  /* Initialize the cif */
50
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts4_type, args) == FFI_OK);
51
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts4_type, args) == FFI_OK);
51
52
 
52
53
  ts4_arg.ui1 = 2;
53
54
  ts4_arg.ui2 = 3;
@@ -12,7 +12,7 @@ typedef struct
12
12
  char c2;
13
13
  } test_structure_5;
14
14
 
15
- static test_structure_5 struct5(test_structure_5 ts1, test_structure_5 ts2)
15
+ static test_structure_5 ABI_ATTR struct5(test_structure_5 ts1, test_structure_5 ts2)
16
16
  {
17
17
  ts1.c1 += ts2.c1;
18
18
  ts1.c2 -= ts2.c2;
@@ -27,6 +27,13 @@ int main (void)
27
27
  void *values[MAX_ARGS];
28
28
  ffi_type ts5_type;
29
29
  ffi_type *ts5_type_elements[3];
30
+
31
+ test_structure_5 ts5_arg1, ts5_arg2;
32
+
33
+ /* This is a hack to get a properly aligned result buffer */
34
+ test_structure_5 *ts5_result =
35
+ (test_structure_5 *) malloc (sizeof(test_structure_5));
36
+
30
37
  ts5_type.size = 0;
31
38
  ts5_type.alignment = 0;
32
39
  ts5_type.type = FFI_TYPE_STRUCT;
@@ -35,19 +42,13 @@ int main (void)
35
42
  ts5_type_elements[1] = &ffi_type_schar;
36
43
  ts5_type_elements[2] = NULL;
37
44
 
38
- test_structure_5 ts5_arg1, ts5_arg2;
39
-
40
- /* This is a hack to get a properly aligned result buffer */
41
- test_structure_5 *ts5_result =
42
- (test_structure_5 *) malloc (sizeof(test_structure_5));
43
-
44
45
  args[0] = &ts5_type;
45
46
  args[1] = &ts5_type;
46
47
  values[0] = &ts5_arg1;
47
48
  values[1] = &ts5_arg2;
48
49
 
49
50
  /* Initialize the cif */
50
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ts5_type, args) == FFI_OK);
51
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts5_type, args) == FFI_OK);
51
52
 
52
53
  ts5_arg1.c1 = 2;
53
54
  ts5_arg1.c2 = 6;
@@ -12,7 +12,7 @@ typedef struct
12
12
  double d;
13
13
  } test_structure_6;
14
14
 
15
- static test_structure_6 struct6 (test_structure_6 ts)
15
+ static test_structure_6 ABI_ATTR struct6 (test_structure_6 ts)
16
16
  {
17
17
  ts.f += 1;
18
18
  ts.d += 1;
@@ -27,6 +27,13 @@ int main (void)
27
27
  void *values[MAX_ARGS];
28
28
  ffi_type ts6_type;
29
29
  ffi_type *ts6_type_elements[3];
30
+
31
+ test_structure_6 ts6_arg;
32
+
33
+ /* This is a hack to get a properly aligned result buffer */
34
+ test_structure_6 *ts6_result =
35
+ (test_structure_6 *) malloc (sizeof(test_structure_6));
36
+
30
37
  ts6_type.size = 0;
31
38
  ts6_type.alignment = 0;
32
39
  ts6_type.type = FFI_TYPE_STRUCT;
@@ -35,18 +42,11 @@ int main (void)
35
42
  ts6_type_elements[1] = &ffi_type_double;
36
43
  ts6_type_elements[2] = NULL;
37
44
 
38
-
39
- test_structure_6 ts6_arg;
40
-
41
- /* This is a hack to get a properly aligned result buffer */
42
- test_structure_6 *ts6_result =
43
- (test_structure_6 *) malloc (sizeof(test_structure_6));
44
-
45
45
  args[0] = &ts6_type;
46
46
  values[0] = &ts6_arg;
47
47
 
48
48
  /* Initialize the cif */
49
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK);
49
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts6_type, args) == FFI_OK);
50
50
 
51
51
  ts6_arg.f = 5.55f;
52
52
  ts6_arg.d = 6.66;
@@ -13,7 +13,7 @@ typedef struct
13
13
  double d;
14
14
  } test_structure_7;
15
15
 
16
- static test_structure_7 struct7 (test_structure_7 ts)
16
+ static test_structure_7 ABI_ATTR struct7 (test_structure_7 ts)
17
17
  {
18
18
  ts.f1 += 1;
19
19
  ts.f2 += 1;
@@ -29,6 +29,13 @@ int main (void)
29
29
  void *values[MAX_ARGS];
30
30
  ffi_type ts7_type;
31
31
  ffi_type *ts7_type_elements[4];
32
+
33
+ test_structure_7 ts7_arg;
34
+
35
+ /* This is a hack to get a properly aligned result buffer */
36
+ test_structure_7 *ts7_result =
37
+ (test_structure_7 *) malloc (sizeof(test_structure_7));
38
+
32
39
  ts7_type.size = 0;
33
40
  ts7_type.alignment = 0;
34
41
  ts7_type.type = FFI_TYPE_STRUCT;
@@ -38,18 +45,11 @@ int main (void)
38
45
  ts7_type_elements[2] = &ffi_type_double;
39
46
  ts7_type_elements[3] = NULL;
40
47
 
41
-
42
- test_structure_7 ts7_arg;
43
-
44
- /* This is a hack to get a properly aligned result buffer */
45
- test_structure_7 *ts7_result =
46
- (test_structure_7 *) malloc (sizeof(test_structure_7));
47
-
48
48
  args[0] = &ts7_type;
49
49
  values[0] = &ts7_arg;
50
50
 
51
51
  /* Initialize the cif */
52
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK);
52
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts7_type, args) == FFI_OK);
53
53
 
54
54
  ts7_arg.f1 = 5.55f;
55
55
  ts7_arg.f2 = 55.5f;
@@ -14,7 +14,7 @@ typedef struct
14
14
  float f4;
15
15
  } test_structure_8;
16
16
 
17
- static test_structure_8 struct8 (test_structure_8 ts)
17
+ static test_structure_8 ABI_ATTR struct8 (test_structure_8 ts)
18
18
  {
19
19
  ts.f1 += 1;
20
20
  ts.f2 += 1;
@@ -31,6 +31,13 @@ int main (void)
31
31
  void *values[MAX_ARGS];
32
32
  ffi_type ts8_type;
33
33
  ffi_type *ts8_type_elements[5];
34
+
35
+ test_structure_8 ts8_arg;
36
+
37
+ /* This is a hack to get a properly aligned result buffer */
38
+ test_structure_8 *ts8_result =
39
+ (test_structure_8 *) malloc (sizeof(test_structure_8));
40
+
34
41
  ts8_type.size = 0;
35
42
  ts8_type.alignment = 0;
36
43
  ts8_type.type = FFI_TYPE_STRUCT;
@@ -41,17 +48,11 @@ int main (void)
41
48
  ts8_type_elements[3] = &ffi_type_float;
42
49
  ts8_type_elements[4] = NULL;
43
50
 
44
- test_structure_8 ts8_arg;
45
-
46
- /* This is a hack to get a properly aligned result buffer */
47
- test_structure_8 *ts8_result =
48
- (test_structure_8 *) malloc (sizeof(test_structure_8));
49
-
50
51
  args[0] = &ts8_type;
51
52
  values[0] = &ts8_arg;
52
53
 
53
54
  /* Initialize the cif */
54
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK);
55
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts8_type, args) == FFI_OK);
55
56
 
56
57
  ts8_arg.f1 = 5.55f;
57
58
  ts8_arg.f2 = 55.5f;
@@ -13,7 +13,7 @@ typedef struct
13
13
  int i;
14
14
  } test_structure_9;
15
15
 
16
- static test_structure_9 struct9 (test_structure_9 ts)
16
+ static test_structure_9 ABI_ATTR struct9 (test_structure_9 ts)
17
17
  {
18
18
  ts.f += 1;
19
19
  ts.i += 1;
@@ -28,6 +28,13 @@ int main (void)
28
28
  void *values[MAX_ARGS];
29
29
  ffi_type ts9_type;
30
30
  ffi_type *ts9_type_elements[3];
31
+
32
+ test_structure_9 ts9_arg;
33
+
34
+ /* This is a hack to get a properly aligned result buffer */
35
+ test_structure_9 *ts9_result =
36
+ (test_structure_9 *) malloc (sizeof(test_structure_9));
37
+
31
38
  ts9_type.size = 0;
32
39
  ts9_type.alignment = 0;
33
40
  ts9_type.type = FFI_TYPE_STRUCT;
@@ -36,17 +43,11 @@ int main (void)
36
43
  ts9_type_elements[1] = &ffi_type_sint;
37
44
  ts9_type_elements[2] = NULL;
38
45
 
39
- test_structure_9 ts9_arg;
40
-
41
- /* This is a hack to get a properly aligned result buffer */
42
- test_structure_9 *ts9_result =
43
- (test_structure_9 *) malloc (sizeof(test_structure_9));
44
-
45
46
  args[0] = &ts9_type;
46
47
  values[0] = &ts9_arg;
47
48
 
48
49
  /* Initialize the cif */
49
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK);
50
+ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts9_type, args) == FFI_OK);
50
51
 
51
52
  ts9_arg.f = 5.55f;
52
53
  ts9_arg.i = 5;
@@ -43,13 +43,13 @@ int main (void)
43
43
  ffi_type cls_struct_type0;
44
44
  ffi_type* dbl_arg_types[5];
45
45
 
46
+ struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
47
+
46
48
  cls_struct_type0.size = 0;
47
49
  cls_struct_type0.alignment = 0;
48
50
  cls_struct_type0.type = FFI_TYPE_STRUCT;
49
51
  cls_struct_type0.elements = cls_struct_fields0;
50
52
 
51
- struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
52
-
53
53
  cls_struct_fields0[0] = &ffi_type_float;
54
54
  cls_struct_fields0[1] = &ffi_type_float;
55
55
  cls_struct_fields0[2] = &ffi_type_float;
@@ -0,0 +1,61 @@
1
+ /* { dg-do run } */
2
+ #include "ffitest.h"
3
+
4
+ typedef struct
5
+ {
6
+ unsigned char uc;
7
+ double d;
8
+ unsigned int ui;
9
+ } test_structure_1;
10
+
11
+ static test_structure_1 struct1(test_structure_1 ts)
12
+ {
13
+ ts.uc++;
14
+ ts.d--;
15
+ ts.ui++;
16
+
17
+ return ts;
18
+ }
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ ffi_type *args[MAX_ARGS];
24
+ void *values[MAX_ARGS];
25
+ ffi_type ts1_type;
26
+ ffi_type *ts1_type_elements[4];
27
+
28
+ memset(&cif, 1, sizeof(cif));
29
+ ts1_type.size = 0;
30
+ ts1_type.alignment = 0;
31
+ ts1_type.type = FFI_TYPE_STRUCT;
32
+ ts1_type.elements = ts1_type_elements;
33
+ ts1_type_elements[0] = &ffi_type_uchar;
34
+ ts1_type_elements[1] = &ffi_type_double;
35
+ ts1_type_elements[2] = &ffi_type_uint;
36
+ ts1_type_elements[3] = NULL;
37
+
38
+ test_structure_1 ts1_arg;
39
+ /* This is a hack to get a properly aligned result buffer */
40
+ test_structure_1 *ts1_result =
41
+ (test_structure_1 *) malloc (sizeof(test_structure_1));
42
+
43
+ args[0] = &ts1_type;
44
+ values[0] = &ts1_arg;
45
+
46
+ /* Initialize the cif */
47
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
48
+ &ts1_type, args) == FFI_OK);
49
+
50
+ ts1_arg.uc = '\x01';
51
+ ts1_arg.d = 3.14159;
52
+ ts1_arg.ui = 555;
53
+
54
+ ffi_call(&cif, FFI_FN(struct1), ts1_result, values);
55
+
56
+ CHECK(ts1_result->ui == 556);
57
+ CHECK(ts1_result->d == 3.14159 - 1);
58
+
59
+ free (ts1_result);
60
+ exit(0);
61
+ }
@@ -4,18 +4,11 @@
4
4
  PR: none.
5
5
  Originator: Jeff Sturm <jsturm@one-point.com> */
6
6
 
7
- /* { dg-do run } */
8
- #include "ffitestcxx.h"
7
+ /* { dg-do run { xfail x86_64-apple-darwin* } } */
9
8
 
10
- #if defined HAVE_STDINT_H
11
- #include <stdint.h>
12
- #endif
9
+ #include "ffitest.h"
13
10
 
14
- #if defined HAVE_INTTYPES_H
15
- #include <inttypes.h>
16
- #endif
17
-
18
- void
11
+ void ABI_ATTR
19
12
  closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
20
13
  void** args __UNUSED__, void* userdata __UNUSED__)
21
14
  {
@@ -5,7 +5,8 @@
5
5
  Originator: Andreas Tobler <andreast@gcc.gnu.org> 20061213 */
6
6
 
7
7
  /* { dg-do run } */
8
- #include "ffitestcxx.h"
8
+
9
+ #include "ffitest.h"
9
10
 
10
11
  static int checking(int a __UNUSED__, short b __UNUSED__,
11
12
  signed char c __UNUSED__)