ffi 1.9.18-x86-mingw32 → 1.9.21-x86-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 (384) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -2
  3. data/Rakefile +14 -4
  4. data/ext/ffi_c/AbstractMemory.c +6 -1
  5. data/ext/ffi_c/Platform.c +10 -2
  6. data/ext/ffi_c/extconf.rb +7 -2
  7. data/ext/ffi_c/libffi.bsd.mk +9 -3
  8. data/ext/ffi_c/libffi.darwin.mk +14 -4
  9. data/ext/ffi_c/libffi.gnu.mk +2 -1
  10. data/ext/ffi_c/libffi.mk +9 -4
  11. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  12. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  13. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  14. data/ext/ffi_c/libffi/LICENSE +1 -1
  15. data/ext/ffi_c/libffi/Makefile.am +166 -157
  16. data/ext/ffi_c/libffi/Makefile.in +923 -938
  17. data/ext/ffi_c/libffi/README +164 -52
  18. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  19. data/ext/ffi_c/libffi/aclocal.m4 +645 -384
  20. data/ext/ffi_c/libffi/autogen.sh +2 -0
  21. data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
  22. data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
  23. data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
  24. data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
  25. data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
  26. data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
  27. data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
  28. data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
  29. data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
  30. data/ext/ffi_c/libffi/compile +218 -14
  31. data/ext/ffi_c/libffi/config.guess +329 -368
  32. data/ext/ffi_c/libffi/config.sub +232 -112
  33. data/ext/ffi_c/libffi/configure +6970 -2189
  34. data/ext/ffi_c/libffi/configure.ac +148 -256
  35. data/ext/ffi_c/libffi/configure.host +265 -4
  36. data/ext/ffi_c/libffi/depcomp +346 -185
  37. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  38. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  39. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  40. data/ext/ffi_c/libffi/{mdate-sh → doc/mdate-sh} +40 -13
  41. data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
  42. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  43. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  44. data/ext/ffi_c/libffi/fficonfig.h.in~ +210 -0
  45. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  46. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  47. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  48. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  49. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  50. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  51. data/ext/ffi_c/libffi/install-sh +190 -202
  52. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  53. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  54. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  55. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  56. data/ext/ffi_c/libffi/libtool-version +1 -1
  57. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  58. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  59. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  60. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  61. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  62. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  63. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  64. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  65. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  66. data/ext/ffi_c/libffi/m4/libtool.m4 +1691 -1135
  67. data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
  68. data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
  69. data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
  70. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
  71. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  72. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  73. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  74. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  75. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  76. data/ext/ffi_c/libffi/missing +150 -311
  77. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  78. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  79. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  80. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  81. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  82. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  83. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  84. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  85. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  86. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  87. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  88. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  90. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  91. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  92. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  93. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  94. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  95. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  96. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  97. data/ext/ffi_c/libffi/src/closures.c +319 -44
  98. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  99. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  100. data/ext/ffi_c/libffi/src/debug.c +6 -1
  101. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  102. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  103. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  104. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  105. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  106. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  107. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  108. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  109. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  110. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  111. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  112. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  113. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  114. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  115. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  116. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  117. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  118. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  119. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  120. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  121. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  122. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  123. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  124. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  125. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  126. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  127. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  128. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  129. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  130. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  131. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  132. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  133. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  134. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  135. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  136. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  137. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  138. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  139. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  140. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  141. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  142. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  143. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  144. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  145. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  146. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  147. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  148. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  149. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  150. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  151. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  152. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  153. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  154. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  155. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  156. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  157. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  158. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  159. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  160. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  161. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  162. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  163. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  164. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  165. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  166. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  167. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  168. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  169. data/ext/ffi_c/libffi/src/types.c +43 -14
  170. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  171. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  172. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  173. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  174. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  175. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  176. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  177. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  178. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  179. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  180. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  181. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  182. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  183. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  184. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  185. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  186. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  187. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  188. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  189. data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
  190. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  191. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  294. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  295. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  316. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  347. data/ffi.gemspec +2 -2
  348. data/lib/2.0/ffi_c.so +0 -0
  349. data/lib/2.1/ffi_c.so +0 -0
  350. data/lib/2.2/ffi_c.so +0 -0
  351. data/lib/2.3/ffi_c.so +0 -0
  352. data/lib/2.4/ffi_c.so +0 -0
  353. data/lib/2.5/ffi_c.so +0 -0
  354. data/lib/ffi/enum.rb +124 -0
  355. data/lib/ffi/library.rb +65 -13
  356. data/lib/ffi/platform.rb +7 -2
  357. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  358. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  359. data/lib/ffi/pointer.rb +1 -0
  360. data/lib/ffi/struct.rb +0 -2
  361. data/lib/ffi/version.rb +1 -1
  362. data/spec/ffi/bitmask_spec.rb +575 -0
  363. data/spec/ffi/embed-test/ext/Makefile +242 -0
  364. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  365. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  366. data/spec/ffi/struct_spec.rb +0 -4
  367. metadata +158 -32
  368. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  369. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  370. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  371. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  372. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  373. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  374. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  375. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  376. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  377. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  378. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  379. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  380. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  381. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  384. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
