ffi 1.9.18 → 1.9.21

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

Potentially problematic release.


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

Files changed (366) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/Rakefile +14 -3
  4. data/ext/ffi_c/AbstractMemory.c +6 -1
  5. data/ext/ffi_c/Platform.c +10 -2
  6. data/ext/ffi_c/extconf.rb +7 -2
  7. data/ext/ffi_c/libffi.bsd.mk +9 -3
  8. data/ext/ffi_c/libffi.darwin.mk +14 -4
  9. data/ext/ffi_c/libffi.gnu.mk +2 -1
  10. data/ext/ffi_c/libffi.mk +9 -4
  11. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  12. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  13. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  14. data/ext/ffi_c/libffi/LICENSE +1 -1
  15. data/ext/ffi_c/libffi/Makefile.am +166 -157
  16. data/ext/ffi_c/libffi/README +164 -52
  17. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  18. data/ext/ffi_c/libffi/autogen.sh +2 -0
  19. data/ext/ffi_c/libffi/configure.ac +148 -256
  20. data/ext/ffi_c/libffi/configure.host +265 -4
  21. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  22. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  23. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  24. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  25. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  26. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  27. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  28. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  29. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  30. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  31. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  32. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  33. data/ext/ffi_c/libffi/libtool-version +1 -1
  34. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  35. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  36. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  37. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  38. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  39. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  40. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  41. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  42. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  43. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  44. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  45. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  46. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  47. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  48. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  49. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  50. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  51. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  52. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  53. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  54. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  55. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  56. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  57. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  58. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  59. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  60. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  61. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  62. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  63. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  64. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  65. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  66. data/ext/ffi_c/libffi/src/closures.c +319 -44
  67. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  68. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  69. data/ext/ffi_c/libffi/src/debug.c +6 -1
  70. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  71. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  72. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  73. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  74. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  75. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  76. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  77. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  78. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  79. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  80. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  81. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  82. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  83. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  84. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  85. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  86. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  87. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  88. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  90. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  91. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  92. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  93. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  94. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  95. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  96. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  97. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  98. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  99. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  100. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  101. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  102. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  103. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  104. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  105. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  106. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  107. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  108. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  109. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  110. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  111. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  112. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  113. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  114. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  115. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  116. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  117. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  118. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  119. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  120. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  121. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  122. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  123. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  124. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  125. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  126. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  127. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  128. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  129. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  130. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  131. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  132. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  133. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  134. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  135. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  136. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  137. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  138. data/ext/ffi_c/libffi/src/types.c +43 -14
  139. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  140. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  141. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  143. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  144. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  145. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  146. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  147. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  148. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  149. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  150. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  151. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  152. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  153. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  154. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  155. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  156. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  157. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  158. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  159. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  262. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  263. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  284. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  315. data/ffi.gemspec +2 -2
  316. data/lib/ffi/enum.rb +124 -0
  317. data/lib/ffi/library.rb +65 -13
  318. data/lib/ffi/platform.rb +7 -2
  319. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  320. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  321. data/lib/ffi/pointer.rb +1 -0
  322. data/lib/ffi/struct.rb +0 -2
  323. data/lib/ffi/version.rb +1 -1
  324. data/spec/ffi/bitmask_spec.rb +575 -0
  325. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  326. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  327. data/spec/ffi/struct_spec.rb +0 -4
  328. metadata +143 -51
  329. data/ext/ffi_c/libffi/Makefile.in +0 -1820
  330. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  331. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  332. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  333. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  334. data/ext/ffi_c/libffi/compile +0 -143
  335. data/ext/ffi_c/libffi/config.guess +0 -1501
  336. data/ext/ffi_c/libffi/config.sub +0 -1705
  337. data/ext/ffi_c/libffi/configure +0 -17191
  338. data/ext/ffi_c/libffi/depcomp +0 -630
  339. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  340. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  341. data/ext/ffi_c/libffi/fficonfig.h.in +0 -199
  342. data/ext/ffi_c/libffi/include/Makefile.in +0 -487
  343. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  344. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  345. data/ext/ffi_c/libffi/install-sh +0 -520
  346. data/ext/ffi_c/libffi/ltmain.sh +0 -9636
  347. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  348. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  349. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  350. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  351. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  352. data/ext/ffi_c/libffi/man/Makefile.in +0 -466
  353. data/ext/ffi_c/libffi/mdate-sh +0 -201
  354. data/ext/ffi_c/libffi/missing +0 -376
  355. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  356. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  357. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  358. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  359. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  360. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  361. data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -500
  362. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  365. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  366. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
