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
@@ -27,105 +27,176 @@
27
27
  #define LIBFFI_ASM
28
28
  #include <fficonfig.h>
29
29
  #include <ffi.h>
30
+ #include "internal.h"
30
31
 
31
32
  #ifdef SPARC64
32
- /* Only compile this in for 64bit builds, because otherwise the object file
33
- will have inproper architecture due to used instructions. */
34
33
 
35
- #define STACKFRAME 128 /* Minimum stack framesize for SPARC */
36
- #define STACK_BIAS 2047
37
- #define ARGS (128) /* Offset of register area in frame */
38
-
39
- .text
40
- .align 8
41
- .globl ffi_call_v9
42
- .globl _ffi_call_v9
43
-
44
- ffi_call_v9:
45
- _ffi_call_v9:
46
- .LLFB1:
47
- save %sp, -STACKFRAME, %sp
48
- .LLCFI0:
49
-
50
- sub %sp, %i2, %sp ! alloca() space in stack for frame to set up
51
- add %sp, STACKFRAME+STACK_BIAS, %l0 ! %l0 has start of
52
- ! frame to set up
53
-
54
- mov %l0, %o0 ! call routine to set up frame
55
- call %i0
56
- mov %i1, %o1 ! (delay)
57
- brz,pt %o0, 1f
58
- ldx [%l0+ARGS], %o0 ! call foreign function
59
-
60
- ldd [%l0+ARGS], %f0
61
- ldd [%l0+ARGS+8], %f2
62
- ldd [%l0+ARGS+16], %f4
63
- ldd [%l0+ARGS+24], %f6
64
- ldd [%l0+ARGS+32], %f8
65
- ldd [%l0+ARGS+40], %f10
66
- ldd [%l0+ARGS+48], %f12
67
- ldd [%l0+ARGS+56], %f14
68
- ldd [%l0+ARGS+64], %f16
69
- ldd [%l0+ARGS+72], %f18
70
- ldd [%l0+ARGS+80], %f20
71
- ldd [%l0+ARGS+88], %f22
72
- ldd [%l0+ARGS+96], %f24
73
- ldd [%l0+ARGS+104], %f26
74
- ldd [%l0+ARGS+112], %f28
75
- ldd [%l0+ARGS+120], %f30
76
-
77
- 1: ldx [%l0+ARGS+8], %o1
78
- ldx [%l0+ARGS+16], %o2
79
- ldx [%l0+ARGS+24], %o3
80
- ldx [%l0+ARGS+32], %o4
81
- ldx [%l0+ARGS+40], %o5
82
- call %i5
83
- sub %l0, STACK_BIAS, %sp ! (delay) switch to frame
84
-
85
- ! If the return value pointer is NULL, assume no return value.
86
- brz,pn %i4, done
87
- nop
34
+ #define C2(X, Y) X ## Y
35
+ #define C1(X, Y) C2(X, Y)
88
36
 
89
- cmp %i3, FFI_TYPE_INT
90
- be,a,pt %icc, done
91
- stx %o0, [%i4+0] ! (delay)
37
+ #ifdef __USER_LABEL_PREFIX__
38
+ # define C(Y) C1(__USER_LABEL_PREFIX__, Y)
39
+ #else
40
+ # define C(Y) Y
41
+ #endif
42
+ #define L(Y) C1(.L, Y)
92
43
 
93
- cmp %i3, FFI_TYPE_FLOAT
94
- be,a,pn %icc, done
95
- st %f0, [%i4+0] ! (delay)
44
+ #if defined(__sun__) && defined(__svr4__)
45
+ # define E(INDEX) .align 16
46
+ #else
47
+ # define E(INDEX) .align 16; .org 2b + INDEX * 16
48
+ #endif
96
49
 
97
- cmp %i3, FFI_TYPE_DOUBLE
98
- be,a,pn %icc, done
99
- std %f0, [%i4+0] ! (delay)
50
+ #define STACK_BIAS 2047
100
51
 