@@ -31,15 +31,16 @@
31
31
 
32
32
  .file "ppc_closure.S"
33
33
 
34
- #ifndef __powerpc64__
34
+ #ifndef POWERPC64
35
35
 
36
+ FFI_HIDDEN(ffi_closure_SYSV)
36
37
  ENTRY(ffi_closure_SYSV)
37
- .LFB1:
38
+ .cfi_startproc
38
39
  stwu %r1,-144(%r1)
39
- .LCFI0:
40
+ .cfi_def_cfa_offset 144
40
41
  mflr %r0
41
- .LCFI1:
42
42
  stw %r0,148(%r1)
43
+ .cfi_offset 65, 4
43
44
 
44
45
  # we want to build up an areas for the parameters passed
45
46
  # in registers (both floating point and integer)
@@ -48,6 +49,17 @@ ENTRY(ffi_closure_SYSV)
48
49
  stw %r3, 16(%r1)
49
50
  stw %r4, 20(%r1)
50
51
  stw %r5, 24(%r1)
52
+
53
+ # set up registers for the routine that does the work
54
+
55
+ # closure->cif
56
+ lwz %r3,FFI_TRAMPOLINE_SIZE(%r11)
57
+ # closure->fun
58
+ lwz %r4,FFI_TRAMPOLINE_SIZE+4(%r11)
59
+ # closure->user_data
60
+ lwz %r5,FFI_TRAMPOLINE_SIZE+8(%r11)
61
+
62
+ .Ldoclosure:
51
63
  stw %r6, 28(%r1)
52
64
  stw %r7, 32(%r1)
53
65
  stw %r8, 36(%r1)
@@ -66,23 +78,18 @@ ENTRY(ffi_closure_SYSV)
66
78
  stfd %f8, 104(%r1)
67
79
  #endif
68
80
 
69
- # set up registers for the routine that actually does the work
70
- # get the context pointer from the trampoline
71
- mr %r3,%r11
81
+ # pointer to the result storage
82
+ addi %r6,%r1,112
72
83
 
73
- # now load up the pointer to the result storage
74
- addi %r4,%r1,112
84
+ # pointer to the saved gpr registers
85
+ addi %r7,%r1,16
75
86
 
76
- # now load up the pointer to the saved gpr registers
77
- addi %r5,%r1,16
87
+ # pointer to the saved fpr registers
88
+ addi %r8,%r1,48
78
89
 
79
- # now load up the pointer to the saved fpr registers */
80
- addi %r6,%r1,48
81
-
82
- # now load up the pointer to the outgoing parameter
83
- # stack in the previous frame
90
+ # pointer to the outgoing parameter save area in the previous frame
84
91
  # i.e. the previous frame pointer + 8
85
- addi %r7,%r1,152
92
+ addi %r9,%r1,152
86
93
 
87
94
  # make the call
88
95
  bl ffi_closure_helper_SYSV@local
