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
@@ -29,7 +29,7 @@
29
29
  #include <ffi.h>
30
30
  #include <ffi_common.h>
31
31
 
32
- #define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG)
32
+ #define STACK_ARG_SIZE(x) FFI_ALIGN(x, FFI_SIZEOF_ARG)
33
33
 
34
34
  static ffi_status
35
35
  initialize_aggregate_packed_struct (ffi_type * arg)
@@ -153,21 +153,24 @@ ffi_prep_args (char *stack, extended_cif * ecif)
153
153
  return (struct_count);
154
154
  }
155
155
 
156
- ffi_status
157
- ffi_prep_cif (ffi_cif * cif,
158
- ffi_abi abi, unsigned int nargs,
159
- ffi_type * rtype, ffi_type ** atypes)
156
+ ffi_status FFI_HIDDEN
157
+ ffi_prep_cif_core (ffi_cif * cif,
158
+ ffi_abi abi, unsigned int isvariadic,
159
+ unsigned int nfixedargs, unsigned int ntotalargs,
160
+ ffi_type * rtype, ffi_type ** atypes)
160
161
  {
161
162
  unsigned bytes = 0;
162
163
  unsigned int i;
163
164
  ffi_type **ptr;
164
165
 
165
166
  FFI_ASSERT (cif != NULL);
167
+ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1));
168
+ FFI_ASSERT(nfixedargs <= ntotalargs);
166
169
  FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI);
167
170
 
168
171
  cif->abi = abi;
169
172
  cif->arg_types = atypes;
170
- cif->nargs = nargs;
173
+ cif->nargs = ntotalargs;
171
174
  cif->rtype = rtype;
172
175
 
173
176
  cif->flags = 0;
@@ -187,7 +190,7 @@ ffi_prep_cif (ffi_cif * cif,
187
190
  FFI_ASSERT_VALID_TYPE (*ptr);
188
191
 
189
192
  if (((*ptr)->alignment - 1) & bytes)
190
- bytes = ALIGN (bytes, (*ptr)->alignment);
193
+ bytes = FFI_ALIGN (bytes, (*ptr)->alignment);
191
194
  if ((*ptr)->type == FFI_TYPE_STRUCT)
192
195
  {
193
196
  if ((*ptr)->size > 8)
@@ -1,5 +1,6 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
2
+ ffitarget.h - Copyright (c) 2012 Anthony Green
3
+ Copyright (c) 1996-2003 Red Hat, Inc.
3
4
  Target configuration macros for CRIS.
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining
@@ -27,6 +28,10 @@
27
28
  #ifndef LIBFFI_TARGET_H
28
29
  #define LIBFFI_TARGET_H
29
30
 
31
+ #ifndef LIBFFI_H
32
+ #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
33
+ #endif
34
+
30
35
  #ifndef LIBFFI_ASM
31
36
  typedef unsigned long ffi_arg;
32
37
  typedef signed long ffi_sarg;
@@ -54,6 +54,11 @@ void ffi_type_test(ffi_type *a, char *file, int line)
54
54
  FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line);
55
55
  FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line);
56
56
  FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line);
57
- FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT || a->elements != NULL, file, line);
57
+ FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX)
58
+ || a->elements != NULL, file, line);
59
+ FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX
60
+ || (a->elements != NULL
61
+ && a->elements[0] != NULL && a->elements[1] == NULL),
62
+ file, line);
58
63
 
59
64
  }
@@ -438,6 +438,11 @@ DEFAULT_MMAP_THRESHOLD default: 256K
438
438
 
439
439
  */
440
440
 
441
+ #if defined __linux__ && !defined _GNU_SOURCE
442
+ /* mremap() on Linux requires this via sys/mman.h */
443
+ #define _GNU_SOURCE 1
444
+ #endif
445
+
441
446
  #ifndef WIN32
442
447
  #ifdef _WIN32
443
448
  #define WIN32 1
@@ -1255,7 +1260,7 @@ extern void* sbrk(ptrdiff_t);
1255
1260
  #define SIZE_T_BITSIZE (sizeof(size_t) << 3)
1256
1261
 
1257
1262
  /* Some constants coerced to size_t */
1258
- /* Annoying but necessary to avoid errors on some plaftorms */
1263
+ /* Annoying but necessary to avoid errors on some platforms */
1259
1264
  #define SIZE_T_ZERO ((size_t)0)