101
- cmp %i3, FFI_TYPE_STRUCT
102
- be,pn %icc, dostruct
52
+ .text
53
+ .align 8
54
+ .globl C(ffi_call_v9)
55
+ .type C(ffi_call_v9),#function
56
+ FFI_HIDDEN(C(ffi_call_v9))
57
+
58
+ C(ffi_call_v9):
59
+ .LUW0:
60
+ save %sp, %o4, %sp
61
+ .LUW1:
62
+ mov %i0, %o0 ! copy cif
63
+ add %sp, STACK_BIAS+128+48, %o1 ! load args area
64
+ mov %i2, %o2 ! copy rvalue
65
+ call C(ffi_prep_args_v9)
66
+ mov %i3, %o3 ! copy avalue
67
+
68
+ andcc %o0, SPARC_FLAG_FP_ARGS, %g0 ! need fp regs?
69
+ add %sp, 48, %sp ! deallocate prep frame
70
+ be,pt %xcc, 1f
71
+ mov %o0, %l0 ! save flags
72
+
73
+ ldd [%sp+STACK_BIAS+128], %f0 ! load all fp arg regs
74
+ ldd [%sp+STACK_BIAS+128+8], %f2
75
+ ldd [%sp+STACK_BIAS+128+16], %f4
76
+ ldd [%sp+STACK_BIAS+128+24], %f6
77
+ ldd [%sp+STACK_BIAS+128+32], %f8
78
+ ldd [%sp+STACK_BIAS+128+40], %f10
79
+ ldd [%sp+STACK_BIAS+128+48], %f12
80
+ ldd [%sp+STACK_BIAS+128+56], %f14
81
+ ldd [%sp+STACK_BIAS+128+64], %f16
82
+ ldd [%sp+STACK_BIAS+128+72], %f18
83
+ ldd [%sp+STACK_BIAS+128+80], %f20
84
+ ldd [%sp+STACK_BIAS+128+88], %f22
85
+ ldd [%sp+STACK_BIAS+128+96], %f24
86
+ ldd [%sp+STACK_BIAS+128+104], %f26
87
+ ldd [%sp+STACK_BIAS+128+112], %f28
88
+ ldd [%sp+STACK_BIAS+128+120], %f30
89
+
90
+ 1: ldx [%sp+STACK_BIAS+128], %o0 ! load all int arg regs
91
+ ldx [%sp+STACK_BIAS+128+8], %o1
92
+ ldx [%sp+STACK_BIAS+128+16], %o2
93
+ ldx [%sp+STACK_BIAS+128+24], %o3
94
+ ldx [%sp+STACK_BIAS+128+32], %o4
95
+ ldx [%sp+STACK_BIAS+128+40], %o5
96
+ call %i1
97
+ mov %i5, %g5 ! load static chain
98
+
99
+ 0: call 1f ! load pc in %o7
100
+ and %l0, SPARC_FLAG_RET_MASK, %l1
101
+ 1: sll %l1, 4, %l1
102
+ add %o7, %l1, %o7 ! o7 = 0b + ret_type*16
103
+ jmp %o7+(2f-0b)
104
+ nop
103
105
 
104
- cmp %i3, FFI_TYPE_LONGDOUBLE
105
- bne,pt %icc, done
106
+ .align 16
107
+ 2:
108
+ E(SPARC_RET_VOID)
109
+ return %i7+8
110
+ nop
111
+ E(SPARC_RET_STRUCT)
112
+ add %sp, STACK_BIAS-64+128+48, %l2
113
+ sub %sp, 64, %sp
114
+ b 8f
115
+ stx %o0, [%l2]
116
+ E(SPARC_RET_UINT8)
117
+ and %o0, 0xff, %i0
118
+ return %i7+8
119
+ stx %o0, [%o2]
120
+ E(SPARC_RET_SINT8)
121
+ sll %o0, 24, %o0
122
+ sra %o0, 24, %i0
123
+ return %i7+8
124
+ stx %o0, [%o2]
125
+ E(SPARC_RET_UINT16)
126
+ sll %o0, 16, %o0
127
+ srl %o0, 16, %i0
128
+ return %i7+8
129
+ stx %o0, [%o2]
130
+ E(SPARC_RET_SINT16)
131
+ sll %o0, 16, %o0
132
+ sra %o0, 16, %i0
133
+ return %i7+8
134
+ stx %o0, [%o2]
135
+ E(SPARC_RET_UINT32)
136
+ srl %o0, 0, %i0
137
+ return %i7+8
138
+ stx %o0, [%o2]
139
+ E(SP_V9_RET_SINT32)
140
+ sra %o0, 0, %i0
141
+ return %i7+8
142
+ stx %o0, [%o2]
143
+ E(SPARC_RET_INT64)
144
+ stx %o0, [%i2]
145
+ return %i7+8
146
+ nop
147
+ E(SPARC_RET_INT128)
148
+ stx %o0, [%i2]
149
+ stx %o1, [%i2+8]
150
+ return %i7+8
106
151
  nop
