ffi 1.16.3 → 1.17.0-java

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 (550) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +42 -0
  4. data/Gemfile +9 -2
  5. data/README.md +1 -1
  6. data/Rakefile +17 -5
  7. data/lib/ffi/autopointer.rb +1 -9
  8. data/lib/ffi/dynamic_library.rb +34 -5
  9. data/lib/ffi/enum.rb +0 -1
  10. data/lib/ffi/function.rb +1 -1
  11. data/lib/ffi/io.rb +2 -2
  12. data/lib/ffi/library.rb +23 -23
  13. data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
  14. data/lib/ffi/pointer.rb +6 -6
  15. data/lib/ffi/struct.rb +4 -4
  16. data/lib/ffi/struct_layout.rb +2 -2
  17. data/lib/ffi/struct_layout_builder.rb +8 -8
  18. data/lib/ffi/types.rb +51 -49
  19. data/lib/ffi/version.rb +1 -1
  20. data/sig/ffi/abstract_memory.rbs +165 -0
  21. data/sig/ffi/auto_pointer.rbs +27 -0
  22. data/sig/ffi/buffer.rbs +18 -0
  23. data/sig/ffi/data_converter.rbs +10 -0
  24. data/sig/ffi/dynamic_library.rbs +9 -0
  25. data/sig/ffi/enum.rbs +38 -0
  26. data/sig/ffi/function.rbs +39 -0
  27. data/sig/ffi/library.rbs +42 -0
  28. data/sig/ffi/native_type.rbs +86 -0
  29. data/sig/ffi/pointer.rbs +42 -0
  30. data/sig/ffi/struct.rbs +76 -0
  31. data/sig/ffi/struct_by_reference.rbs +11 -0
  32. data/sig/ffi/struct_by_value.rbs +7 -0
  33. data/sig/ffi/struct_layout.rbs +9 -0
  34. data/sig/ffi/struct_layout_builder.rbs +5 -0
  35. data/sig/ffi/type.rbs +39 -0
  36. data/sig/ffi.rbs +26 -0
  37. data.tar.gz.sig +0 -0
  38. metadata +34 -532
  39. metadata.gz.sig +0 -0
  40. data/ext/ffi_c/AbstractMemory.c +0 -1128
  41. data/ext/ffi_c/AbstractMemory.h +0 -176
  42. data/ext/ffi_c/ArrayType.c +0 -198
  43. data/ext/ffi_c/ArrayType.h +0 -60
  44. data/ext/ffi_c/Buffer.c +0 -417
  45. data/ext/ffi_c/Call.c +0 -498
  46. data/ext/ffi_c/Call.h +0 -107
  47. data/ext/ffi_c/ClosurePool.c +0 -333
  48. data/ext/ffi_c/ClosurePool.h +0 -59
  49. data/ext/ffi_c/DynamicLibrary.c +0 -397
  50. data/ext/ffi_c/DynamicLibrary.h +0 -98
  51. data/ext/ffi_c/Function.c +0 -1063
  52. data/ext/ffi_c/Function.h +0 -84
  53. data/ext/ffi_c/FunctionInfo.c +0 -322
  54. data/ext/ffi_c/LastError.c +0 -243
  55. data/ext/ffi_c/LastError.h +0 -47
  56. data/ext/ffi_c/LongDouble.c +0 -65
  57. data/ext/ffi_c/LongDouble.h +0 -47
  58. data/ext/ffi_c/MappedType.c +0 -211
  59. data/ext/ffi_c/MappedType.h +0 -57
  60. data/ext/ffi_c/MemoryPointer.c +0 -219
  61. data/ext/ffi_c/MemoryPointer.h +0 -49
  62. data/ext/ffi_c/MethodHandle.c +0 -350
  63. data/ext/ffi_c/MethodHandle.h +0 -56
  64. data/ext/ffi_c/Platform.c +0 -78
  65. data/ext/ffi_c/Platform.h +0 -45
  66. data/ext/ffi_c/Pointer.c +0 -546
  67. data/ext/ffi_c/Pointer.h +0 -60
  68. data/ext/ffi_c/Struct.c +0 -897
  69. data/ext/ffi_c/Struct.h +0 -115
  70. data/ext/ffi_c/StructByValue.c +0 -177
  71. data/ext/ffi_c/StructByValue.h +0 -55
  72. data/ext/ffi_c/StructLayout.c +0 -769
  73. data/ext/ffi_c/Thread.c +0 -129
  74. data/ext/ffi_c/Thread.h +0 -76
  75. data/ext/ffi_c/Type.c +0 -447
  76. data/ext/ffi_c/Type.h +0 -63
  77. data/ext/ffi_c/Types.c +0 -138
  78. data/ext/ffi_c/Types.h +0 -88
  79. data/ext/ffi_c/Variadic.c +0 -345
  80. data/ext/ffi_c/compat.h +0 -82
  81. data/ext/ffi_c/extconf.rb +0 -115
  82. data/ext/ffi_c/ffi.c +0 -97
  83. data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
  84. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
  85. data/ext/ffi_c/libffi/.appveyor.yml +0 -84
  86. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  87. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  88. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  89. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  90. data/ext/ffi_c/libffi/.ci/build.sh +0 -124
  91. data/ext/ffi_c/libffi/.ci/compile +0 -351
  92. data/ext/ffi_c/libffi/.ci/install.sh +0 -78
  93. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  94. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  95. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  96. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  97. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  98. data/ext/ffi_c/libffi/.ci/site.exp +0 -29
  99. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  100. data/ext/ffi_c/libffi/.circleci/config.yml +0 -156
  101. data/ext/ffi_c/libffi/.gitattributes +0 -4
  102. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  103. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -460
  104. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -171
  105. data/ext/ffi_c/libffi/.gitignore +0 -46
  106. data/ext/ffi_c/libffi/ChangeLog.old +0 -7407
  107. data/ext/ffi_c/libffi/LICENSE +0 -21
  108. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +0 -353
  109. data/ext/ffi_c/libffi/Makefile.am +0 -157
  110. data/ext/ffi_c/libffi/Makefile.in +0 -2127
  111. data/ext/ffi_c/libffi/README.md +0 -526
  112. data/ext/ffi_c/libffi/acinclude.m4 +0 -377
  113. data/ext/ffi_c/libffi/autogen.sh +0 -2
  114. data/ext/ffi_c/libffi/compile +0 -348
  115. data/ext/ffi_c/libffi/config.guess +0 -1754
  116. data/ext/ffi_c/libffi/config.sub +0 -1892
  117. data/ext/ffi_c/libffi/configure +0 -22791
  118. data/ext/ffi_c/libffi/configure.ac +0 -451
  119. data/ext/ffi_c/libffi/configure.host +0 -337
  120. data/ext/ffi_c/libffi/doc/Makefile.am +0 -3
  121. data/ext/ffi_c/libffi/doc/Makefile.in +0 -818
  122. data/ext/ffi_c/libffi/doc/libffi.texi +0 -1046
  123. data/ext/ffi_c/libffi/doc/version.texi +0 -4
  124. data/ext/ffi_c/libffi/fficonfig.h.in +0 -188
  125. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +0 -312
  126. data/ext/ffi_c/libffi/include/Makefile.am +0 -9
  127. data/ext/ffi_c/libffi/include/Makefile.in +0 -609
  128. data/ext/ffi_c/libffi/include/ffi.h.in +0 -527
  129. data/ext/ffi_c/libffi/include/ffi_cfi.h +0 -76
  130. data/ext/ffi_c/libffi/include/ffi_common.h +0 -182
  131. data/ext/ffi_c/libffi/include/tramp.h +0 -45
  132. data/ext/ffi_c/libffi/install-sh +0 -541
  133. data/ext/ffi_c/libffi/libffi.map.in +0 -76
  134. data/ext/ffi_c/libffi/libffi.pc.in +0 -11
  135. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +0 -997
  136. data/ext/ffi_c/libffi/libtool-ldflags +0 -106
  137. data/ext/ffi_c/libffi/libtool-version +0 -29
  138. data/ext/ffi_c/libffi/ltmain.sh +0 -11448
  139. data/ext/ffi_c/libffi/m4/asmcfi.m4 +0 -13
  140. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +0 -50
  141. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +0 -198
  142. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +0 -158
  143. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +0 -53
  144. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +0 -119
  145. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +0 -49
  146. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +0 -302
  147. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +0 -267
  148. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +0 -89
  149. data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +0 -51
  150. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +0 -37
  151. data/ext/ffi_c/libffi/make_sunver.pl +0 -333
  152. data/ext/ffi_c/libffi/man/Makefile.am +0 -8
  153. data/ext/ffi_c/libffi/man/Makefile.in +0 -565
  154. data/ext/ffi_c/libffi/man/ffi.3 +0 -41
  155. data/ext/ffi_c/libffi/man/ffi_call.3 +0 -103
  156. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +0 -68
  157. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +0 -73
  158. data/ext/ffi_c/libffi/missing +0 -215
  159. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +0 -33
  160. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +0 -130
  161. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +0 -57
  162. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +0 -4
  163. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +0 -511
  164. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +0 -219
  165. data/ext/ffi_c/libffi/msvcc.sh +0 -353
  166. data/ext/ffi_c/libffi/src/aarch64/ffi.c +0 -1129
  167. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +0 -97
  168. data/ext/ffi_c/libffi/src/aarch64/internal.h +0 -100
  169. data/ext/ffi_c/libffi/src/aarch64/sysv.S +0 -543
  170. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +0 -506
  171. data/ext/ffi_c/libffi/src/alpha/ffi.c +0 -521
  172. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +0 -57
  173. data/ext/ffi_c/libffi/src/alpha/internal.h +0 -23
  174. data/ext/ffi_c/libffi/src/alpha/osf.S +0 -282
  175. data/ext/ffi_c/libffi/src/arc/arcompact.S +0 -210
  176. data/ext/ffi_c/libffi/src/arc/ffi.c +0 -443
  177. data/ext/ffi_c/libffi/src/arc/ffitarget.h +0 -67
  178. data/ext/ffi_c/libffi/src/arm/ffi.c +0 -921
  179. data/ext/ffi_c/libffi/src/arm/ffitarget.h +0 -89
  180. data/ext/ffi_c/libffi/src/arm/internal.h +0 -17
  181. data/ext/ffi_c/libffi/src/arm/sysv.S +0 -456
  182. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +0 -311
  183. data/ext/ffi_c/libffi/src/avr32/ffi.c +0 -423
  184. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +0 -55
  185. data/ext/ffi_c/libffi/src/avr32/sysv.S +0 -208
  186. data/ext/ffi_c/libffi/src/bfin/ffi.c +0 -196
  187. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +0 -43
  188. data/ext/ffi_c/libffi/src/bfin/sysv.S +0 -179
  189. data/ext/ffi_c/libffi/src/closures.c +0 -1107
  190. data/ext/ffi_c/libffi/src/cris/ffi.c +0 -386
  191. data/ext/ffi_c/libffi/src/cris/ffitarget.h +0 -56
  192. data/ext/ffi_c/libffi/src/cris/sysv.S +0 -215
  193. data/ext/ffi_c/libffi/src/csky/ffi.c +0 -395
  194. data/ext/ffi_c/libffi/src/csky/ffitarget.h +0 -63
  195. data/ext/ffi_c/libffi/src/csky/sysv.S +0 -371
  196. data/ext/ffi_c/libffi/src/debug.c +0 -64
  197. data/ext/ffi_c/libffi/src/dlmalloc.c +0 -5171
  198. data/ext/ffi_c/libffi/src/frv/eabi.S +0 -128
  199. data/ext/ffi_c/libffi/src/frv/ffi.c +0 -292
  200. data/ext/ffi_c/libffi/src/frv/ffitarget.h +0 -62
  201. data/ext/ffi_c/libffi/src/ia64/ffi.c +0 -616
  202. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +0 -56
  203. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +0 -40
  204. data/ext/ffi_c/libffi/src/ia64/unix.S +0 -585
  205. data/ext/ffi_c/libffi/src/java_raw_api.c +0 -374
  206. data/ext/ffi_c/libffi/src/kvx/asm.h +0 -5
  207. data/ext/ffi_c/libffi/src/kvx/ffi.c +0 -273
  208. data/ext/ffi_c/libffi/src/kvx/ffitarget.h +0 -75
  209. data/ext/ffi_c/libffi/src/kvx/sysv.S +0 -127
  210. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +0 -621
  211. data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +0 -82
  212. data/ext/ffi_c/libffi/src/loongarch64/sysv.S +0 -327
  213. data/ext/ffi_c/libffi/src/m32r/ffi.c +0 -249
  214. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +0 -53
  215. data/ext/ffi_c/libffi/src/m32r/sysv.S +0 -121
  216. data/ext/ffi_c/libffi/src/m68k/ffi.c +0 -362
  217. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +0 -54
  218. data/ext/ffi_c/libffi/src/m68k/sysv.S +0 -357
  219. data/ext/ffi_c/libffi/src/m88k/ffi.c +0 -400
  220. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +0 -49
  221. data/ext/ffi_c/libffi/src/m88k/obsd.S +0 -209
  222. data/ext/ffi_c/libffi/src/metag/ffi.c +0 -330
  223. data/ext/ffi_c/libffi/src/metag/ffitarget.h +0 -53
  224. data/ext/ffi_c/libffi/src/metag/sysv.S +0 -311
  225. data/ext/ffi_c/libffi/src/microblaze/ffi.c +0 -321
  226. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +0 -53
  227. data/ext/ffi_c/libffi/src/microblaze/sysv.S +0 -302
  228. data/ext/ffi_c/libffi/src/mips/ffi.c +0 -1309
  229. data/ext/ffi_c/libffi/src/mips/ffitarget.h +0 -251
  230. data/ext/ffi_c/libffi/src/mips/n32.S +0 -772
  231. data/ext/ffi_c/libffi/src/mips/o32.S +0 -561
  232. data/ext/ffi_c/libffi/src/moxie/eabi.S +0 -101
  233. data/ext/ffi_c/libffi/src/moxie/ffi.c +0 -310
  234. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +0 -52
  235. data/ext/ffi_c/libffi/src/nios2/ffi.c +0 -304
  236. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +0 -52
  237. data/ext/ffi_c/libffi/src/nios2/sysv.S +0 -136
  238. data/ext/ffi_c/libffi/src/or1k/ffi.c +0 -341
  239. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +0 -58
  240. data/ext/ffi_c/libffi/src/or1k/sysv.S +0 -107
  241. data/ext/ffi_c/libffi/src/pa/ffi.c +0 -673
  242. data/ext/ffi_c/libffi/src/pa/ffi64.c +0 -614
  243. data/ext/ffi_c/libffi/src/pa/ffitarget.h +0 -94
  244. data/ext/ffi_c/libffi/src/pa/hpux32.S +0 -417
  245. data/ext/ffi_c/libffi/src/pa/hpux64.S +0 -681
  246. data/ext/ffi_c/libffi/src/pa/linux.S +0 -427
  247. data/ext/ffi_c/libffi/src/powerpc/aix.S +0 -566
  248. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +0 -694
  249. data/ext/ffi_c/libffi/src/powerpc/asm.h +0 -125
  250. data/ext/ffi_c/libffi/src/powerpc/darwin.S +0 -378
  251. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +0 -571
  252. data/ext/ffi_c/libffi/src/powerpc/ffi.c +0 -175
  253. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +0 -1452
  254. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +0 -1153
  255. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +0 -105
  256. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +0 -923
  257. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +0 -204
  258. data/ext/ffi_c/libffi/src/powerpc/linux64.S +0 -293
  259. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +0 -566
  260. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +0 -397
  261. data/ext/ffi_c/libffi/src/powerpc/sysv.S +0 -173
  262. data/ext/ffi_c/libffi/src/powerpc/t-aix +0 -5
  263. data/ext/ffi_c/libffi/src/prep_cif.c +0 -283
  264. data/ext/ffi_c/libffi/src/raw_api.c +0 -267
  265. data/ext/ffi_c/libffi/src/riscv/ffi.c +0 -514
  266. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +0 -69
  267. data/ext/ffi_c/libffi/src/riscv/sysv.S +0 -293
  268. data/ext/ffi_c/libffi/src/s390/ffi.c +0 -756
  269. data/ext/ffi_c/libffi/src/s390/ffitarget.h +0 -70
  270. data/ext/ffi_c/libffi/src/s390/internal.h +0 -11
  271. data/ext/ffi_c/libffi/src/s390/sysv.S +0 -325
  272. data/ext/ffi_c/libffi/src/sh/ffi.c +0 -717
  273. data/ext/ffi_c/libffi/src/sh/ffitarget.h +0 -54
  274. data/ext/ffi_c/libffi/src/sh/sysv.S +0 -850
  275. data/ext/ffi_c/libffi/src/sh64/ffi.c +0 -469
  276. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +0 -58
  277. data/ext/ffi_c/libffi/src/sh64/sysv.S +0 -539
  278. data/ext/ffi_c/libffi/src/sparc/ffi.c +0 -468
  279. data/ext/ffi_c/libffi/src/sparc/ffi64.c +0 -624
  280. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +0 -81
  281. data/ext/ffi_c/libffi/src/sparc/internal.h +0 -26
  282. data/ext/ffi_c/libffi/src/sparc/v8.S +0 -443
  283. data/ext/ffi_c/libffi/src/sparc/v9.S +0 -440
  284. data/ext/ffi_c/libffi/src/tile/ffi.c +0 -355
  285. data/ext/ffi_c/libffi/src/tile/ffitarget.h +0 -65
  286. data/ext/ffi_c/libffi/src/tile/tile.S +0 -360
  287. data/ext/ffi_c/libffi/src/tramp.c +0 -716
  288. data/ext/ffi_c/libffi/src/types.c +0 -108
  289. data/ext/ffi_c/libffi/src/vax/elfbsd.S +0 -195
  290. data/ext/ffi_c/libffi/src/vax/ffi.c +0 -276
  291. data/ext/ffi_c/libffi/src/vax/ffitarget.h +0 -49
  292. data/ext/ffi_c/libffi/src/wasm32/ffi.c +0 -934
  293. data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +0 -62
  294. data/ext/ffi_c/libffi/src/x86/asmnames.h +0 -30
  295. data/ext/ffi_c/libffi/src/x86/ffi.c +0 -832
  296. data/ext/ffi_c/libffi/src/x86/ffi64.c +0 -950
  297. data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -164
  298. data/ext/ffi_c/libffi/src/x86/ffiw64.c +0 -361
  299. data/ext/ffi_c/libffi/src/x86/internal.h +0 -43
  300. data/ext/ffi_c/libffi/src/x86/internal64.h +0 -36
  301. data/ext/ffi_c/libffi/src/x86/sysv.S +0 -1272
  302. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +0 -998
  303. data/ext/ffi_c/libffi/src/x86/unix64.S +0 -711
  304. data/ext/ffi_c/libffi/src/x86/win64.S +0 -254
  305. data/ext/ffi_c/libffi/src/x86/win64_intel.S +0 -238
  306. data/ext/ffi_c/libffi/src/xtensa/ffi.c +0 -306
  307. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +0 -57
  308. data/ext/ffi_c/libffi/src/xtensa/sysv.S +0 -268
  309. data/ext/ffi_c/libffi/stamp-h.in +0 -1
  310. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -135
  311. data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -664
  312. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  313. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -54
  314. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -63
  315. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -80
  316. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -48
  317. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  318. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  319. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
  320. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  321. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  322. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  323. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  324. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  325. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  326. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  327. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  328. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  349. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  350. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  351. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  352. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  353. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  354. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  355. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  356. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  357. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  358. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  359. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  360. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  361. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  362. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  365. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  366. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  367. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  368. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  369. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  370. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  371. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  372. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  373. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  374. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  375. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  376. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  377. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  378. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  379. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  380. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  381. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  384. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  385. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  386. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  387. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  388. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  389. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  390. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  391. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  392. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  393. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -134
  394. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -140
  395. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  396. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  397. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  398. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  399. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  400. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  401. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  402. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  403. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  404. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  405. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  406. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  407. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  408. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  409. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  410. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  411. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  412. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  413. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  414. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  415. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  416. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  417. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  418. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  419. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  420. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  421. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  422. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  423. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  424. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  425. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  426. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  427. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  428. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  429. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  430. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  431. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  432. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  433. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  434. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  435. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  436. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  437. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  438. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  439. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  440. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  441. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  442. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  443. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  444. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  445. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  446. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  447. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  448. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  449. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  450. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  451. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  452. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  453. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  454. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  455. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  456. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  457. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  458. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  459. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  460. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  461. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  462. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  463. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  464. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  465. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  466. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  467. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  468. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  469. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  470. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
  471. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  472. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  473. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  474. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  475. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  476. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  477. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  478. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  479. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  480. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  481. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  482. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  483. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  484. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  485. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  486. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  487. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  488. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  489. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  490. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  491. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  492. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  493. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  494. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
  495. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
  496. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  497. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  498. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  499. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  500. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  501. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  502. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  503. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  504. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  505. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  506. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  507. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  508. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  509. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  510. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  511. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  512. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  513. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  514. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  515. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  516. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  517. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  518. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  519. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  520. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  521. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  522. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  523. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  524. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  525. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  526. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  527. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  528. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  529. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  530. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  531. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  532. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  533. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  534. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  535. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  536. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  537. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  538. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  539. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  540. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  541. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  542. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  543. data/ext/ffi_c/libffi.bsd.mk +0 -40
  544. data/ext/ffi_c/libffi.darwin.mk +0 -105
  545. data/ext/ffi_c/libffi.gnu.mk +0 -32
  546. data/ext/ffi_c/libffi.mk +0 -18
  547. data/ext/ffi_c/libffi.vc.mk +0 -26
  548. data/ext/ffi_c/libffi.vc64.mk +0 -26
  549. data/ext/ffi_c/rbffi.h +0 -55
  550. data/ext/ffi_c/rbffi_endian.h +0 -59
