ffi 1.9.3-x64-mingw32

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

Potentially problematic release.


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

Files changed (436) hide show
  1. data/COPYING +49 -0
  2. data/LICENSE +24 -0
  3. data/README.md +109 -0
  4. data/Rakefile +220 -0
  5. data/ext/ffi_c/AbstractMemory.c +1032 -0
  6. data/ext/ffi_c/AbstractMemory.h +175 -0
  7. data/ext/ffi_c/ArrayType.c +162 -0
  8. data/ext/ffi_c/ArrayType.h +59 -0
  9. data/ext/ffi_c/Buffer.c +365 -0
  10. data/ext/ffi_c/Call.c +465 -0
  11. data/ext/ffi_c/Call.h +93 -0
  12. data/ext/ffi_c/ClosurePool.c +283 -0
  13. data/ext/ffi_c/ClosurePool.h +57 -0
  14. data/ext/ffi_c/DataConverter.c +91 -0
  15. data/ext/ffi_c/DynamicLibrary.c +333 -0
  16. data/ext/ffi_c/DynamicLibrary.h +49 -0
  17. data/ext/ffi_c/Function.c +999 -0
  18. data/ext/ffi_c/Function.h +87 -0
  19. data/ext/ffi_c/FunctionInfo.c +271 -0
  20. data/ext/ffi_c/LastError.c +184 -0
  21. data/ext/ffi_c/LastError.h +47 -0
  22. data/ext/ffi_c/LongDouble.c +63 -0
  23. data/ext/ffi_c/LongDouble.h +51 -0
  24. data/ext/ffi_c/MappedType.c +168 -0
  25. data/ext/ffi_c/MappedType.h +59 -0
  26. data/ext/ffi_c/MemoryPointer.c +197 -0
  27. data/ext/ffi_c/MemoryPointer.h +53 -0
  28. data/ext/ffi_c/MethodHandle.c +360 -0
  29. data/ext/ffi_c/MethodHandle.h +55 -0
  30. data/ext/ffi_c/Platform.c +121 -0
  31. data/ext/ffi_c/Platform.h +45 -0
  32. data/ext/ffi_c/Pointer.c +508 -0
  33. data/ext/ffi_c/Pointer.h +63 -0
  34. data/ext/ffi_c/Struct.c +828 -0
  35. data/ext/ffi_c/Struct.h +106 -0
  36. data/ext/ffi_c/StructByReference.c +190 -0
  37. data/ext/ffi_c/StructByReference.h +50 -0
  38. data/ext/ffi_c/StructByValue.c +150 -0
  39. data/ext/ffi_c/StructByValue.h +55 -0
  40. data/ext/ffi_c/StructLayout.c +698 -0
  41. data/ext/ffi_c/Thread.c +352 -0
  42. data/ext/ffi_c/Thread.h +95 -0
  43. data/ext/ffi_c/Type.c +397 -0
  44. data/ext/ffi_c/Type.h +62 -0
  45. data/ext/ffi_c/Types.c +139 -0
  46. data/ext/ffi_c/Types.h +89 -0
  47. data/ext/ffi_c/Variadic.c +276 -0
  48. data/ext/ffi_c/compat.h +83 -0
  49. data/ext/ffi_c/extconf.rb +64 -0
  50. data/ext/ffi_c/ffi.c +98 -0
  51. data/ext/ffi_c/libffi.bsd.mk +34 -0
  52. data/ext/ffi_c/libffi.darwin.mk +95 -0
  53. data/ext/ffi_c/libffi.gnu.mk +31 -0
  54. data/ext/ffi_c/libffi.mk +13 -0
  55. data/ext/ffi_c/libffi.vc.mk +26 -0
  56. data/ext/ffi_c/libffi.vc64.mk +26 -0
  57. data/ext/ffi_c/libffi/ChangeLog +4600 -0
  58. data/ext/ffi_c/libffi/ChangeLog.libffi +584 -0
  59. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  60. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  61. data/ext/ffi_c/libffi/LICENSE +21 -0
  62. data/ext/ffi_c/libffi/Makefile.am +196 -0
  63. data/ext/ffi_c/libffi/Makefile.in +1820 -0
  64. data/ext/ffi_c/libffi/Makefile.vc +141 -0
  65. data/ext/ffi_c/libffi/Makefile.vc64 +141 -0
  66. data/ext/ffi_c/libffi/README +342 -0
  67. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  68. data/ext/ffi_c/libffi/aclocal.m4 +1873 -0
  69. data/ext/ffi_c/libffi/build-ios.sh +67 -0
  70. data/ext/ffi_c/libffi/compile +143 -0
  71. data/ext/ffi_c/libffi/config.guess +1501 -0
  72. data/ext/ffi_c/libffi/config.sub +1705 -0
  73. data/ext/ffi_c/libffi/configure +17191 -0
  74. data/ext/ffi_c/libffi/configure.ac +496 -0
  75. data/ext/ffi_c/libffi/configure.host +11 -0
  76. data/ext/ffi_c/libffi/depcomp +630 -0
  77. data/ext/ffi_c/libffi/doc/libffi.info +593 -0
  78. data/ext/ffi_c/libffi/doc/libffi.texi +600 -0
  79. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  80. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  81. data/ext/ffi_c/libffi/fficonfig.h.in +199 -0
  82. data/ext/ffi_c/libffi/fficonfig.hw +57 -0
  83. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  84. data/ext/ffi_c/libffi/include/Makefile.in +487 -0
  85. data/ext/ffi_c/libffi/include/ffi.h.in +427 -0
  86. data/ext/ffi_c/libffi/include/ffi.h.vc +427 -0
  87. data/ext/ffi_c/libffi/include/ffi.h.vc64 +427 -0
  88. data/ext/ffi_c/libffi/include/ffi_common.h +126 -0
  89. data/ext/ffi_c/libffi/install-sh +520 -0
  90. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  91. data/ext/ffi_c/libffi/libtool-version +29 -0
  92. data/ext/ffi_c/libffi/ltmain.sh +9636 -0
  93. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +176 -0
  94. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +195 -0
  95. data/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 +76 -0
  96. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +63 -0
  97. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +70 -0
  98. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +300 -0
  99. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +215 -0
  100. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +79 -0
  101. data/ext/ffi_c/libffi/m4/libtool.m4 +7831 -0
  102. data/ext/ffi_c/libffi/m4/ltoptions.m4 +369 -0
  103. data/ext/ffi_c/libffi/m4/ltsugar.m4 +123 -0
  104. data/ext/ffi_c/libffi/m4/ltversion.m4 +23 -0
  105. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +98 -0
  106. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  107. data/ext/ffi_c/libffi/man/Makefile.in +466 -0
  108. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  109. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  110. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  111. data/ext/ffi_c/libffi/mdate-sh +201 -0
  112. data/ext/ffi_c/libffi/missing +376 -0
  113. data/ext/ffi_c/libffi/msvcc.sh +197 -0
  114. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  115. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  116. data/ext/ffi_c/libffi/src/alpha/osf.S +387 -0
  117. data/ext/ffi_c/libffi/src/arm/ffi.c +728 -0
  118. data/ext/ffi_c/libffi/src/arm/ffitarget.h +65 -0
  119. data/ext/ffi_c/libffi/src/arm/gentramp.sh +118 -0
  120. data/ext/ffi_c/libffi/src/arm/sysv.S +497 -0
  121. data/ext/ffi_c/libffi/src/arm/trampoline.S +4450 -0
  122. data/ext/ffi_c/libffi/src/avr32/ffi.c +423 -0
  123. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +50 -0
  124. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  125. data/ext/ffi_c/libffi/src/closures.c +615 -0
  126. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  127. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  128. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  129. data/ext/ffi_c/libffi/src/debug.c +59 -0
  130. data/ext/ffi_c/libffi/src/dlmalloc.c +5161 -0
  131. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  132. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  133. data/ext/ffi_c/libffi/src/frv/ffitarget.h +57 -0
  134. data/ext/ffi_c/libffi/src/ia64/ffi.c +582 -0
  135. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  136. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  137. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  138. data/ext/ffi_c/libffi/src/java_raw_api.c +356 -0
  139. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  140. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  141. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  142. data/ext/ffi_c/libffi/src/m68k/ffi.c +288 -0
  143. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  144. data/ext/ffi_c/libffi/src/m68k/sysv.S +270 -0
  145. data/ext/ffi_c/libffi/src/mips/ffi.c +1036 -0
  146. data/ext/ffi_c/libffi/src/mips/ffitarget.h +242 -0
  147. data/ext/ffi_c/libffi/src/mips/n32.S +591 -0
  148. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  149. data/ext/ffi_c/libffi/src/moxie/eabi.S +128 -0
  150. data/ext/ffi_c/libffi/src/moxie/ffi.c +276 -0
  151. data/ext/ffi_c/libffi/src/pa/ffi.c +719 -0
  152. data/ext/ffi_c/libffi/src/pa/ffitarget.h +78 -0
  153. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  154. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  155. data/ext/ffi_c/libffi/src/powerpc/aix.S +328 -0
  156. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +445 -0
  157. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  158. data/ext/ffi_c/libffi/src/powerpc/darwin.S +383 -0
  159. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +575 -0
  160. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1448 -0
  161. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +1359 -0
  162. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +139 -0
  163. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  164. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  165. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  166. data/ext/ffi_c/libffi/src/powerpc/sysv.S +219 -0
  167. data/ext/ffi_c/libffi/src/prep_cif.c +177 -0
  168. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  169. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  170. data/ext/ffi_c/libffi/src/s390/ffitarget.h +62 -0
  171. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  172. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  173. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  174. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  175. data/ext/ffi_c/libffi/src/sh64/ffi.c +468 -0
  176. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  177. data/ext/ffi_c/libffi/src/sh64/sysv.S +539 -0
  178. data/ext/ffi_c/libffi/src/sparc/ffi.c +669 -0
  179. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +68 -0
  180. data/ext/ffi_c/libffi/src/sparc/v8.S +313 -0
  181. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  182. data/ext/ffi_c/libffi/src/types.c +77 -0
  183. data/ext/ffi_c/libffi/src/x86/darwin.S +444 -0
  184. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  185. data/ext/ffi_c/libffi/src/x86/ffi.c +644 -0
  186. data/ext/ffi_c/libffi/src/x86/ffi64.c +635 -0
  187. data/ext/ffi_c/libffi/src/x86/ffitarget.h +121 -0
  188. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  189. data/ext/ffi_c/libffi/src/x86/sysv.S +468 -0
  190. data/ext/ffi_c/libffi/src/x86/unix64.S +426 -0
  191. data/ext/ffi_c/libffi/src/x86/win32.S +1065 -0
  192. data/ext/ffi_c/libffi/src/x86/win64.S +468 -0
  193. data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -0
  194. data/ext/ffi_c/libffi/testsuite/Makefile.in +500 -0
  195. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  196. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +300 -0
  197. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +350 -0
  198. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  199. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +32 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +89 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +81 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +81 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +82 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +89 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +92 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +90 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +64 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +94 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +95 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +96 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +102 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +89 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +91 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +93 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +113 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +90 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +95 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +90 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +90 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +98 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +90 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +109 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +98 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +124 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +113 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +99 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +117 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +97 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +88 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +90 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +91 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +93 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +91 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +92 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +134 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +117 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +95 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +91 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +91 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +92 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +91 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +91 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +93 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +43 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +60 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +42 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +60 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +74 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +74 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +86 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +91 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +74 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +86 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +140 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +44 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +42 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +42 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +42 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +43 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +47 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +43 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +36 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +26 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +153 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +58 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +342 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +152 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +161 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +133 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +110 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +111 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +111 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +112 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +131 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +111 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +131 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +131 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +90 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +43 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +125 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +96 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +35 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +124 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  327. data/ext/ffi_c/libffi/texinfo.tex +7210 -0
  328. data/ext/ffi_c/rbffi.h +57 -0
  329. data/ext/ffi_c/rbffi_endian.h +59 -0
  330. data/ext/ffi_c/win32/stdbool.h +8 -0
  331. data/ext/ffi_c/win32/stdint.h +201 -0
  332. data/ffi.gemspec +22 -0
  333. data/gen/Rakefile +30 -0
  334. data/lib/ffi.rb +28 -0
  335. data/lib/ffi/autopointer.rb +194 -0
  336. data/lib/ffi/buffer.rb +4 -0
  337. data/lib/ffi/callback.rb +4 -0
  338. data/lib/ffi/enum.rb +173 -0
  339. data/lib/ffi/errno.rb +43 -0
  340. data/lib/ffi/ffi.rb +44 -0
  341. data/lib/ffi/io.rb +62 -0
  342. data/lib/ffi/library.rb +499 -0
  343. data/lib/ffi/managedstruct.rb +84 -0
  344. data/lib/ffi/memorypointer.rb +1 -0
  345. data/lib/ffi/platform.rb +148 -0
  346. data/lib/ffi/platform/arm-linux/types.conf +104 -0
  347. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  348. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  349. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  350. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  351. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  352. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  353. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  354. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  355. data/lib/ffi/platform/i386-windows/types.conf +105 -0
  356. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  357. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  358. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  359. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  360. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  361. data/lib/ffi/platform/powerpc-linux/types.conf +100 -0
  362. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  363. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  364. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  365. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  366. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  367. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  368. data/lib/ffi/platform/x86_64-darwin/types.conf +100 -0
  369. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  370. data/lib/ffi/platform/x86_64-linux/types.conf +102 -0
  371. data/lib/ffi/platform/x86_64-netbsd/types.conf +126 -0
  372. data/lib/ffi/platform/x86_64-openbsd/types.conf +128 -0
  373. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  374. data/lib/ffi/platform/x86_64-windows/types.conf +27 -0
  375. data/lib/ffi/pointer.rb +134 -0
  376. data/lib/ffi/struct.rb +367 -0
  377. data/lib/ffi/struct_layout_builder.rb +222 -0
  378. data/lib/ffi/tools/const_generator.rb +229 -0
  379. data/lib/ffi/tools/generator.rb +60 -0
  380. data/lib/ffi/tools/generator_task.rb +36 -0
  381. data/lib/ffi/tools/struct_generator.rb +194 -0
  382. data/lib/ffi/tools/types_generator.rb +135 -0
  383. data/lib/ffi/types.rb +190 -0
  384. data/lib/ffi/union.rb +43 -0
  385. data/lib/ffi/variadic.rb +78 -0
  386. data/lib/ffi/version.rb +4 -0
  387. data/lib/ffi_c.so +0 -0
  388. data/libtest/Benchmark.c +52 -0
  389. data/libtest/BoolTest.c +34 -0
  390. data/libtest/BufferTest.c +31 -0
  391. data/libtest/ClosureTest.c +190 -0
  392. data/libtest/EnumTest.c +34 -0
  393. data/libtest/FunctionTest.c +58 -0
  394. data/libtest/GNUmakefile +149 -0
  395. data/libtest/GlobalVariable.c +62 -0
  396. data/libtest/LastErrorTest.c +21 -0
  397. data/libtest/NumberTest.c +132 -0
  398. data/libtest/PointerTest.c +63 -0
  399. data/libtest/ReferenceTest.c +23 -0
  400. data/libtest/StringTest.c +34 -0
  401. data/libtest/StructTest.c +243 -0
  402. data/libtest/UnionTest.c +43 -0
  403. data/libtest/VariadicTest.c +62 -0
  404. data/spec/ffi/async_callback_spec.rb +35 -0
  405. data/spec/ffi/bool_spec.rb +29 -0
  406. data/spec/ffi/buffer_spec.rb +251 -0
  407. data/spec/ffi/callback_spec.rb +667 -0
  408. data/spec/ffi/custom_param_type.rb +36 -0
  409. data/spec/ffi/custom_type_spec.rb +74 -0
  410. data/spec/ffi/dup_spec.rb +54 -0
  411. data/spec/ffi/enum_spec.rb +220 -0
  412. data/spec/ffi/errno_spec.rb +18 -0
  413. data/spec/ffi/ffi_spec.rb +29 -0
  414. data/spec/ffi/function_spec.rb +76 -0
  415. data/spec/ffi/library_spec.rb +216 -0
  416. data/spec/ffi/long_double.rb +30 -0
  417. data/spec/ffi/managed_struct_spec.rb +57 -0
  418. data/spec/ffi/number_spec.rb +236 -0
  419. data/spec/ffi/pointer_spec.rb +265 -0
  420. data/spec/ffi/rbx/attach_function_spec.rb +28 -0
  421. data/spec/ffi/rbx/memory_pointer_spec.rb +123 -0
  422. data/spec/ffi/rbx/spec_helper.rb +1 -0
  423. data/spec/ffi/rbx/struct_spec.rb +13 -0
  424. data/spec/ffi/spec_helper.rb +33 -0
  425. data/spec/ffi/string_spec.rb +108 -0
  426. data/spec/ffi/strptr_spec.rb +50 -0
  427. data/spec/ffi/struct_by_ref_spec.rb +43 -0
  428. data/spec/ffi/struct_callback_spec.rb +69 -0
  429. data/spec/ffi/struct_initialize_spec.rb +35 -0
  430. data/spec/ffi/struct_packed_spec.rb +51 -0
  431. data/spec/ffi/struct_spec.rb +748 -0
  432. data/spec/ffi/typedef_spec.rb +78 -0
  433. data/spec/ffi/union_spec.rb +65 -0
  434. data/spec/ffi/variadic_spec.rb +92 -0
  435. data/spec/spec.opts +4 -0
  436. metadata +562 -0