107
- std %f0, [%i4+0]
108
- std %f2, [%i4+8]
109
-
110
- done: ret
111
- restore
112
-
113
- dostruct:
114
- /* This will not work correctly for unions. */
115
- stx %o0, [%i4+0]
116
- stx %o1, [%i4+8]
117
- stx %o2, [%i4+16]
118
- stx %o3, [%i4+24]
119
- std %f0, [%i4+32]
120
- std %f2, [%i4+40]
121
- std %f4, [%i4+48]
122
- std %f6, [%i4+56]
123
- ret
124
- restore
125
- .LLFE1:
126
-
127
- .ffi_call_v9_end:
128
- .size ffi_call_v9,.ffi_call_v9_end-ffi_call_v9
152
+ E(SPARC_RET_F_8)
153
+ st %f7, [%i2+7*4]
154
+ nop
155
+ st %f6, [%i2+6*4]
156
+ nop
157
+ E(SPARC_RET_F_6)
158
+ st %f5, [%i2+5*4]
159
+ nop
160
+ st %f4, [%i2+4*4]
161
+ nop
162
+ E(SPARC_RET_F_4)
163
+ std %f2, [%i2+2*4]
164
+ return %i7+8
165
+ std %f0, [%o2]
166
+ E(SPARC_RET_F_2)
167
+ return %i7+8
168
+ std %f0, [%o2]
169
+ E(SP_V9_RET_F_3)
170
+ st %f2, [%i2+2*4]
171
+ nop
172
+ st %f1, [%i2+1*4]
173
+ nop
174
+ E(SPARC_RET_F_1)
175
+ return %i7+8
176
+ st %f0, [%o2]
177
+
178
+ ! Finish the SPARC_RET_STRUCT sequence.
179
+ .align 8
180
+ 8: stx %o1, [%l2+8]
181
+ stx %o2, [%l2+16]
182
+ stx %o3, [%l2+24]
183
+ std %f0, [%l2+32]
184
+ std %f2, [%l2+40]
185
+ std %f4, [%l2+48]
186
+ std %f6, [%l2+56]
187
+
188
+ ! Copy the structure into place.
189
+ srl %l0, SPARC_SIZEMASK_SHIFT, %o0 ! load size_mask
190
+ mov %i2, %o1 ! load dst
191
+ mov %l2, %o2 ! load src_gp
192
+ call C(ffi_struct_float_copy)
193
+ add %l2, 32, %o3 ! load src_fp
194
+
195
+ return %i7+8
196
+ nop
197
+
198
+ .LUW2:
199
+ .size C(ffi_call_v9), . - C(ffi_call_v9)
129
200
 
130
201
 
131
202
  #undef STACKFRAME
@@ -138,15 +209,36 @@ dostruct:
138
209
 
139
210
  Receives the closure argument in %g1. */
140
211
 
141
- .text
142
212
  .align 8
143
- .globl ffi_closure_v9
213
+ .globl C(ffi_go_closure_v9)
214
+ .type C(ffi_go_closure_v9),#function
215
+ FFI_HIDDEN(C(ffi_go_closure_v9))
144
216
 
145
- ffi_closure_v9:
146
- .LLFB2:
217
+ C(ffi_go_closure_v9):
218
+ .LUW3:
147
219
  save %sp, -STACKFRAME, %sp
148
- .LLCFI1:
220
+ .LUW4:
221
+ ldx [%g5+8], %o0
222
+ ldx [%g5+16], %o1
223
+ b 0f
224
+ mov %g5, %o2
225
+
226
+ .LUW5:
227
+ .size C(ffi_go_closure_v9), . - C(ffi_go_closure_v9)
149
228
 
