ffi 1.9.18-x86-mingw32 → 1.9.21-x86-mingw32

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 (384) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -2
  3. data/Rakefile +14 -4
  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/Makefile.in +923 -938
  17. data/ext/ffi_c/libffi/README +164 -52
  18. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  19. data/ext/ffi_c/libffi/aclocal.m4 +645 -384
  20. data/ext/ffi_c/libffi/autogen.sh +2 -0
  21. data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
  22. data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
  23. data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
  24. data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
  25. data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
  26. data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
  27. data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
  28. data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
  29. data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
  30. data/ext/ffi_c/libffi/compile +218 -14
  31. data/ext/ffi_c/libffi/config.guess +329 -368
  32. data/ext/ffi_c/libffi/config.sub +232 -112
  33. data/ext/ffi_c/libffi/configure +6970 -2189
  34. data/ext/ffi_c/libffi/configure.ac +148 -256
  35. data/ext/ffi_c/libffi/configure.host +265 -4
  36. data/ext/ffi_c/libffi/depcomp +346 -185
  37. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  38. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  39. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  40. data/ext/ffi_c/libffi/{mdate-sh → doc/mdate-sh} +40 -13
  41. data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
  42. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  43. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  44. data/ext/ffi_c/libffi/fficonfig.h.in~ +210 -0
  45. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  46. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  47. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  48. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  49. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  50. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  51. data/ext/ffi_c/libffi/install-sh +190 -202
  52. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  53. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  54. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  55. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  56. data/ext/ffi_c/libffi/libtool-version +1 -1
  57. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  58. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  59. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  60. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  61. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  62. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  63. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  64. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  65. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  66. data/ext/ffi_c/libffi/m4/libtool.m4 +1691 -1135
  67. data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
  68. data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
  69. data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
  70. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
  71. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  72. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  73. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  74. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  75. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  76. data/ext/ffi_c/libffi/missing +150 -311
  77. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  78. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  79. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  80. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  81. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  82. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  83. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  84. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  85. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  86. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  87. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  88. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  90. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  91. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  92. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  93. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  94. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  95. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  96. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  97. data/ext/ffi_c/libffi/src/closures.c +319 -44
  98. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  99. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  100. data/ext/ffi_c/libffi/src/debug.c +6 -1
  101. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  102. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  103. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  104. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  105. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  106. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  107. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  108. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  109. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  110. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  111. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  112. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  113. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  114. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  115. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  116. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  117. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  118. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  119. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  120. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  121. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  122. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  123. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  124. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  125. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  126. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  127. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  128. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  129. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  130. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  131. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  132. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  133. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  134. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  135. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  136. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  137. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  138. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  139. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  140. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  141. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  142. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  143. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  144. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  145. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  146. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  147. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  148. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  149. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  150. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  151. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  152. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  153. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  154. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  155. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  156. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  157. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  158. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  159. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  160. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  161. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  162. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  163. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  164. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  165. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  166. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  167. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  168. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  169. data/ext/ffi_c/libffi/src/types.c +43 -14
  170. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  171. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  172. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  173. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  174. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  175. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  176. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  177. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  178. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  179. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  180. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  181. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  182. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  183. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  184. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  185. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  186. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  187. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  188. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  189. data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
  190. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  191. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  294. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  295. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  316. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  347. data/ffi.gemspec +2 -2
  348. data/lib/2.0/ffi_c.so +0 -0
  349. data/lib/2.1/ffi_c.so +0 -0
  350. data/lib/2.2/ffi_c.so +0 -0
  351. data/lib/2.3/ffi_c.so +0 -0
  352. data/lib/2.4/ffi_c.so +0 -0
  353. data/lib/2.5/ffi_c.so +0 -0
  354. data/lib/ffi/enum.rb +124 -0
  355. data/lib/ffi/library.rb +65 -13
  356. data/lib/ffi/platform.rb +7 -2
  357. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  358. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  359. data/lib/ffi/pointer.rb +1 -0
  360. data/lib/ffi/struct.rb +0 -2
  361. data/lib/ffi/version.rb +1 -1
  362. data/spec/ffi/bitmask_spec.rb +575 -0
  363. data/spec/ffi/embed-test/ext/Makefile +242 -0
  364. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  365. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  366. data/spec/ffi/struct_spec.rb +0 -4
  367. metadata +158 -32
  368. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  369. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  370. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  371. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  372. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  373. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  374. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  375. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  376. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  377. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  378. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  379. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  380. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  381. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  384. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
