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 S390.
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
  #if defined (__s390x__)
31
36
  #ifndef S390X
32
37
  #define S390X
@@ -47,10 +52,13 @@ typedef enum ffi_abi {
47
52
  } ffi_abi;
48
53
  #endif
49
54
 
55
+ #define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION
56
+ #define FFI_TARGET_HAS_COMPLEX_TYPE
50
57
 
51
58
  /* ---- Definitions for closures ----------------------------------------- */
52
59
 
53
60
  #define FFI_CLOSURES 1
61
+ #define FFI_GO_CLOSURES 1
54
62
  #ifdef S390X
55
63
  #define FFI_TRAMPOLINE_SIZE 32
56
64
  #else
@@ -0,0 +1,11 @@
1
+ /* If these values change, sysv.S must be adapted! */
2
+ #define FFI390_RET_DOUBLE 0
3
+ #define FFI390_RET_FLOAT 1
4
+ #define FFI390_RET_INT64 2
5
+ #define FFI390_RET_INT32 3
6
+ #define FFI390_RET_VOID 4
7
+
8
+ #define FFI360_RET_MASK 7
9
+ #define FFI390_RET_IN_MEM 8
10
+
11
+ #define FFI390_RET_STRUCT (FFI390_RET_VOID | FFI390_RET_IN_MEM)
@@ -1,9 +1,9 @@
1
1
  /* -----------------------------------------------------------------------
2
2
  sysv.S - Copyright (c) 2000 Software AG
3
3
  Copyright (c) 2008 Red Hat, Inc.
4
-
4
+
5
5
  S390 Foreign Function Interface
6
-
6
+
7
7
  Permission is hereby granted, free of charge, to any person obtaining
8
8
  a copy of this software and associated documentation files (the
9
9
  ``Software''), to deal in the Software without restriction, including
@@ -11,10 +11,10 @@
11
11
  distribute, sublicense, and/or sell copies of the Software, and to
12
12
  permit persons to whom the Software is furnished to do so, subject to
13
13
  the following conditions:
14
-
14
+
15
15
  The above copyright notice and this permission notice shall be included
16
16
  in all copies or substantial portions of the Software.
17
-
17
+
18
18
  THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
19
19
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
20
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -29,405 +29,296 @@
29
29
  #include <fficonfig.h>
30
30
  #include <ffi.h>
31
31
 
32
+ .text
33
+
32
34
  #ifndef __s390x__
33
-
34
- .text
35
-
36
- # r2: cif->bytes
37
- # r3: &ecif
38
- # r4: ffi_prep_args
39
- # r5: ret_type
40
- # r6: ecif.rvalue
41
- # ov: fn
42
-
35
+
36
+ # r2: frame
37
+ # r3: ret_type
38
+ # r4: ret_addr
39
+ # r5: fun
40
+ # r6: closure
41
+
43
42
  # This assumes we are using gas.
43
+ .balign 8
44
44
  .globl ffi_call_SYSV
45
+ FFI_HIDDEN(ffi_call_SYSV)
45
46
  .type ffi_call_SYSV,%function
46
47
  ffi_call_SYSV:
47
- .LFB1:
48
- stm %r6,%r15,24(%r15) # Save registers
49
- .LCFI0:
50
- basr %r13,0 # Set up base register
51
- .Lbase:
52
- lr %r11,%r15 # Set up frame pointer
53
- .LCFI1:
54
- sr %r15,%r2
55
- ahi %r15,-96-48 # Allocate stack
56
- lr %r8,%r6 # Save ecif.rvalue
57
- sr %r9,%r9
58
- ic %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address
59
- l %r7,96(%r11) # Load function address
60
- st %r11,0(%r15) # Set up back chain
61
- ahi %r11,-48 # Register save area
62
- .LCFI2:
63
-
64
- la %r2,96(%r15) # Save area
65
- # r3 already holds &ecif
66
- basr %r14,%r4 # Call ffi_prep_args
67
-
68
- lm %r2,%r6,0(%r11) # Load arguments
69
- ld %f0,32(%r11)
70
- ld %f2,40(%r11)
71
- la %r14,0(%r13,%r9) # Set return address
72
- br %r7 # ... and call function
73
-
74
- .LretNone: # Return void
75
- l %r4,48+56(%r11)
76
- lm %r6,%r15,48+24(%r11)
77
- br %r4
78
-
79
- .LretFloat:
80
- l %r4,48+56(%r11)
81
- ste %f0,0(%r8) # Return float
82
- lm %r6,%r15,48+24(%r11)
83
- br %r4
84
-
85
- .LretDouble:
86
- l %r4,48+56(%r11)
87
- std %f0,0(%r8) # Return double
88
- lm %r6,%r15,48+24(%r11)
89
- br %r4
90
-
91
- .LretInt32:
92
- l %r4,48+56(%r11)
93
- st %r2,0(%r8) # Return int
94
- lm %r6,%r15,48+24(%r11)
95
- br %r4
96
-
97
- .LretInt64:
98
- l %r4,48+56(%r11)
99
- stm %r2,%r3,0(%r8) # Return long long
100
- lm %r6,%r15,48+24(%r11)
101
- br %r4
102
-
48
+ .cfi_startproc
49
+ st %r6,44(%r2) # Save registers
50
+ stm %r12,%r14,48(%r2)
51
+ lr %r13,%r2 # Install frame pointer
52
+ .cfi_rel_offset r6, 44
53
+ .cfi_rel_offset r12, 48
54
+ .cfi_rel_offset r13, 52
55
+ .cfi_rel_offset r14, 56
56
+ .cfi_def_cfa_register r13
57
+ st %r2,0(%r15) # Set up back chain
58
+ sla %r3,3 # ret_type *= 8
59
+ lr %r12,%r4 # Save ret_addr
60
+ lr %r1,%r5 # Save fun
61
+ lr %r0,%r6 # Install static chain
62
+
63
+ # Set return address, so that there is only one indirect jump.
64
+ #ifdef HAVE_AS_S390_ZARCH
65
+ larl %r14,.Ltable
66
+ ar %r14,%r3
67
+ #else
68
+ basr %r14,0
69
+ 0: la %r14,.Ltable-0b(%r14,%r3)
70
+ #endif
71
+
72
+ lm %r2,%r6,8(%r13) # Load arguments
73
+ ld %f0,64(%r13)
74
+ ld %f2,72(%r13)
75
+ br %r1 # ... and call function
76
+
77
+ .balign 8
103
78
  .Ltable:
104
- .byte .LretNone-.Lbase # FFI390_RET_VOID
105
- .byte .LretNone-.Lbase # FFI390_RET_STRUCT
106
- .byte .LretFloat-.Lbase # FFI390_RET_FLOAT
107
- .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE
108
- .byte .LretInt32-.Lbase # FFI390_RET_INT32
109
- .byte .LretInt64-.Lbase # FFI390_RET_INT64
79
+ # FFI390_RET_DOUBLE
80
+ std %f0,0(%r12)
81
+ j .Ldone
82
+
83
+ .balign 8
84
+ # FFI390_RET_FLOAT
85
+ ste %f0,0(%r12)
86
+ j .Ldone
87
+
88
+ .balign 8
89
+ # FFI390_RET_INT64
90
+ st %r3,4(%r12)
91
+ nop
92
+ # fallthru
93
+
94
+ .balign 8
95
+ # FFI390_RET_INT32
96
+ st %r2,0(%r12)
97
+ nop
98
+ # fallthru
99
+
100
+ .balign 8
101
+ # FFI390_RET_VOID
102
+ .Ldone:
103
+ l %r14,56(%r13)
104
+ l %r12,48(%r13)
105
+ l %r6,44(%r13)
106
+ l %r13,52(%r13)
107
+ .cfi_restore 14
108
+ .cfi_restore 13
109
+ .cfi_restore 12
110
+ .cfi_restore 6
111
+ .cfi_def_cfa r15, 96
112
+ br %r14
113
+ .cfi_endproc
114
+ .size ffi_call_SYSV,.-ffi_call_SYSV
110
115
 
111
- .LFE1:
112
- .ffi_call_SYSV_end:
113
- .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
114
116
 
117
+ .balign 8
118
+ .globl ffi_go_closure_SYSV
119
+ FFI_HIDDEN(ffi_go_closure_SYSV)
120
+ .type ffi_go_closure_SYSV,%function
121
+ ffi_go_closure_SYSV:
122
+ .cfi_startproc
123
+ stm %r2,%r6,8(%r15) # Save arguments
124
+ lr %r4,%r0 # Load closure -> user_data
125
+ l %r2,4(%r4) # ->cif
126
+ l %r3,8(%r4) # ->fun
127
+ j .Ldoclosure
128
+ .cfi_endproc
115
129
 
130
+ .balign 8
116
131
  .globl ffi_closure_SYSV
132
+ FFI_HIDDEN(ffi_closure_SYSV)
117
133
  .type ffi_closure_SYSV,%function
118
134
  ffi_closure_SYSV:
119
- .LFB2:
135
+ .cfi_startproc
136
+ stm %r2,%r6,8(%r15) # Save arguments
137
+ lr %r4,%r0 # Closure
138
+ l %r2,16(%r4) # ->cif
139
+ l %r3,20(%r4) # ->fun
140
+ l %r4,24(%r4) # ->user_data
141
+ .Ldoclosure:
120
142
  stm %r12,%r15,48(%r15) # Save registers
121
- .LCFI10:
143
+ lr %r12,%r15
144
+ .cfi_def_cfa_register r12
145
+ .cfi_rel_offset r6, 24
146
+ .cfi_rel_offset r12, 48
147
+ .cfi_rel_offset r13, 52
148
+ .cfi_rel_offset r14, 56
149
+ .cfi_rel_offset r15, 60
150
+ #ifndef HAVE_AS_S390_ZARCH
122
151
  basr %r13,0 # Set up base register
123
152
  .Lcbase:
124
- stm %r2,%r6,8(%r15) # Save arguments
125
- std %f0,64(%r15)
126
- std %f2,72(%r15)
127
- lr %r1,%r15 # Set up stack frame
128
- ahi %r15,-96
129
- .LCFI11:
130
- l %r12,.Lchelper-.Lcbase(%r13) # Get helper function
131
- lr %r2,%r0 # Closure
132
- la %r3,8(%r1) # GPRs
133
- la %r4,64(%r1) # FPRs
134
- la %r5,96(%r1) # Overflow
135
- st %r1,0(%r15) # Set up back chain
136
-
137
- bas %r14,0(%r12,%r13) # Call helper
138
-
139
- l %r4,96+56(%r15)
140
- ld %f0,96+64(%r15) # Load return registers
141
- lm %r2,%r3,96+8(%r15)
142
- lm %r12,%r15,96+48(%r15)
143
- br %r4
153
+ l %r1,.Lchelper-.Lcbase(%r13) # Get helper function
154
+ #endif
155
+ ahi %r15,-96-8 # Set up stack frame
156
+ st %r12,0(%r15) # Set up back chain
157
+
158
+ std %f0,64(%r12) # Save fp arguments
159
+ std %f2,72(%r12)
160
+
161
+ la %r5,96(%r12) # Overflow
162
+ st %r5,96(%r15)
163
+ la %r6,64(%r12) # FPRs
164
+ la %r5,8(%r12) # GPRs
165
+ #ifdef HAVE_AS_S390_ZARCH
166
+ brasl %r14,ffi_closure_helper_SYSV
167
+ #else
168
+ bas %r14,0(%r1,%r13) # Call helper
169
+ #endif
144
170
 
171
+ lr %r15,%r12
172
+ .cfi_def_cfa_register r15
173
+ lm %r12,%r14,48(%r12) # Restore saved registers
174
+ l %r6,24(%r15)
175
+ ld %f0,64(%r15) # Load return registers
176
+ lm %r2,%r3,8(%r15)
177
+ br %r14
178
+ .cfi_endproc
179
+
180
+ #ifndef HAVE_AS_S390_ZARCH
145
181
  .align 4
146
182
  .Lchelper:
147
183
  .long ffi_closure_helper_SYSV-.Lcbase
184
+ #endif
148
185
 
149
- .LFE2:
150
-
151
- .ffi_closure_SYSV_end:
152
- .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV
153
-
154
-
155
- .section .eh_frame,EH_FRAME_FLAGS,@progbits
156
- .Lframe1:
157
- .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
158
- .LSCIE1:
159
- .4byte 0x0 # CIE Identifier Tag
160
- .byte 0x1 # CIE Version
161
- .ascii "zR\0" # CIE Augmentation
162
- .uleb128 0x1 # CIE Code Alignment Factor
163
- .sleb128 -4 # CIE Data Alignment Factor
164
- .byte 0xe # CIE RA Column
165
- .uleb128 0x1 # Augmentation size
166
- .byte 0x1b # FDE Encoding (pcrel sdata4)
167
- .byte 0xc # DW_CFA_def_cfa
168
- .uleb128 0xf
169
- .uleb128 0x60
170
- .align 4
171
- .LECIE1:
172
- .LSFDE1:
173
- .4byte .LEFDE1-.LASFDE1 # FDE Length
174
- .LASFDE1:
175
- .4byte .LASFDE1-.Lframe1 # FDE CIE offset
176
- .4byte .LFB1-. # FDE initial location
177
- .4byte .LFE1-.LFB1 # FDE address range
178
- .uleb128 0x0 # Augmentation size
179
- .byte 0x4 # DW_CFA_advance_loc4
180
- .4byte .LCFI0-.LFB1
181
- .byte 0x8f # DW_CFA_offset, column 0xf
182
- .uleb128 0x9
183
- .byte 0x8e # DW_CFA_offset, column 0xe
184
- .uleb128 0xa
185
- .byte 0x8d # DW_CFA_offset, column 0xd
186
- .uleb128 0xb
187
- .byte 0x8c # DW_CFA_offset, column 0xc
188
- .uleb128 0xc
189
- .byte 0x8b # DW_CFA_offset, column 0xb
190
- .uleb128 0xd
191
- .byte 0x8a # DW_CFA_offset, column 0xa
192
- .uleb128 0xe
193
- .byte 0x89 # DW_CFA_offset, column 0x9
194
- .uleb128 0xf
195
- .byte 0x88 # DW_CFA_offset, column 0x8
196
- .uleb128 0x10
197
- .byte 0x87 # DW_CFA_offset, column 0x7
198
- .uleb128 0x11
199
- .byte 0x86 # DW_CFA_offset, column 0x6
200
- .uleb128 0x12
201
- .byte 0x4 # DW_CFA_advance_loc4
202
- .4byte .LCFI1-.LCFI0
203
- .byte 0xd # DW_CFA_def_cfa_register
204
- .uleb128 0xb
205
- .byte 0x4 # DW_CFA_advance_loc4
206
- .4byte .LCFI2-.LCFI1
207
- .byte 0xe # DW_CFA_def_cfa_offset
208
- .uleb128 0x90
209
- .align 4
210
- .LEFDE1:
211
- .LSFDE2:
212
- .4byte .LEFDE2-.LASFDE2 # FDE Length
213
- .LASFDE2:
214
- .4byte .LASFDE2-.Lframe1 # FDE CIE offset
215
- .4byte .LFB2-. # FDE initial location
216
- .4byte .LFE2-.LFB2 # FDE address range
217
- .uleb128 0x0 # Augmentation size
218
- .byte 0x4 # DW_CFA_advance_loc4
219
- .4byte .LCFI10-.LFB2
220
- .byte 0x8f # DW_CFA_offset, column 0xf
221
- .uleb128 0x9
222
- .byte 0x8e # DW_CFA_offset, column 0xe
223
- .uleb128 0xa
224
- .byte 0x8d # DW_CFA_offset, column 0xd
225
- .uleb128 0xb
226
- .byte 0x8c # DW_CFA_offset, column 0xc
227
- .uleb128 0xc
228
- .byte 0x4 # DW_CFA_advance_loc4
229
- .4byte .LCFI11-.LCFI10
230
- .byte 0xe # DW_CFA_def_cfa_offset
231
- .uleb128 0xc0
232
- .align 4
233
- .LEFDE2:
186
+ .size ffi_closure_SYSV,.-ffi_closure_SYSV
234
187
 
235
188
  #else
236
-
237
- .text
238
-
239
- # r2: cif->bytes
240
- # r3: &ecif
241
- # r4: ffi_prep_args
242
- # r5: ret_type
243
- # r6: ecif.rvalue
244
- # ov: fn
245
-
189
+
190
+ # r2: frame
191
+ # r3: ret_type
192
+ # r4: ret_addr
193
+ # r5: fun
194
+ # r6: closure
195
+
246
196
  # This assumes we are using gas.
197
+ .balign 8
247
198
  .globl ffi_call_SYSV
199
+ FFI_HIDDEN(ffi_call_SYSV)
248
200
  .type ffi_call_SYSV,%function
249
201
  ffi_call_SYSV:
250
- .LFB1:
251
- stmg %r6,%r15,48(%r15) # Save registers
252
- .LCFI0:
253
- larl %r13,.Lbase # Set up base register
254
- lgr %r11,%r15 # Set up frame pointer
255
- .LCFI1:
256
- sgr %r15,%r2
257
- aghi %r15,-160-80 # Allocate stack
258
- lgr %r8,%r6 # Save ecif.rvalue
259
- llgc %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address
260
- lg %r7,160(%r11) # Load function address
261
- stg %r11,0(%r15) # Set up back chain
262
- aghi %r11,-80 # Register save area
263
- .LCFI2:
264
-
265
- la %r2,160(%r15) # Save area
266
- # r3 already holds &ecif
267
- basr %r14,%r4 # Call ffi_prep_args
268
-
269
- lmg %r2,%r6,0(%r11) # Load arguments
270
- ld %f0,48(%r11)
271
- ld %f2,56(%r11)
272
- ld %f4,64(%r11)
273
- ld %f6,72(%r11)
274
- la %r14,0(%r13,%r9) # Set return address
275
- br %r7 # ... and call function
276
-
277
- .Lbase:
278
- .LretNone: # Return void
279
- lg %r4,80+112(%r11)
280
- lmg %r6,%r15,80+48(%r11)
281
- br %r4
282
-
283
- .LretFloat:
284
- lg %r4,80+112(%r11)
285
- ste %f0,0(%r8) # Return float
286
- lmg %r6,%r15,80+48(%r11)
287
- br %r4
288
-
289
- .LretDouble:
290
- lg %r4,80+112(%r11)
291
- std %f0,0(%r8) # Return double
292
- lmg %r6,%r15,80+48(%r11)
293
- br %r4
294
-
295
- .LretInt32:
296
- lg %r4,80+112(%r11)
297
- st %r2,0(%r8) # Return int
298
- lmg %r6,%r15,80+48(%r11)
299
- br %r4
300
-
301
- .LretInt64:
302
- lg %r4,80+112(%r11)
303
- stg %r2,0(%r8) # Return long
304
- lmg %r6,%r15,80+48(%r11)
305
- br %r4
306
-
202
+ .cfi_startproc
203
+ stg %r6,88(%r2) # Save registers
204
+ stmg %r12,%r14,96(%r2)
205
+ lgr %r13,%r2 # Install frame pointer
206
+ .cfi_rel_offset r6, 88
207
+ .cfi_rel_offset r12, 96
208
+ .cfi_rel_offset r13, 104
209
+ .cfi_rel_offset r14, 112
210
+ .cfi_def_cfa_register r13
211
+ stg %r2,0(%r15) # Set up back chain
212
+ larl %r14,.Ltable # Set up return address
213
+ slag %r3,%r3,3 # ret_type *= 8
214
+ lgr %r12,%r4 # Save ret_addr
215
+ lgr %r1,%r5 # Save fun
216
+ lgr %r0,%r6 # Install static chain
217
+ agr %r14,%r3
218
+ lmg %r2,%r6,16(%r13) # Load arguments
219
+ ld %f0,128(%r13)
220
+ ld %f2,136(%r13)
221
+ ld %f4,144(%r13)
222
+ ld %f6,152(%r13)
223
+ br %r1 # ... and call function
224
+
225
+ .balign 8
307
226
  .Ltable:
308
- .byte .LretNone-.Lbase # FFI390_RET_VOID
309
- .byte .LretNone-.Lbase # FFI390_RET_STRUCT
310
- .byte .LretFloat-.Lbase # FFI390_RET_FLOAT
311
- .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE
312
- .byte .LretInt32-.Lbase # FFI390_RET_INT32
313
- .byte .LretInt64-.Lbase # FFI390_RET_INT64
227
+ # FFI390_RET_DOUBLE
228
+ std %f0,0(%r12)
229
+ j .Ldone
230
+
231
+ .balign 8
232
+ # FFI390_RET_DOUBLE
233
+ ste %f0,0(%r12)
234
+ j .Ldone
235
+
236
+ .balign 8
237
+ # FFI390_RET_INT64
238
+ stg %r2,0(%r12)
239
+
240
+ .balign 8
241
+ # FFI390_RET_INT32
242
+ # Never used, as we always store type ffi_arg.
243
+ # But the stg above is 6 bytes and we cannot
244
+ # jump around this case, so fall through.
245
+ nop
246
+ nop
247
+
248
+ .balign 8
249
+ # FFI390_RET_VOID
250
+ .Ldone:
251
+ lg %r14,112(%r13)
252
+ lg %r12,96(%r13)
253
+ lg %r6,88(%r13)
254
+ lg %r13,104(%r13)
255
+ .cfi_restore r14
256
+ .cfi_restore r13
257
+ .cfi_restore r12
258
+ .cfi_restore r6
259
+ .cfi_def_cfa r15, 160
260
+ br %r14
261
+ .cfi_endproc
262
+ .size ffi_call_SYSV,.-ffi_call_SYSV
314
263
 
315
- .LFE1:
316
- .ffi_call_SYSV_end:
317
- .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
264
+
265
+ .balign 8
266
+ .globl ffi_go_closure_SYSV
267
+ FFI_HIDDEN(ffi_go_closure_SYSV)
268
+ .type ffi_go_closure_SYSV,%function
269
+ ffi_go_closure_SYSV:
270
+ .cfi_startproc
271
+ stmg %r2,%r6,16(%r15) # Save arguments
272
+ lgr %r4,%r0 # Load closure -> user_data
273
+ lg %r2,8(%r4) # ->cif
274
+ lg %r3,16(%r4) # ->fun
275
+ j .Ldoclosure
276
+ .cfi_endproc
277
+ .size ffi_go_closure_SYSV,.-ffi_go_closure_SYSV
318
278
 
319
279
 
280
+ .balign 8
320
281
  .globl ffi_closure_SYSV
282
+ FFI_HIDDEN(ffi_closure_SYSV)
321
283
  .type ffi_closure_SYSV,%function
322
284
  ffi_closure_SYSV:
323
- .LFB2:
324
- stmg %r14,%r15,112(%r15) # Save registers
325
- .LCFI10:
285
+ .cfi_startproc
326
286
  stmg %r2,%r6,16(%r15) # Save arguments
327
- std %f0,128(%r15)
328
- std %f2,136(%r15)
329
- std %f4,144(%r15)
330
- std %f6,152(%r15)
331
- lgr %r1,%r15 # Set up stack frame
332
- aghi %r15,-160
333
- .LCFI11:
334
- lgr %r2,%r0 # Closure
335
- la %r3,16(%r1) # GPRs
336
- la %r4,128(%r1) # FPRs
337
- la %r5,160(%r1) # Overflow
338
- stg %r1,0(%r15) # Set up back chain
339
-
287
+ lgr %r4,%r0 # Load closure
288
+ lg %r2,32(%r4) # ->cif
289
+ lg %r3,40(%r4) # ->fun
290
+ lg %r4,48(%r4) # ->user_data
291
+ .Ldoclosure:
292
+ stmg %r13,%r15,104(%r15) # Save registers
293
+ lgr %r13,%r15
294
+ .cfi_def_cfa_register r13
295
+ .cfi_rel_offset r6, 48
296
+ .cfi_rel_offset r13, 104
297
+ .cfi_rel_offset r14, 112
298
+ .cfi_rel_offset r15, 120
299
+ aghi %r15,-160-16 # Set up stack frame
300
+ stg %r13,0(%r15) # Set up back chain
301
+
302
+ std %f0,128(%r13) # Save fp arguments
303
+ std %f2,136(%r13)
304
+ std %f4,144(%r13)
305
+ std %f6,152(%r13)
306
+ la %r5,160(%r13) # Overflow
307
+ stg %r5,160(%r15)
308
+ la %r6,128(%r13) # FPRs
309
+ la %r5,16(%r13) # GPRs
340
310
  brasl %r14,ffi_closure_helper_SYSV # Call helper
341
311
 
342
- lg %r14,160+112(%r15)
343
- ld %f0,160+128(%r15) # Load return registers
344
- lg %r2,160+16(%r15)
345
- la %r15,160(%r15)
312
+ lgr %r15,%r13
313
+ .cfi_def_cfa_register r15
314
+ lmg %r13,%r14,104(%r13) # Restore saved registers
315
+ lg %r6,48(%r15)
316
+ ld %f0,128(%r15) # Load return registers
317
+ lg %r2,16(%r15)
346
318
  br %r14
347
- .LFE2:
348
-
349
- .ffi_closure_SYSV_end:
350
- .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV
351
-
352
-
353
-
354
- .section .eh_frame,EH_FRAME_FLAGS,@progbits
355
- .Lframe1:
356
- .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
357
- .LSCIE1:
358
- .4byte 0x0 # CIE Identifier Tag
359
- .byte 0x1 # CIE Version
360
- .ascii "zR\0" # CIE Augmentation
361
- .uleb128 0x1 # CIE Code Alignment Factor
362
- .sleb128 -8 # CIE Data Alignment Factor
363
- .byte 0xe # CIE RA Column
364
- .uleb128 0x1 # Augmentation size
365
- .byte 0x1b # FDE Encoding (pcrel sdata4)
366
- .byte 0xc # DW_CFA_def_cfa
367
- .uleb128 0xf
368
- .uleb128 0xa0
369
- .align 8
370
- .LECIE1:
371
- .LSFDE1:
372
- .4byte .LEFDE1-.LASFDE1 # FDE Length
373
- .LASFDE1:
374
- .4byte .LASFDE1-.Lframe1 # FDE CIE offset
375
- .4byte .LFB1-. # FDE initial location
376
- .4byte .LFE1-.LFB1 # FDE address range
377
- .uleb128 0x0 # Augmentation size
378
- .byte 0x4 # DW_CFA_advance_loc4
379
- .4byte .LCFI0-.LFB1
380
- .byte 0x8f # DW_CFA_offset, column 0xf
381
- .uleb128 0x5
382
- .byte 0x8e # DW_CFA_offset, column 0xe
383
- .uleb128 0x6
384
- .byte 0x8d # DW_CFA_offset, column 0xd
385
- .uleb128 0x7
386
- .byte 0x8c # DW_CFA_offset, column 0xc
387
- .uleb128 0x8
388
- .byte 0x8b # DW_CFA_offset, column 0xb
389
- .uleb128 0x9
390
- .byte 0x8a # DW_CFA_offset, column 0xa
391
- .uleb128 0xa
392
- .byte 0x89 # DW_CFA_offset, column 0x9
393
- .uleb128 0xb
394
- .byte 0x88 # DW_CFA_offset, column 0x8
395
- .uleb128 0xc
396
- .byte 0x87 # DW_CFA_offset, column 0x7
397
- .uleb128 0xd
398
- .byte 0x86 # DW_CFA_offset, column 0x6
399
- .uleb128 0xe
400
- .byte 0x4 # DW_CFA_advance_loc4
401
- .4byte .LCFI1-.LCFI0
402
- .byte 0xd # DW_CFA_def_cfa_register
403
- .uleb128 0xb
404
- .byte 0x4 # DW_CFA_advance_loc4
405
- .4byte .LCFI2-.LCFI1
406
- .byte 0xe # DW_CFA_def_cfa_offset
407
- .uleb128 0xf0
408
- .align 8
409
- .LEFDE1:
410
- .LSFDE2:
411
- .4byte .LEFDE2-.LASFDE2 # FDE Length
412
- .LASFDE2:
413
- .4byte .LASFDE2-.Lframe1 # FDE CIE offset
414
- .4byte .LFB2-. # FDE initial location
415
- .4byte .LFE2-.LFB2 # FDE address range
416
- .uleb128 0x0 # Augmentation size
417
- .byte 0x4 # DW_CFA_advance_loc4
418
- .4byte .LCFI10-.LFB2
419
- .byte 0x8f # DW_CFA_offset, column 0xf
420
- .uleb128 0x5
421
- .byte 0x8e # DW_CFA_offset, column 0xe
422
- .uleb128 0x6
423
- .byte 0x4 # DW_CFA_advance_loc4
424
- .4byte .LCFI11-.LCFI10
425
- .byte 0xe # DW_CFA_def_cfa_offset
426
- .uleb128 0x140
427
- .align 8
428
- .LEFDE2:
429
-
430
- #endif
319
+ .cfi_endproc
320
+ .size ffi_closure_SYSV,.-ffi_closure_SYSV
321
+ #endif /* !s390x */
431
322
 
432
323
  #if defined __ELF__ && defined __linux__
433
324
  .section .note.GNU-stack,"",@progbits