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,242 @@
1
+ /* -----------------------------------------------------------------*-C-*-
2
+ ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
3
+ Target configuration macros for MIPS.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ ``Software''), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included
14
+ in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
24
+
25
+ ----------------------------------------------------------------------- */
26
+
27
+ #ifndef LIBFFI_TARGET_H
28
+ #define LIBFFI_TARGET_H
29
+
30
+ #ifdef linux
31
+ # include <asm/sgidefs.h>
32
+ #elif defined(__rtems__)
33
+ /*
34
+ * Subprogram calling convention - copied from sgidefs.h
35
+ */
36
+ #define _MIPS_SIM_ABI32 1
37
+ #define _MIPS_SIM_NABI32 2
38
+ #define _MIPS_SIM_ABI64 3
39
+ #elif !defined(__OpenBSD__)
40
+ # include <sgidefs.h>
41
+ #endif
42
+
43
+ # ifndef _ABIN32
44
+ # define _ABIN32 _MIPS_SIM_NABI32
45
+ # endif
46
+ # ifndef _ABI64
47
+ # define _ABI64 _MIPS_SIM_ABI64
48
+ # endif
49
+ # ifndef _ABIO32
50
+ # define _ABIO32 _MIPS_SIM_ABI32
51
+ # endif
52
+
53
+ #if !defined(_MIPS_SIM)
54
+ # error -- something is very wrong --
55
+ #else
56
+ # if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64))
57
+ # define FFI_MIPS_N32
58
+ # else
59
+ # if (_MIPS_SIM==_ABIO32 && defined(_ABIO32))
60
+ # define FFI_MIPS_O32
61
+ # else
62
+ # error -- this is an unsupported platform --
63
+ # endif
64
+ # endif
65
+ #endif
66
+
67
+ #ifdef FFI_MIPS_O32
68
+ /* O32 stack frames have 32bit integer args */
69
+ # define FFI_SIZEOF_ARG 4
70
+ #else
71
+ /* N32 and N64 frames have 64bit integer args */
72
+ # define FFI_SIZEOF_ARG 8
73
+ # if _MIPS_SIM == _ABIN32
74
+ # define FFI_SIZEOF_JAVA_RAW 4
75
+ # endif
76
+ #endif
77
+
78
+ #define FFI_FLAG_BITS 2
79
+
80
+ /* SGI's strange assembler requires that we multiply by 4 rather
81
+ than shift left by FFI_FLAG_BITS */
82
+
83
+ #define FFI_ARGS_D FFI_TYPE_DOUBLE
84
+ #define FFI_ARGS_F FFI_TYPE_FLOAT
85
+ #define FFI_ARGS_DD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_DOUBLE
86
+ #define FFI_ARGS_FF FFI_TYPE_FLOAT * 4 + FFI_TYPE_FLOAT
87
+ #define FFI_ARGS_FD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_FLOAT
88
+ #define FFI_ARGS_DF FFI_TYPE_FLOAT * 4 + FFI_TYPE_DOUBLE
89
+
90
+ /* Needed for N32 structure returns */
91
+ #define FFI_TYPE_SMALLSTRUCT FFI_TYPE_UINT8
92
+ #define FFI_TYPE_SMALLSTRUCT2 FFI_TYPE_SINT8
93
+
94
+ #if 0
95
+ /* The SGI assembler can't handle this.. */
96
+ #define FFI_TYPE_STRUCT_DD (( FFI_ARGS_DD ) << 4) + FFI_TYPE_STRUCT
97
+ /* (and so on) */
98
+ #else
99
+ /* ...so we calculate these by hand! */
100
+ #define FFI_TYPE_STRUCT_D 61
101
+ #define FFI_TYPE_STRUCT_F 45
102
+ #define FFI_TYPE_STRUCT_DD 253
103
+ #define FFI_TYPE_STRUCT_FF 173
104
+ #define FFI_TYPE_STRUCT_FD 237
105
+ #define FFI_TYPE_STRUCT_DF 189
106
+ #define FFI_TYPE_STRUCT_SMALL 93
107
+ #define FFI_TYPE_STRUCT_SMALL2 109
108
+
109
+ /* and for n32 soft float, add 16 * 2^4 */
110
+ #define FFI_TYPE_STRUCT_D_SOFT 317
111
+ #define FFI_TYPE_STRUCT_F_SOFT 301
112
+ #define FFI_TYPE_STRUCT_DD_SOFT 509
113
+ #define FFI_TYPE_STRUCT_FF_SOFT 429
114
+ #define FFI_TYPE_STRUCT_FD_SOFT 493
115
+ #define FFI_TYPE_STRUCT_DF_SOFT 445
116
+ #define FFI_TYPE_STRUCT_SOFT 16
117
+ #endif
118
+
119
+ #ifdef LIBFFI_ASM
120
+ #define v0 $2
121
+ #define v1 $3
122
+ #define a0 $4
123
+ #define a1 $5
124
+ #define a2 $6
125
+ #define a3 $7
126
+ #define a4 $8
127
+ #define a5 $9
128
+ #define a6 $10
129
+ #define a7 $11
130
+ #define t0 $8
131
+ #define t1 $9
132
+ #define t2 $10
133
+ #define t3 $11
134
+ #define t4 $12
135
+ #define t5 $13
136
+ #define t6 $14
137
+ #define t7 $15
138
+ #define t8 $24
139
+ #define t9 $25
140
+ #define ra $31
141
+
142
+ #ifdef FFI_MIPS_O32
143
+ # define REG_L lw
144
+ # define REG_S sw
145
+ # define SUBU subu
146
+ # define ADDU addu
147
+ # define SRL srl
148
+ # define LI li
149
+ #else /* !FFI_MIPS_O32 */
150
+ # define REG_L ld
151
+ # define REG_S sd
152
+ # define SUBU dsubu
153
+ # define ADDU daddu
154
+ # define SRL dsrl
155
+ # define LI dli
156
+ # if (_MIPS_SIM==_ABI64)
157
+ # define LA dla
158
+ # define EH_FRAME_ALIGN 3
159
+ # define FDE_ADDR_BYTES .8byte
160
+ # else
161
+ # define LA la
162
+ # define EH_FRAME_ALIGN 2
163
+ # define FDE_ADDR_BYTES .4byte
164
+ # endif /* _MIPS_SIM==_ABI64 */
165
+ #endif /* !FFI_MIPS_O32 */
166
+ #else /* !LIBFFI_ASM */
167
+ # ifdef __GNUC__
168
+ # ifdef FFI_MIPS_O32
169
+ /* O32 stack frames have 32bit integer args */
170
+ typedef unsigned int ffi_arg __attribute__((__mode__(__SI__)));
171
+ typedef signed int ffi_sarg __attribute__((__mode__(__SI__)));
172
+ #else
173
+ /* N32 and N64 frames have 64bit integer args */
174
+ typedef unsigned int ffi_arg __attribute__((__mode__(__DI__)));
175
+ typedef signed int ffi_sarg __attribute__((__mode__(__DI__)));
176
+ # endif
177
+ # else
178
+ # ifdef FFI_MIPS_O32
179
+ /* O32 stack frames have 32bit integer args */
180
+ typedef __uint32_t ffi_arg;
181
+ typedef __int32_t ffi_sarg;
182
+ # else
183
+ /* N32 and N64 frames have 64bit integer args */
184
+ typedef __uint64_t ffi_arg;
185
+ typedef __int64_t ffi_sarg;
186
+ # endif
187
+ # endif /* __GNUC__ */
188
+
189
+ typedef enum ffi_abi {
190
+ FFI_FIRST_ABI = 0,
191
+ FFI_O32,
192
+ FFI_N32,
193
+ FFI_N64,
194
+ FFI_O32_SOFT_FLOAT,
195
+ FFI_N32_SOFT_FLOAT,
196
+ FFI_N64_SOFT_FLOAT,
197
+ FFI_LAST_ABI,
198
+
199
+ #ifdef FFI_MIPS_O32
200
+ #ifdef __mips_soft_float
201
+ FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT
202
+ #else
203
+ FFI_DEFAULT_ABI = FFI_O32
204
+ #endif
205
+ #else
206
+ # if _MIPS_SIM==_ABI64
207
+ # ifdef __mips_soft_float
208
+ FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT
209
+ # else
210
+ FFI_DEFAULT_ABI = FFI_N64
211
+ # endif
212
+ # else
213
+ # ifdef __mips_soft_float
214
+ FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT
215
+ # else
216
+ FFI_DEFAULT_ABI = FFI_N32
217
+ # endif
218
+ # endif
219
+ #endif
220
+ } ffi_abi;
221
+
222
+ #define FFI_EXTRA_CIF_FIELDS unsigned rstruct_flag
223
+ #endif /* !LIBFFI_ASM */
224
+
225
+ /* ---- Definitions for closures ----------------------------------------- */
226
+
227
+ #if defined(FFI_MIPS_O32)
228
+ #define FFI_CLOSURES 1
229
+ #define FFI_TRAMPOLINE_SIZE 20
230
+ #else
231
+ /* N32/N64. */
232
+ # define FFI_CLOSURES 1
233
+ #if _MIPS_SIM==_ABI64
234
+ #define FFI_TRAMPOLINE_SIZE 52
235
+ #else
236
+ #define FFI_TRAMPOLINE_SIZE 20
237
+ #endif
238
+ #endif /* FFI_MIPS_O32 */
239
+ #define FFI_NATIVE_RAW_API 0
240
+
241
+ #endif
242
+
@@ -0,0 +1,591 @@
1
+ /* -----------------------------------------------------------------------
2
+ n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc.
3
+
4
+ MIPS Foreign Function Interface
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ ``Software''), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included
15
+ in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
+ DEALINGS IN THE SOFTWARE.
25
+ ----------------------------------------------------------------------- */
26
+
27
+ #define LIBFFI_ASM
28
+ #include <fficonfig.h>
29
+ #include <ffi.h>
30
+
31
+ /* Only build this code if we are compiling for n32 */
32
+
33
+ #if defined(FFI_MIPS_N32)
34
+
35
+ #define callback a0
36
+ #define bytes a2
37
+ #define flags a3
38
+ #define raddr a4
39
+ #define fn a5
40
+
41
+ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG )
42
+
43
+ #ifdef __GNUC__
44
+ .abicalls
45
+ #endif
46
+ .text
47
+ .align 2
48
+ .globl ffi_call_N32
49
+ .ent ffi_call_N32
50
+ ffi_call_N32:
51
+ .LFB3:
52
+ .frame $fp, SIZEOF_FRAME, ra
53
+ .mask 0xc0000000,-FFI_SIZEOF_ARG
54
+ .fmask 0x00000000,0
55
+
56
+ # Prologue
57
+ SUBU $sp, SIZEOF_FRAME # Frame size
58
+ .LCFI0:
59
+ REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer
60
+ REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address
61
+ .LCFI1:
62
+ move $fp, $sp
63
+ .LCFI3:
64
+ move t9, callback # callback function pointer
65
+ REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes
66
+ REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags
67
+ REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr
68
+ REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn
69
+
70
+ # Allocate at least 4 words in the argstack
71
+ move v0, bytes
72
+ bge bytes, 4 * FFI_SIZEOF_ARG, bigger
73
+ LI v0, 4 * FFI_SIZEOF_ARG
74
+ b sixteen
75
+
76
+ bigger:
77
+ ADDU t4, v0, 2 * FFI_SIZEOF_ARG -1 # make sure it is aligned
78
+ and v0, t4, -2 * FFI_SIZEOF_ARG # to a proper boundry.
79
+
80
+ sixteen:
81
+ SUBU $sp, $sp, v0 # move the stack pointer to reflect the
82
+ # arg space
83
+
84
+ move a0, $sp # 4 * FFI_SIZEOF_ARG
85
+ ADDU a3, $fp, 3 * FFI_SIZEOF_ARG
86
+
87
+ # Call ffi_prep_args
88
+ jal t9
89
+
90
+ # Copy the stack pointer to t9
91
+ move t9, $sp
92
+
93
+ # Fix the stack if there are more than 8 64bit slots worth
94
+ # of arguments.
95
+
96
+ # Load the number of bytes
97
+ REG_L t6, 2*FFI_SIZEOF_ARG($fp)
98
+
99
+ # Is it bigger than 8 * FFI_SIZEOF_ARG?
100
+ daddiu t8, t6, -(8 * FFI_SIZEOF_ARG)
101
+ bltz t8, loadregs
102
+
103
+ ADDU t9, t9, t8
104
+
105
+ loadregs:
106
+
107
+ REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6.
108
+
109
+ and t4, t6, ((1<<FFI_FLAG_BITS)-1)
110
+ bnez t4, arg1_floatp
111
+ REG_L a0, 0*FFI_SIZEOF_ARG(t9)
112
+ b arg1_next
113
+ arg1_floatp:
114
+ bne t4, FFI_TYPE_FLOAT, arg1_doublep
115
+ l.s $f12, 0*FFI_SIZEOF_ARG(t9)
116
+ b arg1_next
117
+ arg1_doublep:
118
+ l.d $f12, 0*FFI_SIZEOF_ARG(t9)
119
+ arg1_next:
120
+
121
+ SRL t4, t6, 1*FFI_FLAG_BITS
122
+ and t4, ((1<<FFI_FLAG_BITS)-1)
123
+ bnez t4, arg2_floatp
124
+ REG_L a1, 1*FFI_SIZEOF_ARG(t9)
125
+ b arg2_next
126
+ arg2_floatp:
127
+ bne t4, FFI_TYPE_FLOAT, arg2_doublep
128
+ l.s $f13, 1*FFI_SIZEOF_ARG(t9)
129
+ b arg2_next
130
+ arg2_doublep:
131
+ l.d $f13, 1*FFI_SIZEOF_ARG(t9)
132
+ arg2_next:
133
+
134
+ SRL t4, t6, 2*FFI_FLAG_BITS
135
+ and t4, ((1<<FFI_FLAG_BITS)-1)
136
+ bnez t4, arg3_floatp
137
+ REG_L a2, 2*FFI_SIZEOF_ARG(t9)
138
+ b arg3_next
139
+ arg3_floatp:
140
+ bne t4, FFI_TYPE_FLOAT, arg3_doublep
141
+ l.s $f14, 2*FFI_SIZEOF_ARG(t9)
142
+ b arg3_next
143
+ arg3_doublep:
144
+ l.d $f14, 2*FFI_SIZEOF_ARG(t9)
145
+ arg3_next:
146
+
147
+ SRL t4, t6, 3*FFI_FLAG_BITS
148
+ and t4, ((1<<FFI_FLAG_BITS)-1)
149
+ bnez t4, arg4_floatp
150
+ REG_L a3, 3*FFI_SIZEOF_ARG(t9)
151
+ b arg4_next
152
+ arg4_floatp:
153
+ bne t4, FFI_TYPE_FLOAT, arg4_doublep
154
+ l.s $f15, 3*FFI_SIZEOF_ARG(t9)
155
+ b arg4_next
156
+ arg4_doublep:
157
+ l.d $f15, 3*FFI_SIZEOF_ARG(t9)
158
+ arg4_next:
159
+
160
+ SRL t4, t6, 4*FFI_FLAG_BITS
161
+ and t4, ((1<<FFI_FLAG_BITS)-1)
162
+ bnez t4, arg5_floatp
163
+ REG_L a4, 4*FFI_SIZEOF_ARG(t9)
164
+ b arg5_next
165
+ arg5_floatp:
166
+ bne t4, FFI_TYPE_FLOAT, arg5_doublep
167
+ l.s $f16, 4*FFI_SIZEOF_ARG(t9)
168
+ b arg5_next
169
+ arg5_doublep:
170
+ l.d $f16, 4*FFI_SIZEOF_ARG(t9)
171
+ arg5_next:
172
+
173
+ SRL t4, t6, 5*FFI_FLAG_BITS
174
+ and t4, ((1<<FFI_FLAG_BITS)-1)
175
+ bnez t4, arg6_floatp
176
+ REG_L a5, 5*FFI_SIZEOF_ARG(t9)
177
+ b arg6_next
178
+ arg6_floatp:
179
+ bne t4, FFI_TYPE_FLOAT, arg6_doublep
180
+ l.s $f17, 5*FFI_SIZEOF_ARG(t9)
181
+ b arg6_next
182
+ arg6_doublep:
183
+ l.d $f17, 5*FFI_SIZEOF_ARG(t9)
184
+ arg6_next:
185
+
186
+ SRL t4, t6, 6*FFI_FLAG_BITS
187
+ and t4, ((1<<FFI_FLAG_BITS)-1)
188
+ bnez t4, arg7_floatp
189
+ REG_L a6, 6*FFI_SIZEOF_ARG(t9)
190
+ b arg7_next
191
+ arg7_floatp:
192
+ bne t4, FFI_TYPE_FLOAT, arg7_doublep
193
+ l.s $f18, 6*FFI_SIZEOF_ARG(t9)
194
+ b arg7_next
195
+ arg7_doublep:
196
+ l.d $f18, 6*FFI_SIZEOF_ARG(t9)
197
+ arg7_next:
198
+
199
+ SRL t4, t6, 7*FFI_FLAG_BITS
200
+ and t4, ((1<<FFI_FLAG_BITS)-1)
201
+ bnez t4, arg8_floatp
202
+ REG_L a7, 7*FFI_SIZEOF_ARG(t9)
203
+ b arg8_next
204
+ arg8_floatp:
205
+ bne t4, FFI_TYPE_FLOAT, arg8_doublep
206
+ l.s $f19, 7*FFI_SIZEOF_ARG(t9)
207
+ b arg8_next
208
+ arg8_doublep:
209
+ l.d $f19, 7*FFI_SIZEOF_ARG(t9)
210
+ arg8_next:
211
+
212
+ callit:
213
+ # Load the function pointer
214
+ REG_L t9, 5*FFI_SIZEOF_ARG($fp)
215
+
216
+ # If the return value pointer is NULL, assume no return value.
217
+ REG_L t5, 4*FFI_SIZEOF_ARG($fp)
218
+ beqz t5, noretval
219
+
220
+ # Shift the return type flag over
221
+ SRL t6, 8*FFI_FLAG_BITS
222
+
223
+ beq t6, FFI_TYPE_SINT32, retint
224
+ bne t6, FFI_TYPE_INT, retfloat
225
+ retint:
226
+ jal t9
227
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
228
+ REG_S v0, 0(t4)
229
+ b epilogue
230
+
231
+ retfloat:
232
+ bne t6, FFI_TYPE_FLOAT, retdouble
233
+ jal t9
234
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
235
+ s.s $f0, 0(t4)
236
+ b epilogue
237
+
238
+ retdouble:
239
+ bne t6, FFI_TYPE_DOUBLE, retstruct_d
240
+ jal t9
241
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
242
+ s.d $f0, 0(t4)
243
+ b epilogue
244
+
245
+ retstruct_d:
246
+ bne t6, FFI_TYPE_STRUCT_D, retstruct_f
247
+ jal t9
248
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
249
+ s.d $f0, 0(t4)
250
+ b epilogue
251
+
252
+ retstruct_f:
253
+ bne t6, FFI_TYPE_STRUCT_F, retstruct_d_d
254
+ jal t9
255
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
256
+ s.s $f0, 0(t4)
257
+ b epilogue
258
+
259
+ retstruct_d_d:
260
+ bne t6, FFI_TYPE_STRUCT_DD, retstruct_f_f
261
+ jal t9
262
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
263
+ s.d $f0, 0(t4)
264
+ s.d $f2, 8(t4)
265
+ b epilogue
266
+
267
+ retstruct_f_f:
268
+ bne t6, FFI_TYPE_STRUCT_FF, retstruct_d_f
269
+ jal t9
270
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
271
+ s.s $f0, 0(t4)
272
+ s.s $f2, 4(t4)
273
+ b epilogue
274
+
275
+ retstruct_d_f:
276
+ bne t6, FFI_TYPE_STRUCT_DF, retstruct_f_d
277
+ jal t9
278
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
279
+ s.d $f0, 0(t4)
280
+ s.s $f2, 8(t4)
281
+ b epilogue
282
+
283
+ retstruct_f_d:
284
+ bne t6, FFI_TYPE_STRUCT_FD, retstruct_d_soft
285
+ jal t9
286
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
287
+ s.s $f0, 0(t4)
288
+ s.d $f2, 8(t4)
289
+ b epilogue
290
+
291
+ retstruct_d_soft:
292
+ bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft
293
+ jal t9
294
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
295
+ sd v0, 0(t4)
296
+ b epilogue
297
+
298
+ retstruct_f_soft:
299
+ bne t6, FFI_TYPE_STRUCT_F_SOFT, retstruct_d_d_soft
300
+ jal t9
301
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
302
+ sw v0, 0(t4)
303
+ b epilogue
304
+
305
+ retstruct_d_d_soft:
306
+ bne t6, FFI_TYPE_STRUCT_DD_SOFT, retstruct_f_f_soft
307
+ jal t9
308
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
309
+ sd v0, 0(t4)
310
+ sd v1, 8(t4)
311
+ b epilogue
312
+
313
+ retstruct_f_f_soft:
314
+ bne t6, FFI_TYPE_STRUCT_FF_SOFT, retstruct_d_f_soft
315
+ jal t9
316
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
317
+ sw v0, 0(t4)
318
+ sw v1, 4(t4)
319
+ b epilogue
320
+
321
+ retstruct_d_f_soft:
322
+ bne t6, FFI_TYPE_STRUCT_DF_SOFT, retstruct_f_d_soft
323
+ jal t9
324
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
325
+ sd v0, 0(t4)
326
+ sw v1, 8(t4)
327
+ b epilogue
328
+
329
+ retstruct_f_d_soft:
330
+ bne t6, FFI_TYPE_STRUCT_FD_SOFT, retstruct_small
331
+ jal t9
332
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
333
+ sw v0, 0(t4)
334
+ sd v1, 8(t4)
335
+ b epilogue
336
+
337
+ retstruct_small:
338
+ bne t6, FFI_TYPE_STRUCT_SMALL, retstruct_small2
339
+ jal t9
340
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
341
+ REG_S v0, 0(t4)
342
+ b epilogue
343
+
344
+ retstruct_small2:
345
+ bne t6, FFI_TYPE_STRUCT_SMALL2, retstruct
346
+ jal t9
347
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
348
+ REG_S v0, 0(t4)
349
+ REG_S v1, 8(t4)
350
+ b epilogue
351
+
352
+ retstruct:
353
+ noretval:
354
+ jal t9
355
+
356
+ # Epilogue
357
+ epilogue:
358
+ move $sp, $fp
359
+ REG_L $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Restore frame pointer
360
+ REG_L ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Restore return address
361
+ ADDU $sp, SIZEOF_FRAME # Fix stack pointer
362
+ j ra
363
+
364
+ .LFE3:
365
+ .end ffi_call_N32
366
+
367
+ /* ffi_closure_N32. Expects address of the passed-in ffi_closure in t0
368
+ ($12). Stores any arguments passed in registers onto the stack,
369
+ then calls ffi_closure_mips_inner_N32, which then decodes
370
+ them.
371
+
372
+ Stack layout:
373
+
374
+ 20 - Start of parameters, original sp
375
+ 19 - Called function a7 save
376
+ 18 - Called function a6 save
377
+ 17 - Called function a5 save
378
+ 16 - Called function a4 save
379
+ 15 - Called function a3 save
380
+ 14 - Called function a2 save
381
+ 13 - Called function a1 save
382
+ 12 - Called function a0 save
383
+ 11 - Called function f19
384
+ 10 - Called function f18
385
+ 9 - Called function f17
386
+ 8 - Called function f16
387
+ 7 - Called function f15
388
+ 6 - Called function f14
389
+ 5 - Called function f13
390
+ 4 - Called function f12
391
+ 3 - return value high (v1 or $f2)
392
+ 2 - return value low (v0 or $f0)
393
+ 1 - ra save
394
+ 0 - gp save our sp points here
395
+ */
396
+
397
+ #define SIZEOF_FRAME2 (20 * FFI_SIZEOF_ARG)
398
+
399
+ #define A7_OFF2 (19 * FFI_SIZEOF_ARG)
400
+ #define A6_OFF2 (18 * FFI_SIZEOF_ARG)
401
+ #define A5_OFF2 (17 * FFI_SIZEOF_ARG)
402
+ #define A4_OFF2 (16 * FFI_SIZEOF_ARG)
403
+ #define A3_OFF2 (15 * FFI_SIZEOF_ARG)
404
+ #define A2_OFF2 (14 * FFI_SIZEOF_ARG)
405
+ #define A1_OFF2 (13 * FFI_SIZEOF_ARG)
406
+ #define A0_OFF2 (12 * FFI_SIZEOF_ARG)
407
+
408
+ #define F19_OFF2 (11 * FFI_SIZEOF_ARG)
409
+ #define F18_OFF2 (10 * FFI_SIZEOF_ARG)
410
+ #define F17_OFF2 (9 * FFI_SIZEOF_ARG)
411
+ #define F16_OFF2 (8 * FFI_SIZEOF_ARG)
412
+ #define F15_OFF2 (7 * FFI_SIZEOF_ARG)
413
+ #define F14_OFF2 (6 * FFI_SIZEOF_ARG)
414
+ #define F13_OFF2 (5 * FFI_SIZEOF_ARG)
415
+ #define F12_OFF2 (4 * FFI_SIZEOF_ARG)
416
+
417
+ #define V1_OFF2 (3 * FFI_SIZEOF_ARG)
418
+ #define V0_OFF2 (2 * FFI_SIZEOF_ARG)
419
+
420
+ #define RA_OFF2 (1 * FFI_SIZEOF_ARG)
421
+ #define GP_OFF2 (0 * FFI_SIZEOF_ARG)
422
+
423
+ .align 2
424
+ .globl ffi_closure_N32
425
+ .ent ffi_closure_N32
426
+ ffi_closure_N32:
427
+ .LFB2:
428
+ .frame $sp, SIZEOF_FRAME2, ra
429
+ .mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
430
+ .fmask 0x00000000,0
431
+ SUBU $sp, SIZEOF_FRAME2
432
+ .LCFI5:
433
+ .cpsetup t9, GP_OFF2, ffi_closure_N32
434
+ REG_S ra, RA_OFF2($sp) # Save return address
435
+ .LCFI6:
436
+ # Store all possible argument registers. If there are more than
437
+ # fit in registers, then they were stored on the stack.
438
+ REG_S a0, A0_OFF2($sp)
439
+ REG_S a1, A1_OFF2($sp)
440
+ REG_S a2, A2_OFF2($sp)
441
+ REG_S a3, A3_OFF2($sp)
442
+ REG_S a4, A4_OFF2($sp)
443
+ REG_S a5, A5_OFF2($sp)
444
+ REG_S a6, A6_OFF2($sp)
445
+ REG_S a7, A7_OFF2($sp)
446
+
447
+ # Store all possible float/double registers.
448
+ s.d $f12, F12_OFF2($sp)
449
+ s.d $f13, F13_OFF2($sp)
450
+ s.d $f14, F14_OFF2($sp)
451
+ s.d $f15, F15_OFF2($sp)
452
+ s.d $f16, F16_OFF2($sp)
453
+ s.d $f17, F17_OFF2($sp)
454
+ s.d $f18, F18_OFF2($sp)
455
+ s.d $f19, F19_OFF2($sp)
456
+
457
+ # Call ffi_closure_mips_inner_N32 to do the real work.
458
+ LA t9, ffi_closure_mips_inner_N32
459
+ move a0, $12 # Pointer to the ffi_closure
460
+ ADDU a1, $sp, V0_OFF2
461
+ ADDU a2, $sp, A0_OFF2
462
+ ADDU a3, $sp, F12_OFF2
463
+ jalr t9
464
+
465
+ # Return flags are in v0
466
+ bne v0, FFI_TYPE_SINT32, cls_retint
467
+ lw v0, V0_OFF2($sp)
468
+ b cls_epilogue
469
+
470
+ cls_retint:
471
+ bne v0, FFI_TYPE_INT, cls_retfloat
472
+ REG_L v0, V0_OFF2($sp)
473
+ b cls_epilogue
474
+
475
+ cls_retfloat:
476
+ bne v0, FFI_TYPE_FLOAT, cls_retdouble
477
+ l.s $f0, V0_OFF2($sp)
478
+ b cls_epilogue
479
+
480
+ cls_retdouble:
481
+ bne v0, FFI_TYPE_DOUBLE, cls_retstruct_d
482
+ l.d $f0, V0_OFF2($sp)
483
+ b cls_epilogue
484
+
485
+ cls_retstruct_d:
486
+ bne v0, FFI_TYPE_STRUCT_D, cls_retstruct_f
487
+ l.d $f0, V0_OFF2($sp)
488
+ b cls_epilogue
489
+
490
+ cls_retstruct_f:
491
+ bne v0, FFI_TYPE_STRUCT_F, cls_retstruct_d_d
492
+ l.s $f0, V0_OFF2($sp)
493
+ b cls_epilogue
494
+
495
+ cls_retstruct_d_d:
496
+ bne v0, FFI_TYPE_STRUCT_DD, cls_retstruct_f_f
497
+ l.d $f0, V0_OFF2($sp)
498
+ l.d $f2, V1_OFF2($sp)
499
+ b cls_epilogue
500
+
501
+ cls_retstruct_f_f:
502
+ bne v0, FFI_TYPE_STRUCT_FF, cls_retstruct_d_f
503
+ l.s $f0, V0_OFF2($sp)
504
+ l.s $f2, V1_OFF2($sp)
505
+ b cls_epilogue
506
+
507
+ cls_retstruct_d_f:
508
+ bne v0, FFI_TYPE_STRUCT_DF, cls_retstruct_f_d
509
+ l.d $f0, V0_OFF2($sp)
510
+ l.s $f2, V1_OFF2($sp)
511
+ b cls_epilogue
512
+
513
+ cls_retstruct_f_d:
514
+ bne v0, FFI_TYPE_STRUCT_FD, cls_retstruct_small2
515
+ l.s $f0, V0_OFF2($sp)
516
+ l.d $f2, V1_OFF2($sp)
517
+ b cls_epilogue
518
+
519
+ cls_retstruct_small2:
520
+ REG_L v0, V0_OFF2($sp)
521
+ REG_L v1, V1_OFF2($sp)
522
+
523
+ # Epilogue
524
+ cls_epilogue:
525
+ REG_L ra, RA_OFF2($sp) # Restore return address
526
+ .cpreturn
527
+ ADDU $sp, SIZEOF_FRAME2
528
+ j ra
529
+ .LFE2:
530
+ .end ffi_closure_N32
531
+
532
+ #ifdef __GNUC__
533
+ .section .eh_frame,"aw",@progbits
534
+ .Lframe1:
535
+ .4byte .LECIE1-.LSCIE1 # length
536
+ .LSCIE1:
537
+ .4byte 0x0 # CIE
538
+ .byte 0x1 # Version 1
539
+ .ascii "\000" # Augmentation
540
+ .uleb128 0x1 # Code alignment 1
541
+ .sleb128 -4 # Data alignment -4
542
+ .byte 0x1f # Return Address $31
543
+ .byte 0xc # DW_CFA_def_cfa
544
+ .uleb128 0x1d # in $sp
545
+ .uleb128 0x0 # offset 0
546
+ .align EH_FRAME_ALIGN
547
+ .LECIE1:
548
+
549
+ .LSFDE1:
550
+ .4byte .LEFDE1-.LASFDE1 # length.
551
+ .LASFDE1:
552
+ .4byte .LASFDE1-.Lframe1 # CIE_pointer.
553
+ FDE_ADDR_BYTES .LFB3 # initial_location.
554
+ FDE_ADDR_BYTES .LFE3-.LFB3 # address_range.
555
+ .byte 0x4 # DW_CFA_advance_loc4
556
+ .4byte .LCFI0-.LFB3 # to .LCFI0
557
+ .byte 0xe # DW_CFA_def_cfa_offset
558
+ .uleb128 SIZEOF_FRAME # adjust stack.by SIZEOF_FRAME
559
+ .byte 0x4 # DW_CFA_advance_loc4
560
+ .4byte .LCFI1-.LCFI0 # to .LCFI1
561
+ .byte 0x9e # DW_CFA_offset of $fp
562
+ .uleb128 2*FFI_SIZEOF_ARG/4 #
563
+ .byte 0x9f # DW_CFA_offset of ra
564
+ .uleb128 1*FFI_SIZEOF_ARG/4 #
565
+ .byte 0x4 # DW_CFA_advance_loc4
566
+ .4byte .LCFI3-.LCFI1 # to .LCFI3
567
+ .byte 0xd # DW_CFA_def_cfa_register
568
+ .uleb128 0x1e # in $fp
569
+ .align EH_FRAME_ALIGN
570
+ .LEFDE1:
571
+ .LSFDE3:
572
+ .4byte .LEFDE3-.LASFDE3 # length
573
+ .LASFDE3:
574
+ .4byte .LASFDE3-.Lframe1 # CIE_pointer.
575
+ FDE_ADDR_BYTES .LFB2 # initial_location.
576
+ FDE_ADDR_BYTES .LFE2-.LFB2 # address_range.
577
+ .byte 0x4 # DW_CFA_advance_loc4
578
+ .4byte .LCFI5-.LFB2 # to .LCFI5
579
+ .byte 0xe # DW_CFA_def_cfa_offset
580
+ .uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
581
+ .byte 0x4 # DW_CFA_advance_loc4
582
+ .4byte .LCFI6-.LCFI5 # to .LCFI6
583
+ .byte 0x9c # DW_CFA_offset of $gp ($28)
584
+ .uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
585
+ .byte 0x9f # DW_CFA_offset of ra ($31)
586
+ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
587
+ .align EH_FRAME_ALIGN
588
+ .LEFDE3:
589
+ #endif /* __GNUC__ */
590
+
591
+ #endif