229
+ .align 8
230
+ .globl C(ffi_closure_v9)
231
+ .type C(ffi_closure_v9),#function
232
+ FFI_HIDDEN(C(ffi_closure_v9))
233
+
234
+ C(ffi_closure_v9):
235
+ .LUW6:
236
+ save %sp, -STACKFRAME, %sp
237
+ .LUW7:
238
+ ldx [%g1+FFI_TRAMPOLINE_SIZE], %o0
239
+ ldx [%g1+FFI_TRAMPOLINE_SIZE+8], %o1
240
+ ldx [%g1+FFI_TRAMPOLINE_SIZE+16], %o2
241
+ 0:
150
242
  ! Store all of the potential argument registers in va_list format.
151
243
  stx %i0, [FP+128+0]
152
244
  stx %i1, [FP+128+8]
@@ -174,134 +266,175 @@ ffi_closure_v9:
174
266
  std %f30, [FP-8]
175
267
 
176
268
  ! Call ffi_closure_sparc_inner to do the bulk of the work.
177
- mov %g1, %o0
178
- add %fp, STACK_BIAS-160, %o1
179
- add %fp, STACK_BIAS+128, %o2
180
- call ffi_closure_sparc_inner_v9
181
- add %fp, STACK_BIAS-128, %o3
182
-
183
- ! Load up the return value in the proper type.
184
- ! See ffi_prep_cif_machdep for the list of cases.
185
- cmp %o0, FFI_TYPE_VOID
186
- be,pn %icc, done1
187
-
188
- cmp %o0, FFI_TYPE_INT
189
- be,pn %icc, integer
190
-
191
- cmp %o0, FFI_TYPE_FLOAT
192
- be,a,pn %icc, done1
193
- ld [FP-160], %f0
194
-
195
- cmp %o0, FFI_TYPE_DOUBLE
196
- be,a,pn %icc, done1
197
- ldd [FP-160], %f0
198
-
199
- #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
200
- cmp %o0, FFI_TYPE_LONGDOUBLE
201
- be,a,pn %icc, longdouble1
202
- ldd [FP-160], %f0
203
- #endif
269
+ add %fp, STACK_BIAS-160, %o3
270
+ add %fp, STACK_BIAS+128, %o4
271
+ call C(ffi_closure_sparc_inner_v9)
272
+ add %fp, STACK_BIAS-128, %o5
273
+
274
+ 0: call 1f ! load pc in %o7
275
+ and %o0, SPARC_FLAG_RET_MASK, %o0
276
+ 1: sll %o0, 4, %o0 ! o2 = i2 * 16
277
+ add %o7, %o0, %o7 ! o7 = 0b + i2*16
278
+ jmp %o7+(2f-0b)
279
+ nop
204
280
 
205
- ! FFI_TYPE_STRUCT
206
- ldx [FP-152], %i1
207
- ldx [FP-144], %i2
208
- ldx [FP-136], %i3
281
+ ! Note that we cannot load the data in the delay slot of
282
+ ! the return insn because the data is in the stack frame
283
+ ! that is deallocated by the return.
284
+ .align 16
285
+ 2:
286
+ E(SPARC_RET_VOID)
287
+ return %i7+8
288
+ nop
289
+ E(SPARC_RET_STRUCT)
290
+ ldx [FP-160], %i0
209
291
  ldd [FP-160], %f0
210
- ldd [FP-152], %f2
211
- ldd [FP-144], %f4
212
- ldd [FP-136], %f6
213
-
214
- integer:
292
+ b 8f
293
+ ldx [FP-152], %i1
294
+ E(SPARC_RET_UINT8)
295
+ ldub [FP-160+7], %i0
296
+ return %i7+8
297
+ nop
298
+ E(SPARC_RET_SINT8)
299
+ ldsb [FP-160+7], %i0
300
+ return %i7+8
301
+ nop
302
+ E(SPARC_RET_UINT16)
303
+ lduh [FP-160+6], %i0
304
+ return %i7+8
305
+ nop
306
+ E(SPARC_RET_SINT16)
307
+ ldsh [FP-160+6], %i0
308
+ return %i7+8
309
+ nop
310
+ E(SPARC_RET_UINT32)
311
+ lduw [FP-160+4], %i0
312
+ return %i7+8
313
+ nop
314
+ E(SP_V9_RET_SINT32)
315
+ ldsw [FP-160+4], %i0
316
+ return %i7+8
317
+ nop
318
+ E(SPARC_RET_INT64)
215
319
  ldx [FP-160], %i0
