ffi 1.9.18 → 1.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +22 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +52 -0
  5. data/.yardopts +5 -0
  6. data/Gemfile +15 -0
  7. data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
  8. data/README.md +3 -4
  9. data/Rakefile +41 -5
  10. data/appveyor.yml +22 -0
  11. data/ext/ffi_c/AbstractMemory.c +6 -1
  12. data/ext/ffi_c/Call.c +1 -22
  13. data/ext/ffi_c/Call.h +0 -9
  14. data/ext/ffi_c/Closure.c +54 -0
  15. data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
  16. data/ext/ffi_c/Function.c +16 -25
  17. data/ext/ffi_c/Function.h +1 -2
  18. data/ext/ffi_c/FunctionInfo.c +0 -4
  19. data/ext/ffi_c/MethodHandle.c +33 -268
  20. data/ext/ffi_c/Platform.c +10 -2
  21. data/ext/ffi_c/extconf.rb +10 -5
  22. data/ext/ffi_c/ffi.c +2 -2
  23. data/ext/ffi_c/libffi/.appveyor.yml +48 -0
  24. data/ext/ffi_c/libffi/.gitignore +36 -0
  25. data/ext/ffi_c/libffi/.travis/install.sh +14 -0
  26. data/ext/ffi_c/libffi/.travis.yml +30 -0
  27. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  28. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  29. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  30. data/ext/ffi_c/libffi/LICENSE +1 -1
  31. data/ext/ffi_c/libffi/Makefile.am +169 -158
  32. data/ext/ffi_c/libffi/Makefile.in +927 -938
  33. data/ext/ffi_c/libffi/README +164 -52
  34. data/ext/ffi_c/libffi/acinclude.m4 +387 -0
  35. data/ext/ffi_c/libffi/autogen.sh +2 -0
  36. data/ext/ffi_c/libffi/config.guess +336 -371
  37. data/ext/ffi_c/libffi/config.sub +246 -115
  38. data/ext/ffi_c/libffi/configure +6976 -2189
  39. data/ext/ffi_c/libffi/configure.ac +148 -256
  40. data/ext/ffi_c/libffi/configure.host +277 -4
  41. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  42. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  43. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  44. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  45. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  46. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
  47. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  48. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  49. data/ext/ffi_c/libffi/include/ffi.h.in +112 -50
  50. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  51. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  52. data/ext/ffi_c/libffi/install-sh +190 -202
  53. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  54. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  55. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
  56. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  57. data/ext/ffi_c/libffi/libtool-version +1 -1
  58. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  59. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  60. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  61. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  62. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  63. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  64. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  65. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  66. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  67. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  68. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  69. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  70. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  71. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  72. data/ext/ffi_c/libffi/missing +150 -311
  73. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  74. data/ext/ffi_c/libffi/src/aarch64/ffi.c +964 -0
  75. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  76. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  77. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  78. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  79. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  80. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  81. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  82. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  83. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  84. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  85. data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
  86. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  87. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  88. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  89. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  90. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  91. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  92. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  93. data/ext/ffi_c/libffi/src/closures.c +366 -45
  94. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  95. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  96. data/ext/ffi_c/libffi/src/debug.c +6 -1
  97. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  98. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  99. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  100. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  101. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  102. data/ext/ffi_c/libffi/src/ia64/unix.S +2 -0
  103. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  104. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  105. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  106. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  107. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  108. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  109. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  110. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  111. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  112. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  113. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  114. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  115. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  116. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  117. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  118. data/ext/ffi_c/libffi/src/mips/ffi.c +103 -28
  119. data/ext/ffi_c/libffi/src/mips/ffitarget.h +10 -3
  120. data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
  121. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  122. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  123. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  124. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  125. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  126. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  127. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  128. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  129. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  130. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  131. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  132. data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
  133. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
  134. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  135. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  136. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  137. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  138. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
  139. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  140. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  141. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  142. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
  143. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  144. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  145. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  146. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  147. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  148. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  149. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  150. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  151. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  152. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  153. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  154. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  155. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  156. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  157. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  158. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  159. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  160. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  161. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  162. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  163. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  164. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  165. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  166. data/ext/ffi_c/libffi/src/types.c +43 -14
  167. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  168. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  169. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  170. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  171. data/ext/ffi_c/libffi/src/x86/ffi.c +591 -500
  172. data/ext/ffi_c/libffi/src/x86/ffi64.c +359 -116
  173. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  174. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  175. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  176. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  177. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  178. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  179. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  180. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  181. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  182. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  183. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  184. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  185. data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -73
  186. data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
  187. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +121 -25
  188. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  292. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  293. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  314. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  345. data/ext/ffi_c/libffi.bsd.mk +11 -5
  346. data/ext/ffi_c/libffi.darwin.mk +14 -4
  347. data/ext/ffi_c/libffi.gnu.mk +3 -2
  348. data/ext/ffi_c/libffi.mk +10 -5
  349. data/ext/ffi_c/libffi.vc.mk +1 -1
  350. data/ext/ffi_c/libffi.vc64.mk +1 -1
  351. data/ffi.gemspec +16 -3
  352. data/lib/ffi/enum.rb +124 -0
  353. data/lib/ffi/library.rb +66 -14
  354. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  355. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  356. data/lib/ffi/platform.rb +7 -2
  357. data/lib/ffi/pointer.rb +1 -0
  358. data/lib/ffi/struct.rb +0 -2
  359. data/lib/ffi/version.rb +1 -2
  360. data/samples/getlogin.rb +8 -0
  361. data/samples/getpid.rb +8 -0
  362. data/samples/gettimeofday.rb +18 -0
  363. data/samples/hello.rb +7 -0
  364. data/samples/inotify.rb +60 -0
  365. data/samples/pty.rb +76 -0
  366. data/samples/qsort.rb +21 -0
  367. data/samples/sample_helper.rb +6 -0
  368. metadata +164 -115
  369. data/ext/ffi_c/ClosurePool.c +0 -283
  370. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  371. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  372. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  373. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  374. data/ext/ffi_c/libffi/compile +0 -143
  375. data/ext/ffi_c/libffi/depcomp +0 -630
  376. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  377. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  378. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  379. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  380. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  381. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  382. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  383. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  384. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  385. data/ext/ffi_c/libffi/mdate-sh +0 -201
  386. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  387. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  388. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  389. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  390. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  391. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  392. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  393. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  394. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  395. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  396. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  397. data/gen/Rakefile +0 -30
  398. data/libtest/Benchmark.c +0 -52
  399. data/libtest/BoolTest.c +0 -34
  400. data/libtest/BufferTest.c +0 -31
  401. data/libtest/ClosureTest.c +0 -205
  402. data/libtest/EnumTest.c +0 -51
  403. data/libtest/FunctionTest.c +0 -70
  404. data/libtest/GNUmakefile +0 -149
  405. data/libtest/GlobalVariable.c +0 -62
  406. data/libtest/LastErrorTest.c +0 -21
  407. data/libtest/NumberTest.c +0 -132
  408. data/libtest/PointerTest.c +0 -63
  409. data/libtest/ReferenceTest.c +0 -23
  410. data/libtest/StringTest.c +0 -34
  411. data/libtest/StructTest.c +0 -243
  412. data/libtest/UnionTest.c +0 -43
  413. data/libtest/VariadicTest.c +0 -99
  414. data/spec/ffi/async_callback_spec.rb +0 -35
  415. data/spec/ffi/bool_spec.rb +0 -32
  416. data/spec/ffi/buffer_spec.rb +0 -279
  417. data/spec/ffi/callback_spec.rb +0 -773
  418. data/spec/ffi/custom_param_type.rb +0 -37
  419. data/spec/ffi/custom_type_spec.rb +0 -74
  420. data/spec/ffi/dup_spec.rb +0 -52
  421. data/spec/ffi/enum_spec.rb +0 -423
  422. data/spec/ffi/errno_spec.rb +0 -20
  423. data/spec/ffi/ffi_spec.rb +0 -28
  424. data/spec/ffi/fixtures/Benchmark.c +0 -52
  425. data/spec/ffi/fixtures/BoolTest.c +0 -34
  426. data/spec/ffi/fixtures/BufferTest.c +0 -31
  427. data/spec/ffi/fixtures/ClosureTest.c +0 -205
  428. data/spec/ffi/fixtures/EnumTest.c +0 -51
  429. data/spec/ffi/fixtures/FunctionTest.c +0 -142
  430. data/spec/ffi/fixtures/GNUmakefile +0 -149
  431. data/spec/ffi/fixtures/GlobalVariable.c +0 -62
  432. data/spec/ffi/fixtures/LastErrorTest.c +0 -21
  433. data/spec/ffi/fixtures/NumberTest.c +0 -132
  434. data/spec/ffi/fixtures/PipeHelper.h +0 -21
  435. data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
  436. data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
  437. data/spec/ffi/fixtures/PointerTest.c +0 -63
  438. data/spec/ffi/fixtures/ReferenceTest.c +0 -23
  439. data/spec/ffi/fixtures/StringTest.c +0 -34
  440. data/spec/ffi/fixtures/StructTest.c +0 -243
  441. data/spec/ffi/fixtures/UnionTest.c +0 -43
  442. data/spec/ffi/fixtures/VariadicTest.c +0 -99
  443. data/spec/ffi/fixtures/classes.rb +0 -438
  444. data/spec/ffi/function_spec.rb +0 -97
  445. data/spec/ffi/io_spec.rb +0 -16
  446. data/spec/ffi/library_spec.rb +0 -286
  447. data/spec/ffi/long_double.rb +0 -30
  448. data/spec/ffi/managed_struct_spec.rb +0 -68
  449. data/spec/ffi/memorypointer_spec.rb +0 -78
  450. data/spec/ffi/number_spec.rb +0 -247
  451. data/spec/ffi/platform_spec.rb +0 -114
  452. data/spec/ffi/pointer_spec.rb +0 -285
  453. data/spec/ffi/rbx/attach_function_spec.rb +0 -34
  454. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
  455. data/spec/ffi/rbx/spec_helper.rb +0 -6
  456. data/spec/ffi/rbx/struct_spec.rb +0 -18
  457. data/spec/ffi/spec_helper.rb +0 -93
  458. data/spec/ffi/string_spec.rb +0 -118
  459. data/spec/ffi/strptr_spec.rb +0 -50
  460. data/spec/ffi/struct_by_ref_spec.rb +0 -43
  461. data/spec/ffi/struct_callback_spec.rb +0 -69
  462. data/spec/ffi/struct_initialize_spec.rb +0 -35
  463. data/spec/ffi/struct_packed_spec.rb +0 -50
  464. data/spec/ffi/struct_spec.rb +0 -886
  465. data/spec/ffi/typedef_spec.rb +0 -91
  466. data/spec/ffi/union_spec.rb +0 -67
  467. data/spec/ffi/variadic_spec.rb +0 -132
  468. data/spec/spec.opts +0 -4