1260
1265
  #define SIZE_T_ONE ((size_t)1)
1261
1266
  #define SIZE_T_TWO ((size_t)2)
@@ -1409,7 +1414,7 @@ static int win32munmap(void* ptr, size_t size) {
1409
1414
  #define CALL_MORECORE(S) MFAIL
1410
1415
  #endif /* HAVE_MORECORE */
1411
1416
 
1412
- /* mstate bit set if continguous morecore disabled or failed */
1417
+ /* mstate bit set if contiguous morecore disabled or failed */
1413
1418
  #define USE_NONCONTIGUOUS_BIT (4U)
1414
1419
 
1415
1420
  /* segment bit set in create_mspace_with_base */
@@ -1661,7 +1666,7 @@ struct malloc_chunk {
1661
1666
  typedef struct malloc_chunk mchunk;
1662
1667
  typedef struct malloc_chunk* mchunkptr;
1663
1668
  typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
1664
- typedef unsigned int bindex_t; /* Described below */
1669
+ typedef size_t bindex_t; /* Described below */
1665
1670
  typedef unsigned int binmap_t; /* Described below */
1666
1671
  typedef unsigned int flag_t; /* The type of various bit flag sets */
1667
1672
 
@@ -2291,7 +2296,7 @@ static size_t traverse_and_check(mstate m);
2291
2296
  #define treebin_at(M,i) (&((M)->treebins[i]))
2292
2297
 
2293
2298
  /* assign tree index for size S to variable I */
2294
- #if defined(__GNUC__) && defined(i386)
2299
+ #if defined(__GNUC__) && defined(__i386__)
2295
2300
  #define compute_tree_index(S, I)\
2296
2301
  {\
2297
2302
  size_t X = S >> TREEBIN_SHIFT;\
@@ -2356,7 +2361,7 @@ static size_t traverse_and_check(mstate m);
2356
2361
 
2357
2362
  /* index corresponding to given bit */
2358
2363
 
2359
- #if defined(__GNUC__) && defined(i386)
2364
+ #if defined(__GNUC__) && defined(__i386__)
2360
2365
  #define compute_bit2idx(X, I)\
2361
2366
  {\
2362
2367
  unsigned int J;\
@@ -3090,8 +3095,8 @@ static void internal_malloc_stats(mstate m) {
3090
3095
  and choose its bk node as its replacement.
3091
3096
  2. If x was the last node of its size, but not a leaf node, it must
3092
3097
  be replaced with a leaf node (not merely one with an open left or
3093
- right), to make sure that lefts and rights of descendents
3094
- correspond properly to bit masks. We use the rightmost descendent
3098
+ right), to make sure that lefts and rights of descendants
3099
+ correspond properly to bit masks. We use the rightmost descendant
3095
3100
  of x. We could use any other leaf, but this is easy to locate and
3096
3101
  tends to counteract removal of leftmosts elsewhere, and so keeps
3097
3102
  paths shorter than minimally guaranteed. This doesn't loop much
@@ -3388,7 +3393,7 @@ static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
3388
3393
  *ss = m->seg; /* Push current record */
3389
3394
  m->seg.base = tbase;
3390
3395
  m->seg.size = tsize;
3391
- set_segment_flags(&m->seg, mmapped);
3396
+ (void)set_segment_flags(&m->seg, mmapped);
3392
3397
  m->seg.next = ss;
3393
3398
 
3394
3399
  /* Insert trailing fenceposts */
@@ -3548,7 +3553,7 @@ static void* sys_alloc(mstate m, size_t nb) {
3548
3553
  if (!is_initialized(m)) { /* first-time initialization */
3549
3554
  m->seg.base = m->least_addr = tbase;
3550
3555
  m->seg.size = tsize;
3551
- set_segment_flags(&m->seg, mmap_flag);
3556
+ (void)set_segment_flags(&m->seg, mmap_flag);
3552
3557
  m->magic = mparams.magic;
3553
3558
  init_bins(m);
3554
3559
  if (is_global(m))
@@ -5091,10 +5096,10 @@ History:
5091
5096
  Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
5092
5097
  * Use last_remainder in more cases.
5093
5098
  * Pack bins using idea from colin@nyx10.cs.du.edu
5094
- * Use ordered bins instead of best-fit threshhold
5099
+ * Use ordered bins instead of best-fit threshold
5095
5100
  * Eliminate block-local decls to simplify tracing and debugging.
5096
5101
  * Support another case of realloc via move into top
5097
- * Fix error occuring when initial sbrk_base not word-aligned.
5102
+ * Fix error occurring when initial sbrk_base not word-aligned.
5098
5103
  * Rely on page size for units instead of SBRK_UNIT to
5099
5104
  avoid surprises about sbrk alignment conventions.
5100
5105
  * Add mallinfo, mallopt. Thanks to Raymond Nijssen
@@ -118,7 +118,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
118
118
  else
119
119
  cif->flags = cif->rtype->size;
120
120
 
121
- cif->bytes = ALIGN (cif->bytes, 8);
121
+ cif->bytes = FFI_ALIGN (cif->bytes, 8);
122
122
 
123
123
  return FFI_OK;
124
124
  }
@@ -1,5 +1,6 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- ffitarget.h - Copyright (c) 1996-2004 Red Hat, Inc.
2
+ ffitarget.h - Copyright (c) 2012 Anthony Green
3
+ Copyright (c) 1996-2004 Red Hat, Inc.
3
4
  Target configuration macros for FR-V
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining
@@ -27,6 +28,10 @@
27
28
  #ifndef LIBFFI_TARGET_H
28
29
  #define LIBFFI_TARGET_H
29
30
 
31
+ #ifndef LIBFFI_H
32
+ #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
33
+ #endif
34
+
30
35
  /* ---- System specific configurations ----------------------------------- */
31
36
 
32
37
  #ifndef LIBFFI_ASM
@@ -1,8 +1,8 @@
1
1
  /* -----------------------------------------------------------------------
2
- ffi.c - Copyright (c) 2011 Anthony Green
3
- Copyright (c) 2000 Hewlett Packard Company
4
- Copyright (c) 1998, 2007, 2008 Red Hat, Inc.
5
-
2
+ ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
3
+ Copyright (c) 2000 Hewlett Packard Company
4
+ Copyright (c) 2011 Anthony Green
5
+
6
6
  IA64 Foreign Function Interface
7
7
 
8
8
  Permission is hereby granted, free of charge, to any person obtaining
@@ -325,13 +325,17 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
325
325
  case FFI_TYPE_FLOAT:
326
326
  if (gpcount < 8 && fpcount < 8)
327
327
  stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
328
- stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
328
+ {
329
+ UINT32 tmp;
330
+ memcpy (&tmp, avalue[i], sizeof (UINT32));
331
+ stack->gp_regs[gpcount++] = tmp;
332
+ }
329
333
  break;
330
334
 
331
335
  case FFI_TYPE_DOUBLE:
332
336
  if (gpcount < 8 && fpcount < 8)
333
337
  stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
334
- stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
338
+ memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64));
335
339
  break;
336
340
 
337
341
  case FFI_TYPE_LONGDOUBLE:
@@ -397,7 +401,7 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
397
401
  the closure (in the "trampoline" area), but we replace the gp
398
402
  pointer with a pointer to the closure itself. We also add the real
399
403
  gp pointer to the closure. This allows the function entry code to
400
- both retrieve the user data, and to restire the correct gp pointer. */
404
+ both retrieve the user data, and to restore the correct gp pointer. */
401
405
 
402
406
  extern void ffi_closure_unix ();
403
407
 
@@ -1,5 +1,6 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
2
+ ffitarget.h - Copyright (c) 2012 Anthony Green
3
+ Copyright (c) 1996-2003 Red Hat, Inc.
3
4
  Target configuration macros for IA-64.
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining
@@ -27,6 +28,10 @@
27
28
  #ifndef LIBFFI_TARGET_H
28
29
  #define LIBFFI_TARGET_H
29
30
 
31
+ #ifndef LIBFFI_H
32
+ #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
33
+ #endif
34
+
30
35
  #ifndef LIBFFI_ASM
31
36
  typedef unsigned long long ffi_arg;
32
37
  typedef signed long long ffi_sarg;
@@ -39,7 +39,7 @@
39
39
  #include <ffi_common.h>
40
40
  #include <stdlib.h>
41
41
 
42
- #if !defined(NO_JAVA_RAW_API) && !defined(FFI_NO_RAW_API)
42
+ #if !defined(NO_JAVA_RAW_API)
43
43
 
44
44
  size_t
45
45
  ffi_java_raw_size (ffi_cif *cif)
@@ -60,6 +60,9 @@ ffi_java_raw_size (ffi_cif *cif)
60
60
  case FFI_TYPE_STRUCT:
61
61
  /* No structure parameters in Java. */
62
62
  abort();
63
+ case FFI_TYPE_COMPLEX:
64
+ /* Not supported yet. */
65
+ abort();
63
66
  default:
64
67
  result += FFI_SIZEOF_JAVA_RAW;
65
68
  }
@@ -104,10 +107,14 @@ ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args)
104
107
  *args = (void*) &(raw++)->ptr;
105
108
  break;
106
109
 
110
+ case FFI_TYPE_COMPLEX:
111
+ /* Not supported yet. */
112
+ abort();
113
+
107
114
  default:
108
115
  *args = raw;
109
116
  raw +=
110
- ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
117
+ FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
111
118
  }
112
119
  }
113
120
 
@@ -126,13 +133,16 @@ ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args)
126
133
  *args = (void*) raw;