@@ -1,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 Alpha.
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;
@@ -39,9 +44,13 @@ typedef enum ffi_abi {
39
44
  } ffi_abi;
40
45
  #endif
41
46
 
47
+ #define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION
48
+ #define FFI_TARGET_HAS_COMPLEX_TYPE
49
+
42
50
  /* ---- Definitions for closures ----------------------------------------- */
43
51
 
44
52
  #define FFI_CLOSURES 1
53
+ #define FFI_GO_CLOSURES 1
45
54
  #define FFI_TRAMPOLINE_SIZE 24
46
55
  #define FFI_NATIVE_RAW_API 0
47
56
 
@@ -0,0 +1,23 @@
1
+ #define ALPHA_ST_VOID 0
2
+ #define ALPHA_ST_INT 1
3
+ #define ALPHA_ST_FLOAT 2
4
+ #define ALPHA_ST_DOUBLE 3
5
+ #define ALPHA_ST_CPLXF 4
6
+ #define ALPHA_ST_CPLXD 5
7
+
8
+ #define ALPHA_LD_VOID 0
9
+ #define ALPHA_LD_INT64 1
10
+ #define ALPHA_LD_INT32 2
11
+ #define ALPHA_LD_UINT16 3
12
+ #define ALPHA_LD_SINT16 4
13
+ #define ALPHA_LD_UINT8 5
14
+ #define ALPHA_LD_SINT8 6
15
+ #define ALPHA_LD_FLOAT 7
16
+ #define ALPHA_LD_DOUBLE 8
17
+ #define ALPHA_LD_CPLXF 9
18
+ #define ALPHA_LD_CPLXD 10
19
+
20
+ #define ALPHA_ST_SHIFT 0
21
+ #define ALPHA_LD_SHIFT 8
22
+ #define ALPHA_RET_IN_MEM 0x10000
23
+ #define ALPHA_FLAGS(S, L) (((L) << ALPHA_LD_SHIFT) | (S))
@@ -1,7 +1,7 @@
1
1
  /* -----------------------------------------------------------------------
2
- osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat
3
-
4
- Alpha/OSF Foreign Function Interface
2
+ osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011, 2014 Red Hat
3
+
4
+ Alpha/OSF Foreign Function Interface
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining
7
7
  a copy of this software and associated documentation files (the
@@ -24,40 +24,49 @@
24
24
  DEALINGS IN THE SOFTWARE.
25
25
  ----------------------------------------------------------------------- */
26
26
 
27
- #define LIBFFI_ASM
27
+ #define LIBFFI_ASM
28
28
  #include <fficonfig.h>
29
29
  #include <ffi.h>
30
+ #include <ffi_cfi.h>
31
+ #include "internal.h"
30
32
 
31
33
  .arch ev6
32
34
  .text
33
35
 
34
- /* ffi_call_osf (void *args, unsigned long bytes, unsigned flags,
35
- void *raddr, void (*fnaddr)(void));
36
+ /* Aid in building a direct addressed jump table, 4 insns per entry. */
37
+ .macro E index
38
+ .align 4
39
+ .org 99b + \index * 16
40
+ .endm
41
+
42
+ /* ffi_call_osf (void *stack, void *frame, unsigned flags,
43
+ void *raddr, void (*fnaddr)(void), void *closure)
36
44
 
37
- Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
45
+ Bit o trickiness here -- FRAME is the base of the stack frame
38
46
  for this function. This has been allocated by ffi_call. We also
39
47
  deallocate some of the stack that has been alloca'd. */
40
48
 
41
- .align 3
49
+ .align 4
42
50
  .globl ffi_call_osf
43
51
  .ent ffi_call_osf
44
52
  FFI_HIDDEN(ffi_call_osf)
45
53
 
46
54
  ffi_call_osf:
47
- .frame $15, 32, $26, 0
48
- .mask 0x4008000, -32
49
- $LFB1:
50
- addq $16,$17,$1
55
+ cfi_startproc
56
+ cfi_def_cfa($17, 32)
51
57
  mov $16, $30
52
- stq $26, 0($1)
53
- stq $15, 8($1)
54
- stq $18, 16($1)
55
- mov $1, $15
56
- $LCFI1:
58
+ stq $26, 0($17)
59
+ stq $15, 8($17)
60
+ mov $17, $15
57
61
  .prologue 0