@@ -37,35 +37,43 @@
37
37
  #define flags a3
38
38
  #define raddr a4
39
39
  #define fn a5
40
+ #define closure a6
40
41
 
41
- #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG )
42
+ /* Note: to keep stack 16 byte aligned we need even number slots
43
+ used 9 slots here
44
+ */
45
+ #define SIZEOF_FRAME ( 10 * FFI_SIZEOF_ARG )
42
46
 
43
47
  #ifdef __GNUC__
44
48
  .abicalls
49
+ #endif
50
+ #if !defined(__mips_isa_rev) || (__mips_isa_rev<6)
51
+ .set mips4
45
52
  #endif
46
53
  .text
47
54
  .align 2
48
55
  .globl ffi_call_N32
49
56
  .ent ffi_call_N32
50
57
  ffi_call_N32:
51
- .LFB3:
58
+ .LFB0:
52
59
  .frame $fp, SIZEOF_FRAME, ra
53
60
  .mask 0xc0000000,-FFI_SIZEOF_ARG
54
61
  .fmask 0x00000000,0
55
62
 
56
63
  # Prologue
57
64
  SUBU $sp, SIZEOF_FRAME # Frame size
58
- .LCFI0:
65
+ .LCFI00:
59
66
  REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer
60
67
  REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address
