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,125 @@
1
+ /* -----------------------------------------------------------------------
2
+ asm.h - Copyright (c) 1998 Geoffrey Keating
3
+
4
+ PowerPC Assembly glue.
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, EXPRESS
18
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
24
+ ----------------------------------------------------------------------- */
25
+
26
+ #define ASM_GLOBAL_DIRECTIVE .globl
27
+
28
+
29
+ #define C_SYMBOL_NAME(name) name
30
+ /* Macro for a label. */
31
+ #ifdef __STDC__
32
+ #define C_LABEL(name) name##:
33
+ #else
34
+ #define C_LABEL(name) name/**/:
35
+ #endif
36
+
37
+ /* This seems to always be the case on PPC. */
38
+ #define ALIGNARG(log2) log2
39
+ /* For ELF we need the `.type' directive to make shared libs work right. */
40
+ #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
41
+ #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
42
+
43
+ /* If compiled for profiling, call `_mcount' at the start of each function. */
44
+ #ifdef PROF
45
+ /* The mcount code relies on the return address being on the stack
46
+ to locate our caller and so it can restore it; so store one just
47
+ for its benefit. */
48
+ #ifdef PIC
49
+ #define CALL_MCOUNT \
50
+ .pushsection; \
51
+ .section ".data"; \
52
+ .align ALIGNARG(2); \
53
+ 0:.long 0; \
54
+ .previous; \
55
+ mflr %r0; \
56
+ stw %r0,4(%r1); \
57
+ bl _GLOBAL_OFFSET_TABLE_@local-4; \
58
+ mflr %r11; \
59
+ lwz %r0,0b@got(%r11); \
60
+ bl JUMPTARGET(_mcount);
61
+ #else /* PIC */
62
+ #define CALL_MCOUNT \
63
+ .section ".data"; \
64
+ .align ALIGNARG(2); \
65
+ 0:.long 0; \
66
+ .previous; \
67
+ mflr %r0; \
68
+ lis %r11,0b@ha; \
69
+ stw %r0,4(%r1); \
70
+ addi %r0,%r11,0b@l; \
71
+ bl JUMPTARGET(_mcount);
72
+ #endif /* PIC */
73
+ #else /* PROF */
74
+ #define CALL_MCOUNT /* Do nothing. */
75
+ #endif /* PROF */
76
+
77
+ #define ENTRY(name) \
78
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
79
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
80
+ .align ALIGNARG(2); \
81
+ C_LABEL(name) \
82
+ CALL_MCOUNT
83
+
84
+ #define EALIGN_W_0 /* No words to insert. */
85
+ #define EALIGN_W_1 nop
86
+ #define EALIGN_W_2 nop;nop
87
+ #define EALIGN_W_3 nop;nop;nop
88
+ #define EALIGN_W_4 EALIGN_W_3;nop
89
+ #define EALIGN_W_5 EALIGN_W_4;nop
90
+ #define EALIGN_W_6 EALIGN_W_5;nop
91
+ #define EALIGN_W_7 EALIGN_W_6;nop
92
+
93
+ /* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
94
+ past a 2^align boundary. */
95
+ #ifdef PROF
96
+ #define EALIGN(name, alignt, words) \
97
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
98
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
99
+ .align ALIGNARG(2); \
100
+ C_LABEL(name) \
101
+ CALL_MCOUNT \
102
+ b 0f; \
103
+ .align ALIGNARG(alignt); \
104
+ EALIGN_W_##words; \
105
+ 0:
106
+ #else /* PROF */
107
+ #define EALIGN(name, alignt, words) \
108
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
109
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
110
+ .align ALIGNARG(alignt); \
111
+ EALIGN_W_##words; \
112
+ C_LABEL(name)
113
+ #endif
114
+
115
+ #define END(name) \
116
+ ASM_SIZE_DIRECTIVE(name)
117
+
118
+ #ifdef PIC
119
+ #define JUMPTARGET(name) name##@plt
120
+ #else
121
+ #define JUMPTARGET(name) name
122
+ #endif
123
+
124
+ /* Local labels stripped out by the linker. */
125
+ #define L(x) .L##x
@@ -0,0 +1,383 @@
1
+ /* -----------------------------------------------------------------------
2
+ darwin.S - Copyright (c) 2000 John Hornkvist
3
+ Copyright (c) 2004, 2010 Free Software Foundation, Inc.
4
+
5
+ PowerPC Assembly glue.
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, EXPRESS
19
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
22
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ OTHER DEALINGS IN THE SOFTWARE.
25
+ ----------------------------------------------------------------------- */
26
+
27
+ #define LIBFFI_ASM
28
+ #if defined(__ppc64__)
29
+ #define MODE_CHOICE(x, y) y
30
+ #else
31
+ #define MODE_CHOICE(x, y) x
32
+ #endif
33
+
34
+ #define machine_choice MODE_CHOICE(ppc7400,ppc64)
35
+
36
+ ; Define some pseudo-opcodes for size-independent load & store of GPRs ...
37
+ #define lgu MODE_CHOICE(lwzu, ldu)
38
+ #define lg MODE_CHOICE(lwz,ld)
39
+ #define sg MODE_CHOICE(stw,std)
40
+ #define sgu MODE_CHOICE(stwu,stdu)
41
+ #define sgux MODE_CHOICE(stwux,stdux)
42
+
43
+ ; ... and the size of GPRs and their storage indicator.
44
+ #define GPR_BYTES MODE_CHOICE(4,8)
45
+ #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
46
+ #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
47
+
48
+ ; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04.
49
+ #define LINKAGE_SIZE MODE_CHOICE(24,48)
50
+ #define PARAM_AREA MODE_CHOICE(32,64)
51
+ #define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */
52
+
53
+ /* If there is any FP stuff we make space for all of the regs. */
54
+ #define SAVED_FPR_COUNT 13
55
+ #define FPR_SIZE 8
56
+ #define RESULT_BYTES 16
57
+
58
+ /* This should be kept in step with the same value in ffi_darwin.c. */
59
+ #define ASM_NEEDS_REGISTERS 4
60
+ #define SAVE_REGS_SIZE (ASM_NEEDS_REGISTERS * GPR_BYTES)
61
+
62
+ #include <fficonfig.h>
63
+ #include <ffi.h>
64
+
65
+ #define JUMPTARGET(name) name
66
+ #define L(x) x
67
+
68
+ .text
69
+ .align 2
70
+ .globl _ffi_prep_args
71
+
72
+ .align 2
73
+ .globl _ffi_call_DARWIN
74
+
75
+ /* We arrive here with:
76
+ r3 = ptr to extended cif.
77
+ r4 = -bytes.
78
+ r5 = cif flags.
79
+ r6 = ptr to return value.
80
+ r7 = fn pointer (user func).
81
+ r8 = fn pointer (ffi_prep_args).
82
+ r9 = ffi_type* for the ret val. */
83
+
84
+ _ffi_call_DARWIN:
85
+ Lstartcode:
86
+ mr r12,r8 /* We only need r12 until the call,
87
+ so it does not have to be saved. */
88
+ LFB1:
89
+ /* Save the old stack pointer as AP. */
90
+ mr r8,r1
91
+ LCFI0:
92
+
93
+ /* Save the retval type in parents frame. */
94
+ sg r9,(LINKAGE_SIZE+6*GPR_BYTES)(r8)
95
+
96
+ /* Allocate the stack space we need. */
97
+ sgux r1,r1,r4
98
+
99
+ /* Save registers we use. */
100
+ mflr r9
101
+ sg r9,SAVED_LR_OFFSET(r8)
102
+
103
+ sg r28,-(4 * GPR_BYTES)(r8)
104
+ sg r29,-(3 * GPR_BYTES)(r8)
105
+ sg r30,-(2 * GPR_BYTES)(r8)
106
+ sg r31,-( GPR_BYTES)(r8)
107
+
108
+ #if !defined(POWERPC_DARWIN)
109
+ /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */
110
+ sg r2,(5 * GPR_BYTES)(r1)
111
+ #endif
112
+
113
+ LCFI1:
114
+
115
+ /* Save arguments over call. */
116
+ mr r31,r5 /* flags, */
117
+ mr r30,r6 /* rvalue, */
118
+ mr r29,r7 /* function address, */
119
+ mr r28,r8 /* our AP. */
120
+ LCFI2:
121
+ /* Call ffi_prep_args. r3 = extended cif, r4 = stack ptr copy. */
122
+ mr r4,r1
123
+ li r9,0
124
+
125
+ mtctr r12 /* r12 holds address of _ffi_prep_args. */
126
+ bctrl
127
+
128
+ #if !defined(POWERPC_DARWIN)
129
+ /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */
130
+ lg r2,(5 * GPR_BYTES)(r1)
131
+ #endif
132
+ /* Now do the call.
133
+ Set up cr1 with bits 4-7 of the flags. */
134
+ mtcrf 0x40,r31
135
+ /* Get the address to call into CTR. */
136
+ mtctr r29
137
+ /* Load all those argument registers.
138
+ We have set up a nice stack frame, just load it into registers. */
139
+ lg r3, (LINKAGE_SIZE )(r1)
140
+ lg r4, (LINKAGE_SIZE + GPR_BYTES)(r1)
141
+ lg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r1)
142
+ lg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r1)
143
+ nop
144
+ lg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r1)
145
+ lg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r1)
146
+ lg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r1)
147
+ lg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r1)
148
+
149
+ L1:
150
+ /* ... Load all the FP registers. */
151
+ bf 6,L2 /* No floats to load. */
152
+ lfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
153
+ lfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
154
+ lfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
155
+ lfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
156
+ nop
157
+ lfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
158
+ lfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
159
+ lfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
160
+ lfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
161
+ nop
162
+ lfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
163
+ lfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
164
+ lfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
165
+ lfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
166
+ nop
167
+ lfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
168
+
169
+ L2:
170
+ mr r12,r29 /* Put the target address in r12 as specified. */
171
+ mtctr r12
172
+ nop
173
+ nop
174
+
175
+ /* Make the call. */
176
+ bctrl
177
+
178
+ /* Now, deal with the return value. */
179
+
180
+ /* m64 structure returns can occupy the same set of registers as
181
+ would be used to pass such a structure as arg0 - so take care
182
+ not to step on any possibly hot regs. */
183
+
184
+ /* Get the flags.. */
185
+ mtcrf 0x03,r31 ; we need c6 & cr7 now.
186
+ ; FLAG_RETURNS_NOTHING also covers struct ret-by-ref.
187
+ bt 30,L(done_return_value) ; FLAG_RETURNS_NOTHING
188
+ bf 27,L(scalar_return_value) ; not FLAG_RETURNS_STRUCT
189
+
190
+ /* OK, so we have a struct. */
191
+ #if defined(__ppc64__)
192
+ bt 31,L(maybe_return_128) ; FLAG_RETURNS_128BITS, special case
193
+
194
+ /* OK, we have to map the return back to a mem struct.
195
+ We are about to trample the parents param area, so recover the
196
+ return type. r29 is free, since the call is done. */
197
+ lg r29,(LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
198
+
199
+ sg r3, (LINKAGE_SIZE )(r28)
200
+ sg r4, (LINKAGE_SIZE + GPR_BYTES)(r28)
201
+ sg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r28)
202
+ sg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r28)
203
+ nop
204
+ sg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r28)
205
+ sg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r28)
206
+ sg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
207
+ sg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
208
+ /* OK, so do the block move - we trust that memcpy will not trample
209
+ the fprs... */
210
+ mr r3,r30 ; dest
211
+ addi r4,r28,LINKAGE_SIZE ; source
212
+ /* The size is a size_t, should be long. */
213
+ lg r5,0(r29)
214
+ /* Figure out small structs */
215
+ cmpi 0,r5,4
216
+ bgt L3 ; 1, 2 and 4 bytes have special rules.
217
+ cmpi 0,r5,3
218
+ beq L3 ; not 3
219
+ addi r4,r4,8
220
+ subf r4,r5,r4
221
+ L3:
222
+ bl _memcpy
223
+
224
+ /* ... do we need the FP registers? - recover the flags.. */
225
+ mtcrf 0x03,r31 ; we need c6 & cr7 now.
226
+ bf 29,L(done_return_value) /* No floats in the struct. */
227
+ stfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
228
+ stfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
229
+ stfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
230
+ stfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
231
+ nop
232
+ stfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
233
+ stfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
234
+ stfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
235
+ stfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
236
+ nop
237
+ stfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
238
+ stfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
239
+ stfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
240
+ stfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
241
+ nop
242
+ stfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
243
+
244
+ mr r3,r29 ; ffi_type *
245
+ mr r4,r30 ; dest
246
+ addi r5,r28,-SAVE_REGS_SIZE-(13*FPR_SIZE) ; fprs
247
+ xor r6,r6,r6
248
+ sg r6,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
249
+ addi r6,r28,(LINKAGE_SIZE + 7 * GPR_BYTES) ; point to a zeroed counter.
250
+ bl _darwin64_struct_floats_to_mem
251
+
252
+ b L(done_return_value)
253
+ #else
254
+ stw r3,0(r30) ; m32 the only struct return in reg is 4 bytes.
255
+ #endif
256
+ b L(done_return_value)
257
+
258
+ L(fp_return_value):
259
+ /* Do we have long double to store? */
260
+ bf 31,L(fd_return_value) ; FLAG_RETURNS_128BITS
261
+ stfd f1,0(r30)
262
+ stfd f2,FPR_SIZE(r30)
263
+ b L(done_return_value)
264
+
265
+ L(fd_return_value):
266
+ /* Do we have double to store? */
267
+ bf 28,L(float_return_value)
268
+ stfd f1,0(r30)
269
+ b L(done_return_value)
270
+
271
+ L(float_return_value):
272
+ /* We only have a float to store. */
273
+ stfs f1,0(r30)
274
+ b L(done_return_value)
275
+
276
+ L(scalar_return_value):
277
+ bt 29,L(fp_return_value) ; FLAG_RETURNS_FP
278
+ ; ffi_arg is defined as unsigned long.
279
+ sg r3,0(r30) ; Save the reg.
280
+ bf 28,L(done_return_value) ; not FLAG_RETURNS_64BITS
281
+
282
+ #if defined(__ppc64__)
283
+ L(maybe_return_128):
284
+ std r3,0(r30)
285
+ bf 31,L(done_return_value) ; not FLAG_RETURNS_128BITS
286
+ std r4,8(r30)
287
+ #else
288
+ stw r4,4(r30)
289
+ #endif
290
+
291
+ /* Fall through. */
292
+ /* We want this at the end to simplify eh epilog computation. */
293
+
294
+ L(done_return_value):
295
+ /* Restore the registers we used and return. */
296
+ lg r29,SAVED_LR_OFFSET(r28)
297
+ ; epilog
298
+ lg r31,-(1 * GPR_BYTES)(r28)
299
+ mtlr r29
300
+ lg r30,-(2 * GPR_BYTES)(r28)
301
+ lg r29,-(3 * GPR_BYTES)(r28)
302
+ lg r28,-(4 * GPR_BYTES)(r28)
303
+ lg r1,0(r1)
304
+ blr
305
+ LFE1:
306
+ .align 1
307
+ /* END(_ffi_call_DARWIN) */
308
+
309
+ /* Provide a null definition of _ffi_call_AIX. */
310
+ .text
311
+ .globl _ffi_call_AIX
312
+ .align 2
313
+ _ffi_call_AIX:
314
+ blr
315
+ /* END(_ffi_call_AIX) */
316
+
317
+ /* EH stuff. */
318
+
319
+ #define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78)
320
+
321
+ .static_data
322
+ .align LOG2_GPR_BYTES
323
+ LLFB0$non_lazy_ptr:
324
+ .g_long Lstartcode
325
+
326
+ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
327
+ EH_frame1:
328
+ .set L$set$0,LECIE1-LSCIE1
329
+ .long L$set$0 ; Length of Common Information Entry
330
+ LSCIE1:
331
+ .long 0x0 ; CIE Identifier Tag
332
+ .byte 0x1 ; CIE Version
333
+ .ascii "zR\0" ; CIE Augmentation
334
+ .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
335
+ .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor
336
+ .byte 0x41 ; CIE RA Column
337
+ .byte 0x1 ; uleb128 0x1; Augmentation size
338
+ .byte 0x10 ; FDE Encoding (indirect pcrel)
339
+ .byte 0xc ; DW_CFA_def_cfa
340
+ .byte 0x1 ; uleb128 0x1
341
+ .byte 0x0 ; uleb128 0x0
342
+ .align LOG2_GPR_BYTES
343
+ LECIE1:
344
+
345
+ .globl _ffi_call_DARWIN.eh
346
+ _ffi_call_DARWIN.eh:
347
+ LSFDE1:
348
+ .set L$set$1,LEFDE1-LASFDE1
349
+ .long L$set$1 ; FDE Length
350
+ LASFDE1:
351
+ .long LASFDE1-EH_frame1 ; FDE CIE offset
352
+ .g_long LLFB0$non_lazy_ptr-. ; FDE initial location
353
+ .set L$set$3,LFE1-Lstartcode
354
+ .g_long L$set$3 ; FDE address range
355
+ .byte 0x0 ; uleb128 0x0; Augmentation size
356
+ .byte 0x4 ; DW_CFA_advance_loc4
357
+ .set L$set$4,LCFI0-Lstartcode
358
+ .long L$set$4
359
+ .byte 0xd ; DW_CFA_def_cfa_register
360
+ .byte 0x08 ; uleb128 0x08
361
+ .byte 0x4 ; DW_CFA_advance_loc4
362
+ .set L$set$5,LCFI1-LCFI0
363
+ .long L$set$5
364
+ .byte 0x11 ; DW_CFA_offset_extended_sf
365
+ .byte 0x41 ; uleb128 0x41
366
+ .byte 0x7e ; sleb128 -2
367
+ .byte 0x9f ; DW_CFA_offset, column 0x1f
368
+ .byte 0x1 ; uleb128 0x1
369
+ .byte 0x9e ; DW_CFA_offset, column 0x1e
370
+ .byte 0x2 ; uleb128 0x2
371
+ .byte 0x9d ; DW_CFA_offset, column 0x1d
372
+ .byte 0x3 ; uleb128 0x3
373
+ .byte 0x9c ; DW_CFA_offset, column 0x1c
374
+ .byte 0x4 ; uleb128 0x4
375
+ .byte 0x4 ; DW_CFA_advance_loc4
376
+ .set L$set$6,LCFI2-LCFI1
377
+ .long L$set$6
378
+ .byte 0xd ; DW_CFA_def_cfa_register
379
+ .byte 0x1c ; uleb128 0x1c
380
+ .align LOG2_GPR_BYTES
381
+ LEFDE1:
382
+ .align 1
383
+