62
+ cfi_def_cfa_register($15)
63
+ cfi_rel_offset($26, 0)
64
+ cfi_rel_offset($15, 8)
58
65
 
59
- stq $19, 24($1)
60
- mov $20, $27
66
+ stq $18, 16($17) # save flags into frame
67
+ stq $19, 24($17) # save rvalue into frame
68
+ mov $20, $27 # fn into place for call
69
+ mov $21, $1 # closure into static chain
61
70
 
62
71
  # Load up all of the (potential) argument registers.
63
72
  ldq $16, 0($30)
@@ -77,311 +86,197 @@ $LCFI1:
77
86
  lda $30, 48($30)
78
87
 
79
88
  jsr $26, ($27), 0
80
- ldgp $29, 0($26)
81
-
82
- # If the return value pointer is NULL, assume no return value.
83
- ldq $19, 24($15)
84
- ldq $18, 16($15)
89
+ 0:
90
+ ldah $29, 0($26) !gpdisp!1
91
+ ldq $2, 24($15) # reload rvalue
92
+ lda $29, 0($29) !gpdisp!1
93
+ ldq $3, 16($15) # reload flags
94
+ lda $1, 99f-0b($26)
85
95
  ldq $26, 0($15)
86
- $LCFI2:
87
- beq $19, $noretval
88
-
89
- # Store the return value out in the proper type.
90
- cmpeq $18, FFI_TYPE_INT, $1
91
- bne $1, $retint
92
- cmpeq $18, FFI_TYPE_FLOAT, $2
93
- bne $2, $retfloat
94
- cmpeq $18, FFI_TYPE_DOUBLE, $3
95
- bne $3, $retdouble
96
-
97
- .align 3
98
- $noretval:
99
96
  ldq $15, 8($15)
100
- ret
97
+ cfi_restore($26)
98
+ cfi_restore($15)
99
+ cfi_def_cfa($sp, 0)
100
+ cmoveq $2, ALPHA_ST_VOID, $3 # mash null rvalue to void
101
+ addq $3, $3, $3
102
+ s8addq $3, $1, $1 # 99f + stcode * 16
103
+ jmp $31, ($1), $st_int
101
104
 
102
105
  .align 4
103
- $retint:
104
- stq $0, 0($19)
105
- nop
106
- ldq $15, 8($15)
106
+ 99:
107
+ E ALPHA_ST_VOID
107
108
  ret
108
-
109
- .align 4
110
- $retfloat:
111
- sts $f0, 0($19)
112
- nop
113
- ldq $15, 8($15)
109
+ E ALPHA_ST_INT
110
+ $st_int:
111
+ stq $0, 0($2)
114
112
  ret
115
-
116
- .align 4
117
- $retdouble:
118
- stt $f0, 0($19)
119
- nop
120
- ldq $15, 8($15)
113
+ E ALPHA_ST_FLOAT
114
+ sts $f0, 0($2)
115
+ ret
116
+ E ALPHA_ST_DOUBLE
117
+ stt $f0, 0($2)
118
+ ret
119
+ E ALPHA_ST_CPLXF
120
+ sts $f0, 0($2)
121
+ sts $f1, 4($2)
122
+ ret
123
+ E ALPHA_ST_CPLXD
124
+ stt $f0, 0($2)
125
+ stt $f1, 8($2)
121
126
  ret
122
- $LFE1:
123
127
 
128
+ cfi_endproc
124
129
  .end ffi_call_osf
125
130
 
126
131
  /* ffi_closure_osf(...)
127
132
 
128
133
  Receives the closure argument in $1. */
129
134
 
130
- .align 3
135
+ #define CLOSURE_FS (16*8)
136
+
137
+ .align 4
138
+ .globl ffi_go_closure_osf
139
+ .ent ffi_go_closure_osf
140
+ FFI_HIDDEN(ffi_go_closure_osf)
141
+
142
+ ffi_go_closure_osf:
143
+ cfi_startproc
144
+ ldgp $29, 0($27)
145
+ subq $30, CLOSURE_FS, $30
146
+ cfi_adjust_cfa_offset(CLOSURE_FS)
147
+ stq $26, 0($30)
148
+ .prologue 1
149
+ cfi_rel_offset($26, 0)
150
+
151
+ stq $16, 10*8($30)
152
+ stq $17, 11*8($30)
153
+ stq $18, 12*8($30)
154
+
155
+ ldq $16, 8($1) # load cif
156
+ ldq $17, 16($1) # load fun
157
+ mov $1, $18 # closure is user_data
158
+ br $do_closure
159
+
160
+ cfi_endproc
161
+ .end ffi_go_closure_osf
162
+
163
+ .align 4
131
164
  .globl ffi_closure_osf