61
- .LCFI1:
68
+ .LCFI01:
62
69
  move $fp, $sp
63
- .LCFI3:
70
+ .LCFI02:
64
71
  move t9, callback # callback function pointer
65
72
  REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes
66
73
  REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags
67
74
  REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr
68
75
  REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn
76
+ REG_S closure, 6*FFI_SIZEOF_ARG($fp) # closure
69
77
 
70
78
  # Allocate at least 4 words in the argstack
71
79
  move v0, bytes
@@ -106,11 +114,19 @@ loadregs:
106
114
 
107
115
  REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6.
108
116
 
117
+ #ifdef __mips_soft_float
118
+ REG_L a0, 0*FFI_SIZEOF_ARG(t9)
119
+ REG_L a1, 1*FFI_SIZEOF_ARG(t9)
120
+ REG_L a2, 2*FFI_SIZEOF_ARG(t9)
121
+ REG_L a3, 3*FFI_SIZEOF_ARG(t9)
122
+ REG_L a4, 4*FFI_SIZEOF_ARG(t9)
123
+ REG_L a5, 5*FFI_SIZEOF_ARG(t9)
124
+ REG_L a6, 6*FFI_SIZEOF_ARG(t9)
125
+ REG_L a7, 7*FFI_SIZEOF_ARG(t9)
126
+ #else
109
127
  and t4, t6, ((1<<FFI_FLAG_BITS)-1)
110
- bnez t4, arg1_floatp
111
128
  REG_L a0, 0*FFI_SIZEOF_ARG(t9)
112
- b arg1_next
113
- arg1_floatp:
129
+ beqz t4, arg1_next
114
130
  bne t4, FFI_TYPE_FLOAT, arg1_doublep
115
131
  l.s $f12, 0*FFI_SIZEOF_ARG(t9)
116
132
  b arg1_next
@@ -120,10 +136,8 @@ arg1_next:
120
136
 
121
137
  SRL t4, t6, 1*FFI_FLAG_BITS
122
138
  and t4, ((1<<FFI_FLAG_BITS)-1)
123
- bnez t4, arg2_floatp
124
139
  REG_L a1, 1*FFI_SIZEOF_ARG(t9)
125
- b arg2_next
126
- arg2_floatp:
140
+ beqz t4, arg2_next
127
141
  bne t4, FFI_TYPE_FLOAT, arg2_doublep
128
142
  l.s $f13, 1*FFI_SIZEOF_ARG(t9)
129
143
  b arg2_next
@@ -133,10 +147,8 @@ arg2_next:
133
147
 
134
148
  SRL t4, t6, 2*FFI_FLAG_BITS
135
149
  and t4, ((1<<FFI_FLAG_BITS)-1)
136
- bnez t4, arg3_floatp
137
150
  REG_L a2, 2*FFI_SIZEOF_ARG(t9)
138
- b arg3_next
139
- arg3_floatp:
151
+ beqz t4, arg3_next
140
152
  bne t4, FFI_TYPE_FLOAT, arg3_doublep
141
153
  l.s $f14, 2*FFI_SIZEOF_ARG(t9)
142
154
  b arg3_next
@@ -146,10 +158,8 @@ arg3_next:
146
158
 
147
159
  SRL t4, t6, 3*FFI_FLAG_BITS
148
160
  and t4, ((1<<FFI_FLAG_BITS)-1)
149
- bnez t4, arg4_floatp
150
161
  REG_L a3, 3*FFI_SIZEOF_ARG(t9)
151
- b arg4_next
152
- arg4_floatp:
162
+ beqz t4, arg4_next
153
163
  bne t4, FFI_TYPE_FLOAT, arg4_doublep
154
164
  l.s $f15, 3*FFI_SIZEOF_ARG(t9)
155
165
  b arg4_next
@@ -159,10 +169,8 @@ arg4_next:
159
169
 
160
170
  SRL t4, t6, 4*FFI_FLAG_BITS
161
171
  and t4, ((1<<FFI_FLAG_BITS)-1)
162
- bnez t4, arg5_floatp
163
172
  REG_L a4, 4*FFI_SIZEOF_ARG(t9)
164
- b arg5_next
165
- arg5_floatp:
173
+ beqz t4, arg5_next
166
174
  bne t4, FFI_TYPE_FLOAT, arg5_doublep
167
175
  l.s $f16, 4*FFI_SIZEOF_ARG(t9)
168
176
  b arg5_next
@@ -172,10 +180,8 @@ arg5_next:
172
180
 