@@ -101,7 +108,6 @@ ENTRY(ffi_closure_SYSV)
101
108
  add %r3,%r3,%r4 # add contents of table to table address
102
109
  mtctr %r3
103
110
  bctr # jump to it
104
- .LFE1:
105
111
 
106
112
  # Each of the ret_typeX code fragments has to be exactly 16 bytes long
107
113
  # (4 instructions). For cache effectiveness we align to a 16 byte boundary
@@ -111,7 +117,9 @@ ENTRY(ffi_closure_SYSV)
111
117
  .Lret_type0:
112
118
  mtlr %r0
113
119
  addi %r1,%r1,144
120
+ .cfi_def_cfa_offset 0
114
121
  blr
122
+ .cfi_def_cfa_offset 144
115
123
  nop
116
124
 
117
125
  # case FFI_TYPE_INT
@@ -119,61 +127,110 @@ ENTRY(ffi_closure_SYSV)
119
127
  mtlr %r0
120
128
  .Lfinish:
121
129
  addi %r1,%r1,144
130
+ .cfi_def_cfa_offset 0
122
131
  blr
132
+ .cfi_def_cfa_offset 144
123
133
 
124
134
  # case FFI_TYPE_FLOAT
135
+ #ifndef __NO_FPRS__
125
136
  lfs %f1,112+0(%r1)
137
+ #else
138
+ nop
139
+ #endif
126
140
  mtlr %r0
127
141
  addi %r1,%r1,144
142
+ .cfi_def_cfa_offset 0
128
143
  blr
144
+ .cfi_def_cfa_offset 144
129
145
 
130
146
  # case FFI_TYPE_DOUBLE
147
+ #ifndef __NO_FPRS__
131
148
  lfd %f1,112+0(%r1)
149
+ #else
150
+ nop
151
+ #endif
132
152
  mtlr %r0
133
153
  addi %r1,%r1,144
154
+ .cfi_def_cfa_offset 0
134
155
  blr
156
+ .cfi_def_cfa_offset 144
135
157
 
136
158
  # case FFI_TYPE_LONGDOUBLE
159
+ #ifndef __NO_FPRS__
137
160
  lfd %f1,112+0(%r1)
138
161
  lfd %f2,112+8(%r1)
139
162
  mtlr %r0
140
163
  b .Lfinish
164
+ #else
165
+ mtlr %r0
166
+ addi %r1,%r1,144
167
+ .cfi_def_cfa_offset 0
168
+ blr
169
+ .cfi_def_cfa_offset 144
170
+ nop
171
+ #endif
141
172
 
142
173
  # case FFI_TYPE_UINT8
174
+ #ifdef __LITTLE_ENDIAN__
175
+ lbz %r3,112+0(%r1)
176
+ #else
143
177
  lbz %r3,112+3(%r1)
178
+ #endif
144
179
  mtlr %r0
145
180
  addi %r1,%r1,144
181
+ .cfi_def_cfa_offset 0
146
182
  blr
183
+ .cfi_def_cfa_offset 144
147
184
 
148
185
  # case FFI_TYPE_SINT8
186
+ #ifdef __LITTLE_ENDIAN__
187
+ lbz %r3,112+0(%r1)
188
+ #else
149
189
  lbz %r3,112+3(%r1)
190
+ #endif
150
191
  extsb %r3,%r3
151
192
  mtlr %r0
152
193
  b .Lfinish
153
194
 
154
195
  # case FFI_TYPE_UINT16
196
+ #ifdef __LITTLE_ENDIAN__
197
+ lhz %r3,112+0(%r1)
198
+ #else
155
199
  lhz %r3,112+2(%r1)
200
+ #endif
156
201
  mtlr %r0
157
202
  addi %r1,%r1,144
203
+ .cfi_def_cfa_offset 0
158
204
  blr
205
+ .cfi_def_cfa_offset 144
159
206
 
160
207
  # case FFI_TYPE_SINT16
208
+ #ifdef __LITTLE_ENDIAN__
209
+ lha %r3,112+0(%r1)
210
+ #else
161
211
  lha %r3,112+2(%r1)
