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,444 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc.
3
- Copyright (C) 2008 Free Software Foundation, Inc.
4
-
5
- X86 Foreign Function Interface
6
-
7
- Permission is hereby granted, free of charge, to any person obtaining
8
- a copy of this software and associated documentation files (the
9
- ``Software''), to deal in the Software without restriction, including
10
- without limitation the rights to use, copy, modify, merge, publish,
11
- distribute, sublicense, and/or sell copies of the Software, and to
12
- permit persons to whom the Software is furnished to do so, subject to
13
- the following conditions:
14
-
15
- The above copyright notice and this permission notice shall be included
16
- in all copies or substantial portions of the Software.
17
-
18
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
19
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
- DEALINGS IN THE SOFTWARE.
26
- -----------------------------------------------------------------------
27
- */
28
-
29
- #ifndef __x86_64__
30
-
31
- #define LIBFFI_ASM
32
- #include <fficonfig.h>
33
- #include <ffi.h>
34
-
35
- .text
36
-
37
- .globl _ffi_prep_args
38
-
39
- .align 4
40
- .globl _ffi_call_SYSV
41
-
42
- _ffi_call_SYSV:
43
- .LFB1:
44
- pushl %ebp
45
- .LCFI0:
46
- movl %esp,%ebp
47
- .LCFI1:
48
- subl $8,%esp
49
- /* Make room for all of the new args. */
50
- movl 16(%ebp),%ecx
51
- subl %ecx,%esp
52
-
53
- movl %esp,%eax
54
-
55
- /* Place all of the ffi_prep_args in position */
56
- subl $8,%esp
57
- pushl 12(%ebp)
58
- pushl %eax
59
- call *8(%ebp)
60
-
61
- /* Return stack to previous state and call the function */
62
- addl $16,%esp
63
-
64
- call *28(%ebp)
65
-
66
- /* Load %ecx with the return type code */
67
- movl 20(%ebp),%ecx
68
-
69
- /* Protect %esi. We're going to pop it in the epilogue. */
70
- pushl %esi
71
-
72
- /* If the return value pointer is NULL, assume no return value. */
73
- cmpl $0,24(%ebp)
74
- jne 0f
75
-
76
- /* Even if there is no space for the return value, we are
77
- obliged to handle floating-point values. */
78
- cmpl $FFI_TYPE_FLOAT,%ecx
79
- jne noretval
80
- fstp %st(0)
81
-
82
- jmp epilogue
83
- 0:
84
- .align 4
85
- call 1f
86
- .Lstore_table:
87
- .long noretval-.Lstore_table /* FFI_TYPE_VOID */
88
- .long retint-.Lstore_table /* FFI_TYPE_INT */
89
- .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */
90
- .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */
91
- .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */
92
- .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */
93
- .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */
94
- .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */
95
- .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */
96
- .long retint-.Lstore_table /* FFI_TYPE_UINT32 */
97
- .long retint-.Lstore_table /* FFI_TYPE_SINT32 */
98
- .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */
99
- .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */
100
- .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */
101
- .long retint-.Lstore_table /* FFI_TYPE_POINTER */
102
- .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */
103
- .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */
104
- 1:
105
- pop %esi
106
- add (%esi, %ecx, 4), %esi
107
- jmp *%esi
108
-
109
- /* Sign/zero extend as appropriate. */
110
- retsint8:
111
- movsbl %al, %eax
112
- jmp retint
113
-
114
- retsint16:
115
- movswl %ax, %eax
116
- jmp retint
117
-
118
- retuint8:
119
- movzbl %al, %eax
120
- jmp retint
121
-
122
- retuint16:
123
- movzwl %ax, %eax
124
- jmp retint
125
-
126
- retfloat:
127
- /* Load %ecx with the pointer to storage for the return value */
128
- movl 24(%ebp),%ecx
129
- fstps (%ecx)
130
- jmp epilogue
131
-
132
- retdouble:
133
- /* Load %ecx with the pointer to storage for the return value */
134
- movl 24(%ebp),%ecx
135
- fstpl (%ecx)
136
- jmp epilogue
137
-
138
- retlongdouble:
139
- /* Load %ecx with the pointer to storage for the return value */
140
- movl 24(%ebp),%ecx
141
- fstpt (%ecx)
142
- jmp epilogue
143
-
144
- retint64:
145
- /* Load %ecx with the pointer to storage for the return value */
146
- movl 24(%ebp),%ecx
147
- movl %eax,0(%ecx)
148
- movl %edx,4(%ecx)
149
- jmp epilogue
150
-
151
- retstruct1b:
152
- /* Load %ecx with the pointer to storage for the return value */
153
- movl 24(%ebp),%ecx
154
- movb %al,0(%ecx)
155
- jmp epilogue
156
-
157
- retstruct2b:
158
- /* Load %ecx with the pointer to storage for the return value */
159
- movl 24(%ebp),%ecx
160
- movw %ax,0(%ecx)
161
- jmp epilogue
162
-
163
- retint:
164
- /* Load %ecx with the pointer to storage for the return value */
165
- movl 24(%ebp),%ecx
166
- movl %eax,0(%ecx)
167
-
168
- retstruct:
169
- /* Nothing to do! */
170
-
171
- noretval:
172
- epilogue:
173
- popl %esi
174
- movl %ebp,%esp
175
- popl %ebp
176
- ret
177
-
178
- .LFE1:
179
- .ffi_call_SYSV_end:
180
-
181
- .align 4
182
- FFI_HIDDEN (ffi_closure_SYSV)
183
- .globl _ffi_closure_SYSV
184
-
185
- _ffi_closure_SYSV:
186
- .LFB2:
187
- pushl %ebp
188
- .LCFI2:
189
- movl %esp, %ebp
190
- .LCFI3:
191
- subl $40, %esp
192
- leal -24(%ebp), %edx
193
- movl %edx, -12(%ebp) /* resp */
194
- leal 8(%ebp), %edx
195
- movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */
196
- leal -12(%ebp), %edx
197
- movl %edx, (%esp) /* &resp */
198
- movl %ebx, 8(%esp)
199
- .LCFI7:
200
- call L_ffi_closure_SYSV_inner$stub
201
- movl 8(%esp), %ebx
202
- movl -12(%ebp), %ecx
203
- cmpl $FFI_TYPE_INT, %eax
204
- je .Lcls_retint
205
-
206
- /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16,
207
- FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */
208
- cmpl $FFI_TYPE_UINT64, %eax
209
- jge 0f
210
- cmpl $FFI_TYPE_UINT8, %eax
211
- jge .Lcls_retint
212
-
213
- 0: cmpl $FFI_TYPE_FLOAT, %eax
214
- je .Lcls_retfloat
215
- cmpl $FFI_TYPE_DOUBLE, %eax
216
- je .Lcls_retdouble
217
- cmpl $FFI_TYPE_LONGDOUBLE, %eax
218
- je .Lcls_retldouble
219
- cmpl $FFI_TYPE_SINT64, %eax
220
- je .Lcls_retllong
221
- cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax
222
- je .Lcls_retstruct1b
223
- cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax
224
- je .Lcls_retstruct2b
225
- cmpl $FFI_TYPE_STRUCT, %eax
226
- je .Lcls_retstruct
227
- .Lcls_epilogue:
228
- movl %ebp, %esp
229
- popl %ebp
230
- ret
231
- .Lcls_retint:
232
- movl (%ecx), %eax
233
- jmp .Lcls_epilogue
234
- .Lcls_retfloat:
235
- flds (%ecx)
236
- jmp .Lcls_epilogue
237
- .Lcls_retdouble:
238
- fldl (%ecx)
239
- jmp .Lcls_epilogue
240
- .Lcls_retldouble:
241
- fldt (%ecx)
242
- jmp .Lcls_epilogue
243
- .Lcls_retllong:
244
- movl (%ecx), %eax
245
- movl 4(%ecx), %edx
246
- jmp .Lcls_epilogue
247
- .Lcls_retstruct1b:
248
- movsbl (%ecx), %eax
249
- jmp .Lcls_epilogue
250
- .Lcls_retstruct2b:
251
- movswl (%ecx), %eax
252
- jmp .Lcls_epilogue
253
- .Lcls_retstruct:
254
- lea -8(%ebp),%esp
255
- movl %ebp, %esp
256
- popl %ebp
257
- ret $4
258
- .LFE2:
259
-
260
- #if !FFI_NO_RAW_API
261
-
262
- #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
263
- #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
264
- #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
265
- #define CIF_FLAGS_OFFSET 20
266
-
267
- .align 4
268
- FFI_HIDDEN (ffi_closure_raw_SYSV)
269
- .globl _ffi_closure_raw_SYSV
270
-
271
- _ffi_closure_raw_SYSV:
272
- .LFB3:
273
- pushl %ebp
274
- .LCFI4:
275
- movl %esp, %ebp
276
- .LCFI5:
277
- pushl %esi
278
- .LCFI6:
279
- subl $36, %esp
280
- movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
281
- movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
282
- movl %edx, 12(%esp) /* user_data */
283
- leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */
284
- movl %edx, 8(%esp) /* raw_args */
285
- leal -24(%ebp), %edx
286
- movl %edx, 4(%esp) /* &res */
287
- movl %esi, (%esp) /* cif */
288
- call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */
289
- movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */
290
- cmpl $FFI_TYPE_INT, %eax
291
- je .Lrcls_retint
292
-
293
- /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16,
294
- FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */
295
- cmpl $FFI_TYPE_UINT64, %eax
296
- jge 0f
297
- cmpl $FFI_TYPE_UINT8, %eax
298
- jge .Lrcls_retint
299
- 0:
300
- cmpl $FFI_TYPE_FLOAT, %eax
301
- je .Lrcls_retfloat
302
- cmpl $FFI_TYPE_DOUBLE, %eax
303
- je .Lrcls_retdouble
304
- cmpl $FFI_TYPE_LONGDOUBLE, %eax
305
- je .Lrcls_retldouble
306
- cmpl $FFI_TYPE_SINT64, %eax
307
- je .Lrcls_retllong
308
- .Lrcls_epilogue:
309
- addl $36, %esp
310
- popl %esi
311
- popl %ebp
312
- ret
313
- .Lrcls_retint:
314
- movl -24(%ebp), %eax
315
- jmp .Lrcls_epilogue
316
- .Lrcls_retfloat:
317
- flds -24(%ebp)
318
- jmp .Lrcls_epilogue
319
- .Lrcls_retdouble:
320
- fldl -24(%ebp)
321
- jmp .Lrcls_epilogue
322
- .Lrcls_retldouble:
323
- fldt -24(%ebp)
324
- jmp .Lrcls_epilogue
325
- .Lrcls_retllong:
326
- movl -24(%ebp), %eax
327
- movl -20(%ebp), %edx
328
- jmp .Lrcls_epilogue
329
- .LFE3:
330
- #endif
331
-
332
- .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
333
- L_ffi_closure_SYSV_inner$stub:
334
- .indirect_symbol _ffi_closure_SYSV_inner
335
- hlt ; hlt ; hlt ; hlt ; hlt
336
-
337
-
338
- .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
339
- EH_frame1:
340
- .set L$set$0,LECIE1-LSCIE1
341
- .long L$set$0
342
- LSCIE1:
343
- .long 0x0
344
- .byte 0x1
345
- .ascii "zR\0"
346
- .byte 0x1
347
- .byte 0x7c
348
- .byte 0x8
349
- .byte 0x1
350
- .byte 0x10
351
- .byte 0xc
352
- .byte 0x5
353
- .byte 0x4
354
- .byte 0x88
355
- .byte 0x1
356
- .align 2
357
- LECIE1:
358
- .globl _ffi_call_SYSV.eh
359
- _ffi_call_SYSV.eh:
360
- LSFDE1:
361
- .set L$set$1,LEFDE1-LASFDE1
362
- .long L$set$1
363
- LASFDE1:
364
- .long LASFDE1-EH_frame1
365
- .long .LFB1-.
366
- .set L$set$2,.LFE1-.LFB1
367
- .long L$set$2
368
- .byte 0x0
369
- .byte 0x4
370
- .set L$set$3,.LCFI0-.LFB1
371
- .long L$set$3
372
- .byte 0xe
373
- .byte 0x8
374
- .byte 0x84
375
- .byte 0x2
376
- .byte 0x4
377
- .set L$set$4,.LCFI1-.LCFI0
378
- .long L$set$4
379
- .byte 0xd
380
- .byte 0x4
381
- .align 2
382
- LEFDE1:
383
- .globl _ffi_closure_SYSV.eh
384
- _ffi_closure_SYSV.eh:
385
- LSFDE2:
386
- .set L$set$5,LEFDE2-LASFDE2
387
- .long L$set$5
388
- LASFDE2:
389
- .long LASFDE2-EH_frame1
390
- .long .LFB2-.
391
- .set L$set$6,.LFE2-.LFB2
392
- .long L$set$6
393
- .byte 0x0
394
- .byte 0x4
395
- .set L$set$7,.LCFI2-.LFB2
396
- .long L$set$7
397
- .byte 0xe
398
- .byte 0x8
399
- .byte 0x84
400
- .byte 0x2
401
- .byte 0x4
402
- .set L$set$8,.LCFI3-.LCFI2
403
- .long L$set$8
404
- .byte 0xd
405
- .byte 0x4
406
- .align 2
407
- LEFDE2:
408
-
409
- #if !FFI_NO_RAW_API
410
-
411
- .globl _ffi_closure_raw_SYSV.eh
412
- _ffi_closure_raw_SYSV.eh:
413
- LSFDE3:
414
- .set L$set$10,LEFDE3-LASFDE3
415
- .long L$set$10
416
- LASFDE3:
417
- .long LASFDE3-EH_frame1
418
- .long .LFB3-.
419
- .set L$set$11,.LFE3-.LFB3
420
- .long L$set$11
421
- .byte 0x0
422
- .byte 0x4
423
- .set L$set$12,.LCFI4-.LFB3
424
- .long L$set$12
425
- .byte 0xe
426
- .byte 0x8
427
- .byte 0x84
428
- .byte 0x2
429
- .byte 0x4
430
- .set L$set$13,.LCFI5-.LCFI4
431
- .long L$set$13
432
- .byte 0xd
433
- .byte 0x4
434
- .byte 0x4
435
- .set L$set$14,.LCFI6-.LCFI5
436
- .long L$set$14
437
- .byte 0x85
438
- .byte 0x3
439
- .align 2
440
- LEFDE3:
441
-
442
- #endif
443
-
444
- #endif /* ifndef __x86_64__ */
@@ -1,416 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc.
3
- Copyright (c) 2008 Red Hat, Inc.
4
- derived from unix64.S
5
-
6
- x86-64 Foreign Function Interface for Darwin.
7
-
8
- Permission is hereby granted, free of charge, to any person obtaining
9
- a copy of this software and associated documentation files (the
10
- ``Software''), to deal in the Software without restriction, including
11
- without limitation the rights to use, copy, modify, merge, publish,
12
- distribute, sublicense, and/or sell copies of the Software, and to
13
- permit persons to whom the Software is furnished to do so, subject to
14
- the following conditions:
15
-
16
- The above copyright notice and this permission notice shall be included
17
- in all copies or substantial portions of the Software.
18
-
19
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
23
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25
- OTHER DEALINGS IN THE SOFTWARE.
26
- ----------------------------------------------------------------------- */
27
-
28
- #ifdef __x86_64__
29
- #define LIBFFI_ASM
30
- #include <fficonfig.h>
31
- #include <ffi.h>
32
-
33
- .file "darwin64.S"
34
- .text
35
-
36
- /* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
37
- void *raddr, void (*fnaddr)(void));
38
-
39
- Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
40
- for this function. This has been allocated by ffi_call. We also
41
- deallocate some of the stack that has been alloca'd. */
42
-
43
- .align 3
44
- .globl _ffi_call_unix64
45
-
46
- _ffi_call_unix64:
47
- LUW0:
48
- movq (%rsp), %r10 /* Load return address. */
49
- leaq (%rdi, %rsi), %rax /* Find local stack base. */
50
- movq %rdx, (%rax) /* Save flags. */
51
- movq %rcx, 8(%rax) /* Save raddr. */
52
- movq %rbp, 16(%rax) /* Save old frame pointer. */
53
- movq %r10, 24(%rax) /* Relocate return address. */
54
- movq %rax, %rbp /* Finalize local stack frame. */
55
- LUW1:
56
- movq %rdi, %r10 /* Save a copy of the register area. */
57
- movq %r8, %r11 /* Save a copy of the target fn. */
58
- movl %r9d, %eax /* Set number of SSE registers. */
59
-
60
- /* Load up all argument registers. */
61
- movq (%r10), %rdi
62
- movq 8(%r10), %rsi
63
- movq 16(%r10), %rdx
64
- movq 24(%r10), %rcx
65
- movq 32(%r10), %r8
66
- movq 40(%r10), %r9
67
- testl %eax, %eax
68
- jnz Lload_sse
69
- Lret_from_load_sse:
70
-
71
- /* Deallocate the reg arg area. */
72
- leaq 176(%r10), %rsp
73
-
74
- /* Call the user function. */
75
- call *%r11
76
-
77
- /* Deallocate stack arg area; local stack frame in redzone. */
78
- leaq 24(%rbp), %rsp
79
-
80
- movq 0(%rbp), %rcx /* Reload flags. */
81
- movq 8(%rbp), %rdi /* Reload raddr. */
82
- movq 16(%rbp), %rbp /* Reload old frame pointer. */
83
- LUW2:
84
-
85
- /* The first byte of the flags contains the FFI_TYPE. */
86
- movzbl %cl, %r10d
87
- leaq Lstore_table(%rip), %r11
88
- movslq (%r11, %r10, 4), %r10
89
- addq %r11, %r10
90
- jmp *%r10
91
-
92
- Lstore_table:
93
- .long Lst_void-Lstore_table /* FFI_TYPE_VOID */
94
- .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */
95
- .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */
96
- .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */
97
- .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */
98
- .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */
99
- .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */
100
- .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */
101
- .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */
102
- .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */
103
- .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */
104
- .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */
105
- .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */
106
- .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */
107
- .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */
108
-
109
- .text
110
- .align 3
111
- Lst_void:
112
- ret
113
- .align 3
114
- Lst_uint8:
115
- movzbq %al, %rax
116
- movq %rax, (%rdi)
117
- ret
118
- .align 3
119
- Lst_sint8:
120
- movsbq %al, %rax
121
- movq %rax, (%rdi)
122
- ret
123
- .align 3
124
- Lst_uint16:
125
- movzwq %ax, %rax
126
- movq %rax, (%rdi)
127
- .align 3
128
- Lst_sint16:
129
- movswq %ax, %rax
130
- movq %rax, (%rdi)
131
- ret
132
- .align 3
133
- Lst_uint32:
134
- movl %eax, %eax
135
- movq %rax, (%rdi)
136
- .align 3
137
- Lst_sint32:
138
- cltq
139
- movq %rax, (%rdi)
140
- ret
141
- .align 3
142
- Lst_int64:
143
- movq %rax, (%rdi)
144
- ret
145
- .align 3
146
- Lst_float:
147
- movss %xmm0, (%rdi)
148
- ret
149
- .align 3
150
- Lst_double:
151
- movsd %xmm0, (%rdi)
152
- ret
153
- Lst_ldouble:
154
- fstpt (%rdi)
155
- ret
156
- .align 3
157
- Lst_struct:
158
- leaq -20(%rsp), %rsi /* Scratch area in redzone. */
159
-
160
- /* We have to locate the values now, and since we don't want to
161
- write too much data into the user's return value, we spill the
162
- value to a 16 byte scratch area first. Bits 8, 9, and 10
163
- control where the values are located. Only one of the three
164
- bits will be set; see ffi_prep_cif_machdep for the pattern. */
165
- movd %xmm0, %r10
166
- movd %xmm1, %r11
167
- testl $0x100, %ecx
168
- cmovnz %rax, %rdx
169
- cmovnz %r10, %rax
170
- testl $0x200, %ecx
171
- cmovnz %r10, %rdx
172
- testl $0x400, %ecx
173
- cmovnz %r10, %rax
174
- cmovnz %r11, %rdx
175
- movq %rax, (%rsi)
176
- movq %rdx, 8(%rsi)
177
-
178
- /* Bits 12-31 contain the true size of the structure. Copy from
179
- the scratch area to the true destination. */
180
- shrl $12, %ecx
181
- rep movsb
182
- ret
183
-
184
- /* Many times we can avoid loading any SSE registers at all.
185
- It's not worth an indirect jump to load the exact set of
186
- SSE registers needed; zero or all is a good compromise. */
187
- .align 3
188
- LUW3:
189
- Lload_sse:
190
- movdqa 48(%r10), %xmm0
191
- movdqa 64(%r10), %xmm1
192
- movdqa 80(%r10), %xmm2
193
- movdqa 96(%r10), %xmm3
194
- movdqa 112(%r10), %xmm4
195
- movdqa 128(%r10), %xmm5
196
- movdqa 144(%r10), %xmm6
197
- movdqa 160(%r10), %xmm7
198
- jmp Lret_from_load_sse
199
-
200
- LUW4:
201
- .align 3
202
- .globl _ffi_closure_unix64
203
-
204
- _ffi_closure_unix64:
205
- LUW5:
206
- /* The carry flag is set by the trampoline iff SSE registers
207
- are used. Don't clobber it before the branch instruction. */
208
- leaq -200(%rsp), %rsp
209
- LUW6:
210
- movq %rdi, (%rsp)
211
- movq %rsi, 8(%rsp)
212
- movq %rdx, 16(%rsp)
213
- movq %rcx, 24(%rsp)
214
- movq %r8, 32(%rsp)
215
- movq %r9, 40(%rsp)
216
- jc Lsave_sse
217
- Lret_from_save_sse:
218
-
219
- movq %r10, %rdi
220
- leaq 176(%rsp), %rsi
221
- movq %rsp, %rdx
222
- leaq 208(%rsp), %rcx
223
- call _ffi_closure_unix64_inner
224
-
225
- /* Deallocate stack frame early; return value is now in redzone. */
226
- addq $200, %rsp
227
- LUW7:
228
-
229
- /* The first byte of the return value contains the FFI_TYPE. */
230
- movzbl %al, %r10d
231
- leaq Lload_table(%rip), %r11
232
- movslq (%r11, %r10, 4), %r10
233
- addq %r11, %r10
234
- jmp *%r10
235
-
236
- Lload_table:
237
- .long Lld_void-Lload_table /* FFI_TYPE_VOID */
238
- .long Lld_int32-Lload_table /* FFI_TYPE_INT */
239
- .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */
240
- .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */
241
- .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */
242
- .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */
243
- .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */
244
- .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */
245
- .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */
246
- .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */
247
- .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */
248
- .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */
249
- .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */
250
- .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */
251
- .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */
252
-
253
- .text
254
- .align 3
255
- Lld_void:
256
- ret
257
- .align 3
258
- Lld_int8:
259
- movzbl -24(%rsp), %eax
260
- ret
261
- .align 3
262
- Lld_int16:
263
- movzwl -24(%rsp), %eax
264
- ret
265
- .align 3
266
- Lld_int32:
267
- movl -24(%rsp), %eax
268
- ret
269
- .align 3
270
- Lld_int64:
271
- movq -24(%rsp), %rax
272
- ret
273
- .align 3
274
- Lld_float:
275
- movss -24(%rsp), %xmm0
276
- ret
277
- .align 3
278
- Lld_double:
279
- movsd -24(%rsp), %xmm0
280
- ret
281
- .align 3
282
- Lld_ldouble:
283
- fldt -24(%rsp)
284
- ret
285
- .align 3
286
- Lld_struct:
287
- /* There are four possibilities here, %rax/%rdx, %xmm0/%rax,
288
- %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading
289
- both rdx and xmm1 with the second word. For the remaining,
290
- bit 8 set means xmm0 gets the second word, and bit 9 means
291
- that rax gets the second word. */
292
- movq -24(%rsp), %rcx
293
- movq -16(%rsp), %rdx
294
- movq -16(%rsp), %xmm1
295
- testl $0x100, %eax
296
- cmovnz %rdx, %rcx
297
- movd %rcx, %xmm0
298
- testl $0x200, %eax
299
- movq -24(%rsp), %rax
300
- cmovnz %rdx, %rax
301
- ret
302
-
303
- /* See the comment above Lload_sse; the same logic applies here. */
304
- .align 3
305
- LUW8:
306
- Lsave_sse:
307
- movdqa %xmm0, 48(%rsp)
308
- movdqa %xmm1, 64(%rsp)
309
- movdqa %xmm2, 80(%rsp)
310
- movdqa %xmm3, 96(%rsp)
311
- movdqa %xmm4, 112(%rsp)
312
- movdqa %xmm5, 128(%rsp)
313
- movdqa %xmm6, 144(%rsp)
314
- movdqa %xmm7, 160(%rsp)
315
- jmp Lret_from_save_sse
316
-
317
- LUW9:
318
- .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
319
- EH_frame1:
320
- .set L$set$0,LECIE1-LSCIE1 /* CIE Length */
321
- .long L$set$0
322
- LSCIE1:
323
- .long 0x0 /* CIE Identifier Tag */
324
- .byte 0x1 /* CIE Version */
325
- .ascii "zR\0" /* CIE Augmentation */
326
- .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */
327
- .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */
328
- .byte 0x10 /* CIE RA Column */
329
- .byte 0x1 /* uleb128 0x1; Augmentation size */
330
- .byte 0x10 /* FDE Encoding (pcrel sdata4) */
331
- .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
332
- .byte 0x7 /* uleb128 0x7 */
333
- .byte 0x8 /* uleb128 0x8 */
334
- .byte 0x90 /* DW_CFA_offset, column 0x10 */
335
- .byte 0x1
336
- .align 3
337
- LECIE1:
338
- .globl _ffi_call_unix64.eh
339
- _ffi_call_unix64.eh:
340
- LSFDE1:
341
- .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */
342
- .long L$set$1
343
- LASFDE1:
344
- .long LASFDE1-EH_frame1 /* FDE CIE offset */
345
- .quad LUW0-. /* FDE initial location */
346
- .set L$set$2,LUW4-LUW0 /* FDE address range */
347
- .quad L$set$2
348
- .byte 0x0 /* Augmentation size */
349
- .byte 0x4 /* DW_CFA_advance_loc4 */
350
- .set L$set$3,LUW1-LUW0
351
- .long L$set$3
352
-
353
- /* New stack frame based off rbp. This is a itty bit of unwind
354
- trickery in that the CFA *has* changed. There is no easy way
355
- to describe it correctly on entry to the function. Fortunately,
356
- it doesn't matter too much since at all points we can correctly
357
- unwind back to ffi_call. Note that the location to which we
358
- moved the return address is (the new) CFA-8, so from the
359
- perspective of the unwind info, it hasn't moved. */
360
- .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */
361
- .byte 0x6
362
- .byte 0x20
363
- .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */
364
- .byte 0x2
365
- .byte 0xa /* DW_CFA_remember_state */
366
-
367
- .byte 0x4 /* DW_CFA_advance_loc4 */
368
- .set L$set$4,LUW2-LUW1
369
- .long L$set$4
370
- .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
371
- .byte 0x7
372
- .byte 0x8
373
- .byte 0xc0+6 /* DW_CFA_restore, %rbp */
374
-
375
- .byte 0x4 /* DW_CFA_advance_loc4 */
376
- .set L$set$5,LUW3-LUW2
377
- .long L$set$5
378
- .byte 0xb /* DW_CFA_restore_state */
379
-
380
- .align 3
381
- LEFDE1:
382
- .globl _ffi_closure_unix64.eh
383
- _ffi_closure_unix64.eh:
384
- LSFDE3:
385
- .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */
386
- .long L$set$6
387
- LASFDE3:
388
- .long LASFDE3-EH_frame1 /* FDE CIE offset */
389
- .quad LUW5-. /* FDE initial location */
390
- .set L$set$7,LUW9-LUW5 /* FDE address range */
391
- .quad L$set$7
392
- .byte 0x0 /* Augmentation size */
393
-
394
- .byte 0x4 /* DW_CFA_advance_loc4 */
395
- .set L$set$8,LUW6-LUW5
396
- .long L$set$8
397
- .byte 0xe /* DW_CFA_def_cfa_offset */
398
- .byte 208,1 /* uleb128 208 */
399
- .byte 0xa /* DW_CFA_remember_state */
400
-
401
- .byte 0x4 /* DW_CFA_advance_loc4 */
402
- .set L$set$9,LUW7-LUW6
403
- .long L$set$9
404
- .byte 0xe /* DW_CFA_def_cfa_offset */
405
- .byte 0x8
406
-
407
- .byte 0x4 /* DW_CFA_advance_loc4 */
408
- .set L$set$10,LUW8-LUW7
409
- .long L$set$10
410
- .byte 0xb /* DW_CFA_restore_state */
411
-
412
- .align 3
413
- LEFDE3:
414
- .subsections_via_symbols
415
-
416
- #endif /* __x86_64__ */