173
181
  SRL t4, t6, 5*FFI_FLAG_BITS
174
182
  and t4, ((1<<FFI_FLAG_BITS)-1)
175
- bnez t4, arg6_floatp
176
183
  REG_L a5, 5*FFI_SIZEOF_ARG(t9)
177
- b arg6_next
178
- arg6_floatp:
184
+ beqz t4, arg6_next
179
185
  bne t4, FFI_TYPE_FLOAT, arg6_doublep
180
186
  l.s $f17, 5*FFI_SIZEOF_ARG(t9)
181
187
  b arg6_next
@@ -185,10 +191,8 @@ arg6_next:
185
191
 
186
192
  SRL t4, t6, 6*FFI_FLAG_BITS
187
193
  and t4, ((1<<FFI_FLAG_BITS)-1)
188
- bnez t4, arg7_floatp
189
194
  REG_L a6, 6*FFI_SIZEOF_ARG(t9)
190
- b arg7_next
191
- arg7_floatp:
195
+ beqz t4, arg7_next
192
196
  bne t4, FFI_TYPE_FLOAT, arg7_doublep
193
197
  l.s $f18, 6*FFI_SIZEOF_ARG(t9)
194
198
  b arg7_next
@@ -198,21 +202,23 @@ arg7_next:
198
202
 
199
203
  SRL t4, t6, 7*FFI_FLAG_BITS
200
204
  and t4, ((1<<FFI_FLAG_BITS)-1)
201
- bnez t4, arg8_floatp
202
205
  REG_L a7, 7*FFI_SIZEOF_ARG(t9)
203
- b arg8_next
204
- arg8_floatp:
206
+ beqz t4, arg8_next
205
207
  bne t4, FFI_TYPE_FLOAT, arg8_doublep
206
208
  l.s $f19, 7*FFI_SIZEOF_ARG(t9)
207
209
  b arg8_next
208
210
  arg8_doublep:
209
211
  l.d $f19, 7*FFI_SIZEOF_ARG(t9)
210
212
  arg8_next:
213
+ #endif
211
214
 
212
215
  callit:
213
216
  # Load the function pointer
214
217
  REG_L t9, 5*FFI_SIZEOF_ARG($fp)
215
218
 
219
+ # install the static chain(t7=$15)
220
+ REG_L t7, 6*FFI_SIZEOF_ARG($fp)
221
+
216
222
  # If the return value pointer is NULL, assume no return value.
217
223
  REG_L t5, 4*FFI_SIZEOF_ARG($fp)
218
224
  beqz t5, noretval
@@ -229,6 +235,7 @@ retint:
229
235
  b epilogue
230
236
 
231
237
  retfloat:
238
+ #ifndef __mips_soft_float
232
239
  bne t6, FFI_TYPE_FLOAT, retdouble
233
240
  jal t9
234
241
  REG_L t4, 4*FFI_SIZEOF_ARG($fp)
@@ -287,6 +294,7 @@ retstruct_f_d:
287
294
  s.s $f0, 0(t4)
288
295
  s.d $f2, 8(t4)
289
296
  b epilogue
297
+ #endif
290
298
 
291
299
  retstruct_d_soft:
292
300
  bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft
@@ -361,7 +369,7 @@ epilogue:
361
369
  ADDU $sp, SIZEOF_FRAME # Fix stack pointer
362
370
  j ra
363
371
 
364
- .LFE3:
372
+ .LFE0:
365
373
  .end ffi_call_N32
366
374
 