@@ -0,0 +1,62 @@
1
+ /* -----------------------------------------------------------------*-C-*-
2
+ ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
3
+ Target configuration macros for S390.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ ``Software''), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included
14
+ in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
24
+
25
+ ----------------------------------------------------------------------- */
26
+
27
+ #ifndef LIBFFI_TARGET_H
28
+ #define LIBFFI_TARGET_H
29
+
30
+ #if defined (__s390x__)
31
+ #ifndef S390X
32
+ #define S390X
33
+ #endif
34
+ #endif
35
+
36
+ /* ---- System specific configurations ----------------------------------- */
37
+
38
+ #ifndef LIBFFI_ASM
39
+ typedef unsigned long ffi_arg;
40
+ typedef signed long ffi_sarg;
41
+
42
+ typedef enum ffi_abi {
43
+ FFI_FIRST_ABI = 0,
44
+ FFI_SYSV,
45
+ FFI_LAST_ABI,
46
+ FFI_DEFAULT_ABI = FFI_SYSV
47
+ } ffi_abi;
48
+ #endif
49
+
50
+
51
+ /* ---- Definitions for closures ----------------------------------------- */
52
+
53
+ #define FFI_CLOSURES 1
54
+ #ifdef S390X
55
+ #define FFI_TRAMPOLINE_SIZE 32
56
+ #else
57
+ #define FFI_TRAMPOLINE_SIZE 16
58
+ #endif
59
+ #define FFI_NATIVE_RAW_API 0
60
+
61
+ #endif
62
+
@@ -0,0 +1,434 @@
1
+ /* -----------------------------------------------------------------------
2
+ sysv.S - Copyright (c) 2000 Software AG
3
+ Copyright (c) 2008 Red Hat, Inc.
4
+
5
+ S390 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
+ #define LIBFFI_ASM
29
+ #include <fficonfig.h>
30
+ #include <ffi.h>
31
+
32
+ #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
+
43
+ # This assumes we are using gas.
44
+ .globl ffi_call_SYSV
45
+ .type ffi_call_SYSV,%function
46
+ 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
+
103
+ .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
110
+
111
+ .LFE1:
112
+ .ffi_call_SYSV_end:
113
+ .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
114
+
115
+
116
+ .globl ffi_closure_SYSV
117
+ .type ffi_closure_SYSV,%function
118
+ ffi_closure_SYSV:
119
+ .LFB2:
120
+ stm %r12,%r15,48(%r15) # Save registers
121
+ .LCFI10:
122
+ basr %r13,0 # Set up base register
123
+ .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
144
+
145
+ .align 4
146
+ .Lchelper:
147
+ .long ffi_closure_helper_SYSV-.Lcbase
148
+
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:
234
+
235
+ #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
+
246
+ # This assumes we are using gas.
247
+ .globl ffi_call_SYSV
248
+ .type ffi_call_SYSV,%function
249
+ 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
+
307
+ .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
314
+
315
+ .LFE1:
316
+ .ffi_call_SYSV_end:
317
+ .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
318
+
319
+
320
+ .globl ffi_closure_SYSV
321
+ .type ffi_closure_SYSV,%function
322
+ ffi_closure_SYSV:
323
+ .LFB2:
324
+ stmg %r14,%r15,112(%r15) # Save registers
325
+ .LCFI10:
326
+ 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
+
340
+ brasl %r14,ffi_closure_helper_SYSV # Call helper
341
+
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)
346
+ 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
431
+
432
+ #if defined __ELF__ && defined __linux__
433
+ .section .note.GNU-stack,"",@progbits
434
+ #endif