132
165
  .ent ffi_closure_osf
133
166
  FFI_HIDDEN(ffi_closure_osf)
134
167
 
135
168
  ffi_closure_osf:
136
- .frame $30, 16*8, $26, 0
137
- .mask 0x4000000, -16*8
138
- $LFB2:
169
+ cfi_startproc
139
170
  ldgp $29, 0($27)
140
- subq $30, 16*8, $30
141
- $LCFI5:
171
+ subq $30, CLOSURE_FS, $30
172
+ cfi_adjust_cfa_offset(CLOSURE_FS)
142
173
  stq $26, 0($30)
143
- $LCFI6:
144
174
  .prologue 1
175
+ cfi_rel_offset($26, 0)
145
176
 
146
177
  # Store all of the potential argument registers in va_list format.
147
- stt $f16, 4*8($30)
148
- stt $f17, 5*8($30)
149
- stt $f18, 6*8($30)
150
- stt $f19, 7*8($30)
151
- stt $f20, 8*8($30)
152
- stt $f21, 9*8($30)
153
178
  stq $16, 10*8($30)
154
179
  stq $17, 11*8($30)
155
180
  stq $18, 12*8($30)
181
+
182
+ ldq $16, 24($1) # load cif
183
+ ldq $17, 32($1) # load fun
184
+ ldq $18, 40($1) # load user_data
185
+
186
+ $do_closure:
156
187
  stq $19, 13*8($30)
157
188
  stq $20, 14*8($30)
158
189
  stq $21, 15*8($30)
190
+ stt $f16, 4*8($30)
191
+ stt $f17, 5*8($30)
192
+ stt $f18, 6*8($30)
193
+ stt $f19, 7*8($30)
194
+ stt $f20, 8*8($30)
195
+ stt $f21, 9*8($30)
159
196
 
160
197
  # Call ffi_closure_osf_inner to do the bulk of the work.
161
- mov $1, $16
162
- lda $17, 2*8($30)
163
- lda $18, 10*8($30)
198
+ lda $19, 2*8($30)
199
+ lda $20, 10*8($30)
164
200
  jsr $26, ffi_closure_osf_inner
165
- ldgp $29, 0($26)
201
+ 0:
202
+ ldah $29, 0($26) !gpdisp!2
203
+ lda $2, 99f-0b($26)
204
+ s4addq $0, 0, $1 # ldcode * 4
205
+ ldq $0, 16($30) # preload return value
206
+ s4addq $1, $2, $1 # 99f + ldcode * 16
207
+ lda $29, 0($29) !gpdisp!2
166
208
  ldq $26, 0($30)
167
-
168
- # Load up the return value in the proper type.
169
- lda $1, $load_table
170
- s4addq $0, $1, $1
171
- ldl $1, 0($1)
172
- addq $1, $29, $1
209
+ cfi_restore($26)
173
210
  jmp $31, ($1), $load_32
174
211
 
175
- .align 4
176
- $load_none:
177
- addq $30, 16*8, $30
212
+ .macro epilogue
213
+ addq $30, CLOSURE_FS, $30
214
+ cfi_adjust_cfa_offset(-CLOSURE_FS)
178
215
  ret
216
+ .align 4
217
+ cfi_adjust_cfa_offset(CLOSURE_FS)
218
+ .endm
179
219
 
180
220
  .align 4
181
- $load_float:
182
- lds $f0, 16($30)
183
- nop
184
- addq $30, 16*8, $30
185
- ret
221
+ 99:
222
+ E ALPHA_LD_VOID
223
+ epilogue
186
224
 
187
- .align 4
188
- $load_double:
189
- ldt $f0, 16($30)
190
- nop
191
- addq $30, 16*8, $30
192
- ret
225
+ E ALPHA_LD_INT64
226
+ epilogue
193
227
 
194
- .align 4
195
- $load_u8:
228
+ E ALPHA_LD_INT32
229
+ $load_32:
230
+ sextl $0, $0
231
+ epilogue
232
+
233
+ E ALPHA_LD_UINT16
234
+ zapnot $0, 3, $0
235
+ epilogue
236
+
237
+ E ALPHA_LD_SINT16
196
238
  #ifdef __alpha_bwx__