367
375
  /* ffi_closure_N32. Expects address of the passed-in ffi_closure in t0
@@ -420,6 +428,41 @@ epilogue:
420
428
  #define RA_OFF2 (1 * FFI_SIZEOF_ARG)
421
429
  #define GP_OFF2 (0 * FFI_SIZEOF_ARG)
422
430
 
431
+ .align 2
432
+ .globl ffi_go_closure_N32
433
+ .ent ffi_go_closure_N32
434
+ ffi_go_closure_N32:
435
+ .LFB1:
436
+ .frame $sp, SIZEOF_FRAME2, ra
437
+ .mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
438
+ .fmask 0x00000000,0
439
+ SUBU $sp, SIZEOF_FRAME2
440
+ .LCFI10:
441
+ .cpsetup t9, GP_OFF2, ffi_go_closure_N32
442
+ REG_S ra, RA_OFF2($sp) # Save return address
443
+ .LCFI11:
444
+
445
+ REG_S a0, A0_OFF2($sp)
446
+ REG_S a1, A1_OFF2($sp)
447
+ REG_S a2, A2_OFF2($sp)
448
+ REG_S a3, A3_OFF2($sp)
449
+ REG_S a4, A4_OFF2($sp)
450
+ REG_S a5, A5_OFF2($sp)
451
+
452
+ # Call ffi_closure_mips_inner_N32 to do the real work.
453
+ LA t9, ffi_closure_mips_inner_N32
454
+ REG_L a0, 8($15) # cif
455
+ REG_L a1, 16($15) # fun
456
+ move a2, t7 # userdata=closure
457
+ ADDU a3, $sp, V0_OFF2 # rvalue
458
+ ADDU a4, $sp, A0_OFF2 # ar
459
+ ADDU a5, $sp, F12_OFF2 # fpr
460
+
461
+ b $do_closure
462
+
463
+ .LFE1:
464
+ .end ffi_go_closure_N32
465
+
423
466
  .align 2
424
467
  .globl ffi_closure_N32
425
468
  .ent ffi_closure_N32
@@ -429,21 +472,33 @@ ffi_closure_N32:
429
472
  .mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
430
473
  .fmask 0x00000000,0
431
474
  SUBU $sp, SIZEOF_FRAME2
432
- .LCFI5:
475
+ .LCFI20:
433
476
  .cpsetup t9, GP_OFF2, ffi_closure_N32
434
477
  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.
478
+ .LCFI21:
438
479
  REG_S a0, A0_OFF2($sp)
439
480
  REG_S a1, A1_OFF2($sp)
440
481
  REG_S a2, A2_OFF2($sp)
441
482
  REG_S a3, A3_OFF2($sp)
442
483
  REG_S a4, A4_OFF2($sp)
443
484
  REG_S a5, A5_OFF2($sp)
485
+
486
+ # Call ffi_closure_mips_inner_N32 to do the real work.
487
+ LA t9, ffi_closure_mips_inner_N32
488
+ REG_L a0, 56($12) # cif
489
+ REG_L a1, 64($12) # fun
490
+ REG_L a2, 72($12) # user_data
491
+ ADDU a3, $sp, V0_OFF2
492
+ ADDU a4, $sp, A0_OFF2
493
+ ADDU a5, $sp, F12_OFF2
494
+
495
+ $do_closure:
496
+ # Store all possible argument registers. If there are more than
497
+ # fit in registers, then they were stored on the stack.
444
498
  REG_S a6, A6_OFF2($sp)
445
499
  REG_S a7, A7_OFF2($sp)
446
500
 
501
+ #ifndef __mips_soft_float
447
502
  # Store all possible float/double registers.
448
503
  s.d $f12, F12_OFF2($sp)
449
504
  s.d $f13, F13_OFF2($sp)
@@ -453,13 +508,8 @@ ffi_closure_N32:
453
508
  s.d $f17, F17_OFF2($sp)
454
509
  s.d $f18, F18_OFF2($sp)
455
510
  s.d $f19, F19_OFF2($sp)
511
+ #endif
456
512
 
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
513
  jalr t9
464
514
 
465
515
  # Return flags are in v0
@@ -473,6 +523,7 @@ cls_retint:
473
523
  b cls_epilogue
474
524
 
475
525
  cls_retfloat:
526
+ #ifndef __mips_soft_float
476
527
  bne v0, FFI_TYPE_FLOAT, cls_retdouble
477
528
  l.s $f0, V0_OFF2($sp)
478
529
  b cls_epilogue
@@ -515,6 +566,7 @@ cls_retstruct_f_d:
515
566
  l.s $f0, V0_OFF2($sp)
516
567
  l.d $f2, V1_OFF2($sp)
517
568
  b cls_epilogue
569
+ #endif
518
570
 
519
571
  cls_retstruct_small2:
520
572
  REG_L v0, V0_OFF2($sp)
@@ -546,46 +598,66 @@ cls_epilogue:
546
598
  .align EH_FRAME_ALIGN
547
599
  .LECIE1:
548
600
 
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.
601
+ .LSFDE0:
602
+ .4byte .LEFDE0-.LASFDE0 # length.
603
+ .LASFDE0:
604
+ .4byte .LASFDE0-.Lframe1 # CIE_pointer.
605
+ FDE_ADDR_BYTES .LFB0 # initial_location.
606
+ FDE_ADDR_BYTES .LFE0-.LFB0 # address_range.
555
607
  .byte 0x4 # DW_CFA_advance_loc4
556
- .4byte .LCFI0-.LFB3 # to .LCFI0
608
+ .4byte .LCFI00-.LFB0 # to .LCFI00
557
609
  .byte 0xe # DW_CFA_def_cfa_offset
558
610
  .uleb128 SIZEOF_FRAME # adjust stack.by SIZEOF_FRAME
559
611
  .byte 0x4 # DW_CFA_advance_loc4
560
- .4byte .LCFI1-.LCFI0 # to .LCFI1
612
+ .4byte .LCFI01-.LCFI00 # to .LCFI01
561
613
  .byte 0x9e # DW_CFA_offset of $fp
562
614
  .uleb128 2*FFI_SIZEOF_ARG/4 #
563
615
  .byte 0x9f # DW_CFA_offset of ra
564
616
  .uleb128 1*FFI_SIZEOF_ARG/4 #
565
617
  .byte 0x4 # DW_CFA_advance_loc4
566
- .4byte .LCFI3-.LCFI1 # to .LCFI3
618
+ .4byte .LCFI02-.LCFI01 # to .LCFI02
567
619
  .byte 0xd # DW_CFA_def_cfa_register
568
620
  .uleb128 0x1e # in $fp
569
621
  .align EH_FRAME_ALIGN
622
+ .LEFDE0:
623
+
624
+ .LSFDE1:
625
+ .4byte .LEFDE1-.LASFDE1 # length
626
+ .LASFDE1:
627
+ .4byte .LASFDE1-.Lframe1 # CIE_pointer.
628
+ FDE_ADDR_BYTES .LFB1 # initial_location.
629
+ FDE_ADDR_BYTES .LFE1-.LFB1 # address_range.
630
+ .byte 0x4 # DW_CFA_advance_loc4
631
+ .4byte .LCFI10-.LFB1 # to .LCFI10
632
+ .byte 0xe # DW_CFA_def_cfa_offset
633
+ .uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
634
+ .byte 0x4 # DW_CFA_advance_loc4
635
+ .4byte .LCFI11-.LCFI10 # to .LCFI11
636
+ .byte 0x9c # DW_CFA_offset of $gp ($28)
637
+ .uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
638
+ .byte 0x9f # DW_CFA_offset of ra ($31)
639
+ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
640
+ .align EH_FRAME_ALIGN
570
641
  .LEFDE1:
571
- .LSFDE3:
572
- .4byte .LEFDE3-.LASFDE3 # length
573
- .LASFDE3:
574
- .4byte .LASFDE3-.Lframe1 # CIE_pointer.
642
+
643
+ .LSFDE2:
644
+ .4byte .LEFDE2-.LASFDE2 # length
645
+ .LASFDE2:
646
+ .4byte .LASFDE2-.Lframe1 # CIE_pointer.
575
647
  FDE_ADDR_BYTES .LFB2 # initial_location.
576
648
  FDE_ADDR_BYTES .LFE2-.LFB2 # address_range.
577
649
  .byte 0x4 # DW_CFA_advance_loc4
578
- .4byte .LCFI5-.LFB2 # to .LCFI5
650
+ .4byte .LCFI20-.LFB2 # to .LCFI20
579
651
  .byte 0xe # DW_CFA_def_cfa_offset
580
652
  .uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
581
653
  .byte 0x4 # DW_CFA_advance_loc4
582
- .4byte .LCFI6-.LCFI5 # to .LCFI6
654
+ .4byte .LCFI21-.LCFI20 # to .LCFI21
583
655
  .byte 0x9c # DW_CFA_offset of $gp ($28)
584
656
  .uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
585
657
  .byte 0x9f # DW_CFA_offset of ra ($31)
586
658
  .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
587
659
  .align EH_FRAME_ALIGN
588
- .LEFDE3:
660
+ .LEFDE2:
589
661
  #endif /* __GNUC__ */