320
+ return %i7+8
321
+ nop
322
+ E(SPARC_RET_INT128)
323
+ ldx [FP-160], %i0
324
+ ldx [FP-160+8], %i1
325
+ return %i7+8
326
+ nop
327
+ E(SPARC_RET_F_8)
328
+ ld [FP-160+7*4], %f7
329
+ nop
330
+ ld [FP-160+6*4], %f6
331
+ nop
332
+ E(SPARC_RET_F_6)
333
+ ld [FP-160+5*4], %f5
334
+ nop
335
+ ld [FP-160+4*4], %f4
336
+ nop
337
+ E(SPARC_RET_F_4)
338
+ ldd [FP-160], %f0
339
+ ldd [FP-160+8], %f2
340
+ return %i7+8
341
+ nop
342
+ E(SPARC_RET_F_2)
343
+ ldd [FP-160], %f0
344
+ return %i7+8
345
+ nop
346
+ E(SP_V9_RET_F_3)
347
+ ld [FP-160+2*4], %f2
348
+ nop
349
+ ld [FP-160+1*4], %f1
350
+ nop
351
+ E(SPARC_RET_F_1)
352
+ ld [FP-160], %f0
353
+ return %i7+8
354
+ nop
216
355
 
217
- done1:
218
- ret
219
- restore
220
-
221
- #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
222
- longdouble1:
223
- ldd [FP-152], %f2
224
- ret
225
- restore
226
- #endif
227
- .LLFE2:
356
+ ! Finish the SPARC_RET_STRUCT sequence.
357
+ .align 8
358
+ 8: ldd [FP-152], %f2
359
+ ldx [FP-144], %i2
360
+ ldd [FP-144], %f4
361
+ ldx [FP-136], %i3
362
+ ldd [FP-136], %f6
363
+ return %i7+8
364
+ nop
228
365
 
229
- .ffi_closure_v9_end:
230
- .size ffi_closure_v9,.ffi_closure_v9_end-ffi_closure_v9
366
+ .LUW8:
367
+ .size C(ffi_closure_v9), . - C(ffi_closure_v9)
231
368
 
232
369
  #ifdef HAVE_RO_EH_FRAME
233
- .section ".eh_frame",#alloc
234
- #else
235
- .section ".eh_frame",#alloc,#write
236
- #endif
237
- .LLframe1:
238
- .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry
239
- .LLSCIE1:
240
- .uaword 0x0 ! CIE Identifier Tag
241
- .byte 0x1 ! CIE Version
242
- .ascii "zR\0" ! CIE Augmentation
243
- .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor
244
- .byte 0x78 ! sleb128 -8; CIE Data Alignment Factor
245
- .byte 0xf ! CIE RA Column
246
- .byte 0x1 ! uleb128 0x1; Augmentation size
247
- #ifdef HAVE_AS_SPARC_UA_PCREL
248
- .byte 0x1b ! FDE Encoding (pcrel sdata4)
370
+ .section ".eh_frame",#alloc
249
371
  #else
250
- .byte 0x50 ! FDE Encoding (aligned absolute)
372
+ .section ".eh_frame",#alloc,#write
251
373
  #endif
252
- .byte 0xc ! DW_CFA_def_cfa
253
- .byte 0xe ! uleb128 0xe
254
- .byte 0xff,0xf ! uleb128 0x7ff
255
- .align 8
256
- .LLECIE1:
257
- .LLSFDE1:
258
- .uaword .LLEFDE1-.LLASFDE1 ! FDE Length
259
- .LLASFDE1:
260
- .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset
374
+
261
375
  #ifdef HAVE_AS_SPARC_UA_PCREL
262
- .uaword %r_disp32(.LLFB1)
263
- .uaword .LLFE1-.LLFB1 ! FDE address range
376
+ # define FDE_RANGE(B, E) .long %r_disp32(B), E - B
264
377
  #else
265
- .align 8
266
- .xword .LLFB1
267
- .uaxword .LLFE1-.LLFB1 ! FDE address range
378
+ # define FDE_RANGE(B, E) .align 8; .xword B, E - B
268
379
  #endif