212
+ #endif
162
213
  mtlr %r0
163
214
  addi %r1,%r1,144
215
+ .cfi_def_cfa_offset 0
164
216
  blr
217
+ .cfi_def_cfa_offset 144
165
218
 
166
219
  # case FFI_TYPE_UINT32
167
220
  lwz %r3,112+0(%r1)
168
221
  mtlr %r0
169
222
  addi %r1,%r1,144
223
+ .cfi_def_cfa_offset 0
170
224
  blr
225
+ .cfi_def_cfa_offset 144
171
226
 
172
227
  # case FFI_TYPE_SINT32
173
228
  lwz %r3,112+0(%r1)
174
229
  mtlr %r0
175
230
  addi %r1,%r1,144
231
+ .cfi_def_cfa_offset 0
176
232
  blr
233
+ .cfi_def_cfa_offset 144
177
234
 
178
235
  # case FFI_TYPE_UINT64
179
236
  lwz %r3,112+0(%r1)
@@ -190,63 +247,96 @@ ENTRY(ffi_closure_SYSV)
190
247
  # case FFI_TYPE_STRUCT
191
248
  mtlr %r0
192
249
  addi %r1,%r1,144
250
+ .cfi_def_cfa_offset 0
193
251
  blr
252
+ .cfi_def_cfa_offset 144
194
253
  nop
195
254
 
196
255
  # case FFI_TYPE_POINTER
197
256
  lwz %r3,112+0(%r1)
198
257
  mtlr %r0
199
258
  addi %r1,%r1,144
259
+ .cfi_def_cfa_offset 0
200
260
  blr
261
+ .cfi_def_cfa_offset 144
201
262
 
202
263
  # case FFI_TYPE_UINT128
203
264
  lwz %r3,112+0(%r1)
204
265
  lwz %r4,112+4(%r1)
205
266
  lwz %r5,112+8(%r1)
206
- bl .Luint128
267
+ b .Luint128
207
268
 
208
269
  # The return types below are only used when the ABI type is FFI_SYSV.
209
270
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
210
271
  lbz %r3,112+0(%r1)
211
272
  mtlr %r0
212
273
  addi %r1,%r1,144
274
+ .cfi_def_cfa_offset 0
213
275
  blr
276
+ .cfi_def_cfa_offset 144
214
277
 
215
278
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct.
216
279
  lhz %r3,112+0(%r1)
217
280
  mtlr %r0
218
281
  addi %r1,%r1,144
282
+ .cfi_def_cfa_offset 0
219
283
  blr
284
+ .cfi_def_cfa_offset 144
220
285
 
221
286
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
222
287
  lwz %r3,112+0(%r1)
288
+ #ifdef __LITTLE_ENDIAN__
289
+ mtlr %r0
290
+ addi %r1,%r1,144
291
+ .cfi_def_cfa_offset 0
292
+ blr
293
+ .cfi_def_cfa_offset 144
294
+ #else
223
295
  srwi %r3,%r3,8
224
296
  mtlr %r0
225
297
  b .Lfinish
298
+ #endif
226
299
 
227
300
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
228
301
  lwz %r3,112+0(%r1)
229
302
  mtlr %r0
230
303
  addi %r1,%r1,144
304
+ .cfi_def_cfa_offset 0
231
305
  blr
306
+ .cfi_def_cfa_offset 144
232
307
 
233
308
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
234
309
  lwz %r3,112+0(%r1)
235
310
  lwz %r4,112+4(%r1)
311
+ #ifdef __LITTLE_ENDIAN__
312
+ mtlr %r0
313
+ b .Lfinish
314
+ #else
236
315
  li %r5,24
237
316
  b .Lstruct567
317
+ #endif
238
318
 
239
319
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
240
320
  lwz %r3,112+0(%r1)
241
321
  lwz %r4,112+4(%r1)
322
+ #ifdef __LITTLE_ENDIAN__
323
+ mtlr %r0
324
+ b .Lfinish
325
+ #else
242
326
  li %r5,16