@@ -1,321 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- ffi.c - Copyright (c) 2012, 2013 Xilinx, Inc
3
-
4
- MicroBlaze Foreign Function Interface
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- ``Software''), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be included
15
- in all copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
- DEALINGS IN THE SOFTWARE.
25
- ----------------------------------------------------------------------- */
26
-
27
- #include <ffi.h>
28
- #include <ffi_common.h>
29
-
30
- extern void ffi_call_SYSV(void (*)(void*, extended_cif*), extended_cif*,
31
- unsigned int, unsigned int, unsigned int*, void (*fn)(void),
32
- unsigned int, unsigned int);
33
-
34
- extern void ffi_closure_SYSV(void);
35
-
36
- #define WORD_SIZE sizeof(unsigned int)
37
- #define ARGS_REGISTER_SIZE (WORD_SIZE * 6)
38
- #define WORD_FFI_ALIGN(x) FFI_ALIGN(x, WORD_SIZE)
39
-
40
- /* ffi_prep_args is called by the assembly routine once stack space
41
- has been allocated for the function's arguments */
42
- void ffi_prep_args(void* stack, extended_cif* ecif)
43
- {
44
- unsigned int i;
45
- ffi_type** p_arg;
46
- void** p_argv;
47
- void* stack_args_p = stack;
48
-
49
- if (ecif == NULL || ecif->cif == NULL) {
50
- return; /* no description to prepare */
51
- }
52
-
53
- p_argv = ecif->avalue;
54
-
55
- if ((ecif->cif->rtype != NULL) &&
56
- (ecif->cif->rtype->type == FFI_TYPE_STRUCT))
57
- {
58
- /* if return type is a struct which is referenced on the stack/reg5,
59
- * by a pointer. Stored the return value pointer in r5.
60
- */
61
- char* addr = stack_args_p;
62
- memcpy(addr, &(ecif->rvalue), WORD_SIZE);
63
- stack_args_p += WORD_SIZE;
64
- }
65
-
66
- if (ecif->avalue == NULL) {
67
- return; /* no arguments to prepare */
68
- }
69
-
70
- for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs;
71
- i++, p_arg++)
72
- {
73
- size_t size = (*p_arg)->size;
74
- int type = (*p_arg)->type;
75
- void* value = p_argv[i];
76
- char* addr = stack_args_p;
77
- int aligned_size = WORD_FFI_ALIGN(size);
78
-
79
- /* force word alignment on the stack */
80
- stack_args_p += aligned_size;
81
-
82
- switch (type)
83
- {
84
- case FFI_TYPE_UINT8:
85
- *(unsigned int *)addr = (unsigned int)*(UINT8*)(value);
86
- break;
87
- case FFI_TYPE_SINT8:
88
- *(signed int *)addr = (signed int)*(SINT8*)(value);
89
- break;
90
- case FFI_TYPE_UINT16:
91
- *(unsigned int *)addr = (unsigned int)*(UINT16*)(value);
92
- break;
93
- case FFI_TYPE_SINT16:
94
- *(signed int *)addr = (signed int)*(SINT16*)(value);
95
- break;
96
- case FFI_TYPE_STRUCT:
97
- #if __BIG_ENDIAN__
98
- /*
99
- * MicroBlaze toolchain appears to emit:
100
- * bsrli r5, r5, 8 (caller)
101
- * ...
102
- * <branch to callee>
103
- * ...
104
- * bslli r5, r5, 8 (callee)
105
- *
106
- * For structs like "struct a { uint8_t a[3]; };", when passed
107
- * by value.
108
- *
109
- * Structs like "struct b { uint16_t a; };" are also expected
110
- * to be packed strangely in registers.
111
- *
112
- * This appears to be because the microblaze toolchain expects
113
- * "struct b == uint16_t", which is only any issue for big
114
- * endian.
115
- *
116
- * The following is a work around for big-endian only, for the
117
- * above mentioned case, it will re-align the contents of a
118
- * <= 3-byte struct value.
119
- */
120
- if (size < WORD_SIZE)
121
- {
122
- memcpy (addr + (WORD_SIZE - size), value, size);
123
- break;
124
- }
125
- #endif
126
- case FFI_TYPE_SINT32:
127
- case FFI_TYPE_UINT32:
128
- case FFI_TYPE_FLOAT:
129
- case FFI_TYPE_SINT64:
130
- case FFI_TYPE_UINT64:
131
- case FFI_TYPE_DOUBLE:
132
- default:
133
- memcpy(addr, value, aligned_size);
134
- }
135
- }
136
- }
137
-
138
- ffi_status ffi_prep_cif_machdep(ffi_cif* cif)
139
- {
140
- /* check ABI */
141
- switch (cif->abi)
142
- {
143
- case FFI_SYSV:
144
- break;
145
- default:
146
- return FFI_BAD_ABI;
147
- }
148
- return FFI_OK;
149
- }
150
-
151
- void ffi_call(ffi_cif* cif, void (*fn)(void), void* rvalue, void** avalue)
152
- {
153
- extended_cif ecif;
154
- ecif.cif = cif;
155
- ecif.avalue = avalue;
156
-
157
- /* If the return value is a struct and we don't have a return */
158
- /* value address then we need to make one */
159
- if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) {
160
- ecif.rvalue = alloca(cif->rtype->size);
161
- } else {
162
- ecif.rvalue = rvalue;
163
- }
164
-
165
- switch (cif->abi)
166
- {
167
- case FFI_SYSV:
168
- ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags,
169
- ecif.rvalue, fn, cif->rtype->type, cif->rtype->size);
170
- break;
171
- default:
172
- FFI_ASSERT(0);
173
- break;
174
- }
175
- }
176
-
177
- void ffi_closure_call_SYSV(void* register_args, void* stack_args,
178
- ffi_closure* closure, void* rvalue,
179
- unsigned int* rtype, unsigned int* rsize)
180
- {
181
- /* prepare arguments for closure call */
182
- ffi_cif* cif = closure->cif;
183
- ffi_type** arg_types = cif->arg_types;
184
-
185
- /* re-allocate data for the args. This needs to be done in order to keep
186
- * multi-word objects (e.g. structs) in contiguous memory. Callers are not
187
- * required to store the value of args in the lower 6 words in the stack
188
- * (although they are allocated in the stack).
189
- */
190
- char* stackclone = alloca(cif->bytes);
191
- void** avalue = alloca(cif->nargs * sizeof(void*));
192
- void* struct_rvalue = NULL;
193
- char* ptr = stackclone;
194
- int i;
195
-
196
- /* copy registers into stack clone */
197
- int registers_used = cif->bytes;
198
- if (registers_used > ARGS_REGISTER_SIZE) {
199
- registers_used = ARGS_REGISTER_SIZE;
200
- }
201
- memcpy(stackclone, register_args, registers_used);
202
-
203
- /* copy stack allocated args into stack clone */
204
- if (cif->bytes > ARGS_REGISTER_SIZE) {
205
- int stack_used = cif->bytes - ARGS_REGISTER_SIZE;
206
- memcpy(stackclone + ARGS_REGISTER_SIZE, stack_args, stack_used);
207
- }
208
-
209
- /* preserve struct type return pointer passing */
210
- if ((cif->rtype != NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) {
211
- struct_rvalue = *((void**)ptr);
212
- ptr += WORD_SIZE;
213
- }
214
-
215
- /* populate arg pointer list */
216
- for (i = 0; i < cif->nargs; i++)
217
- {
218
- switch (arg_types[i]->type)
219
- {
220
- case FFI_TYPE_SINT8:
221
- case FFI_TYPE_UINT8:
222
- #ifdef __BIG_ENDIAN__
223
- avalue[i] = ptr + 3;
224
- #else
225
- avalue[i] = ptr;
226
- #endif
227
- break;
228
- case FFI_TYPE_SINT16:
229
- case FFI_TYPE_UINT16:
230
- #ifdef __BIG_ENDIAN__
231
- avalue[i] = ptr + 2;
232
- #else
233
- avalue[i] = ptr;
234
- #endif
235
- break;
236
- case FFI_TYPE_STRUCT:
237
- #if __BIG_ENDIAN__
238
- /*
239
- * Work around strange ABI behaviour.
240
- * (see info in ffi_prep_args)
241
- */
242
- if (arg_types[i]->size < WORD_SIZE)
243
- {
244
- memcpy (ptr, ptr + (WORD_SIZE - arg_types[i]->size), arg_types[i]->size);
245
- }
246
- #endif
247
- avalue[i] = (void*)ptr;
248
- break;
249
- case FFI_TYPE_UINT64:
250
- case FFI_TYPE_SINT64:
251
- case FFI_TYPE_DOUBLE:
252
- avalue[i] = ptr;
253
- break;
254
- case FFI_TYPE_SINT32:
255
- case FFI_TYPE_UINT32:
256
- case FFI_TYPE_FLOAT:
257
- default:
258
- /* default 4-byte argument */
259
- avalue[i] = ptr;
260
- break;
261
- }
262
- ptr += WORD_FFI_ALIGN(arg_types[i]->size);
263
- }
264
-
265
- /* set the return type info passed back to the wrapper */
266
- *rsize = cif->rtype->size;
267
- *rtype = cif->rtype->type;
268
- if (struct_rvalue != NULL) {
269
- closure->fun(cif, struct_rvalue, avalue, closure->user_data);
270
- /* copy struct return pointer value into function return value */
271
- *((void**)rvalue) = struct_rvalue;
272
- } else {
273
- closure->fun(cif, rvalue, avalue, closure->user_data);
274
- }
275
- }
276
-
277
- ffi_status ffi_prep_closure_loc(
278
- ffi_closure* closure, ffi_cif* cif,
279
- void (*fun)(ffi_cif*, void*, void**, void*),
280
- void* user_data, void* codeloc)
281
- {
282
- unsigned long* tramp = (unsigned long*)&(closure->tramp[0]);
283
- unsigned long cls = (unsigned long)codeloc;
284
- unsigned long fn = 0;
285
- unsigned long fn_closure_call_sysv = (unsigned long)ffi_closure_call_SYSV;
286
-
287
- closure->cif = cif;
288
- closure->fun = fun;
289
- closure->user_data = user_data;
290
-
291
- switch (cif->abi)
292
- {
293
- case FFI_SYSV:
294
- fn = (unsigned long)ffi_closure_SYSV;
295
-
296
- /* load r11 (temp) with fn */
297
- /* imm fn(upper) */
298
- tramp[0] = 0xb0000000 | ((fn >> 16) & 0xffff);
299
- /* addik r11, r0, fn(lower) */
300
- tramp[1] = 0x31600000 | (fn & 0xffff);
301
-
302
- /* load r12 (temp) with cls */
303
- /* imm cls(upper) */
304
- tramp[2] = 0xb0000000 | ((cls >> 16) & 0xffff);
305
- /* addik r12, r0, cls(lower) */
306
- tramp[3] = 0x31800000 | (cls & 0xffff);
307
-
308
- /* load r3 (temp) with ffi_closure_call_SYSV */
309
- /* imm fn_closure_call_sysv(upper) */
310
- tramp[4] = 0xb0000000 | ((fn_closure_call_sysv >> 16) & 0xffff);
311
- /* addik r3, r0, fn_closure_call_sysv(lower) */
312
- tramp[5] = 0x30600000 | (fn_closure_call_sysv & 0xffff);
313
- /* branch/jump to address stored in r11 (fn) */
314
- tramp[6] = 0x98085800; /* bra r11 */
315
-
316
- break;
317
- default:
318
- return FFI_BAD_ABI;
319
- }
320
- return FFI_OK;
321
- }
@@ -1,53 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- ffitarget.h - Copyright (c) 2012, 2013 Xilinx, Inc
3
-
4
- Target configuration macros for MicroBlaze.
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- ``Software''), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be included
15
- in all copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
- DEALINGS IN THE SOFTWARE.
25
- ----------------------------------------------------------------------- */
26
-
27
- #ifndef LIBFFI_TARGET_H
28
- #define LIBFFI_TARGET_H
29
-
30
- #ifndef LIBFFI_H
31
- #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
32
- #endif
33
-
34
- #ifndef LIBFFI_ASM
35
- typedef unsigned long ffi_arg;
36
- typedef signed long ffi_sarg;
37
-
38
- typedef enum ffi_abi {
39
- FFI_FIRST_ABI = 0,
40
- FFI_SYSV,
41
- FFI_LAST_ABI,
42
- FFI_DEFAULT_ABI = FFI_SYSV
43
- } ffi_abi;
44
- #endif
45
-
46
- /* Definitions for closures */
47
-
48
- #define FFI_CLOSURES 1
49
- #define FFI_NATIVE_RAW_API 0
50
-
51
- #define FFI_TRAMPOLINE_SIZE (4*8)
52
-
53
- #endif
@@ -1,302 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
- sysv.S - Copyright (c) 2012, 2013 Xilinx, Inc
3
-
4
- MicroBlaze Foreign Function Interface
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- ``Software''), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be included
15
- in all copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
- DEALINGS IN THE SOFTWARE.
25
- ----------------------------------------------------------------------- */
26
-
27
- #define LIBFFI_ASM
28
- #include <fficonfig.h>
29
- #include <ffi.h>
30
-
31
- /*
32
- * arg[0] (r5) = ffi_prep_args,
33
- * arg[1] (r6) = &ecif,
34
- * arg[2] (r7) = cif->bytes,
35
- * arg[3] (r8) = cif->flags,
36
- * arg[4] (r9) = ecif.rvalue,
37
- * arg[5] (r10) = fn
38
- * arg[6] (sp[0]) = cif->rtype->type
39
- * arg[7] (sp[4]) = cif->rtype->size
40
- */
41
- .text
42
- .globl ffi_call_SYSV
43
- .type ffi_call_SYSV, @function
44
- ffi_call_SYSV:
45
- /* push callee saves */
46
- addik r1, r1, -20
47
- swi r19, r1, 0 /* Frame Pointer */
48
- swi r20, r1, 4 /* PIC register */
49
- swi r21, r1, 8 /* PIC register */
50
- swi r22, r1, 12 /* save for locals */
51
- swi r23, r1, 16 /* save for locals */
52
-
53
- /* save the r5-r10 registers in the stack */
54
- addik r1, r1, -24 /* increment sp to store 6x 32-bit words */
55
- swi r5, r1, 0
56
- swi r6, r1, 4
57
- swi r7, r1, 8
58
- swi r8, r1, 12
59
- swi r9, r1, 16
60
- swi r10, r1, 20
61
-
62
- /* save function pointer */
63
- addik r3, r5, 0 /* copy ffi_prep_args into r3 */
64
- addik r22, r1, 0 /* save sp for unallocated args into r22 (callee-saved) */
65
- addik r23, r10, 0 /* save function address into r23 (callee-saved) */
66
-
67
- /* prepare stack with allocation for n (bytes = r7) args */
68
- rsub r1, r7, r1 /* subtract bytes from sp */
69
-
70
- /* prep args for ffi_prep_args call */
71
- addik r5, r1, 0 /* store stack pointer into arg[0] */
72
- /* r6 still holds ecif for arg[1] */
73
-
74
- /* Call ffi_prep_args(stack, &ecif). */
75
- addik r1, r1, -4
76
- swi r15, r1, 0 /* store the link register in the frame */
77
- brald r15, r3
78
- nop /* branch has delay slot */
79
- lwi r15, r1, 0
80
- addik r1, r1, 4 /* restore the link register from the frame */
81
- /* returns calling stack pointer location */
82
-
83
- /* prepare args for fn call, prep_args populates them onto the stack */
84
- lwi r5, r1, 0 /* arg[0] */
85
- lwi r6, r1, 4 /* arg[1] */
86
- lwi r7, r1, 8 /* arg[2] */
87
- lwi r8, r1, 12 /* arg[3] */
88
- lwi r9, r1, 16 /* arg[4] */
89
- lwi r10, r1, 20 /* arg[5] */
90
-
91
- /* call (fn) (...). */
92
- addik r1, r1, -4
93
- swi r15, r1, 0 /* store the link register in the frame */
94
- brald r15, r23
95
- nop /* branch has delay slot */
96
- lwi r15, r1, 0
97
- addik r1, r1, 4 /* restore the link register from the frame */
98
-
99
- /* Remove the space we pushed for the args. */
100
- addik r1, r22, 0 /* restore old SP */
101
-
102
- /* restore this functions parameters */
103
- lwi r5, r1, 0 /* arg[0] */
104
- lwi r6, r1, 4 /* arg[1] */
105
- lwi r7, r1, 8 /* arg[2] */
106
- lwi r8, r1, 12 /* arg[3] */
107
- lwi r9, r1, 16 /* arg[4] */
108
- lwi r10, r1, 20 /* arg[5] */
109
- addik r1, r1, 24 /* decrement sp to de-allocate 6x 32-bit words */
110
-
111
- /* If the return value pointer is NULL, assume no return value. */
112
- beqi r9, ffi_call_SYSV_end
113
-
114
- lwi r22, r1, 48 /* get return type (20 for locals + 28 for arg[6]) */
115
- lwi r23, r1, 52 /* get return size (20 for locals + 32 for arg[7]) */
116
-
117
- /* Check if return type is actually a struct, do nothing */
118
- rsubi r11, r22, FFI_TYPE_STRUCT
119
- beqi r11, ffi_call_SYSV_end
120
-
121
- /* Return 8bit */
122
- rsubi r11, r23, 1
123
- beqi r11, ffi_call_SYSV_store8
124
-
125
- /* Return 16bit */
126
- rsubi r11, r23, 2
127
- beqi r11, ffi_call_SYSV_store16
128
-
129
- /* Return 32bit */
130
- rsubi r11, r23, 4
131
- beqi r11, ffi_call_SYSV_store32
132
-
133
- /* Return 64bit */
134
- rsubi r11, r23, 8
135
- beqi r11, ffi_call_SYSV_store64
136
-
137
- /* Didn't match anything */
138
- bri ffi_call_SYSV_end
139
-
140
- ffi_call_SYSV_store64:
141
- swi r3, r9, 0 /* store word r3 into return value */
142
- swi r4, r9, 4 /* store word r4 into return value */
143
- bri ffi_call_SYSV_end
144
-
145
- ffi_call_SYSV_store32:
146
- swi r3, r9, 0 /* store word r3 into return value */
147
- bri ffi_call_SYSV_end
148
-
149
- ffi_call_SYSV_store16:
150
- #ifdef __BIG_ENDIAN__
151
- shi r3, r9, 2 /* store half-word r3 into return value */
152
- #else
153
- shi r3, r9, 0 /* store half-word r3 into return value */
154
- #endif
155
- bri ffi_call_SYSV_end
156
-
157
- ffi_call_SYSV_store8:
158
- #ifdef __BIG_ENDIAN__
159
- sbi r3, r9, 3 /* store byte r3 into return value */
160
- #else
161
- sbi r3, r9, 0 /* store byte r3 into return value */
162
- #endif
163
- bri ffi_call_SYSV_end
164
-
165
- ffi_call_SYSV_end:
166
- /* callee restores */
167
- lwi r19, r1, 0 /* frame pointer */
168
- lwi r20, r1, 4 /* PIC register */
169
- lwi r21, r1, 8 /* PIC register */
170
- lwi r22, r1, 12
171
- lwi r23, r1, 16
172
- addik r1, r1, 20
173
-
174
- /* return from sub-routine (with delay slot) */
175
- rtsd r15, 8
176
- nop
177
-
178
- .size ffi_call_SYSV, . - ffi_call_SYSV
179
-
180
- /* ------------------------------------------------------------------------- */
181
-
182
- /*
183
- * args passed into this function, are passed down to the callee.
184
- * this function is the target of the closure trampoline, as such r12 is
185
- * a pointer to the closure object.
186
- */
187
- .text
188
- .globl ffi_closure_SYSV
189
- .type ffi_closure_SYSV, @function
190
- ffi_closure_SYSV:
191
- /* push callee saves */
192
- addik r11, r1, 28 /* save stack args start location (excluding regs/link) */
193
- addik r1, r1, -12
194
- swi r19, r1, 0 /* Frame Pointer */
195
- swi r20, r1, 4 /* PIC register */
196
- swi r21, r1, 8 /* PIC register */
197
-
198
- /* store register args on stack */
199
- addik r1, r1, -24
200
- swi r5, r1, 0
201
- swi r6, r1, 4
202
- swi r7, r1, 8
203
- swi r8, r1, 12
204
- swi r9, r1, 16
205
- swi r10, r1, 20
206
-
207
- /* setup args */
208
- addik r5, r1, 0 /* register_args */
209
- addik r6, r11, 0 /* stack_args */
210
- addik r7, r12, 0 /* closure object */
211
- addik r1, r1, -8 /* allocate return value */
212
- addik r8, r1, 0 /* void* rvalue */
213
- addik r1, r1, -8 /* allocate for return type/size values */
214
- addik r9, r1, 0 /* void* rtype */
215
- addik r10, r1, 4 /* void* rsize */
216
-
217
- /* call the wrap_call function */
218
- addik r1, r1, -28 /* allocate args + link reg */
219
- swi r15, r1, 0 /* store the link register in the frame */
220
- brald r15, r3
221
- nop /* branch has delay slot */
222
- lwi r15, r1, 0
223
- addik r1, r1, 28 /* restore the link register from the frame */
224
-
225
- ffi_closure_SYSV_prepare_return:
226
- lwi r9, r1, 0 /* rtype */
227
- lwi r10, r1, 4 /* rsize */
228
- addik r1, r1, 8 /* de-allocate return info values */
229
-
230
- /* Check if return type is actually a struct, store 4 bytes */
231
- rsubi r11, r9, FFI_TYPE_STRUCT
232
- beqi r11, ffi_closure_SYSV_store32
233
-
234
- /* Return 8bit */
235
- rsubi r11, r10, 1
236
- beqi r11, ffi_closure_SYSV_store8
237
-
238
- /* Return 16bit */
239
- rsubi r11, r10, 2
240
- beqi r11, ffi_closure_SYSV_store16
241
-
242
- /* Return 32bit */
243
- rsubi r11, r10, 4
244
- beqi r11, ffi_closure_SYSV_store32
245
-
246
- /* Return 64bit */
247
- rsubi r11, r10, 8
248
- beqi r11, ffi_closure_SYSV_store64
249
-
250
- /* Didn't match anything */
251
- bri ffi_closure_SYSV_end
252
-
253
- ffi_closure_SYSV_store64:
254
- lwi r3, r1, 0 /* store word r3 into return value */
255
- lwi r4, r1, 4 /* store word r4 into return value */
256
- /* 64 bits == 2 words, no sign extend occurs */
257
- bri ffi_closure_SYSV_end
258
-
259
- ffi_closure_SYSV_store32:
260
- lwi r3, r1, 0 /* store word r3 into return value */
261
- /* 32 bits == 1 word, no sign extend occurs */
262
- bri ffi_closure_SYSV_end
263
-
264
- ffi_closure_SYSV_store16:
265
- #ifdef __BIG_ENDIAN__
266
- lhui r3, r1, 2 /* store half-word r3 into return value */
267
- #else
268
- lhui r3, r1, 0 /* store half-word r3 into return value */
269
- #endif
270
- rsubi r11, r9, FFI_TYPE_SINT16
271
- bnei r11, ffi_closure_SYSV_end
272
- sext16 r3, r3 /* fix sign extend of sint8 */
273
- bri ffi_closure_SYSV_end
274
-
275
- ffi_closure_SYSV_store8:
276
- #ifdef __BIG_ENDIAN__
277
- lbui r3, r1, 3 /* store byte r3 into return value */
278
- #else
279
- lbui r3, r1, 0 /* store byte r3 into return value */
280
- #endif
281
- rsubi r11, r9, FFI_TYPE_SINT8
282
- bnei r11, ffi_closure_SYSV_end
283
- sext8 r3, r3 /* fix sign extend of sint8 */
284
- bri ffi_closure_SYSV_end
285
-
286
- ffi_closure_SYSV_end:
287
- addik r1, r1, 8 /* de-allocate return value */
288
-
289
- /* de-allocate stored args */
290
- addik r1, r1, 24
291
-
292
- /* callee restores */
293
- lwi r19, r1, 0 /* frame pointer */
294
- lwi r20, r1, 4 /* PIC register */
295
- lwi r21, r1, 8 /* PIC register */
296
- addik r1, r1, 12
297
-
298
- /* return from sub-routine (with delay slot) */
299
- rtsd r15, 8
300
- nop
301
-
302
- .size ffi_closure_SYSV, . - ffi_closure_SYSV