197
- ldbu $0, 16($30)
198
- nop
239
+ sextw $0, $0
199
240
  #else
200
- ldq $0, 16($30)
201
- and $0, 255, $0
241
+ sll $0, 48, $0
242
+ sra $0, 48, $0
202
243
  #endif
203
- addq $30, 16*8, $30
204
- ret
244
+ epilogue
205
245
 
206
- .align 4
207
- $load_s8:
246
+ E ALPHA_LD_UINT8
247
+ and $0, 0xff, $0
248
+ epilogue
249
+
250
+ E ALPHA_LD_SINT8
208
251
  #ifdef __alpha_bwx__
209
- ldbu $0, 16($30)
210
252
  sextb $0, $0
211
253
  #else
212
- ldq $0, 16($30)
213
254
  sll $0, 56, $0
214
255
  sra $0, 56, $0
215
256
  #endif
216
- addq $30, 16*8, $30
217
- ret
257
+ epilogue
218
258
 
219
- .align 4
220
- $load_u16:
221
- #ifdef __alpha_bwx__
222
- ldwu $0, 16($30)
223
- nop
224
- #else
225
- ldq $0, 16($30)
226
- zapnot $0, 3, $0
227
- #endif
228
- addq $30, 16*8, $30
229
- ret
259
+ E ALPHA_LD_FLOAT
260
+ lds $f0, 16($sp)
261
+ epilogue
230
262
 
231
- .align 4
232
- $load_s16:
233
- #ifdef __alpha_bwx__
234
- ldwu $0, 16($30)
235
- sextw $0, $0
236
- #else
237
- ldq $0, 16($30)
238
- sll $0, 48, $0
239
- sra $0, 48, $0
240
- #endif
241
- addq $30, 16*8, $30
242
- ret
263
+ E ALPHA_LD_DOUBLE
264
+ ldt $f0, 16($sp)
265
+ epilogue
243
266
 
244
- .align 4
245
- $load_32:
246
- ldl $0, 16($30)
247
- nop
248
- addq $30, 16*8, $30
249
- ret
267
+ E ALPHA_LD_CPLXF
268
+ lds $f0, 16($sp)
269
+ lds $f1, 20($sp)
270
+ epilogue
250
271
 
251
- .align 4
252
- $load_64:
253
- ldq $0, 16($30)
254
- nop
255
- addq $30, 16*8, $30
256
- ret
257
- $LFE2:
272
+ E ALPHA_LD_CPLXD
273
+ ldt $f0, 16($sp)
274
+ ldt $f1, 24($sp)
275
+ epilogue
258
276
 
277
+ cfi_endproc
259
278
  .end ffi_closure_osf
260
279
 