@@ -0,0 +1,81 @@
1
+ /* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ ``Software''), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
21
+
22
+ #ifndef LIBFFI_TARGET_H
23
+ #define LIBFFI_TARGET_H
24
+
25
+ #ifndef LIBFFI_H
26
+ #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
27
+ #endif
28
+
29
+ #ifndef LIBFFI_ASM
30
+ #ifdef __ILP32__
31
+ #define FFI_SIZEOF_ARG 8
32
+ #define FFI_SIZEOF_JAVA_RAW 4
33
+ typedef unsigned long long ffi_arg;
34
+ typedef signed long long ffi_sarg;
35
+ #else
36
+ typedef unsigned long ffi_arg;
37
+ typedef signed long ffi_sarg;
38
+ #endif
39
+
40
+ typedef enum ffi_abi
41
+ {
42
+ FFI_FIRST_ABI = 0,
43
+ FFI_SYSV,
44
+ FFI_LAST_ABI,
45
+ FFI_DEFAULT_ABI = FFI_SYSV
46
+ } ffi_abi;
47
+ #endif
48
+
49
+ /* ---- Definitions for closures ----------------------------------------- */
50
+
51
+ #define FFI_CLOSURES 1
52
+ #define FFI_NATIVE_RAW_API 0
53
+
54
+ #if defined (FFI_EXEC_TRAMPOLINE_TABLE) && FFI_EXEC_TRAMPOLINE_TABLE
55
+
56
+ #ifdef __MACH__
57
+ #define FFI_TRAMPOLINE_SIZE 16
58
+ #define FFI_TRAMPOLINE_CLOSURE_OFFSET 16
59
+ #else
60
+ #error "No trampoline table implementation"
61
+ #endif
62
+
63
+ #else
64
+ #define FFI_TRAMPOLINE_SIZE 24
65
+ #define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE
66
+ #endif
67
+
68
+ /* ---- Internal ---- */
69
+
70
+ #if defined (__APPLE__)
71
+ #define FFI_TARGET_SPECIFIC_VARIADIC
72
+ #define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs
73
+ #else
74
+ /* iOS reserves x18 for the system. Disable Go closures until
75
+ a new static chain is chosen. */
76
+ #define FFI_GO_CLOSURES 1
77
+ #endif
78
+
79
+ #define FFI_TARGET_HAS_COMPLEX_TYPE
80
+
81
+ #endif
@@ -0,0 +1,67 @@
1
+ /*
2
+ Permission is hereby granted, free of charge, to any person obtaining
3
+ a copy of this software and associated documentation files (the
4
+ ``Software''), to deal in the Software without restriction, including
5
+ without limitation the rights to use, copy, modify, merge, publish,
6
+ distribute, sublicense, and/or sell copies of the Software, and to
7
+ permit persons to whom the Software is furnished to do so, subject to
8
+ the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be
11
+ included in all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
14
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
17
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
18
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
19
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
20
+
21
+ #define AARCH64_RET_VOID 0
22
+ #define AARCH64_RET_INT64 1
23
+ #define AARCH64_RET_INT128 2
24
+
25
+ #define AARCH64_RET_UNUSED3 3
26
+ #define AARCH64_RET_UNUSED4 4
27
+ #define AARCH64_RET_UNUSED5 5
28
+ #define AARCH64_RET_UNUSED6 6
29
+ #define AARCH64_RET_UNUSED7 7
30
+
31
+ /* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4,
32
+ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */
33
+ #define AARCH64_RET_S4 8
34
+ #define AARCH64_RET_S3 9
35
+ #define AARCH64_RET_S2 10
36
+ #define AARCH64_RET_S1 11
37
+
38
+ #define AARCH64_RET_D4 12
39
+ #define AARCH64_RET_D3 13
40
+ #define AARCH64_RET_D2 14
41
+ #define AARCH64_RET_D1 15
42
+
43
+ #define AARCH64_RET_Q4 16
44
+ #define AARCH64_RET_Q3 17
45
+ #define AARCH64_RET_Q2 18
46
+ #define AARCH64_RET_Q1 19
47
+
48
+ /* Note that each of the sub-64-bit integers gets two entries. */
49
+ #define AARCH64_RET_UINT8 20
50
+ #define AARCH64_RET_UINT16 22
51
+ #define AARCH64_RET_UINT32 24
52
+
53
+ #define AARCH64_RET_SINT8 26
54
+ #define AARCH64_RET_SINT16 28
55
+ #define AARCH64_RET_SINT32 30
56
+
57
+ #define AARCH64_RET_MASK 31
58
+
59
+ #define AARCH64_RET_IN_MEM (1 << 5)
60
+ #define AARCH64_RET_NEED_COPY (1 << 6)
61
+
62
+ #define AARCH64_FLAG_ARG_V_BIT 7
63
+ #define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT)
64
+
65
+ #define N_X_ARG_REG 8
66
+ #define N_V_ARG_REG 8
67
+ #define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8)
@@ -0,0 +1,438 @@
1
+ /* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ ``Software''), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
21
+
22
+ #define LIBFFI_ASM
23
+ #include <fficonfig.h>
24
+ #include <ffi.h>
25
+ #include <ffi_cfi.h>
26
+ #include "internal.h"
27
+
28
+ #ifdef HAVE_MACHINE_ASM_H
29
+ #include <machine/asm.h>
30
+ #else
31
+ #ifdef __USER_LABEL_PREFIX__
32
+ #define CONCAT1(a, b) CONCAT2(a, b)
33
+ #define CONCAT2(a, b) a ## b
34
+
35
+ /* Use the right prefix for global labels. */
36
+ #define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
37
+ #else
38
+ #define CNAME(x) x
39
+ #endif
40
+ #endif
41
+
42
+ #ifdef __AARCH64EB__
43
+ # define BE(X) X
44
+ #else
45
+ # define BE(X) 0
46
+ #endif
47
+
48
+ #ifdef __ILP32__
49
+ #define PTR_REG(n) w##n
50
+ #else
51
+ #define PTR_REG(n) x##n
52
+ #endif
53
+
54
+ #ifdef __ILP32__
55
+ #define PTR_SIZE 4
56
+ #else
57
+ #define PTR_SIZE 8
58
+ #endif
59
+
60
+ .text
61
+ .align 4
62
+
63
+ /* ffi_call_SYSV
64
+ extern void ffi_call_SYSV (void *stack, void *frame,
65
+ void (*fn)(void), void *rvalue,
66
+ int flags, void *closure);
67
+
68
+ Therefore on entry we have:
69
+
70
+ x0 stack
71
+ x1 frame
72
+ x2 fn
73
+ x3 rvalue
74
+ x4 flags
75
+ x5 closure
76
+ */
77
+
78
+ cfi_startproc
79
+ CNAME(ffi_call_SYSV):
80
+ /* Use a stack frame allocated by our caller. */
81
+ cfi_def_cfa(x1, 32);
82
+ stp x29, x30, [x1]
83
+ mov x29, x1
84
+ mov sp, x0
85
+ cfi_def_cfa_register(x29)
86
+ cfi_rel_offset (x29, 0)
87
+ cfi_rel_offset (x30, 8)
88
+
89
+ mov x9, x2 /* save fn */
90
+ mov x8, x3 /* install structure return */
91
+ #ifdef FFI_GO_CLOSURES
92
+ mov x18, x5 /* install static chain */
93
+ #endif
94
+ stp x3, x4, [x29, #16] /* save rvalue and flags */
95
+
96
+ /* Load the vector argument passing registers, if necessary. */
97
+ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f
98
+ ldp q0, q1, [sp, #0]
99
+ ldp q2, q3, [sp, #32]
100
+ ldp q4, q5, [sp, #64]
101
+ ldp q6, q7, [sp, #96]
102
+ 1:
103
+ /* Load the core argument passing registers, including
104
+ the structure return pointer. */
105
+ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0]
106
+ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16]
107
+ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32]
108
+ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48]
109
+
110
+ /* Deallocate the context, leaving the stacked arguments. */
111
+ add sp, sp, #CALL_CONTEXT_SIZE
112
+
113
+ blr x9 /* call fn */
114
+
115
+ ldp x3, x4, [x29, #16] /* reload rvalue and flags */
116
+
117
+ /* Partially deconstruct the stack frame. */
118
+ mov sp, x29
119
+ cfi_def_cfa_register (sp)
120
+ ldp x29, x30, [x29]
121
+
122
+ /* Save the return value as directed. */
123
+ adr x5, 0f
124
+ and w4, w4, #AARCH64_RET_MASK
125
+ add x5, x5, x4, lsl #3
126
+ br x5
127
+
128
+ /* Note that each table entry is 2 insns, and thus 8 bytes.
129
+ For integer data, note that we're storing into ffi_arg
130
+ and therefore we want to extend to 64 bits; these types
131
+ have two consecutive entries allocated for them. */
132
+ .align 4
133
+ 0: ret /* VOID */
134
+ nop
135
+ 1: str x0, [x3] /* INT64 */
136
+ ret
137
+ 2: stp x0, x1, [x3] /* INT128 */
138
+ ret
139
+ 3: brk #1000 /* UNUSED */
140
+ ret
141
+ 4: brk #1000 /* UNUSED */
142
+ ret
143
+ 5: brk #1000 /* UNUSED */
144
+ ret
145
+ 6: brk #1000 /* UNUSED */
146
+ ret
147
+ 7: brk #1000 /* UNUSED */
148
+ ret
149
+ 8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */
150
+ ret
151
+ 9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */
152
+ ret
153
+ 10: stp s0, s1, [x3] /* S2 */
154
+ ret
155
+ 11: str s0, [x3] /* S1 */
156
+ ret
157
+ 12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */
158
+ ret
159
+ 13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */
160
+ ret
161
+ 14: stp d0, d1, [x3] /* D2 */
162
+ ret
163
+ 15: str d0, [x3] /* D1 */
164
+ ret
165
+ 16: str q3, [x3, #48] /* Q4 */
166
+ nop
167
+ 17: str q2, [x3, #32] /* Q3 */
168
+ nop
169
+ 18: stp q0, q1, [x3] /* Q2 */
170
+ ret
171
+ 19: str q0, [x3] /* Q1 */
172
+ ret
173
+ 20: uxtb w0, w0 /* UINT8 */
174
+ str x0, [x3]
175
+ 21: ret /* reserved */
176
+ nop
177
+ 22: uxth w0, w0 /* UINT16 */
178
+ str x0, [x3]
179
+ 23: ret /* reserved */
180
+ nop
181
+ 24: mov w0, w0 /* UINT32 */
182
+ str x0, [x3]
183
+ 25: ret /* reserved */
184
+ nop
185
+ 26: sxtb x0, w0 /* SINT8 */
186
+ str x0, [x3]
187
+ 27: ret /* reserved */
188
+ nop
189
+ 28: sxth x0, w0 /* SINT16 */
190
+ str x0, [x3]
191
+ 29: ret /* reserved */
192
+ nop
193
+ 30: sxtw x0, w0 /* SINT32 */
194
+ str x0, [x3]
195
+ 31: ret /* reserved */
196
+ nop
197
+
198
+ cfi_endproc
199
+
200
+ .globl CNAME(ffi_call_SYSV)
201
+ #ifdef __ELF__
202
+ .type CNAME(ffi_call_SYSV), #function
203
+ .hidden CNAME(ffi_call_SYSV)
204
+ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV)
205
+ #endif
206
+
207
+ /* ffi_closure_SYSV
208
+
209
+ Closure invocation glue. This is the low level code invoked directly by
210
+ the closure trampoline to setup and call a closure.
211
+
212
+ On entry x17 points to a struct ffi_closure, x16 has been clobbered
213
+ all other registers are preserved.
214
+
215
+ We allocate a call context and save the argument passing registers,
216
+ then invoked the generic C ffi_closure_SYSV_inner() function to do all
217
+ the real work, on return we load the result passing registers back from
218
+ the call context.
219
+ */
220
+
221
+ #define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64)
222
+
223
+ .align 4
224
+ CNAME(ffi_closure_SYSV_V):
225
+ cfi_startproc
226
+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
227
+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
228
+ cfi_rel_offset (x29, 0)
229
+ cfi_rel_offset (x30, 8)
230
+
231
+ /* Save the argument passing vector registers. */
232
+ stp q0, q1, [sp, #16 + 0]
233
+ stp q2, q3, [sp, #16 + 32]
234
+ stp q4, q5, [sp, #16 + 64]
235
+ stp q6, q7, [sp, #16 + 96]
236
+ b 0f
237
+ cfi_endproc
238
+
239
+ .globl CNAME(ffi_closure_SYSV_V)
240
+ #ifdef __ELF__
241
+ .type CNAME(ffi_closure_SYSV_V), #function
242
+ .hidden CNAME(ffi_closure_SYSV_V)
243
+ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V)
244
+ #endif
245
+
246
+ .align 4
247
+ cfi_startproc
248
+ CNAME(ffi_closure_SYSV):
249
+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
250
+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
251
+ cfi_rel_offset (x29, 0)
252
+ cfi_rel_offset (x30, 8)
253
+ 0:
254
+ mov x29, sp
255
+
256
+ /* Save the argument passing core registers. */
257
+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0]
258
+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16]
259
+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32]
260
+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48]
261
+
262
+ /* Load ffi_closure_inner arguments. */
263
+ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */
264
+ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */
265
+ .Ldo_closure:
266
+ add x3, sp, #16 /* load context */
267
+ add x4, sp, #ffi_closure_SYSV_FS /* load stack */
268
+ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */
269
+ mov x6, x8 /* load struct_rval */
270
+ bl CNAME(ffi_closure_SYSV_inner)
271
+
272
+ /* Load the return value as directed. */
273
+ adr x1, 0f
274
+ and w0, w0, #AARCH64_RET_MASK
275
+ add x1, x1, x0, lsl #3
276
+ add x3, sp, #16+CALL_CONTEXT_SIZE
277
+ br x1
278
+
279
+ /* Note that each table entry is 2 insns, and thus 8 bytes. */
280
+ .align 4
281
+ 0: b 99f /* VOID */
282
+ nop
283
+ 1: ldr x0, [x3] /* INT64 */
284
+ b 99f
285
+ 2: ldp x0, x1, [x3] /* INT128 */
286
+ b 99f
287
+ 3: brk #1000 /* UNUSED */
288
+ nop
289
+ 4: brk #1000 /* UNUSED */
290
+ nop
291
+ 5: brk #1000 /* UNUSED */
292
+ nop
293
+ 6: brk #1000 /* UNUSED */
294
+ nop
295
+ 7: brk #1000 /* UNUSED */
296
+ nop
297
+ 8: ldr s3, [x3, #12] /* S4 */
298
+ nop
299
+ 9: ldr s2, [x2, #8] /* S3 */
300
+ nop
301
+ 10: ldp s0, s1, [x3] /* S2 */
302
+ b 99f
303
+ 11: ldr s0, [x3] /* S1 */
304
+ b 99f
305
+ 12: ldr d3, [x3, #24] /* D4 */
306
+ nop
307
+ 13: ldr d2, [x3, #16] /* D3 */
308
+ nop
309
+ 14: ldp d0, d1, [x3] /* D2 */
310
+ b 99f
311
+ 15: ldr d0, [x3] /* D1 */
312
+ b 99f
313
+ 16: ldr q3, [x3, #48] /* Q4 */
314
+ nop
315
+ 17: ldr q2, [x3, #32] /* Q3 */
316
+ nop
317
+ 18: ldp q0, q1, [x3] /* Q2 */
318
+ b 99f
319
+ 19: ldr q0, [x3] /* Q1 */
320
+ b 99f
321
+ 20: ldrb w0, [x3, #BE(7)] /* UINT8 */
322
+ b 99f
323
+ 21: brk #1000 /* reserved */
324
+ nop
325
+ 22: ldrh w0, [x3, #BE(6)] /* UINT16 */
326
+ b 99f
327
+ 23: brk #1000 /* reserved */
328
+ nop
329
+ 24: ldr w0, [x3, #BE(4)] /* UINT32 */
330
+ b 99f
331
+ 25: brk #1000 /* reserved */
332
+ nop
333
+ 26: ldrsb x0, [x3, #BE(7)] /* SINT8 */
334
+ b 99f
335
+ 27: brk #1000 /* reserved */
336
+ nop
337
+ 28: ldrsh x0, [x3, #BE(6)] /* SINT16 */
338
+ b 99f
339
+ 29: brk #1000 /* reserved */
340
+ nop
341
+ 30: ldrsw x0, [x3, #BE(4)] /* SINT32 */
342
+ nop
343
+ 31: /* reserved */
344
+ 99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS
345
+ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS)
346
+ cfi_restore (x29)
347
+ cfi_restore (x30)
348
+ ret
349
+ cfi_endproc
350
+
351
+ .globl CNAME(ffi_closure_SYSV)
352
+ #ifdef __ELF__
353
+ .type CNAME(ffi_closure_SYSV), #function
354
+ .hidden CNAME(ffi_closure_SYSV)
355
+ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV)
356
+ #endif
357
+
358
+ #if FFI_EXEC_TRAMPOLINE_TABLE
359
+
360
+ #ifdef __MACH__
361
+ #include <mach/vm_param.h>
362
+ .align PAGE_MAX_SHIFT
363
+ CNAME(ffi_closure_trampoline_table_page):
364
+ .rept PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE
365
+ adr x16, -PAGE_MAX_SIZE
366
+ ldp x17, x16, [x16]
367
+ br x16
368
+ nop /* each entry in the trampoline config page is 2*sizeof(void*) so the trampoline itself cannot be smaller that 16 bytes */
369
+ .endr
370
+
371
+ .globl CNAME(ffi_closure_trampoline_table_page)
372
+ #ifdef __ELF__
373
+ .type CNAME(ffi_closure_trampoline_table_page), #function
374
+ .hidden CNAME(ffi_closure_trampoline_table_page)
375
+ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page)
376
+ #endif
377
+ #endif
378
+
379
+ #endif /* FFI_EXEC_TRAMPOLINE_TABLE */
380
+
381
+ #ifdef FFI_GO_CLOSURES
382
+ .align 4
383
+ CNAME(ffi_go_closure_SYSV_V):
384
+ cfi_startproc
385
+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
386
+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
387
+ cfi_rel_offset (x29, 0)
388
+ cfi_rel_offset (x30, 8)
389
+
390
+ /* Save the argument passing vector registers. */
391
+ stp q0, q1, [sp, #16 + 0]
392
+ stp q2, q3, [sp, #16 + 32]
393
+ stp q4, q5, [sp, #16 + 64]
394
+ stp q6, q7, [sp, #16 + 96]
395
+ b 0f
396
+ cfi_endproc
397
+
398
+ .globl CNAME(ffi_go_closure_SYSV_V)
399
+ #ifdef __ELF__
400
+ .type CNAME(ffi_go_closure_SYSV_V), #function
401
+ .hidden CNAME(ffi_go_closure_SYSV_V)
402
+ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V)
403
+ #endif
404
+
405
+ .align 4
406
+ cfi_startproc
407
+ CNAME(ffi_go_closure_SYSV):
408
+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]!
409
+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
410
+ cfi_rel_offset (x29, 0)
411
+ cfi_rel_offset (x30, 8)
412
+ 0:
413
+ mov x29, sp
414
+
415
+ /* Save the argument passing core registers. */
416
+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0]
417
+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16]
418
+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32]
419
+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48]
420
+
421
+ /* Load ffi_closure_inner arguments. */
422
+ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */
423
+ mov x2, x18 /* load user_data */
424
+ b .Ldo_closure
425
+ cfi_endproc
426
+
427
+ .globl CNAME(ffi_go_closure_SYSV)
428
+ #ifdef __ELF__
429
+ .type CNAME(ffi_go_closure_SYSV), #function
430
+ .hidden CNAME(ffi_go_closure_SYSV)
431
+ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV)
432
+ #endif
433
+ #endif /* FFI_GO_CLOSURES */
434
+
435
+ #if defined __ELF__ && defined __linux__
436
+ .section .note.GNU-stack,"",%progbits
437
+ #endif
438
+