590
662
 
591
663
  #endif
@@ -50,14 +50,14 @@ ffi_call_O32:
50
50
  $LFB0:
51
51
  # Prologue
52
52
  SUBU $sp, SIZEOF_FRAME # Frame size
53
- $LCFI0:
53
+ $LCFI00:
54
54
  REG_S $fp, FP_OFF($sp) # Save frame pointer
55
- $LCFI1:
55
+ $LCFI01:
56
56
  REG_S ra, RA_OFF($sp) # Save return address
57
- $LCFI2:
57
+ $LCFI02:
58
58
  move $fp, $sp
59
59
 
60
- $LCFI3:
60
+ $LCFI03:
61
61
  move t9, callback # callback function pointer
62
62
  REG_S flags, A3_OFF($fp) # flags
63
63
 
@@ -82,13 +82,16 @@ sixteen:
82
82
 
83
83
  ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args
84
84
 
85
+ #ifndef __mips_soft_float
85
86
  bnez t0, pass_d # make it quick for int
87
+ #endif
86
88
  REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the
87
89
  REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs.
88
90
  REG_L a2, 2*FFI_SIZEOF_ARG($sp)
89
91
  REG_L a3, 3*FFI_SIZEOF_ARG($sp)
90
92
  b call_it
91
93
 
94
+ #ifndef __mips_soft_float
92
95
  pass_d:
93
96
  bne t0, FFI_ARGS_D, pass_f
94
97
  l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
@@ -130,8 +133,12 @@ pass_f_d:
130
133
  # bne t0, FFI_ARGS_F_D, call_it
131
134
  l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
132
135
  l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float
136
+ #endif
133
137
 
134
138
  call_it:
139
+ # Load the static chain pointer
140
+ REG_L t7, SIZEOF_FRAME + 6*FFI_SIZEOF_ARG($fp)
141
+
135
142
  # Load the function pointer
136
143
  REG_L t9, SIZEOF_FRAME + 5*FFI_SIZEOF_ARG($fp)
137
144
 
@@ -158,14 +165,23 @@ retfloat:
158
165
  bne t2, FFI_TYPE_FLOAT, retdouble
159
166
  jalr t9
160
167
  REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
168
+ #ifndef __mips_soft_float
161
169
  s.s $f0, 0(t0)
170
+ #else
171
+ REG_S v0, 0(t0)
172
+ #endif
162
173
  b epilogue
163
174
 
164
175
  retdouble:
165
176
  bne t2, FFI_TYPE_DOUBLE, noretval
166
177
  jalr t9
167
178
  REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
179
+ #ifndef __mips_soft_float
168
180
  s.d $f0, 0(t0)
181
+ #else
182
+ REG_S v1, 4(t0)
183
+ REG_S v0, 0(t0)
184
+ #endif
169
185
  b epilogue
170
186
 
171
187
  noretval:
@@ -204,13 +220,15 @@ $LFE0:
204
220
  -8 - f14 (le low, be high)
205
221
  -9 - f12 (le high, be low)
206
222
  -10 - f12 (le low, be high)
207
- -11 - Called function a3 save
208
- -12 - Called function a2 save
209
- -13 - Called function a1 save
210
- -14 - Called function a0 save, our sp and fp point here
223
+ -11 - Called function a5 save
224
+ -12 - Called function a4 save
225
+ -13 - Called function a3 save
226
+ -14 - Called function a2 save
227
+ -15 - Called function a1 save
228
+ -16 - Called function a0 save, our sp and fp point here
211
229
  */
212
230
 
213
- #define SIZEOF_FRAME2 (14 * FFI_SIZEOF_ARG)
231
+ #define SIZEOF_FRAME2 (16 * FFI_SIZEOF_ARG)
214
232
  #define A3_OFF2 (SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG)
215
233
  #define A2_OFF2 (SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG)
216
234
  #define A1_OFF2 (SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG)
@@ -225,13 +243,71 @@ $LFE0:
225
243
  #define FA_1_0_OFF2 (SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG)
226
244
  #define FA_0_1_OFF2 (SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG)