127
134
  raw += 2;
128
135
  break;
136
+ case FFI_TYPE_COMPLEX:
137
+ /* Not supported yet. */
138
+ abort();
129
139
  default:
130
140
  *args = (void*) raw++;
131
141
  }
132
142
  #else /* FFI_SIZEOF_JAVA_RAW != 8 */
133
143
  *args = (void*) raw;
134
144
  raw +=
135
- ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
145
+ FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
136
146
  #endif /* FFI_SIZEOF_JAVA_RAW == 8 */
137
147
  }
138
148
 
@@ -224,7 +234,7 @@ ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw)
224
234
  #else
225
235
  memcpy ((void*) raw->data, (void*)*args, (*tp)->size);
226
236
  raw +=
227
- ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
237
+ FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
228
238
  #endif
229
239
  }
230
240
  }
@@ -254,6 +264,10 @@ ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue)
254
264
  *(SINT64 *)rvalue <<= 32;
255
265
  break;
256
266
 
267
+ case FFI_TYPE_COMPLEX:
268
+ /* Not supported yet. */
269
+ abort();
270
+
257
271
  default:
258
272
  break;
259
273
  }
@@ -279,6 +293,10 @@ ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue)
279
293
  *(SINT64 *)rvalue >>= 32;
280
294
  break;