261
- #ifdef __ELF__
262
- .section .rodata
263
- #else
264
- .rdata
265
- #endif
266
- $load_table:
267
- .gprel32 $load_none # FFI_TYPE_VOID
268
- .gprel32 $load_32 # FFI_TYPE_INT
269
- .gprel32 $load_float # FFI_TYPE_FLOAT
270
- .gprel32 $load_double # FFI_TYPE_DOUBLE
271
- .gprel32 $load_none # FFI_TYPE_LONGDOUBLE
272
- .gprel32 $load_u8 # FFI_TYPE_UINT8
273
- .gprel32 $load_s8 # FFI_TYPE_SINT8
274
- .gprel32 $load_u16 # FFI_TYPE_UINT16
275
- .gprel32 $load_s16 # FFI_TYPE_SINT16
276
- .gprel32 $load_32 # FFI_TYPE_UINT32
277
- .gprel32 $load_32 # FFI_TYPE_SINT32
278
- .gprel32 $load_64 # FFI_TYPE_UINT64
279
- .gprel32 $load_64 # FFI_TYPE_SINT64
280
- .gprel32 $load_none # FFI_TYPE_STRUCT
281
- .gprel32 $load_64 # FFI_TYPE_POINTER
282
-
283
- /* Assert that the table above is in sync with ffi.h. */
284
-
285
- #if FFI_TYPE_FLOAT != 2 \
286
- || FFI_TYPE_DOUBLE != 3 \
287
- || FFI_TYPE_UINT8 != 5 \
288
- || FFI_TYPE_SINT8 != 6 \
289
- || FFI_TYPE_UINT16 != 7 \
290
- || FFI_TYPE_SINT16 != 8 \
291
- || FFI_TYPE_UINT32 != 9 \
292
- || FFI_TYPE_SINT32 != 10 \
293
- || FFI_TYPE_UINT64 != 11 \
294
- || FFI_TYPE_SINT64 != 12 \
295
- || FFI_TYPE_STRUCT != 13 \
296
- || FFI_TYPE_POINTER != 14 \
297
- || FFI_TYPE_LAST != 14
298
- #error "osf.S out of sync with ffi.h"
299
- #endif
300
-
301
- #ifdef __ELF__
302
- # define UA_SI .4byte
303
- # define FDE_ENCODING 0x1b /* pcrel sdata4 */
304
- # define FDE_ENCODE(X) .4byte X-.
305
- # define FDE_ARANGE(X) .4byte X
306
- #elif defined __osf__
307
- # define UA_SI .align 0; .long
308
- # define FDE_ENCODING 0x50 /* aligned absolute */
309
- # define FDE_ENCODE(X) .align 3; .quad X
310
- # define FDE_ARANGE(X) .align 0; .quad X
311
- #endif
312
-
313
- #ifdef __ELF__
314
- .section .eh_frame,EH_FRAME_FLAGS,@progbits
315
- #elif defined __osf__
316
- .data
317
- .align 3
318
- .globl _GLOBAL__F_ffi_call_osf
319
- _GLOBAL__F_ffi_call_osf:
320
- #endif
321
- __FRAME_BEGIN__:
322
- UA_SI $LECIE1-$LSCIE1 # Length of Common Information Entry
323
- $LSCIE1:
324
- UA_SI 0x0 # CIE Identifier Tag
325
- .byte 0x1 # CIE Version
326
- .ascii "zR\0" # CIE Augmentation
327
- .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor
328
- .byte 0x78 # sleb128 -8; CIE Data Alignment Factor
329
- .byte 26 # CIE RA Column
330
- .byte 0x1 # uleb128 0x1; Augmentation size
331
- .byte FDE_ENCODING # FDE Encoding
332
- .byte 0xc # DW_CFA_def_cfa
333
- .byte 30 # uleb128 column 30
334
- .byte 0 # uleb128 offset 0
335
- .align 3
336
- $LECIE1:
337
- $LSFDE1:
338
- UA_SI $LEFDE1-$LASFDE1 # FDE Length
339
- $LASFDE1:
340
- UA_SI $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset
341
- FDE_ENCODE($LFB1) # FDE initial location
342
- FDE_ARANGE($LFE1-$LFB1) # FDE address range
343
- .byte 0x0 # uleb128 0x0; Augmentation size
344
-
345
- .byte 0x4 # DW_CFA_advance_loc4
346
- UA_SI $LCFI1-$LFB1
347
- .byte 0x9a # DW_CFA_offset, column 26
348
- .byte 4 # uleb128 4*-8
349
- .byte 0x8f # DW_CFA_offset, column 15
350
- .byte 0x3 # uleb128 3*-8
351
- .byte 0xc # DW_CFA_def_cfa
352
- .byte 15 # uleb128 column 15
353
- .byte 32 # uleb128 offset 32
354
-
355
- .byte 0x4 # DW_CFA_advance_loc4
356
- UA_SI $LCFI2-$LCFI1
357
- .byte 0xda # DW_CFA_restore, column 26
358
- .align 3
359
- $LEFDE1:
360
-
361
- $LSFDE3:
362
- UA_SI $LEFDE3-$LASFDE3 # FDE Length
363
- $LASFDE3:
364
- UA_SI $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset
365
- FDE_ENCODE($LFB2) # FDE initial location
366
- FDE_ARANGE($LFE2-$LFB2) # FDE address range
367
- .byte 0x0 # uleb128 0x0; Augmentation size
368
-
369
- .byte 0x4 # DW_CFA_advance_loc4
370
- UA_SI $LCFI5-$LFB2
371
- .byte 0xe # DW_CFA_def_cfa_offset
372
- .byte 0x80,0x1 # uleb128 128
373
-
374
- .byte 0x4 # DW_CFA_advance_loc4
375
- UA_SI $LCFI6-$LCFI5
376
- .byte 0x9a # DW_CFA_offset, column 26
377
- .byte 16 # uleb128 offset 16*-8
378
- .align 3
379
- $LEFDE3:
380
- #if defined __osf__
381
- .align 0
382
- .long 0 # End of Table
383
- #endif
384
-
385
280
  #if defined __ELF__ && defined __linux__
386
281
  .section .note.GNU-stack,"",@progbits
387
282
  #endif