227
245
  #define FA_0_0_OFF2 (SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG)
246
+ #define CALLED_A5_OFF2 (SIZEOF_FRAME2 - 11 * FFI_SIZEOF_ARG)
247
+ #define CALLED_A4_OFF2 (SIZEOF_FRAME2 - 12 * FFI_SIZEOF_ARG)
228
248
 
229
249
  .text
250
+
251
+ .align 2
252
+ .globl ffi_go_closure_O32
253
+ .ent ffi_go_closure_O32
254
+ ffi_go_closure_O32:
255
+ $LFB1:
256
+ # Prologue
257
+ .frame $fp, SIZEOF_FRAME2, ra
258
+ .set noreorder
259
+ .cpload t9
260
+ .set reorder
261
+ SUBU $sp, SIZEOF_FRAME2
262
+ .cprestore GP_OFF2
263
+ $LCFI10:
264
+
265
+ REG_S $16, S0_OFF2($sp) # Save s0
266
+ REG_S $fp, FP_OFF2($sp) # Save frame pointer
267
+ REG_S ra, RA_OFF2($sp) # Save return address
268
+ $LCFI11:
269
+
270
+ move $fp, $sp
271
+ $LCFI12:
272
+
273
+ REG_S a0, A0_OFF2($fp)
274
+ REG_S a1, A1_OFF2($fp)
275
+ REG_S a2, A2_OFF2($fp)
276
+ REG_S a3, A3_OFF2($fp)
277
+
278
+ # Load ABI enum to s0
279
+ REG_L $16, 4($15) # cif
280
+ REG_L $16, 0($16) # abi is first member.
281
+
282
+ li $13, 1 # FFI_O32
283
+ bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
284
+
285
+ # Store all possible float/double registers.
286
+ s.d $f12, FA_0_0_OFF2($fp)
287
+ s.d $f14, FA_1_0_OFF2($fp)
288
+ 1:
289
+ # prepare arguments for ffi_closure_mips_inner_O32
290
+ REG_L a0, 4($15) # cif
291
+ REG_L a1, 8($15) # fun
292
+ move a2, $15 # user_data = go closure
293
+ addu a3, $fp, V0_OFF2 # rvalue
294
+
295
+ addu t9, $fp, A0_OFF2 # ar
296
+ REG_S t9, CALLED_A4_OFF2($fp)
297
+
298
+ addu t9, $fp, FA_0_0_OFF2 #fpr
299
+ REG_S t9, CALLED_A5_OFF2($fp)
300
+
301
+ b $do_closure
302
+
303
+ $LFE1:
304
+ .end ffi_go_closure_O32
305
+
230
306
  .align 2
231
307
  .globl ffi_closure_O32
232
308
  .ent ffi_closure_O32
233
309
  ffi_closure_O32:
234
- $LFB1:
310
+ $LFB2:
235
311
  # Prologue
236
312
  .frame $fp, SIZEOF_FRAME2, ra
237
313
  .set noreorder
@@ -239,14 +315,14 @@ $LFB1:
239
315
  .set reorder
240
316
  SUBU $sp, SIZEOF_FRAME2
241
317
  .cprestore GP_OFF2
242
- $LCFI4:
318
+ $LCFI20:
243
319
  REG_S $16, S0_OFF2($sp) # Save s0
244
320
  REG_S $fp, FP_OFF2($sp) # Save frame pointer
245
321
  REG_S ra, RA_OFF2($sp) # Save return address
246
- $LCFI6:
322
+ $LCFI21:
247
323
  move $fp, $sp
248
324
 
249
- $LCFI7:
325
+ $LCFI22:
250
326
  # Store all possible argument registers. If there are more than
251
327
  # four arguments, then they are stored above where we put a3.
252
328
  REG_S a0, A0_OFF2($fp)
@@ -261,16 +337,27 @@ $LCFI7:
261
337
  li $13, 1 # FFI_O32
262
338
  bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
263
339
 
340
+ #ifndef __mips_soft_float
264
341
  # Store all possible float/double registers.
265
342
  s.d $f12, FA_0_0_OFF2($fp)
266
343
  s.d $f14, FA_1_0_OFF2($fp)
344
+ #endif
267
345
  1:
268
- # Call ffi_closure_mips_inner_O32 to do the work.
346
+ # prepare arguments for ffi_closure_mips_inner_O32
347
+ REG_L a0, 20($12) # cif pointer follows tramp.
348
+ REG_L a1, 24($12) # fun
349
+ REG_L a2, 28($12) # user_data
350
+ addu a3, $fp, V0_OFF2 # rvalue
351
+
352
+ addu t9, $fp, A0_OFF2 # ar
353
+ REG_S t9, CALLED_A4_OFF2($fp)
354
+
355
+ addu t9, $fp, FA_0_0_OFF2 #fpr
356
+ REG_S t9, CALLED_A5_OFF2($fp)
357
+
358
+ $do_closure:
269
359
  la t9, ffi_closure_mips_inner_O32
270
- move a0, $12 # Pointer to the ffi_closure
271
- addu a1, $fp, V0_OFF2
272
- addu a2, $fp, A0_OFF2
273
- addu a3, $fp, FA_0_0_OFF2
360
+ # Call ffi_closure_mips_inner_O32 to do the work.
274
361
  jalr t9
275
362
 
276
363
  # Load the return value into the appropriate register.
@@ -281,6 +368,7 @@ $LCFI7:
281
368
  li $13, 1 # FFI_O32
282
369
  bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT
283
370
 
371
+ #ifndef __mips_soft_float
284
372
  li $9, FFI_TYPE_FLOAT
285
373
  l.s $f0, V0_OFF2($fp)