281
295
 
296
+ case FFI_TYPE_COMPLEX:
297
+ /* Not supported yet. */
298
+ abort();
299
+
282
300
  default:
283
301
  break;
284
302
  }
@@ -353,4 +371,4 @@ ffi_prep_java_raw_closure (ffi_java_raw_closure* cl,
353
371
 
354
372
  #endif /* FFI_CLOSURES */
355
373
  #endif /* !FFI_NATIVE_RAW_API */
356
- #endif /* !FFI_NO_RAW_API */
374
+ #endif /* !NO_JAVA_RAW_API */
@@ -61,7 +61,7 @@ void ffi_prep_args(char *stack, extended_cif *ecif)
61
61
 
62
62
  /* Align if necessary. */
63
63
  if (((*p_arg)->alignment - 1) & (unsigned) argp)
64
- argp = (char *) ALIGN (argp, (*p_arg)->alignment);
64
+ argp = (char *) FFI_ALIGN (argp, (*p_arg)->alignment);
65
65
 
66
66
  if (avn != 0)
67
67
  {
@@ -1,5 +1,6 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- ffitarget.h - Copyright (c) 2004 Renesas Technology.
2
+ ffitarget.h - Copyright (c) 2012 Anthony Green
3
+ Copyright (c) 2004 Renesas Technology.
3
4
  Target configuration macros for M32R.
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining
@@ -26,6 +27,10 @@
26
27
  #ifndef LIBFFI_TARGET_H
27
28
  #define LIBFFI_TARGET_H
28
29
 
30
+ #ifndef LIBFFI_H
31
+ #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
32
+ #endif
33
+
29
34
  /* ---- Generic type definitions ----------------------------------------- */
30
35
 
31
36
  #ifndef LIBFFI_ASM
@@ -1,7 +1,7 @@
1
1
  /* -----------------------------------------------------------------------
2
2
  ffi.c
3
-
4
- m68k Foreign Function Interface
3
+
4
+ m68k Foreign Function Interface
5
5
  ----------------------------------------------------------------------- */
6
6
 
7
7
  #include <ffi.h>
@@ -13,8 +13,13 @@
13
13
  void rtems_cache_flush_multiple_data_lines( const void *, size_t );
14
14
  #else
15
15
  #include <sys/syscall.h>
16
+ #ifdef __MINT__
17
+ #include <mint/mintbind.h>
18
+ #include <mint/ssystem.h>
19
+ #else
16
20
  #include <asm/cachectl.h>
17
21
  #endif
22
+ #endif
18
23
 
19
24
  void ffi_call_SYSV (extended_cif *,
20
25
  unsigned, unsigned,
@@ -39,8 +44,12 @@ ffi_prep_args (void *stack, extended_cif *ecif)
39
44
 
40
45
  argp = stack;
41
46
 
42
- if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
43
- && !ecif->cif->flags)
47
+ if (
48
+ #ifdef __MINT__
49
+ (ecif->cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
50
+ #endif
51
+ (((ecif->cif->rtype->type == FFI_TYPE_STRUCT)
52
+ && !ecif->cif->flags)))
44
53
  struct_value_ptr = ecif->rvalue;
45
54
  else
46
55
  struct_value_ptr = NULL;
@@ -51,12 +60,12 @@ ffi_prep_args (void *stack, extended_cif *ecif)
51
60
  i != 0;
52
61
  i--, p_arg++)
53
62
  {
54
- size_t z;
63
+ size_t z = (*p_arg)->size;
64
+ int type = (*p_arg)->type;
55
65
 
56
- z = (*p_arg)->size;
57
66
  if (z < sizeof (int))
58
67
  {
59
- switch ((*p_arg)->type)
68
+ switch (type)
60
69
  {
61
70
  case FFI_TYPE_SINT8:
62
71
  *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
@@ -75,7 +84,14 @@ ffi_prep_args (void *stack, extended_cif *ecif)
75
84
  break;
76
85
 
77
86
  case FFI_TYPE_STRUCT:
87
+ #ifdef __MINT__
88
+ if (z == 1 || z == 2)
89
+ memcpy (argp + 2, *p_argv, z);
90
+ else
91
+ memcpy (argp, *p_argv, z);
92
+ #else
78
93
  memcpy (argp + sizeof (int) - z, *p_argv, z);
94
+ #endif
79
95
  break;
80
96
 
81
97
  default:
@@ -89,7 +105,7 @@ ffi_prep_args (void *stack, extended_cif *ecif)
89
105
 
90
106
  /* Align if necessary. */
91
107
  if ((sizeof(int) - 1) & z)
92
- z = ALIGN(z, sizeof(int));
108
+ z = FFI_ALIGN(z, sizeof(int));
93
109
  }
94
110
 
95
111
  p_argv++;
@@ -107,6 +123,8 @@ ffi_prep_args (void *stack, extended_cif *ecif)
107
123
  #define CIF_FLAGS_POINTER 32
108
124
  #define CIF_FLAGS_STRUCT1 64
109
125
  #define CIF_FLAGS_STRUCT2 128
126
+ #define CIF_FLAGS_SINT8 256
127
+ #define CIF_FLAGS_SINT16 512
110
128
 
111
129
  /* Perform machine dependent cif processing */
112
130
  ffi_status
@@ -120,17 +138,34 @@ ffi_prep_cif_machdep (ffi_cif *cif)
120
138
  break;
121
139
 
122
140
  case FFI_TYPE_STRUCT:
141
+ if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
142
+ cif->rtype->elements[1])
143
+ {
144
+ cif->flags = 0;
145
+ break;
146
+ }
147
+
123
148
  switch (cif->rtype->size)
124
149
  {
125
150
  case 1:
151
+ #ifdef __MINT__
152
+ cif->flags = CIF_FLAGS_STRUCT2;
153
+ #else
126
154
  cif->flags = CIF_FLAGS_STRUCT1;
155
+ #endif
127
156
  break;
128
157
  case 2:
129
158
  cif->flags = CIF_FLAGS_STRUCT2;
130
159
  break;
160
+ #ifdef __MINT__
161
+ case 3:
162
+ #endif
131
163
  case 4:
132
164
  cif->flags = CIF_FLAGS_INT;
133
165
  break;
166
+ #ifdef __MINT__
167
+ case 7:
168
+ #endif
134
169
  case 8:
135
170
  cif->flags = CIF_FLAGS_DINT;
136
171
  break;
@@ -150,7 +185,11 @@ ffi_prep_cif_machdep (ffi_cif *cif)
150
185
 
151
186
  #if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE)
152
187
  case FFI_TYPE_LONGDOUBLE:
188
+ #ifdef __MINT__
189
+ cif->flags = 0;
190
+ #else
153
191
  cif->flags = CIF_FLAGS_LDOUBLE;
192
+ #endif
154
193
  break;
155
194
  #endif
156
195
 
@@ -163,6 +202,14 @@ ffi_prep_cif_machdep (ffi_cif *cif)
163
202
  cif->flags = CIF_FLAGS_DINT;
164
203
  break;
165
204
 
205
+ case FFI_TYPE_SINT16:
206
+ cif->flags = CIF_FLAGS_SINT16;
207
+ break;
208
+
209
+ case FFI_TYPE_SINT8:
210
+ cif->flags = CIF_FLAGS_SINT8;
211
+ break;
212
+
166
213
  default:
167
214
  cif->flags = CIF_FLAGS_INT;
168
215
  break;
@@ -218,6 +265,26 @@ ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif)
218
265
  size_t z;
219
266
 
220
267
  z = (*p_arg)->size;
268
+ #ifdef __MINT__
269
+ if (cif->flags &&
270
+ cif->rtype->type == FFI_TYPE_STRUCT &&
271
+ (z == 1 || z == 2))
272
+ {
273
+ *p_argv = (void *) (argp + 2);
274
+
275
+ z = 4;
276
+ }
277
+ else
278
+ if (cif->flags &&
279
+ cif->rtype->type == FFI_TYPE_STRUCT &&
280
+ (z == 3 || z == 4))
281
+ {
282
+ *p_argv = (void *) (argp);
283
+
284
+ z = 4;
285
+ }
286
+ else
287
+ #endif
221
288
  if (z <= 4)
222
289
  {
223
290
  *p_argv = (void *) (argp + 4 - z);
@@ -230,7 +297,7 @@ ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif)
230
297
 
231
298
  /* Align if necessary */
232
299
  if ((sizeof(int) - 1) & z)
233
- z = ALIGN(z, sizeof(int));
300
+ z = FFI_ALIGN(z, sizeof(int));
234
301
  }
235
302
 
236
303
  p_argv++;
@@ -261,19 +328,27 @@ ffi_prep_closure_loc (ffi_closure* closure,
261
328
  void *user_data,
262
329
  void *codeloc)
263
330
  {
264
- FFI_ASSERT (cif->abi == FFI_SYSV);
331
+ if (cif->abi != FFI_SYSV)
332
+ return FFI_BAD_ABI;
265
333
 
266
334
  *(unsigned short *)closure->tramp = 0x207c;
267
335
  *(void **)(closure->tramp + 2) = codeloc;
268
336
  *(unsigned short *)(closure->tramp + 6) = 0x4ef9;
269
- if (cif->rtype->type == FFI_TYPE_STRUCT
270
- && !cif->flags)
337
+
338
+ if (
339
+ #ifdef __MINT__
340
+ (cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
341
+ #endif
342
+ (((cif->rtype->type == FFI_TYPE_STRUCT)
343
+ && !cif->flags)))
271
344
  *(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV;
272
345
  else
273
346
  *(void **)(closure->tramp + 8) = ffi_closure_SYSV;
274
347
 
275
348
  #ifdef __rtems__
276
349
  rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE );
350
+ #elif defined(__MINT__)
351
+ Ssystem(S_FLUSHCACHE, codeloc, FFI_TRAMPOLINE_SIZE);
277
352
  #else
278
353
  syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE,
279
354
  FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE);
@@ -285,4 +360,3 @@ ffi_prep_closure_loc (ffi_closure* closure,
285
360
 
286
361
  return FFI_OK;
287
362
  }
288
-