243
327
  b .Lstruct567
328
+ #endif
244
329
 
245
330
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
246
331
  lwz %r3,112+0(%r1)
247
332
  lwz %r4,112+4(%r1)
333
+ #ifdef __LITTLE_ENDIAN__
334
+ mtlr %r0
335
+ b .Lfinish
336
+ #else
248
337
  li %r5,8
249
338
  b .Lstruct567
339
+ #endif
250
340
 
251
341
  # case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
252
342
  lwz %r3,112+0(%r1)
@@ -254,6 +344,7 @@ ENTRY(ffi_closure_SYSV)
254
344
  mtlr %r0
255
345
  b .Lfinish
256
346
 
347
+ #ifndef __LITTLE_ENDIAN__
257
348
  .Lstruct567:
258
349
  subfic %r6,%r5,32
259
350
  srw %r4,%r4,%r5
@@ -262,66 +353,45 @@ ENTRY(ffi_closure_SYSV)
262
353
  or %r4,%r6,%r4
263
354
  mtlr %r0
264
355
  addi %r1,%r1,144
356
+ .cfi_def_cfa_offset 0
265
357
  blr
358
+ .cfi_def_cfa_offset 144
359
+ #endif
266
360
 
267
361
  .Luint128:
268
362
  lwz %r6,112+12(%r1)
269
363
  mtlr %r0
270
364
  addi %r1,%r1,144
365
+ .cfi_def_cfa_offset 0
271
366
  blr
272
-
367
+ .cfi_endproc
273
368
  END(ffi_closure_SYSV)
274
369
 
275
- .section ".eh_frame",EH_FRAME_FLAGS,@progbits
276
- .Lframe1:
277
- .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
278
- .LSCIE1:
279
- .4byte 0x0 # CIE Identifier Tag
280
- .byte 0x1 # CIE Version
281
- #if defined _RELOCATABLE || defined __PIC__
282
- .ascii "zR\0" # CIE Augmentation
283
- #else
284
- .ascii "\0" # CIE Augmentation
285
- #endif
286
- .uleb128 0x1 # CIE Code Alignment Factor
287
- .sleb128 -4 # CIE Data Alignment Factor
288
- .byte 0x41 # CIE RA Column
289
- #if defined _RELOCATABLE || defined __PIC__
290
- .uleb128 0x1 # Augmentation size
291
- .byte 0x1b # FDE Encoding (pcrel sdata4)
292
- #endif
293
- .byte 0xc # DW_CFA_def_cfa
294
- .uleb128 0x1
295
- .uleb128 0x0
296
- .align 2
297
- .LECIE1:
298
- .LSFDE1:
299
- .4byte .LEFDE1-.LASFDE1 # FDE Length
300
- .LASFDE1:
301
- .4byte .LASFDE1-.Lframe1 # FDE CIE offset
302
- #if defined _RELOCATABLE || defined __PIC__
303
- .4byte .LFB1-. # FDE initial location
304
- #else
305
- .4byte .LFB1 # FDE initial location
306
- #endif
307
- .4byte .LFE1-.LFB1 # FDE address range
308
- #if defined _RELOCATABLE || defined __PIC__
309
- .uleb128 0x0 # Augmentation size
310
- #endif
311
- .byte 0x4 # DW_CFA_advance_loc4
312
- .4byte .LCFI0-.LFB1
313
- .byte 0xe # DW_CFA_def_cfa_offset
314
- .uleb128 144
315
- .byte 0x4 # DW_CFA_advance_loc4
316
- .4byte .LCFI1-.LCFI0
317
- .byte 0x11 # DW_CFA_offset_extended_sf
318
- .uleb128 0x41
319
- .sleb128 -1
320
- .align 2
321
- .LEFDE1:
322
370
 
