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,77 @@
1
+ /* -----------------------------------------------------------------------
2
+ types.c - Copyright (c) 1996, 1998 Red Hat, Inc.
3
+
4
+ Predefined ffi_types needed by libffi.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ ``Software''), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included
15
+ in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
+ DEALINGS IN THE SOFTWARE.
25
+ ----------------------------------------------------------------------- */
26
+
27
+ /* Hide the basic type definitions from the header file, so that we
28
+ can redefine them here as "const". */
29
+ #define LIBFFI_HIDE_BASIC_TYPES
30
+
31
+ #include <ffi.h>
32
+ #include <ffi_common.h>
33
+
34
+ /* Type definitions */
35
+
36
+ #define FFI_TYPEDEF(name, type, id) \
37
+ struct struct_align_##name { \
38
+ char c; \
39
+ type x; \
40
+ }; \
41
+ const ffi_type ffi_type_##name = { \
42
+ sizeof(type), \
43
+ offsetof(struct struct_align_##name, x), \
44
+ id, NULL \
45
+ }
46
+
47
+ /* Size and alignment are fake here. They must not be 0. */
48
+ const ffi_type ffi_type_void = {
49
+ 1, 1, FFI_TYPE_VOID, NULL
50
+ };
51
+
52
+ FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8);
53
+ FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8);
54
+ FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16);
55
+ FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16);
56
+ FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32);
57
+ FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32);
58
+ FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64);
59
+ FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64);
60
+
61
+ FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER);
62
+
63
+ FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT);
64
+ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE);
65
+
66
+ #ifdef __alpha__
67
+ /* Even if we're not configured to default to 128-bit long double,
68
+ maintain binary compatibility, as -mlong-double-128 can be used
69
+ at any time. */
70
+ /* Validate the hard-coded number below. */
71
+ # if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4
72
+ # error FFI_TYPE_LONGDOUBLE out of date
73
+ # endif
74
+ const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
75
+ #elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
76
+ FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE);
77
+ #endif
@@ -0,0 +1,444 @@
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__ */