269
- .byte 0x0 ! uleb128 0x0; Augmentation size
270
- .byte 0x4 ! DW_CFA_advance_loc4
271
- .uaword .LLCFI0-.LLFB1
272
- .byte 0xd ! DW_CFA_def_cfa_register
273
- .byte 0x1e ! uleb128 0x1e
274
- .byte 0x2d ! DW_CFA_GNU_window_save
275
- .byte 0x9 ! DW_CFA_register
276
- .byte 0xf ! uleb128 0xf
277
- .byte 0x1f ! uleb128 0x1f
380
+
278
381
  .align 8
279
- .LLEFDE1:
280
- .LLSFDE2:
281
- .uaword .LLEFDE2-.LLASFDE2 ! FDE Length
282
- .LLASFDE2:
283
- .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset
382
+ .LCIE:
383
+ .long .LECIE - .LSCIE ! CIE Length
384
+ .LSCIE:
385
+ .long 0 ! CIE Identifier Tag
386
+ .byte 1 ! CIE Version
387
+ .ascii "zR\0" ! CIE Augmentation
388
+ .byte 4 ! CIE Code Alignment Factor
389
+ .byte 0x78 ! CIE Data Alignment Factor
390
+ .byte 15 ! CIE RA Column
391
+ .byte 1 ! Augmentation size
284
392
  #ifdef HAVE_AS_SPARC_UA_PCREL
285
- .uaword %r_disp32(.LLFB2)
286
- .uaword .LLFE2-.LLFB2 ! FDE address range
393
+ .byte 0x1b ! FDE Encoding (pcrel sdata4)
287
394
  #else
288
- .align 8
289
- .xword .LLFB2
290
- .uaxword .LLFE2-.LLFB2 ! FDE address range
291
- #endif
292
- .byte 0x0 ! uleb128 0x0; Augmentation size
293
- .byte 0x4 ! DW_CFA_advance_loc4
294
- .uaword .LLCFI1-.LLFB2
295
- .byte 0xd ! DW_CFA_def_cfa_register
296
- .byte 0x1e ! uleb128 0x1e
297
- .byte 0x2d ! DW_CFA_GNU_window_save
298
- .byte 0x9 ! DW_CFA_register
299
- .byte 0xf ! uleb128 0xf
300
- .byte 0x1f ! uleb128 0x1f
301
- .align 8
302
- .LLEFDE2:
395
+ .byte 0x50 ! FDE Encoding (aligned absolute)
303
396
  #endif
304
-
397
+ .byte 0xc, 14, 0xff, 0xf ! DW_CFA_def_cfa, %o6, offset 0x7ff
398
+ .align 8
399
+ .LECIE:
400
+
401
+ .long .LEFDE1 - .LSFDE1 ! FDE Length
402
+ .LSFDE1:
403
+ .long .LSFDE1 - .LCIE ! FDE CIE offset
404
+ FDE_RANGE(.LUW0, .LUW2)
405
+ .byte 0 ! Augmentation size
406
+ .byte 0x40+1 ! DW_CFA_advance_loc 4
407
+ .byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
408
+ .byte 0x2d ! DW_CFA_GNU_window_save
409
+ .byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
410
+ .align 8
411
+ .LEFDE1:
412
+
413
+ .long .LEFDE2 - .LSFDE2 ! FDE Length
414
+ .LSFDE2:
415
+ .long .LSFDE2 - .LCIE ! FDE CIE offset
416
+ FDE_RANGE(.LUW3, .LUW5)
417
+ .byte 0 ! Augmentation size
418
+ .byte 0x40+1 ! DW_CFA_advance_loc 4
419
+ .byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
420
+ .byte 0x2d ! DW_CFA_GNU_window_save
421
+ .byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
422
+ .align 8
423
+ .LEFDE2:
424
+
425
+ .long .LEFDE3 - .LSFDE3 ! FDE Length
426
+ .LSFDE3:
427
+ .long .LSFDE3 - .LCIE ! FDE CIE offset
428
+ FDE_RANGE(.LUW6, .LUW8)
429
+ .byte 0 ! Augmentation size
430
+ .byte 0x40+1 ! DW_CFA_advance_loc 4
431
+ .byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
432
+ .byte 0x2d ! DW_CFA_GNU_window_save
433
+ .byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
434
+ .align 8
435
+ .LEFDE3:
436
+
437
+ #endif /* SPARC64 */
305
438
  #ifdef __linux__
306
439
  .section .note.GNU-stack,"",@progbits
307
440
  #endif