323
- #endif
371
+ FFI_HIDDEN(ffi_go_closure_sysv)
372
+ ENTRY(ffi_go_closure_sysv)
373
+ .cfi_startproc
374
+ stwu %r1,-144(%r1)
375
+ .cfi_def_cfa_offset 144
376
+ mflr %r0
377
+ stw %r0,148(%r1)
378
+ .cfi_offset 65, 4
379
+
380
+ stw %r3, 16(%r1)
381
+ stw %r4, 20(%r1)
382
+ stw %r5, 24(%r1)
383
+
384
+ # closure->cif
385
+ lwz %r3,4(%r11)
386
+ # closure->fun
387
+ lwz %r4,8(%r11)
388
+ # user_data
389
+ mr %r5,%r11
390
+ b .Ldoclosure
391
+ .cfi_endproc
392
+ END(ffi_go_closure_sysv)
324
393
 
325
394
  #if defined __ELF__ && defined __linux__
326
395
  .section .note.GNU-stack,"",@progbits
327
396
  #endif
397
+ #endif
@@ -30,35 +30,36 @@
30
30
  #include <ffi.h>
31
31
  #include <powerpc/asm.h>
32
32
 
33
- #ifndef __powerpc64__
34
- .globl ffi_prep_args_SYSV
33
+ #ifndef POWERPC64
34
+ FFI_HIDDEN(ffi_call_SYSV)
35
35
  ENTRY(ffi_call_SYSV)
36
- .LFB1:
36
+ .cfi_startproc
37
37
  /* Save the old stack pointer as AP. */
38
- mr %r8,%r1
38
+ mr %r10,%r1
39
+ .cfi_def_cfa_register 10
39
40
 
40
- .LCFI0:
41
41
  /* Allocate the stack space we need. */
42
- stwux %r1,%r1,%r4
42
+ stwux %r1,%r1,%r8
43
43
  /* Save registers we use. */
44
44
  mflr %r9
45
- stw %r28,-16(%r8)
46
- .LCFI1:
47
- stw %r29,-12(%r8)
48
- .LCFI2:
49
- stw %r30, -8(%r8)
50
- .LCFI3:
51
- stw %r31, -4(%r8)
52
- .LCFI4:
53
- stw %r9, 4(%r8)
54
- .LCFI5:
45
+ stw %r28,-16(%r10)
46
+ stw %r29,-12(%r10)
47
+ stw %r30, -8(%r10)
48
+ stw %r31, -4(%r10)
49
+ stw %r9, 4(%r10)
50
+ .cfi_offset 65, 4
51
+ .cfi_offset 31, -4
52
+ .cfi_offset 30, -8
53
+ .cfi_offset 29, -12
54
+ .cfi_offset 28, -16
55
55
 
56
56
  /* Save arguments over call... */
57
- mr %r31,%r5 /* flags, */
58
- mr %r30,%r6 /* rvalue, */
59
- mr %r29,%r7 /* function address, */
60
- mr %r28,%r8 /* our AP. */
61
- .LCFI6:
57
+ stw %r7, -20(%r10) /* closure, */
58
+ mr %r31,%r6 /* flags, */
59
+ mr %r30,%r5 /* rvalue, */
60
+ mr %r29,%r4 /* function address, */
61
+ mr %r28,%r10 /* our AP. */
62
+ .cfi_def_cfa_register 28
62
63
 
63
64
  /* Call ffi_prep_args_SYSV. */
64
65
  mr %r4,%r1
@@ -70,40 +71,45 @@ ENTRY(ffi_call_SYSV)
70
71
  /* Get the address to call into CTR. */
71
72
  mtctr %r29
72
73
  /* Load all those argument registers. */
73
- lwz %r3,-16-(8*4)(%r28)
74
- lwz %r4,-16-(7*4)(%r28)
75
- lwz %r5,-16-(6*4)(%r28)
76
- lwz %r6,-16-(5*4)(%r28)
74
+ lwz %r3,-24-(8*4)(%r28)
75
+ lwz %r4,-24-(7*4)(%r28)
76
+ lwz %r5,-24-(6*4)(%r28)
77
+ lwz %r6,-24-(5*4)(%r28)
77
78
  bf- 5,1f
78
79
  nop