286
374
  beq $8, $9, closure_done
@@ -288,6 +376,7 @@ $LCFI7:
288
376
  li $9, FFI_TYPE_DOUBLE
289
377
  l.d $f0, V0_OFF2($fp)
290
378
  beq $8, $9, closure_done
379
+ #endif
291
380
  1:
292
381
  REG_L $3, V1_OFF2($fp)
293
382
  REG_L $2, V0_OFF2($fp)
@@ -300,7 +389,7 @@ closure_done:
300
389
  REG_L ra, RA_OFF2($sp) # Restore return address
301
390
  ADDU $sp, SIZEOF_FRAME2
302
391
  j ra
303
- $LFE1:
392
+ $LFE2:
304
393
  .end ffi_closure_O32
305
394
 
306
395
  /* DWARF-2 unwind info. */
@@ -322,6 +411,7 @@ $LSCIE0:
322
411
  .uleb128 0x0
323
412
  .align 2
324
413
  $LECIE0:
414
+
325
415
  $LSFDE0:
326
416
  .4byte $LEFDE0-$LASFDE0 # FDE Length
327
417
  $LASFDE0:
@@ -330,11 +420,11 @@ $LASFDE0:
330
420
  .4byte $LFE0-$LFB0 # FDE address range
331
421
  .uleb128 0x0 # Augmentation size
332
422
  .byte 0x4 # DW_CFA_advance_loc4
333
- .4byte $LCFI0-$LFB0
423
+ .4byte $LCFI00-$LFB0
334
424
  .byte 0xe # DW_CFA_def_cfa_offset
335
425
  .uleb128 0x18
336
426
  .byte 0x4 # DW_CFA_advance_loc4
337
- .4byte $LCFI2-$LCFI0
427
+ .4byte $LCFI01-$LCFI00
338
428
  .byte 0x11 # DW_CFA_offset_extended_sf
339
429
  .uleb128 0x1e # $fp
340
430
  .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
@@ -342,12 +432,13 @@ $LASFDE0:
342
432
  .uleb128 0x1f # $ra
343
433
  .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
344
434
  .byte 0x4 # DW_CFA_advance_loc4
345
- .4byte $LCFI3-$LCFI2
435
+ .4byte $LCFI02-$LCFI01
346
436
  .byte 0xc # DW_CFA_def_cfa
347
437
  .uleb128 0x1e
348
438
  .uleb128 0x18
349
439
  .align 2
350
440
  $LEFDE0:
441
+
351
442
  $LSFDE1:
352
443
  .4byte $LEFDE1-$LASFDE1 # FDE Length
353
444
  $LASFDE1:
@@ -356,11 +447,11 @@ $LASFDE1:
356
447
  .4byte $LFE1-$LFB1 # FDE address range
357
448
  .uleb128 0x0 # Augmentation size
358
449
  .byte 0x4 # DW_CFA_advance_loc4
359
- .4byte $LCFI4-$LFB1
450
+ .4byte $LCFI10-$LFB1
360
451
  .byte 0xe # DW_CFA_def_cfa_offset
361
- .uleb128 0x38
452
+ .uleb128 SIZEOF_FRAME2
362
453
  .byte 0x4 # DW_CFA_advance_loc4
363
- .4byte $LCFI6-$LCFI4
454
+ .4byte $LCFI11-$LCFI10
364
455
  .byte 0x11 # DW_CFA_offset_extended_sf
365
456
  .uleb128 0x10 # $16
366
457
  .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)
@@ -371,11 +462,41 @@ $LASFDE1:
371
462
  .uleb128 0x1f # $ra
372
463
  .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
373
464
  .byte 0x4 # DW_CFA_advance_loc4
374
- .4byte $LCFI7-$LCFI6
465
+ .4byte $LCFI12-$LCFI11
375
466
  .byte 0xc # DW_CFA_def_cfa
376
467
  .uleb128 0x1e
377
- .uleb128 0x38
468
+ .uleb128 SIZEOF_FRAME2
378
469
  .align 2
379
470
  $LEFDE1:
380
471
 
472
+ $LSFDE2:
473
+ .4byte $LEFDE2-$LASFDE2 # FDE Length
474
+ $LASFDE2:
475
+ .4byte $LASFDE2-$Lframe0 # FDE CIE offset
476
+ .4byte $LFB2 # FDE initial location
477
+ .4byte $LFE2-$LFB2 # FDE address range
478
+ .uleb128 0x0 # Augmentation size
479
+ .byte 0x4 # DW_CFA_advance_loc4
480
+ .4byte $LCFI20-$LFB2
481
+ .byte 0xe # DW_CFA_def_cfa_offset
482
+ .uleb128 SIZEOF_FRAME2
483
+ .byte 0x4 # DW_CFA_advance_loc4
484
+ .4byte $LCFI21-$LCFI20
485
+ .byte 0x11 # DW_CFA_offset_extended_sf
486
+ .uleb128 0x10 # $16
487
+ .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)
488
+ .byte 0x11 # DW_CFA_offset_extended_sf
489
+ .uleb128 0x1e # $fp
490
+ .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
491
+ .byte 0x11 # DW_CFA_offset_extended_sf
492
+ .uleb128 0x1f # $ra
493
+ .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
494
+ .byte 0x4 # DW_CFA_advance_loc4
495
+ .4byte $LCFI22-$LCFI21
496
+ .byte 0xc # DW_CFA_def_cfa
497
+ .uleb128 0x1e
498
+ .uleb128 SIZEOF_FRAME2
499
+ .align 2
500
+ $LEFDE2:
501
+
381
502
  #endif