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,426 @@
1
+ /* -----------------------------------------------------------------------
2
+ unix64.S - Copyright (c) 2002 Bo Thorsen <bo@suse.de>
3
+ Copyright (c) 2008 Red Hat, Inc
4
+
5
+ x86-64 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
+ #ifdef __x86_64__
29
+ #define LIBFFI_ASM
30
+ #include <fficonfig.h>
31
+ #include <ffi.h>
32
+
33
+ .text
34
+
35
+ /* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
36
+ void *raddr, void (*fnaddr)(void));
37
+
38
+ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
39
+ for this function. This has been allocated by ffi_call. We also
40
+ deallocate some of the stack that has been alloca'd. */
41
+
42
+ .align 2
43
+ .globl ffi_call_unix64
44
+ .type ffi_call_unix64,@function
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
+ .align 2
110
+ .Lst_void:
111
+ ret
112
+ .align 2
113
+
114
+ .Lst_uint8:
115
+ movzbq %al, %rax
116
+ movq %rax, (%rdi)
117
+ ret
118
+ .align 2
119
+ .Lst_sint8:
120
+ movsbq %al, %rax
121
+ movq %rax, (%rdi)
122
+ ret
123
+ .align 2
124
+ .Lst_uint16:
125
+ movzwq %ax, %rax
126
+ movq %rax, (%rdi)
127
+ .align 2
128
+ .Lst_sint16:
129
+ movswq %ax, %rax
130
+ movq %rax, (%rdi)
131
+ ret
132
+ .align 2
133
+ .Lst_uint32:
134
+ movl %eax, %eax
135
+ movq %rax, (%rdi)
136
+ .align 2
137
+ .Lst_sint32:
138
+ cltq
139
+ movq %rax, (%rdi)
140
+ ret
141
+ .align 2
142
+ .Lst_int64:
143
+ movq %rax, (%rdi)
144
+ ret
145
+
146
+ .align 2
147
+ .Lst_float:
148
+ movss %xmm0, (%rdi)
149
+ ret
150
+ .align 2
151
+ .Lst_double:
152
+ movsd %xmm0, (%rdi)
153
+ ret
154
+ .Lst_ldouble:
155
+ fstpt (%rdi)
156
+ ret
157
+
158
+ .align 2
159
+ .Lst_struct:
160
+ leaq -20(%rsp), %rsi /* Scratch area in redzone. */
161
+
162
+ /* We have to locate the values now, and since we don't want to
163
+ write too much data into the user's return value, we spill the
164
+ value to a 16 byte scratch area first. Bits 8, 9, and 10
165
+ control where the values are located. Only one of the three
166
+ bits will be set; see ffi_prep_cif_machdep for the pattern. */
167
+ movd %xmm0, %r10
168
+ movd %xmm1, %r11
169
+ testl $0x100, %ecx
170
+ cmovnz %rax, %rdx
171
+ cmovnz %r10, %rax
172
+ testl $0x200, %ecx
173
+ cmovnz %r10, %rdx
174
+ testl $0x400, %ecx
175
+ cmovnz %r10, %rax
176
+ cmovnz %r11, %rdx
177
+ movq %rax, (%rsi)
178
+ movq %rdx, 8(%rsi)
179
+
180
+ /* Bits 12-31 contain the true size of the structure. Copy from
181
+ the scratch area to the true destination. */
182
+ shrl $12, %ecx
183
+ rep movsb
184
+ ret
185
+
186
+ /* Many times we can avoid loading any SSE registers at all.
187
+ It's not worth an indirect jump to load the exact set of
188
+ SSE registers needed; zero or all is a good compromise. */
189
+ .align 2
190
+ .LUW3:
191
+ .Lload_sse:
192
+ movdqa 48(%r10), %xmm0
193
+ movdqa 64(%r10), %xmm1
194
+ movdqa 80(%r10), %xmm2
195
+ movdqa 96(%r10), %xmm3
196
+ movdqa 112(%r10), %xmm4
197
+ movdqa 128(%r10), %xmm5
198
+ movdqa 144(%r10), %xmm6
199
+ movdqa 160(%r10), %xmm7
200
+ jmp .Lret_from_load_sse
201
+
202
+ .LUW4:
203
+ .size ffi_call_unix64,.-ffi_call_unix64
204
+
205
+ .align 2
206
+ .globl ffi_closure_unix64
207
+ .type ffi_closure_unix64,@function
208
+
209
+ ffi_closure_unix64:
210
+ .LUW5:
211
+ /* The carry flag is set by the trampoline iff SSE registers
212
+ are used. Don't clobber it before the branch instruction. */
213
+ leaq -200(%rsp), %rsp
214
+ .LUW6:
215
+ movq %rdi, (%rsp)
216
+ movq %rsi, 8(%rsp)
217
+ movq %rdx, 16(%rsp)
218
+ movq %rcx, 24(%rsp)
219
+ movq %r8, 32(%rsp)
220
+ movq %r9, 40(%rsp)
221
+ jc .Lsave_sse
222
+ .Lret_from_save_sse:
223
+
224
+ movq %r10, %rdi
225
+ leaq 176(%rsp), %rsi
226
+ movq %rsp, %rdx
227
+ leaq 208(%rsp), %rcx
228
+ call ffi_closure_unix64_inner@PLT
229
+
230
+ /* Deallocate stack frame early; return value is now in redzone. */
231
+ addq $200, %rsp
232
+ .LUW7:
233
+
234
+ /* The first byte of the return value contains the FFI_TYPE. */
235
+ movzbl %al, %r10d
236
+ leaq .Lload_table(%rip), %r11
237
+ movslq (%r11, %r10, 4), %r10
238
+ addq %r11, %r10
239
+ jmp *%r10
240
+
241
+ .Lload_table:
242
+ .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */
243
+ .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */
244
+ .long .Lld_float-.Lload_table /* FFI_TYPE_FLOAT */
245
+ .long .Lld_double-.Lload_table /* FFI_TYPE_DOUBLE */
246
+ .long .Lld_ldouble-.Lload_table /* FFI_TYPE_LONGDOUBLE */
247
+ .long .Lld_int8-.Lload_table /* FFI_TYPE_UINT8 */
248
+ .long .Lld_int8-.Lload_table /* FFI_TYPE_SINT8 */
249
+ .long .Lld_int16-.Lload_table /* FFI_TYPE_UINT16 */
250
+ .long .Lld_int16-.Lload_table /* FFI_TYPE_SINT16 */
251
+ .long .Lld_int32-.Lload_table /* FFI_TYPE_UINT32 */
252
+ .long .Lld_int32-.Lload_table /* FFI_TYPE_SINT32 */
253
+ .long .Lld_int64-.Lload_table /* FFI_TYPE_UINT64 */
254
+ .long .Lld_int64-.Lload_table /* FFI_TYPE_SINT64 */
255
+ .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */
256
+ .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */
257
+
258
+ .align 2
259
+ .Lld_void:
260
+ ret
261
+
262
+ .align 2
263
+ .Lld_int8:
264
+ movzbl -24(%rsp), %eax
265
+ ret
266
+ .align 2
267
+ .Lld_int16:
268
+ movzwl -24(%rsp), %eax
269
+ ret
270
+ .align 2
271
+ .Lld_int32:
272
+ movl -24(%rsp), %eax
273
+ ret
274
+ .align 2
275
+ .Lld_int64:
276
+ movq -24(%rsp), %rax
277
+ ret
278
+
279
+ .align 2
280
+ .Lld_float:
281
+ movss -24(%rsp), %xmm0
282
+ ret
283
+ .align 2
284
+ .Lld_double:
285
+ movsd -24(%rsp), %xmm0
286
+ ret
287
+ .align 2
288
+ .Lld_ldouble:
289
+ fldt -24(%rsp)
290
+ ret
291
+
292
+ .align 2
293
+ .Lld_struct:
294
+ /* There are four possibilities here, %rax/%rdx, %xmm0/%rax,
295
+ %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading
296
+ both rdx and xmm1 with the second word. For the remaining,
297
+ bit 8 set means xmm0 gets the second word, and bit 9 means
298
+ that rax gets the second word. */
299
+ movq -24(%rsp), %rcx
300
+ movq -16(%rsp), %rdx
301
+ movq -16(%rsp), %xmm1
302
+ testl $0x100, %eax
303
+ cmovnz %rdx, %rcx
304
+ movd %rcx, %xmm0
305
+ testl $0x200, %eax
306
+ movq -24(%rsp), %rax
307
+ cmovnz %rdx, %rax
308
+ ret
309
+
310
+ /* See the comment above .Lload_sse; the same logic applies here. */
311
+ .align 2
312
+ .LUW8:
313
+ .Lsave_sse:
314
+ movdqa %xmm0, 48(%rsp)
315
+ movdqa %xmm1, 64(%rsp)
316
+ movdqa %xmm2, 80(%rsp)
317
+ movdqa %xmm3, 96(%rsp)
318
+ movdqa %xmm4, 112(%rsp)
319
+ movdqa %xmm5, 128(%rsp)
320
+ movdqa %xmm6, 144(%rsp)
321
+ movdqa %xmm7, 160(%rsp)
322
+ jmp .Lret_from_save_sse
323
+
324
+ .LUW9:
325
+ .size ffi_closure_unix64,.-ffi_closure_unix64
326
+
327
+ #ifdef HAVE_AS_X86_64_UNWIND_SECTION_TYPE
328
+ .section .eh_frame,"a",@unwind
329
+ #else
330
+ .section .eh_frame,"a",@progbits
331
+ #endif
332
+ .Lframe1:
333
+ .long .LECIE1-.LSCIE1 /* CIE Length */
334
+ .LSCIE1:
335
+ .long 0 /* CIE Identifier Tag */
336
+ .byte 1 /* CIE Version */
337
+ .ascii "zR\0" /* CIE Augmentation */
338
+ .uleb128 1 /* CIE Code Alignment Factor */
339
+ .sleb128 -8 /* CIE Data Alignment Factor */
340
+ .byte 0x10 /* CIE RA Column */
341
+ .uleb128 1 /* Augmentation size */
342
+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */
343
+ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
344
+ .uleb128 7
345
+ .uleb128 8
346
+ .byte 0x80+16 /* DW_CFA_offset, %rip offset 1*-8 */
347
+ .uleb128 1
348
+ .align 8
349
+ .LECIE1:
350
+ .LSFDE1:
351
+ .long .LEFDE1-.LASFDE1 /* FDE Length */
352
+ .LASFDE1:
353
+ .long .LASFDE1-.Lframe1 /* FDE CIE offset */
354
+ #if HAVE_AS_X86_PCREL
355
+ .long .LUW0-. /* FDE initial location */
356
+ #else
357
+ .long .LUW0@rel
358
+ #endif
359
+ .long .LUW4-.LUW0 /* FDE address range */
360
+ .uleb128 0x0 /* Augmentation size */
361
+
362
+ .byte 0x4 /* DW_CFA_advance_loc4 */
363
+ .long .LUW1-.LUW0
364
+
365
+ /* New stack frame based off rbp. This is a itty bit of unwind
366
+ trickery in that the CFA *has* changed. There is no easy way
367
+ to describe it correctly on entry to the function. Fortunately,
368
+ it doesn't matter too much since at all points we can correctly
369
+ unwind back to ffi_call. Note that the location to which we
370
+ moved the return address is (the new) CFA-8, so from the
371
+ perspective of the unwind info, it hasn't moved. */
372
+ .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */
373
+ .uleb128 6
374
+ .uleb128 32
375
+ .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */
376
+ .uleb128 2
377
+ .byte 0xa /* DW_CFA_remember_state */
378
+
379
+ .byte 0x4 /* DW_CFA_advance_loc4 */
380
+ .long .LUW2-.LUW1
381
+ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
382
+ .uleb128 7
383
+ .uleb128 8
384
+ .byte 0xc0+6 /* DW_CFA_restore, %rbp */
385
+
386
+ .byte 0x4 /* DW_CFA_advance_loc4 */
387
+ .long .LUW3-.LUW2
388
+ .byte 0xb /* DW_CFA_restore_state */
389
+
390
+ .align 8
391
+ .LEFDE1:
392
+ .LSFDE3:
393
+ .long .LEFDE3-.LASFDE3 /* FDE Length */
394
+ .LASFDE3:
395
+ .long .LASFDE3-.Lframe1 /* FDE CIE offset */
396
+ #if HAVE_AS_X86_PCREL
397
+ .long .LUW5-. /* FDE initial location */
398
+ #else
399
+ .long .LUW5@rel
400
+ #endif
401
+ .long .LUW9-.LUW5 /* FDE address range */
402
+ .uleb128 0x0 /* Augmentation size */
403
+
404
+ .byte 0x4 /* DW_CFA_advance_loc4 */
405
+ .long .LUW6-.LUW5
406
+ .byte 0xe /* DW_CFA_def_cfa_offset */
407
+ .uleb128 208
408
+ .byte 0xa /* DW_CFA_remember_state */
409
+
410
+ .byte 0x4 /* DW_CFA_advance_loc4 */
411
+ .long .LUW7-.LUW6
412
+ .byte 0xe /* DW_CFA_def_cfa_offset */
413
+ .uleb128 8
414
+
415
+ .byte 0x4 /* DW_CFA_advance_loc4 */
416
+ .long .LUW8-.LUW7
417
+ .byte 0xb /* DW_CFA_restore_state */
418
+
419
+ .align 8
420
+ .LEFDE3:
421
+
422
+ #endif /* __x86_64__ */
423
+
424
+ #if defined __ELF__ && defined __linux__
425
+ .section .note.GNU-stack,"",@progbits
426
+ #endif
@@ -0,0 +1,1065 @@
1
+ /* -----------------------------------------------------------------------
2
+ win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc.
3
+ Copyright (c) 2001 John Beniton
4
+ Copyright (c) 2002 Ranjit Mathew
5
+ Copyright (c) 2009 Daniel Witte
6
+
7
+
8
+ X86 Foreign Function Interface
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining
11
+ a copy of this software and associated documentation files (the
12
+ ``Software''), to deal in the Software without restriction, including
13
+ without limitation the rights to use, copy, modify, merge, publish,
14
+ distribute, sublicense, and/or sell copies of the Software, and to
15
+ permit persons to whom the Software is furnished to do so, subject to
16
+ the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included
19
+ in all copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
22
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28
+ DEALINGS IN THE SOFTWARE.
29
+ -----------------------------------------------------------------------
30
+ */
31
+
32
+ #define LIBFFI_ASM
33
+ #include <fficonfig.h>
34
+ #include <ffi.h>
35
+
36
+ #ifdef _MSC_VER
37
+
38
+ .386
39
+ .MODEL FLAT, C
40
+
41
+ EXTRN ffi_closure_SYSV_inner:NEAR
42
+
43
+ _TEXT SEGMENT
44
+
45
+ ffi_call_win32 PROC NEAR,
46
+ ffi_prep_args : NEAR PTR DWORD,
47
+ ecif : NEAR PTR DWORD,
48
+ cif_bytes : DWORD,
49
+ cif_flags : DWORD,
50
+ rvalue : NEAR PTR DWORD,
51
+ fn : NEAR PTR DWORD
52
+
53
+ ;; Make room for all of the new args.
54
+ mov ecx, cif_bytes
55
+ sub esp, ecx
56
+
57
+ mov eax, esp
58
+
59
+ ;; Place all of the ffi_prep_args in position
60
+ push ecif
61
+ push eax
62
+ call ffi_prep_args
63
+
64
+ ;; Return stack to previous state and call the function
65
+ add esp, 8
66
+
67
+ call fn
68
+
69
+ ;; cdecl: we restore esp in the epilogue, so there's no need to
70
+ ;; remove the space we pushed for the args.
71
+ ;; stdcall: the callee has already cleaned the stack.
72
+
73
+ ;; Load ecx with the return type code
74
+ mov ecx, cif_flags
75
+
76
+ ;; If the return value pointer is NULL, assume no return value.
77
+ cmp rvalue, 0
78
+ jne ca_jumptable
79
+
80
+ ;; Even if there is no space for the return value, we are
81
+ ;; obliged to handle floating-point values.
82
+ cmp ecx, FFI_TYPE_FLOAT
83
+ jne ca_epilogue
84
+ fstp st(0)
85
+
86
+ jmp ca_epilogue
87
+
88
+ ca_jumptable:
89
+ jmp [ca_jumpdata + 4 * ecx]
90
+ ca_jumpdata:
91
+ ;; Do not insert anything here between label and jump table.
92
+ dd offset ca_epilogue ;; FFI_TYPE_VOID
93
+ dd offset ca_retint ;; FFI_TYPE_INT
94
+ dd offset ca_retfloat ;; FFI_TYPE_FLOAT
95
+ dd offset ca_retdouble ;; FFI_TYPE_DOUBLE
96
+ dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE
97
+ dd offset ca_retint8 ;; FFI_TYPE_UINT8
98
+ dd offset ca_retint8 ;; FFI_TYPE_SINT8
99
+ dd offset ca_retint16 ;; FFI_TYPE_UINT16
100
+ dd offset ca_retint16 ;; FFI_TYPE_SINT16
101
+ dd offset ca_retint ;; FFI_TYPE_UINT32
102
+ dd offset ca_retint ;; FFI_TYPE_SINT32
103
+ dd offset ca_retint64 ;; FFI_TYPE_UINT64
104
+ dd offset ca_retint64 ;; FFI_TYPE_SINT64
105
+ dd offset ca_epilogue ;; FFI_TYPE_STRUCT
106
+ dd offset ca_retint ;; FFI_TYPE_POINTER
107
+ dd offset ca_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B
108
+ dd offset ca_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B
109
+ dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B
110
+
111
+ ca_retint8:
112
+ ;; Load %ecx with the pointer to storage for the return value
113
+ mov ecx, rvalue
114
+ mov [ecx + 0], al
115
+ jmp ca_epilogue
116
+
117
+ ca_retint16:
118
+ ;; Load %ecx with the pointer to storage for the return value
119
+ mov ecx, rvalue
120
+ mov [ecx + 0], ax
121
+ jmp ca_epilogue
122
+
123
+ ca_retint:
124
+ ;; Load %ecx with the pointer to storage for the return value
125
+ mov ecx, rvalue
126
+ mov [ecx + 0], eax
127
+ jmp ca_epilogue
128
+
129
+ ca_retint64:
130
+ ;; Load %ecx with the pointer to storage for the return value
131
+ mov ecx, rvalue
132
+ mov [ecx + 0], eax
133
+ mov [ecx + 4], edx
134
+ jmp ca_epilogue
135
+
136
+ ca_retfloat:
137
+ ;; Load %ecx with the pointer to storage for the return value
138
+ mov ecx, rvalue
139
+ fstp DWORD PTR [ecx]
140
+ jmp ca_epilogue
141
+
142
+ ca_retdouble:
143
+ ;; Load %ecx with the pointer to storage for the return value
144
+ mov ecx, rvalue
145
+ fstp QWORD PTR [ecx]
146
+ jmp ca_epilogue
147
+
148
+ ca_retlongdouble:
149
+ ;; Load %ecx with the pointer to storage for the return value
150
+ mov ecx, rvalue
151
+ fstp TBYTE PTR [ecx]
152
+ jmp ca_epilogue
153
+
154
+ ca_epilogue:
155
+ ;; Epilogue code is autogenerated.
156
+ ret
157
+ ffi_call_win32 ENDP
158
+
159
+ ffi_closure_SYSV PROC NEAR FORCEFRAME
160
+ ;; the ffi_closure ctx is passed in eax by the trampoline.
161
+
162
+ sub esp, 40
163
+ lea edx, [ebp - 24]
164
+ mov [ebp - 12], edx ;; resp
165
+ lea edx, [ebp + 8]
166
+ mov [esp + 8], edx ;; args
167
+ lea edx, [ebp - 12]
168
+ mov [esp + 4], edx ;; &resp
169
+ mov [esp], eax ;; closure
170
+ call ffi_closure_SYSV_inner
171
+ mov ecx, [ebp - 12]
172
+
173
+ cs_jumptable:
174
+ jmp [cs_jumpdata + 4 * eax]
175
+ cs_jumpdata:
176
+ ;; Do not insert anything here between the label and jump table.
177
+ dd offset cs_epilogue ;; FFI_TYPE_VOID
178
+ dd offset cs_retint ;; FFI_TYPE_INT
179
+ dd offset cs_retfloat ;; FFI_TYPE_FLOAT
180
+ dd offset cs_retdouble ;; FFI_TYPE_DOUBLE
181
+ dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE
182
+ dd offset cs_retint8 ;; FFI_TYPE_UINT8
183
+ dd offset cs_retint8 ;; FFI_TYPE_SINT8
184
+ dd offset cs_retint16 ;; FFI_TYPE_UINT16
185
+ dd offset cs_retint16 ;; FFI_TYPE_SINT16
186
+ dd offset cs_retint ;; FFI_TYPE_UINT32
187
+ dd offset cs_retint ;; FFI_TYPE_SINT32
188
+ dd offset cs_retint64 ;; FFI_TYPE_UINT64
189
+ dd offset cs_retint64 ;; FFI_TYPE_SINT64
190
+ dd offset cs_retstruct ;; FFI_TYPE_STRUCT
191
+ dd offset cs_retint ;; FFI_TYPE_POINTER
192
+ dd offset cs_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B
193
+ dd offset cs_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B
194
+ dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B
195
+
196
+ cs_retint8:
197
+ mov al, [ecx]
198
+ jmp cs_epilogue
199
+
200
+ cs_retint16:
201
+ mov ax, [ecx]
202
+ jmp cs_epilogue
203
+
204
+ cs_retint:
205
+ mov eax, [ecx]
206
+ jmp cs_epilogue
207
+
208
+ cs_retint64:
209
+ mov eax, [ecx + 0]
210
+ mov edx, [ecx + 4]
211
+ jmp cs_epilogue
212
+
213
+ cs_retfloat:
214
+ fld DWORD PTR [ecx]
215
+ jmp cs_epilogue
216
+
217
+ cs_retdouble:
218
+ fld QWORD PTR [ecx]
219
+ jmp cs_epilogue
220
+
221
+ cs_retlongdouble:
222
+ fld TBYTE PTR [ecx]
223
+ jmp cs_epilogue
224
+
225
+ cs_retstruct:
226
+ ;; Caller expects us to pop struct return value pointer hidden arg.
227
+ ;; Epilogue code is autogenerated.
228
+ ret 4
229
+
230
+ cs_epilogue:
231
+ ;; Epilogue code is autogenerated.
232
+ ret
233
+ ffi_closure_SYSV ENDP
234
+
235
+ #if !FFI_NO_RAW_API
236
+
237
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3)
238
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
239
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
240
+ #define CIF_FLAGS_OFFSET 20
241
+
242
+ ffi_closure_raw_SYSV PROC NEAR USES esi
243
+ ;; the ffi_closure ctx is passed in eax by the trampoline.
244
+
245
+ sub esp, 40
246
+ mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif
247
+ mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data
248
+ mov [esp + 12], edx ;; user_data
249
+ lea edx, [ebp + 8]
250
+ mov [esp + 8], edx ;; raw_args
251
+ lea edx, [ebp - 24]
252
+ mov [esp + 4], edx ;; &res
253
+ mov [esp], esi ;; cif
254
+ call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun
255
+ mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags
256
+ lea ecx, [ebp - 24]
257
+
258
+ cr_jumptable:
259
+ jmp [cr_jumpdata + 4 * eax]
260
+ cr_jumpdata:
261
+ ;; Do not insert anything here between the label and jump table.
262
+ dd offset cr_epilogue ;; FFI_TYPE_VOID
263
+ dd offset cr_retint ;; FFI_TYPE_INT
264
+ dd offset cr_retfloat ;; FFI_TYPE_FLOAT
265
+ dd offset cr_retdouble ;; FFI_TYPE_DOUBLE
266
+ dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE
267
+ dd offset cr_retint8 ;; FFI_TYPE_UINT8
268
+ dd offset cr_retint8 ;; FFI_TYPE_SINT8
269
+ dd offset cr_retint16 ;; FFI_TYPE_UINT16
270
+ dd offset cr_retint16 ;; FFI_TYPE_SINT16
271
+ dd offset cr_retint ;; FFI_TYPE_UINT32
272
+ dd offset cr_retint ;; FFI_TYPE_SINT32
273
+ dd offset cr_retint64 ;; FFI_TYPE_UINT64
274
+ dd offset cr_retint64 ;; FFI_TYPE_SINT64
275
+ dd offset cr_epilogue ;; FFI_TYPE_STRUCT
276
+ dd offset cr_retint ;; FFI_TYPE_POINTER
277
+ dd offset cr_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B
278
+ dd offset cr_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B
279
+ dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B
280
+
281
+ cr_retint8:
282
+ mov al, [ecx]
283
+ jmp cr_epilogue
284
+
285
+ cr_retint16:
286
+ mov ax, [ecx]
287
+ jmp cr_epilogue
288
+
289
+ cr_retint:
290
+ mov eax, [ecx]
291
+ jmp cr_epilogue
292
+
293
+ cr_retint64:
294
+ mov eax, [ecx + 0]
295
+ mov edx, [ecx + 4]
296
+ jmp cr_epilogue
297
+
298
+ cr_retfloat:
299
+ fld DWORD PTR [ecx]
300
+ jmp cr_epilogue
301
+
302
+ cr_retdouble:
303
+ fld QWORD PTR [ecx]
304
+ jmp cr_epilogue
305
+
306
+ cr_retlongdouble:
307
+ fld TBYTE PTR [ecx]
308
+ jmp cr_epilogue
309
+
310
+ cr_epilogue:
311
+ ;; Epilogue code is autogenerated.
312
+ ret
313
+ ffi_closure_raw_SYSV ENDP
314
+
315
+ #endif /* !FFI_NO_RAW_API */
316
+
317
+ ffi_closure_STDCALL PROC NEAR FORCEFRAME
318
+ ;; the ffi_closure ctx is passed in eax by the trampoline.
319
+
320
+ sub esp, 40
321
+ lea edx, [ebp - 24]
322
+ mov [ebp - 12], edx ;; resp
323
+ lea edx, [ebp + 12] ;; account for stub return address on stack
324
+ mov [esp + 8], edx ;; args
325
+ lea edx, [ebp - 12]
326
+ mov [esp + 4], edx ;; &resp
327
+ mov [esp], eax ;; closure
328
+ call ffi_closure_SYSV_inner
329
+ mov ecx, [ebp - 12]
330
+
331
+ cd_jumptable:
332
+ jmp [cd_jumpdata + 4 * eax]
333
+ cd_jumpdata:
334
+ ;; Do not insert anything here between the label and jump table.
335
+ dd offset cd_epilogue ;; FFI_TYPE_VOID
336
+ dd offset cd_retint ;; FFI_TYPE_INT
337
+ dd offset cd_retfloat ;; FFI_TYPE_FLOAT
338
+ dd offset cd_retdouble ;; FFI_TYPE_DOUBLE
339
+ dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE
340
+ dd offset cd_retint8 ;; FFI_TYPE_UINT8
341
+ dd offset cd_retint8 ;; FFI_TYPE_SINT8
342
+ dd offset cd_retint16 ;; FFI_TYPE_UINT16
343
+ dd offset cd_retint16 ;; FFI_TYPE_SINT16
344
+ dd offset cd_retint ;; FFI_TYPE_UINT32
345
+ dd offset cd_retint ;; FFI_TYPE_SINT32
346
+ dd offset cd_retint64 ;; FFI_TYPE_UINT64
347
+ dd offset cd_retint64 ;; FFI_TYPE_SINT64
348
+ dd offset cd_epilogue ;; FFI_TYPE_STRUCT
349
+ dd offset cd_retint ;; FFI_TYPE_POINTER
350
+ dd offset cd_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B
351
+ dd offset cd_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B
352
+ dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B
353
+
354
+ cd_retint8:
355
+ mov al, [ecx]
356
+ jmp cd_epilogue
357
+
358
+ cd_retint16:
359
+ mov ax, [ecx]
360
+ jmp cd_epilogue
361
+
362
+ cd_retint:
363
+ mov eax, [ecx]
364
+ jmp cd_epilogue
365
+
366
+ cd_retint64:
367
+ mov eax, [ecx + 0]
368
+ mov edx, [ecx + 4]
369
+ jmp cd_epilogue
370
+
371
+ cd_retfloat:
372
+ fld DWORD PTR [ecx]
373
+ jmp cd_epilogue
374
+
375
+ cd_retdouble:
376
+ fld QWORD PTR [ecx]
377
+ jmp cd_epilogue
378
+
379
+ cd_retlongdouble:
380
+ fld TBYTE PTR [ecx]
381
+ jmp cd_epilogue
382
+
383
+ cd_epilogue:
384
+ ;; Epilogue code is autogenerated.
385
+ ret
386
+ ffi_closure_STDCALL ENDP
387
+
388
+ _TEXT ENDS
389
+ END
390
+
391
+ #else
392
+
393
+ .text
394
+
395
+ # This assumes we are using gas.
396
+ .balign 16
397
+ .globl _ffi_call_win32
398
+ #ifndef __OS2__
399
+ .def _ffi_call_win32; .scl 2; .type 32; .endef
400
+ #endif
401
+ _ffi_call_win32:
402
+ .LFB1:
403
+ pushl %ebp
404
+ .LCFI0:
405
+ movl %esp,%ebp
406
+ .LCFI1:
407
+ # Make room for all of the new args.
408
+ movl 16(%ebp),%ecx
409
+ subl %ecx,%esp
410
+
411
+ movl %esp,%eax
412
+
413
+ # Place all of the ffi_prep_args in position
414
+ pushl 12(%ebp)
415
+ pushl %eax
416
+ call *8(%ebp)
417
+
418
+ # Return stack to previous state and call the function
419
+ addl $8,%esp
420
+
421
+ # FIXME: Align the stack to a 128-bit boundary to avoid
422
+ # potential performance hits.
423
+
424
+ call *28(%ebp)
425
+
426
+ # stdcall functions pop arguments off the stack themselves
427
+
428
+ # Load %ecx with the return type code
429
+ movl 20(%ebp),%ecx
430
+
431
+ # If the return value pointer is NULL, assume no return value.
432
+ cmpl $0,24(%ebp)
433
+ jne 0f
434
+
435
+ # Even if there is no space for the return value, we are
436
+ # obliged to handle floating-point values.
437
+ cmpl $FFI_TYPE_FLOAT,%ecx
438
+ jne .Lnoretval
439
+ fstp %st(0)
440
+
441
+ jmp .Lepilogue
442
+
443
+ 0:
444
+ call 1f
445
+ # Do not insert anything here between the call and the jump table.
446
+ .Lstore_table:
447
+ .long .Lnoretval /* FFI_TYPE_VOID */
448
+ .long .Lretint /* FFI_TYPE_INT */
449
+ .long .Lretfloat /* FFI_TYPE_FLOAT */
450
+ .long .Lretdouble /* FFI_TYPE_DOUBLE */
451
+ .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */
452
+ .long .Lretuint8 /* FFI_TYPE_UINT8 */
453
+ .long .Lretsint8 /* FFI_TYPE_SINT8 */
454
+ .long .Lretuint16 /* FFI_TYPE_UINT16 */
455
+ .long .Lretsint16 /* FFI_TYPE_SINT16 */
456
+ .long .Lretint /* FFI_TYPE_UINT32 */
457
+ .long .Lretint /* FFI_TYPE_SINT32 */
458
+ .long .Lretint64 /* FFI_TYPE_UINT64 */
459
+ .long .Lretint64 /* FFI_TYPE_SINT64 */
460
+ .long .Lretstruct /* FFI_TYPE_STRUCT */
461
+ .long .Lretint /* FFI_TYPE_POINTER */
462
+ .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */
463
+ .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */
464
+ .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */
465
+ 1:
466
+ add %ecx, %ecx
467
+ add %ecx, %ecx
468
+ add (%esp),%ecx
469
+ add $4, %esp
470
+ jmp *(%ecx)
471
+
472
+ /* Sign/zero extend as appropriate. */
473
+ .Lretsint8:
474
+ movsbl %al, %eax
475
+ jmp .Lretint
476
+
477
+ .Lretsint16:
478
+ movswl %ax, %eax
479
+ jmp .Lretint
480
+
481
+ .Lretuint8:
482
+ movzbl %al, %eax
483
+ jmp .Lretint
484
+
485
+ .Lretuint16:
486
+ movzwl %ax, %eax
487
+ jmp .Lretint
488
+
489
+ .Lretint:
490
+ # Load %ecx with the pointer to storage for the return value
491
+ movl 24(%ebp),%ecx
492
+ movl %eax,0(%ecx)
493
+ jmp .Lepilogue
494
+
495
+ .Lretfloat:
496
+ # Load %ecx with the pointer to storage for the return value
497
+ movl 24(%ebp),%ecx
498
+ fstps (%ecx)
499
+ jmp .Lepilogue
500
+
501
+ .Lretdouble:
502
+ # Load %ecx with the pointer to storage for the return value
503
+ movl 24(%ebp),%ecx
504
+ fstpl (%ecx)
505
+ jmp .Lepilogue
506
+
507
+ .Lretlongdouble:
508
+ # Load %ecx with the pointer to storage for the return value
509
+ movl 24(%ebp),%ecx
510
+ fstpt (%ecx)
511
+ jmp .Lepilogue
512
+
513
+ .Lretint64:
514
+ # Load %ecx with the pointer to storage for the return value
515
+ movl 24(%ebp),%ecx
516
+ movl %eax,0(%ecx)
517
+ movl %edx,4(%ecx)
518
+ jmp .Lepilogue
519
+
520
+ .Lretstruct1b:
521
+ # Load %ecx with the pointer to storage for the return value
522
+ movl 24(%ebp),%ecx
523
+ movb %al,0(%ecx)
524
+ jmp .Lepilogue
525
+
526
+ .Lretstruct2b:
527
+ # Load %ecx with the pointer to storage for the return value
528
+ movl 24(%ebp),%ecx
529
+ movw %ax,0(%ecx)
530
+ jmp .Lepilogue
531
+
532
+ .Lretstruct4b:
533
+ # Load %ecx with the pointer to storage for the return value
534
+ movl 24(%ebp),%ecx
535
+ movl %eax,0(%ecx)
536
+ jmp .Lepilogue
537
+
538
+ .Lretstruct:
539
+ # Nothing to do!
540
+
541
+ .Lnoretval:
542
+ .Lepilogue:
543
+ movl %ebp,%esp
544
+ popl %ebp
545
+ ret
546
+ .ffi_call_win32_end:
547
+ .LFE1:
548
+
549
+ # This assumes we are using gas.
550
+ .balign 16
551
+ .globl _ffi_closure_SYSV
552
+ #ifndef __OS2__
553
+ .def _ffi_closure_SYSV; .scl 2; .type 32; .endef
554
+ #endif
555
+ _ffi_closure_SYSV:
556
+ .LFB3:
557
+ pushl %ebp
558
+ .LCFI4:
559
+ movl %esp, %ebp
560
+ .LCFI5:
561
+ subl $40, %esp
562
+ leal -24(%ebp), %edx
563
+ movl %edx, -12(%ebp) /* resp */
564
+ leal 8(%ebp), %edx
565
+ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */
566
+ leal -12(%ebp), %edx
567
+ movl %edx, (%esp) /* &resp */
568
+ call _ffi_closure_SYSV_inner
569
+ movl -12(%ebp), %ecx
570
+
571
+ 0:
572
+ call 1f
573
+ # Do not insert anything here between the call and the jump table.
574
+ .Lcls_store_table:
575
+ .long .Lcls_noretval /* FFI_TYPE_VOID */
576
+ .long .Lcls_retint /* FFI_TYPE_INT */
577
+ .long .Lcls_retfloat /* FFI_TYPE_FLOAT */
578
+ .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */
579
+ .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */
580
+ .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */
581
+ .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */
582
+ .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */
583
+ .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */
584
+ .long .Lcls_retint /* FFI_TYPE_UINT32 */
585
+ .long .Lcls_retint /* FFI_TYPE_SINT32 */
586
+ .long .Lcls_retllong /* FFI_TYPE_UINT64 */
587
+ .long .Lcls_retllong /* FFI_TYPE_SINT64 */
588
+ .long .Lcls_retstruct /* FFI_TYPE_STRUCT */
589
+ .long .Lcls_retint /* FFI_TYPE_POINTER */
590
+ .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
591
+ .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
592
+ .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
593
+
594
+ 1:
595
+ add %eax, %eax
596
+ add %eax, %eax
597
+ add (%esp),%eax
598
+ add $4, %esp
599
+ jmp *(%eax)
600
+
601
+ /* Sign/zero extend as appropriate. */
602
+ .Lcls_retsint8:
603
+ movsbl (%ecx), %eax
604
+ jmp .Lcls_epilogue
605
+
606
+ .Lcls_retsint16:
607
+ movswl (%ecx), %eax
608
+ jmp .Lcls_epilogue
609
+
610
+ .Lcls_retuint8:
611
+ movzbl (%ecx), %eax
612
+ jmp .Lcls_epilogue
613
+
614
+ .Lcls_retuint16:
615
+ movzwl (%ecx), %eax
616
+ jmp .Lcls_epilogue
617
+
618
+ .Lcls_retint:
619
+ movl (%ecx), %eax
620
+ jmp .Lcls_epilogue
621
+
622
+ .Lcls_retfloat:
623
+ flds (%ecx)
624
+ jmp .Lcls_epilogue
625
+
626
+ .Lcls_retdouble:
627
+ fldl (%ecx)
628
+ jmp .Lcls_epilogue
629
+
630
+ .Lcls_retldouble:
631
+ fldt (%ecx)
632
+ jmp .Lcls_epilogue
633
+
634
+ .Lcls_retllong:
635
+ movl (%ecx), %eax
636
+ movl 4(%ecx), %edx
637
+ jmp .Lcls_epilogue
638
+
639
+ .Lcls_retstruct1:
640
+ movsbl (%ecx), %eax
641
+ jmp .Lcls_epilogue
642
+
643
+ .Lcls_retstruct2:
644
+ movswl (%ecx), %eax
645
+ jmp .Lcls_epilogue
646
+
647
+ .Lcls_retstruct4:
648
+ movl (%ecx), %eax
649
+ jmp .Lcls_epilogue
650
+
651
+ .Lcls_retstruct:
652
+ # Caller expects us to pop struct return value pointer hidden arg.
653
+ movl %ebp, %esp
654
+ popl %ebp
655
+ ret $0x4
656
+
657
+ .Lcls_noretval:
658
+ .Lcls_epilogue:
659
+ movl %ebp, %esp
660
+ popl %ebp
661
+ ret
662
+ .ffi_closure_SYSV_end:
663
+ .LFE3:
664
+
665
+ #if !FFI_NO_RAW_API
666
+
667
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
668
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
669
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
670
+ #define CIF_FLAGS_OFFSET 20
671
+
672
+ # This assumes we are using gas.
673
+ .balign 16
674
+ .globl _ffi_closure_raw_SYSV
675
+ #ifndef __OS2__
676
+ .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef
677
+ #endif
678
+ _ffi_closure_raw_SYSV:
679
+ .LFB4:
680
+ pushl %ebp
681
+ .LCFI6:
682
+ movl %esp, %ebp
683
+ .LCFI7:
684
+ pushl %esi
685
+ .LCFI8:
686
+ subl $36, %esp
687
+ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
688
+ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
689
+ movl %edx, 12(%esp) /* user_data */
690
+ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */
691
+ movl %edx, 8(%esp) /* raw_args */
692
+ leal -24(%ebp), %edx
693
+ movl %edx, 4(%esp) /* &res */
694
+ movl %esi, (%esp) /* cif */
695
+ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */
696
+ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */
697
+ 0:
698
+ call 1f
699
+ # Do not insert anything here between the call and the jump table.
700
+ .Lrcls_store_table:
701
+ .long .Lrcls_noretval /* FFI_TYPE_VOID */
702
+ .long .Lrcls_retint /* FFI_TYPE_INT */
703
+ .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */
704
+ .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */
705
+ .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */
706
+ .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */
707
+ .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */
708
+ .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */
709
+ .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */
710
+ .long .Lrcls_retint /* FFI_TYPE_UINT32 */
711
+ .long .Lrcls_retint /* FFI_TYPE_SINT32 */
712
+ .long .Lrcls_retllong /* FFI_TYPE_UINT64 */
713
+ .long .Lrcls_retllong /* FFI_TYPE_SINT64 */
714
+ .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */
715
+ .long .Lrcls_retint /* FFI_TYPE_POINTER */
716
+ .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
717
+ .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
718
+ .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
719
+ 1:
720
+ add %eax, %eax
721
+ add %eax, %eax
722
+ add (%esp),%eax
723
+ add $4, %esp
724
+ jmp *(%eax)
725
+
726
+ /* Sign/zero extend as appropriate. */
727
+ .Lrcls_retsint8:
728
+ movsbl -24(%ebp), %eax
729
+ jmp .Lrcls_epilogue
730
+
731
+ .Lrcls_retsint16:
732
+ movswl -24(%ebp), %eax
733
+ jmp .Lrcls_epilogue
734
+
735
+ .Lrcls_retuint8:
736
+ movzbl -24(%ebp), %eax
737
+ jmp .Lrcls_epilogue
738
+
739
+ .Lrcls_retuint16:
740
+ movzwl -24(%ebp), %eax
741
+ jmp .Lrcls_epilogue
742
+
743
+ .Lrcls_retint:
744
+ movl -24(%ebp), %eax
745
+ jmp .Lrcls_epilogue
746
+
747
+ .Lrcls_retfloat:
748
+ flds -24(%ebp)
749
+ jmp .Lrcls_epilogue
750
+
751
+ .Lrcls_retdouble:
752
+ fldl -24(%ebp)
753
+ jmp .Lrcls_epilogue
754
+
755
+ .Lrcls_retldouble:
756
+ fldt -24(%ebp)
757
+ jmp .Lrcls_epilogue
758
+
759
+ .Lrcls_retllong:
760
+ movl -24(%ebp), %eax
761
+ movl -20(%ebp), %edx
762
+ jmp .Lrcls_epilogue
763
+
764
+ .Lrcls_retstruct1:
765
+ movsbl -24(%ebp), %eax
766
+ jmp .Lrcls_epilogue
767
+
768
+ .Lrcls_retstruct2:
769
+ movswl -24(%ebp), %eax
770
+ jmp .Lrcls_epilogue
771
+
772
+ .Lrcls_retstruct4:
773
+ movl -24(%ebp), %eax
774
+ jmp .Lrcls_epilogue
775
+
776
+ .Lrcls_retstruct:
777
+ # Nothing to do!
778
+
779
+ .Lrcls_noretval:
780
+ .Lrcls_epilogue:
781
+ addl $36, %esp
782
+ popl %esi
783
+ popl %ebp
784
+ ret
785
+ .ffi_closure_raw_SYSV_end:
786
+ .LFE4:
787
+
788
+ #endif /* !FFI_NO_RAW_API */
789
+
790
+ # This assumes we are using gas.
791
+ .balign 16
792
+ .globl _ffi_closure_STDCALL
793
+ #ifndef __OS2__
794
+ .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef
795
+ #endif
796
+ _ffi_closure_STDCALL:
797
+ .LFB5:
798
+ pushl %ebp
799
+ .LCFI9:
800
+ movl %esp, %ebp
801
+ .LCFI10:
802
+ subl $40, %esp
803
+ leal -24(%ebp), %edx
804
+ movl %edx, -12(%ebp) /* resp */
805
+ leal 12(%ebp), %edx /* account for stub return address on stack */
806
+ movl %edx, 4(%esp) /* args */
807
+ leal -12(%ebp), %edx
808
+ movl %edx, (%esp) /* &resp */
809
+ call _ffi_closure_SYSV_inner
810
+ movl -12(%ebp), %ecx
811
+ 0:
812
+ call 1f
813
+ # Do not insert anything here between the call and the jump table.
814
+ .Lscls_store_table:
815
+ .long .Lscls_noretval /* FFI_TYPE_VOID */
816
+ .long .Lscls_retint /* FFI_TYPE_INT */
817
+ .long .Lscls_retfloat /* FFI_TYPE_FLOAT */
818
+ .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */
819
+ .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */
820
+ .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */
821
+ .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */
822
+ .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */
823
+ .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */
824
+ .long .Lscls_retint /* FFI_TYPE_UINT32 */
825
+ .long .Lscls_retint /* FFI_TYPE_SINT32 */
826
+ .long .Lscls_retllong /* FFI_TYPE_UINT64 */
827
+ .long .Lscls_retllong /* FFI_TYPE_SINT64 */
828
+ .long .Lscls_retstruct /* FFI_TYPE_STRUCT */
829
+ .long .Lscls_retint /* FFI_TYPE_POINTER */
830
+ .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */
831
+ .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */
832
+ .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */
833
+ 1:
834
+ add %eax, %eax
835
+ add %eax, %eax
836
+ add (%esp),%eax
837
+ add $4, %esp
838
+ jmp *(%eax)
839
+
840
+ /* Sign/zero extend as appropriate. */
841
+ .Lscls_retsint8:
842
+ movsbl (%ecx), %eax
843
+ jmp .Lscls_epilogue
844
+
845
+ .Lscls_retsint16:
846
+ movswl (%ecx), %eax
847
+ jmp .Lscls_epilogue
848
+
849
+ .Lscls_retuint8:
850
+ movzbl (%ecx), %eax
851
+ jmp .Lscls_epilogue
852
+
853
+ .Lscls_retuint16:
854
+ movzwl (%ecx), %eax
855
+ jmp .Lscls_epilogue
856
+
857
+ .Lscls_retint:
858
+ movl (%ecx), %eax
859
+ jmp .Lscls_epilogue
860
+
861
+ .Lscls_retfloat:
862
+ flds (%ecx)
863
+ jmp .Lscls_epilogue
864
+
865
+ .Lscls_retdouble:
866
+ fldl (%ecx)
867
+ jmp .Lscls_epilogue
868
+
869
+ .Lscls_retldouble:
870
+ fldt (%ecx)
871
+ jmp .Lscls_epilogue
872
+
873
+ .Lscls_retllong:
874
+ movl (%ecx), %eax
875
+ movl 4(%ecx), %edx
876
+ jmp .Lscls_epilogue
877
+
878
+ .Lscls_retstruct1:
879
+ movsbl (%ecx), %eax
880
+ jmp .Lscls_epilogue
881
+
882
+ .Lscls_retstruct2:
883
+ movswl (%ecx), %eax
884
+ jmp .Lscls_epilogue
885
+
886
+ .Lscls_retstruct4:
887
+ movl (%ecx), %eax
888
+ jmp .Lscls_epilogue
889
+
890
+ .Lscls_retstruct:
891
+ # Nothing to do!
892
+
893
+ .Lscls_noretval:
894
+ .Lscls_epilogue:
895
+ movl %ebp, %esp
896
+ popl %ebp
897
+ ret
898
+ .ffi_closure_STDCALL_end:
899
+ .LFE5:
900
+
901
+ #ifndef __OS2__
902
+ .section .eh_frame,"w"
903
+ #endif
904
+ .Lframe1:
905
+ .LSCIE1:
906
+ .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */
907
+ .LASCIE1:
908
+ .long 0x0 /* CIE Identifier Tag */
909
+ .byte 0x1 /* CIE Version */
910
+ #ifdef __PIC__
911
+ .ascii "zR\0" /* CIE Augmentation */
912
+ #else
913
+ .ascii "\0" /* CIE Augmentation */
914
+ #endif
915
+ .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */
916
+ .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */
917
+ .byte 0x8 /* CIE RA Column */
918
+ #ifdef __PIC__
919
+ .byte 0x1 /* .uleb128 0x1; Augmentation size */
920
+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */
921
+ #endif
922
+ .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */
923
+ .byte 0x4 /* .uleb128 0x4 */
924
+ .byte 0x4 /* .uleb128 0x4 */
925
+ .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */
926
+ .byte 0x1 /* .uleb128 0x1 */
927
+ .align 4
928
+ .LECIE1:
929
+
930
+ .LSFDE1:
931
+ .long .LEFDE1-.LASFDE1 /* FDE Length */
932
+ .LASFDE1:
933
+ .long .LASFDE1-.Lframe1 /* FDE CIE offset */
934
+ #if defined __PIC__ && defined HAVE_AS_X86_PCREL
935
+ .long .LFB1-. /* FDE initial location */
936
+ #else
937
+ .long .LFB1
938
+ #endif
939
+ .long .LFE1-.LFB1 /* FDE address range */
940
+ #ifdef __PIC__
941
+ .byte 0x0 /* .uleb128 0x0; Augmentation size */
942
+ #endif
943
+ /* DW_CFA_xxx CFI instructions go here. */
944
+
945
+ .byte 0x4 /* DW_CFA_advance_loc4 */
946
+ .long .LCFI0-.LFB1
947
+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
948
+ .byte 0x8 /* .uleb128 0x8 */
949
+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
950
+ .byte 0x2 /* .uleb128 0x2 */
951
+
952
+ .byte 0x4 /* DW_CFA_advance_loc4 */
953
+ .long .LCFI1-.LCFI0
954
+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
955
+ .byte 0x5 /* .uleb128 0x5 */
956
+
957
+ /* End of DW_CFA_xxx CFI instructions. */
958
+ .align 4
959
+ .LEFDE1:
960
+
961
+
962
+ .LSFDE3:
963
+ .long .LEFDE3-.LASFDE3 /* FDE Length */
964
+ .LASFDE3:
965
+ .long .LASFDE3-.Lframe1 /* FDE CIE offset */
966
+ #if defined __PIC__ && defined HAVE_AS_X86_PCREL
967
+ .long .LFB3-. /* FDE initial location */
968
+ #else
969
+ .long .LFB3
970
+ #endif
971
+ .long .LFE3-.LFB3 /* FDE address range */
972
+ #ifdef __PIC__
973
+ .byte 0x0 /* .uleb128 0x0; Augmentation size */
974
+ #endif
975
+ /* DW_CFA_xxx CFI instructions go here. */
976
+
977
+ .byte 0x4 /* DW_CFA_advance_loc4 */
978
+ .long .LCFI4-.LFB3
979
+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
980
+ .byte 0x8 /* .uleb128 0x8 */
981
+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
982
+ .byte 0x2 /* .uleb128 0x2 */
983
+
984
+ .byte 0x4 /* DW_CFA_advance_loc4 */
985
+ .long .LCFI5-.LCFI4
986
+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
987
+ .byte 0x5 /* .uleb128 0x5 */
988
+
989
+ /* End of DW_CFA_xxx CFI instructions. */
990
+ .align 4
991
+ .LEFDE3:
992
+
993
+ #if !FFI_NO_RAW_API
994
+
995
+ .LSFDE4:
996
+ .long .LEFDE4-.LASFDE4 /* FDE Length */
997
+ .LASFDE4:
998
+ .long .LASFDE4-.Lframe1 /* FDE CIE offset */
999
+ #if defined __PIC__ && defined HAVE_AS_X86_PCREL
1000
+ .long .LFB4-. /* FDE initial location */
1001
+ #else
1002
+ .long .LFB4
1003
+ #endif
1004
+ .long .LFE4-.LFB4 /* FDE address range */
1005
+ #ifdef __PIC__
1006
+ .byte 0x0 /* .uleb128 0x0; Augmentation size */
1007
+ #endif
1008
+ /* DW_CFA_xxx CFI instructions go here. */
1009
+
1010
+ .byte 0x4 /* DW_CFA_advance_loc4 */
1011
+ .long .LCFI6-.LFB4
1012
+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
1013
+ .byte 0x8 /* .uleb128 0x8 */
1014
+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
1015
+ .byte 0x2 /* .uleb128 0x2 */
1016
+
1017
+ .byte 0x4 /* DW_CFA_advance_loc4 */
1018
+ .long .LCFI7-.LCFI6
1019
+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
1020
+ .byte 0x5 /* .uleb128 0x5 */
1021
+
1022
+ .byte 0x4 /* DW_CFA_advance_loc4 */
1023
+ .long .LCFI8-.LCFI7
1024
+ .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */
1025
+ .byte 0x3 /* .uleb128 0x3 */
1026
+
1027
+ /* End of DW_CFA_xxx CFI instructions. */
1028
+ .align 4
1029
+ .LEFDE4:
1030
+
1031
+ #endif /* !FFI_NO_RAW_API */
1032
+
1033
+ .LSFDE5:
1034
+ .long .LEFDE5-.LASFDE5 /* FDE Length */
1035
+ .LASFDE5:
1036
+ .long .LASFDE5-.Lframe1 /* FDE CIE offset */
1037
+ #if defined __PIC__ && defined HAVE_AS_X86_PCREL
1038
+ .long .LFB5-. /* FDE initial location */
1039
+ #else
1040
+ .long .LFB5
1041
+ #endif
1042
+ .long .LFE5-.LFB5 /* FDE address range */
1043
+ #ifdef __PIC__
1044
+ .byte 0x0 /* .uleb128 0x0; Augmentation size */
1045
+ #endif
1046
+ /* DW_CFA_xxx CFI instructions go here. */
1047
+
1048
+ .byte 0x4 /* DW_CFA_advance_loc4 */
1049
+ .long .LCFI9-.LFB5
1050
+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
1051
+ .byte 0x8 /* .uleb128 0x8 */
1052
+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
1053
+ .byte 0x2 /* .uleb128 0x2 */
1054
+
1055
+ .byte 0x4 /* DW_CFA_advance_loc4 */
1056
+ .long .LCFI10-.LCFI9
1057
+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
1058
+ .byte 0x5 /* .uleb128 0x5 */
1059
+
1060
+ /* End of DW_CFA_xxx CFI instructions. */
1061
+ .align 4
1062
+ .LEFDE5:
1063
+
1064
+ #endif /* !_MSC_VER */
1065
+