79
- lwz %r7,-16-(4*4)(%r28)
80
- lwz %r8,-16-(3*4)(%r28)
81
- lwz %r9,-16-(2*4)(%r28)
82
- lwz %r10,-16-(1*4)(%r28)
80
+ lwz %r7,-24-(4*4)(%r28)
81
+ lwz %r8,-24-(3*4)(%r28)
82
+ lwz %r9,-24-(2*4)(%r28)
83
+ lwz %r10,-24-(1*4)(%r28)
83
84
  nop
84
85
  1:
85
86
 
87
+ #ifndef __NO_FPRS__
86
88
  /* Load all the FP registers. */
87
89
  bf- 6,2f
88
- lfd %f1,-16-(8*4)-(8*8)(%r28)
89
- lfd %f2,-16-(8*4)-(7*8)(%r28)
90
- lfd %f3,-16-(8*4)-(6*8)(%r28)
91
- lfd %f4,-16-(8*4)-(5*8)(%r28)
90
+ lfd %f1,-24-(8*4)-(8*8)(%r28)
91
+ lfd %f2,-24-(8*4)-(7*8)(%r28)
92
+ lfd %f3,-24-(8*4)-(6*8)(%r28)
93
+ lfd %f4,-24-(8*4)-(5*8)(%r28)
92
94
  nop
93
- lfd %f5,-16-(8*4)-(4*8)(%r28)
94
- lfd %f6,-16-(8*4)-(3*8)(%r28)
95
- lfd %f7,-16-(8*4)-(2*8)(%r28)
96
- lfd %f8,-16-(8*4)-(1*8)(%r28)
95
+ lfd %f5,-24-(8*4)-(4*8)(%r28)
96
+ lfd %f6,-24-(8*4)-(3*8)(%r28)
97
+ lfd %f7,-24-(8*4)-(2*8)(%r28)
98
+ lfd %f8,-24-(8*4)-(1*8)(%r28)
99
+ #endif
97
100
  2:
98
101
 
99
102
  /* Make the call. */
103
+ lwz %r11, -20(%r28)
100
104
  bctrl
101
105
 
102
106
  /* Now, deal with the return value. */
103
107
  mtcrf 0x01,%r31 /* cr7 */
104
108
  bt- 31,L(small_struct_return_value)
105
109
  bt- 30,L(done_return_value)
110
+ #ifndef __NO_FPRS__
106
111
  bt- 29,L(fp_return_value)
112
+ #endif
107
113
  stw %r3,0(%r30)
108
114
  bf+ 28,L(done_return_value)
109
115
  stw %r4,4(%r30)
@@ -121,10 +127,24 @@ L(done_return_value):
121
127
  lwz %r30, -8(%r28)
122
128
  lwz %r29,-12(%r28)
123
129
  lwz %r28,-16(%r28)
130
+ .cfi_remember_state
131
+ /* At this point we don't have a cfa register. Say all our
132
+ saved regs have been restored. */
133
+ .cfi_same_value 65
134
+ .cfi_same_value 31
135
+ .cfi_same_value 30
136
+ .cfi_same_value 29
137
+ .cfi_same_value 28
138
+ /* Hopefully this works.. */
139
+ .cfi_def_cfa_register 1
140
+ .cfi_offset 1, 0
124
141
  lwz %r1,0(%r1)
142
+ .cfi_same_value 1
125
143
  blr
126
144
 
145
+ #ifndef __NO_FPRS__
127
146
  L(fp_return_value):
147
+ .cfi_restore_state
128
148
  bf 28,L(float_return_value)
129
149
  stfd %f1,0(%r30)
130
150
  mtcrf 0x02,%r31 /* cr6 */
@@ -134,86 +154,22 @@ L(fp_return_value):
134
154
  L(float_return_value):
135
155
  stfs %f1,0(%r30)
136
156
  b L(done_return_value)
157
+ #endif
137
158
 
138
159
  L(small_struct_return_value):
139
- extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */
140
- mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */
141
- extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */
142
- subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */
143
- bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */
144
- /* smst_one_register: */
145
- slw %r3,%r3,%r5 /* Left-justify value in r3 */
146
- mtxer %r6 /* move byte count to XER ... */
147
- stswx %r3,0,%r30 /* ... and store that many bytes */
148
- bf+ 26,L(done_return_value) /* struct in r3:r4 ? */
149
- add %r6,%r6,%r30 /* adjust pointer */
150
- stswi %r4,%r6,4 /* store last four bytes */
151
- b L(done_return_value)
160
+ /*
161
+ * The C code always allocates a properly-aligned 8-byte bounce
162
+ * buffer to make this assembly code very simple. Just write out
163
+ * r3 and r4 to the buffer to allow the C code to handle the rest.
164
+ */
165
+ stw %r3, 0(%r30)
166
+ stw %r4, 4(%r30)
167
+ b L(done_return_value)
168
+ .cfi_endproc
152
169
 
153
- .LFE1:
154
170
  END(ffi_call_SYSV)
155
171
 
156
- .section ".eh_frame",EH_FRAME_FLAGS,@progbits
157
- .Lframe1:
158
- .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */
159
- .LSCIE1:
160
- .4byte 0x0 /* CIE Identifier Tag */
161
- .byte 0x1 /* CIE Version */
162
- #if defined _RELOCATABLE || defined __PIC__
163
- .ascii "zR\0" /* CIE Augmentation */
164
- #else
165
- .ascii "\0" /* CIE Augmentation */
166
- #endif
167
- .uleb128 0x1 /* CIE Code Alignment Factor */
168
- .sleb128 -4 /* CIE Data Alignment Factor */
169
- .byte 0x41 /* CIE RA Column */
170
- #if defined _RELOCATABLE || defined __PIC__
171
- .uleb128 0x1 /* Augmentation size */
172
- .byte 0x1b /* FDE Encoding (pcrel sdata4) */
173
- #endif
174
- .byte 0xc /* DW_CFA_def_cfa */
175
- .uleb128 0x1
176
- .uleb128 0x0
177
- .align 2
178
- .LECIE1:
179
- .LSFDE1:
180
- .4byte .LEFDE1-.LASFDE1 /* FDE Length */
181
- .LASFDE1:
182
- .4byte .LASFDE1-.Lframe1 /* FDE CIE offset */
183
- #if defined _RELOCATABLE || defined __PIC__
184
- .4byte .LFB1-. /* FDE initial location */
185
- #else
186
- .4byte .LFB1 /* FDE initial location */
187
- #endif
188
- .4byte .LFE1-.LFB1 /* FDE address range */
189
- #if defined _RELOCATABLE || defined __PIC__
190
- .uleb128 0x0 /* Augmentation size */
191
- #endif
192
- .byte 0x4 /* DW_CFA_advance_loc4 */
193
- .4byte .LCFI0-.LFB1
194
- .byte 0xd /* DW_CFA_def_cfa_register */
195
- .uleb128 0x08
196
- .byte 0x4 /* DW_CFA_advance_loc4 */
197
- .4byte .LCFI5-.LCFI0
198
- .byte 0x11 /* DW_CFA_offset_extended_sf */
199
- .uleb128 0x41
200
- .sleb128 -1
201
- .byte 0x9f /* DW_CFA_offset, column 0x1f */
202
- .uleb128 0x1
203
- .byte 0x9e /* DW_CFA_offset, column 0x1e */
204
- .uleb128 0x2
205
- .byte 0x9d /* DW_CFA_offset, column 0x1d */
206
- .uleb128 0x3
207
- .byte 0x9c /* DW_CFA_offset, column 0x1c */
208
- .uleb128 0x4
209
- .byte 0x4 /* DW_CFA_advance_loc4 */
210
- .4byte .LCFI6-.LCFI5
211
- .byte 0xd /* DW_CFA_def_cfa_register */
212
- .uleb128 0x1c
213
- .align 2
214
- .LEFDE1:
215
- #endif
216
-
217
172
  #if defined __ELF__ && defined __linux__
218
173
  .section .note.GNU-stack,"",@progbits
219
174
  #endif
175
+ #endif