ffi 1.11.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (542) hide show
  1. checksums.yaml +7 -0
  2. data/.appveyor.yml +27 -0
  3. data/.gitignore +25 -0
  4. data/.gitmodules +4 -0
  5. data/.travis.yml +42 -0
  6. data/.yardopts +5 -0
  7. data/CHANGELOG.md +147 -0
  8. data/COPYING +49 -0
  9. data/Gemfile +15 -0
  10. data/LICENSE +24 -0
  11. data/LICENSE.SPECS +22 -0
  12. data/README.md +115 -0
  13. data/Rakefile +196 -0
  14. data/ext/ffi_c/AbstractMemory.c +1109 -0
  15. data/ext/ffi_c/AbstractMemory.h +175 -0
  16. data/ext/ffi_c/ArrayType.c +162 -0
  17. data/ext/ffi_c/ArrayType.h +59 -0
  18. data/ext/ffi_c/Buffer.c +365 -0
  19. data/ext/ffi_c/Call.c +503 -0
  20. data/ext/ffi_c/Call.h +107 -0
  21. data/ext/ffi_c/ClosurePool.c +283 -0
  22. data/ext/ffi_c/ClosurePool.h +57 -0
  23. data/ext/ffi_c/DynamicLibrary.c +339 -0
  24. data/ext/ffi_c/DynamicLibrary.h +98 -0
  25. data/ext/ffi_c/Function.c +917 -0
  26. data/ext/ffi_c/Function.h +87 -0
  27. data/ext/ffi_c/FunctionInfo.c +271 -0
  28. data/ext/ffi_c/LastError.c +229 -0
  29. data/ext/ffi_c/LastError.h +47 -0
  30. data/ext/ffi_c/LongDouble.c +63 -0
  31. data/ext/ffi_c/LongDouble.h +51 -0
  32. data/ext/ffi_c/MappedType.c +168 -0
  33. data/ext/ffi_c/MappedType.h +59 -0
  34. data/ext/ffi_c/MemoryPointer.c +197 -0
  35. data/ext/ffi_c/MemoryPointer.h +53 -0
  36. data/ext/ffi_c/MethodHandle.c +358 -0
  37. data/ext/ffi_c/MethodHandle.h +55 -0
  38. data/ext/ffi_c/Platform.c +82 -0
  39. data/ext/ffi_c/Platform.h +45 -0
  40. data/ext/ffi_c/Pointer.c +508 -0
  41. data/ext/ffi_c/Pointer.h +63 -0
  42. data/ext/ffi_c/Struct.c +829 -0
  43. data/ext/ffi_c/Struct.h +106 -0
  44. data/ext/ffi_c/StructByValue.c +150 -0
  45. data/ext/ffi_c/StructByValue.h +55 -0
  46. data/ext/ffi_c/StructLayout.c +698 -0
  47. data/ext/ffi_c/Thread.c +137 -0
  48. data/ext/ffi_c/Thread.h +84 -0
  49. data/ext/ffi_c/Type.c +379 -0
  50. data/ext/ffi_c/Type.h +61 -0
  51. data/ext/ffi_c/Types.c +139 -0
  52. data/ext/ffi_c/Types.h +89 -0
  53. data/ext/ffi_c/Variadic.c +298 -0
  54. data/ext/ffi_c/compat.h +78 -0
  55. data/ext/ffi_c/extconf.rb +86 -0
  56. data/ext/ffi_c/ffi.c +93 -0
  57. data/ext/ffi_c/libffi.bsd.mk +40 -0
  58. data/ext/ffi_c/libffi.darwin.mk +105 -0
  59. data/ext/ffi_c/libffi.gnu.mk +32 -0
  60. data/ext/ffi_c/libffi.mk +18 -0
  61. data/ext/ffi_c/libffi.vc.mk +26 -0
  62. data/ext/ffi_c/libffi.vc64.mk +26 -0
  63. data/ext/ffi_c/libffi/.appveyor.yml +66 -0
  64. data/ext/ffi_c/libffi/.gitattributes +4 -0
  65. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  66. data/ext/ffi_c/libffi/.gitignore +38 -0
  67. data/ext/ffi_c/libffi/.travis.yml +63 -0
  68. data/ext/ffi_c/libffi/.travis/ar-lib +270 -0
  69. data/ext/ffi_c/libffi/.travis/build-in-container.sh +22 -0
  70. data/ext/ffi_c/libffi/.travis/build.sh +110 -0
  71. data/ext/ffi_c/libffi/.travis/compile +351 -0
  72. data/ext/ffi_c/libffi/.travis/install.sh +43 -0
  73. data/ext/ffi_c/libffi/.travis/moxie-sim.exp +60 -0
  74. data/ext/ffi_c/libffi/.travis/site.exp +18 -0
  75. data/ext/ffi_c/libffi/ChangeLog.libffi +584 -0
  76. data/ext/ffi_c/libffi/ChangeLog.libffi-3.1 +6000 -0
  77. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  78. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  79. data/ext/ffi_c/libffi/LICENSE +21 -0
  80. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +353 -0
  81. data/ext/ffi_c/libffi/Makefile.am +158 -0
  82. data/ext/ffi_c/libffi/README.md +470 -0
  83. data/ext/ffi_c/libffi/acinclude.m4 +479 -0
  84. data/ext/ffi_c/libffi/autogen.sh +2 -0
  85. data/ext/ffi_c/libffi/config.guess +1466 -0
  86. data/ext/ffi_c/libffi/config.sub +1836 -0
  87. data/ext/ffi_c/libffi/configure.ac +394 -0
  88. data/ext/ffi_c/libffi/configure.host +303 -0
  89. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
  90. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  91. data/ext/ffi_c/libffi/include/ffi.h.in +515 -0
  92. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  93. data/ext/ffi_c/libffi/include/ffi_common.h +153 -0
  94. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  95. data/ext/ffi_c/libffi/libffi.pc.in +11 -0
  96. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
  97. data/ext/ffi_c/libffi/libtool-version +29 -0
  98. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  99. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +71 -0
  100. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +194 -0
  101. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +122 -0
  102. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +74 -0
  103. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +87 -0
  104. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +70 -0
  105. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
  106. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +263 -0
  107. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
  108. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  109. data/ext/ffi_c/libffi/make_sunver.pl +333 -0
  110. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  111. data/ext/ffi_c/libffi/man/ffi.3 +41 -0
  112. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  113. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +68 -0
  114. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  115. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
  116. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
  117. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
  118. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
  119. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
  120. data/ext/ffi_c/libffi/msvcc.sh +353 -0
  121. data/ext/ffi_c/libffi/src/aarch64/ffi.c +1009 -0
  122. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +92 -0
  123. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  124. data/ext/ffi_c/libffi/src/aarch64/sysv.S +440 -0
  125. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -0
  126. data/ext/ffi_c/libffi/src/alpha/ffi.c +521 -0
  127. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +57 -0
  128. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  129. data/ext/ffi_c/libffi/src/alpha/osf.S +282 -0
  130. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  131. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  132. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  133. data/ext/ffi_c/libffi/src/arm/ffi.c +854 -0
  134. data/ext/ffi_c/libffi/src/arm/ffitarget.h +89 -0
  135. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  136. data/ext/ffi_c/libffi/src/arm/sysv.S +385 -0
  137. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
  138. data/ext/ffi_c/libffi/src/avr32/ffi.c +423 -0
  139. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +55 -0
  140. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  141. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  142. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  143. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  144. data/ext/ffi_c/libffi/src/closures.c +990 -0
  145. data/ext/ffi_c/libffi/src/cris/ffi.c +386 -0
  146. data/ext/ffi_c/libffi/src/cris/ffitarget.h +56 -0
  147. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  148. data/ext/ffi_c/libffi/src/debug.c +64 -0
  149. data/ext/ffi_c/libffi/src/dlmalloc.c +5166 -0
  150. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  151. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  152. data/ext/ffi_c/libffi/src/frv/ffitarget.h +62 -0
  153. data/ext/ffi_c/libffi/src/ia64/ffi.c +604 -0
  154. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +56 -0
  155. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  156. data/ext/ffi_c/libffi/src/ia64/unix.S +567 -0
  157. data/ext/ffi_c/libffi/src/java_raw_api.c +374 -0
  158. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  159. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +53 -0
  160. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  161. data/ext/ffi_c/libffi/src/m68k/ffi.c +362 -0
  162. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +54 -0
  163. data/ext/ffi_c/libffi/src/m68k/sysv.S +357 -0
  164. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  165. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  166. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  167. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  168. data/ext/ffi_c/libffi/src/metag/ffitarget.h +53 -0
  169. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  170. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  171. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  172. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  173. data/ext/ffi_c/libffi/src/mips/ffi.c +1130 -0
  174. data/ext/ffi_c/libffi/src/mips/ffitarget.h +244 -0
  175. data/ext/ffi_c/libffi/src/mips/n32.S +663 -0
  176. data/ext/ffi_c/libffi/src/mips/o32.S +502 -0
  177. data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
  178. data/ext/ffi_c/libffi/src/moxie/ffi.c +285 -0
  179. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  180. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  181. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  182. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  183. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  184. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  185. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  186. data/ext/ffi_c/libffi/src/pa/ffi.c +719 -0
  187. data/ext/ffi_c/libffi/src/pa/ffitarget.h +85 -0
  188. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  189. data/ext/ffi_c/libffi/src/pa/linux.S +378 -0
  190. data/ext/ffi_c/libffi/src/powerpc/aix.S +566 -0
  191. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +694 -0
  192. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  193. data/ext/ffi_c/libffi/src/powerpc/darwin.S +378 -0
  194. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +571 -0
  195. data/ext/ffi_c/libffi/src/powerpc/ffi.c +174 -0
  196. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +1440 -0
  197. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1007 -0
  198. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  199. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  200. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +198 -0
  201. data/ext/ffi_c/libffi/src/powerpc/linux64.S +228 -0
  202. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +488 -0
  203. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +397 -0
  204. data/ext/ffi_c/libffi/src/powerpc/sysv.S +175 -0
  205. data/ext/ffi_c/libffi/src/prep_cif.c +263 -0
  206. data/ext/ffi_c/libffi/src/raw_api.c +267 -0
  207. data/ext/ffi_c/libffi/src/riscv/ffi.c +481 -0
  208. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
  209. data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
  210. data/ext/ffi_c/libffi/src/s390/ffi.c +756 -0
  211. data/ext/ffi_c/libffi/src/s390/ffitarget.h +70 -0
  212. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  213. data/ext/ffi_c/libffi/src/s390/sysv.S +325 -0
  214. data/ext/ffi_c/libffi/src/sh/ffi.c +717 -0
  215. data/ext/ffi_c/libffi/src/sh/ffitarget.h +54 -0
  216. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  217. data/ext/ffi_c/libffi/src/sh64/ffi.c +469 -0
  218. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +58 -0
  219. data/ext/ffi_c/libffi/src/sh64/sysv.S +539 -0
  220. data/ext/ffi_c/libffi/src/sparc/ffi.c +468 -0
  221. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  222. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +81 -0
  223. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  224. data/ext/ffi_c/libffi/src/sparc/v8.S +443 -0
  225. data/ext/ffi_c/libffi/src/sparc/v9.S +440 -0
  226. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  227. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  228. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  229. data/ext/ffi_c/libffi/src/types.c +108 -0
  230. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  231. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  232. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  233. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  234. data/ext/ffi_c/libffi/src/x86/ffi.c +761 -0
  235. data/ext/ffi_c/libffi/src/x86/ffi64.c +886 -0
  236. data/ext/ffi_c/libffi/src/x86/ffitarget.h +147 -0
  237. data/ext/ffi_c/libffi/src/x86/ffiw64.c +311 -0
  238. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  239. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  240. data/ext/ffi_c/libffi/src/x86/sysv.S +1129 -0
  241. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +995 -0
  242. data/ext/ffi_c/libffi/src/x86/unix64.S +566 -0
  243. data/ext/ffi_c/libffi/src/x86/win64.S +237 -0
  244. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  245. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  246. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  247. data/ext/ffi_c/libffi/src/xtensa/sysv.S +258 -0
  248. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  249. data/ext/ffi_c/libffi/testsuite/Makefile.am +119 -0
  250. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  251. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +657 -0
  252. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +283 -0
  253. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +58 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1745 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +743 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +43 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +89 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +81 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +81 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +82 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +89 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +92 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +90 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_simple.c +55 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +94 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +95 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +96 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +102 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +89 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +91 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +93 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +113 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +90 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +95 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +90 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +90 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +98 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +90 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +109 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +98 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +124 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +113 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +99 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +117 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +97 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +88 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +90 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +91 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +93 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +91 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +92 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +132 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +115 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +95 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +91 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +91 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +92 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +91 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +91 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +93 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +43 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +61 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +42 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +61 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +74 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +74 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +86 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +91 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +74 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +86 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +142 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +44 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +42 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +42 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +42 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +43 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +47 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +43 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +36 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +26 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +138 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +60 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +61 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +74 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +341 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +59 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  350. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  351. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  352. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +52 -0
  353. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +152 -0
  354. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +161 -0
  355. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +134 -0
  356. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  357. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +110 -0
  358. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +111 -0
  359. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +111 -0
  360. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +112 -0
  361. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +131 -0
  362. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +111 -0
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +131 -0
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +131 -0
  365. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  366. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  367. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +90 -0
  368. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  369. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  370. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +36 -0
  371. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  372. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  373. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  374. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  375. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  376. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  377. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  378. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  379. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +43 -0
  380. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  381. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  384. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  385. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  386. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  387. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +125 -0
  388. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  389. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  390. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  391. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  392. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +67 -0
  393. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  394. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  395. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +60 -0
  396. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +64 -0
  397. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +66 -0
  398. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  399. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  400. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +81 -0
  401. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +68 -0
  402. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  403. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  404. data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest.cc +117 -0
  405. data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc +54 -0
  406. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  407. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  408. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  409. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  410. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  411. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  412. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  413. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  414. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  415. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  416. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  417. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  418. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  419. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  420. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  421. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  422. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  423. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  424. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  425. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  426. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +36 -0
  427. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  428. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  429. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  430. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  431. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  432. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  433. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  434. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  435. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  436. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  437. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  438. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  439. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  440. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  441. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  442. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  443. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  444. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  445. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  446. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  447. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  448. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  449. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  450. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  451. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  452. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  453. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  454. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  455. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  456. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  457. data/ext/ffi_c/rbffi.h +55 -0
  458. data/ext/ffi_c/rbffi_endian.h +59 -0
  459. data/ext/ffi_c/win32/stdbool.h +8 -0
  460. data/ext/ffi_c/win32/stdint.h +201 -0
  461. data/ffi.gemspec +43 -0
  462. data/lib/ffi.rb +20 -0
  463. data/lib/ffi/autopointer.rb +203 -0
  464. data/lib/ffi/buffer.rb +4 -0
  465. data/lib/ffi/callback.rb +4 -0
  466. data/lib/ffi/data_converter.rb +67 -0
  467. data/lib/ffi/enum.rb +296 -0
  468. data/lib/ffi/errno.rb +43 -0
  469. data/lib/ffi/ffi.rb +45 -0
  470. data/lib/ffi/io.rb +62 -0
  471. data/lib/ffi/library.rb +588 -0
  472. data/lib/ffi/managedstruct.rb +84 -0
  473. data/lib/ffi/memorypointer.rb +1 -0
  474. data/lib/ffi/platform.rb +175 -0
  475. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  476. data/lib/ffi/platform/aarch64-freebsd12/types.conf +128 -0
  477. data/lib/ffi/platform/aarch64-linux/types.conf +104 -0
  478. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  479. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  480. data/lib/ffi/platform/arm-linux/types.conf +104 -0
  481. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  482. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  483. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  484. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  485. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  486. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  487. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  488. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  489. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  490. data/lib/ffi/platform/i386-windows/types.conf +105 -0
  491. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  492. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  493. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  494. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  495. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  496. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  497. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  498. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  499. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  500. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  501. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  502. data/lib/ffi/platform/powerpc-linux/types.conf +100 -0
  503. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  504. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  505. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  506. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  507. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  508. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  509. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  510. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  511. data/lib/ffi/platform/x86_64-darwin/types.conf +126 -0
  512. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +148 -0
  513. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  514. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  515. data/lib/ffi/platform/x86_64-linux/types.conf +111 -0
  516. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  517. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  518. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  519. data/lib/ffi/platform/x86_64-windows/types.conf +120 -0
  520. data/lib/ffi/pointer.rb +160 -0
  521. data/lib/ffi/struct.rb +311 -0
  522. data/lib/ffi/struct_by_reference.rb +72 -0
  523. data/lib/ffi/struct_layout.rb +96 -0
  524. data/lib/ffi/struct_layout_builder.rb +227 -0
  525. data/lib/ffi/tools/const_generator.rb +230 -0
  526. data/lib/ffi/tools/generator.rb +105 -0
  527. data/lib/ffi/tools/generator_task.rb +32 -0
  528. data/lib/ffi/tools/struct_generator.rb +194 -0
  529. data/lib/ffi/tools/types_generator.rb +135 -0
  530. data/lib/ffi/types.rb +194 -0
  531. data/lib/ffi/union.rb +43 -0
  532. data/lib/ffi/variadic.rb +78 -0
  533. data/lib/ffi/version.rb +3 -0
  534. data/samples/getlogin.rb +8 -0
  535. data/samples/getpid.rb +8 -0
  536. data/samples/gettimeofday.rb +18 -0
  537. data/samples/hello.rb +7 -0
  538. data/samples/inotify.rb +60 -0
  539. data/samples/pty.rb +76 -0
  540. data/samples/qsort.rb +21 -0
  541. data/samples/sample_helper.rb +6 -0
  542. metadata +677 -0
@@ -0,0 +1 @@
1
+ timestamp
@@ -0,0 +1,119 @@
1
+ ## Process this file with automake to produce Makefile.in.
2
+
3
+ AUTOMAKE_OPTIONS = foreign dejagnu
4
+
5
+ EXTRA_DEJAGNU_SITE_CONFIG=../local.exp
6
+
7
+ CLEANFILES = *.exe core* *.log *.sum
8
+
9
+ EXTRA_DIST = lib/target-libpath.exp lib/libffi.exp lib/wrapper.exp \
10
+ libffi.call/strlen4.c libffi.call/cls_multi_sshort.c \
11
+ libffi.call/cls_align_longdouble_split2.c libffi.call/cls_1_1byte.c \
12
+ libffi.call/struct10.c libffi.call/cls_uint_va.c \
13
+ libffi.call/many_mixed.c libffi.call/float.c libffi.call/struct5.c \
14
+ libffi.call/return_fl3.c libffi.call/cls_3_1byte.c \
15
+ libffi.call/return_fl1.c libffi.call/cls_many_mixed_args.c \
16
+ libffi.call/cls_20byte1.c libffi.call/cls_pointer_stack.c \
17
+ libffi.call/cls_align_float.c libffi.call/call.exp \
18
+ libffi.call/pyobjc-tc.c libffi.call/float_va.c \
19
+ libffi.call/cls_5_1_byte.c libffi.call/cls_9byte1.c \
20
+ libffi.call/cls_align_uint32.c libffi.call/stret_medium.c \
21
+ libffi.call/cls_3byte1.c libffi.call/cls_align_uint64.c \
22
+ libffi.call/cls_longdouble_va.c libffi.call/cls_align_pointer.c \
23
+ libffi.call/cls_19byte.c libffi.call/cls_ushort.c \
24
+ libffi.call/cls_align_sint32.c libffi.call/struct8.c \
25
+ libffi.call/pr1172638.c libffi.call/cls_ulonglong.c \
26
+ libffi.call/cls_struct_va1.c libffi.call/cls_9byte2.c \
27
+ libffi.call/closure_fn5.c libffi.call/cls_5byte.c \
28
+ libffi.call/cls_3float.c libffi.call/return_sc.c \
29
+ libffi.call/cls_schar.c libffi.call/closure_fn4.c \
30
+ libffi.call/cls_uchar_va.c libffi.call/closure_fn0.c \
31
+ libffi.call/huge_struct.c libffi.call/va_struct1.c \
32
+ libffi.call/cls_ushort_va.c libffi.call/struct9.c libffi.call/va_1.c \
33
+ libffi.call/cls_64byte.c libffi.call/va_struct2.c \
34
+ libffi.call/cls_longdouble.c libffi.call/return_fl2.c \
35
+ libffi.call/cls_ulong_va.c libffi.call/cls_6_1_byte.c \
36
+ libffi.call/cls_align_uint16.c libffi.call/closure_fn2.c \
37
+ libffi.call/align_mixed.c libffi.call/unwindtest_ffi_call.cc \
38
+ libffi.call/cls_multi_ushortchar.c libffi.call/cls_8byte.c \
39
+ libffi.call/ffitest.h libffi.call/nested_struct8.c \
40
+ libffi.call/cls_pointer.c libffi.call/nested_struct2.c \
41
+ libffi.call/nested_struct.c libffi.call/struct4.c \
42
+ libffi.call/cls_multi_schar.c \
43
+ libffi.call/cls_align_longdouble_split.c libffi.call/cls_uchar.c \
44
+ libffi.call/return_ldl.c libffi.call/nested_struct9.c \
45
+ libffi.call/cls_float.c libffi.call/stret_medium2.c \
46
+ libffi.call/closure_loc_fn0.c libffi.call/float3.c \
47
+ libffi.call/cls_6byte.c libffi.call/return_sl.c \
48
+ libffi.call/closure_simple.c libffi.call/return_dbl1.c \
49
+ libffi.call/cls_align_double.c libffi.call/cls_multi_uchar.c \
50
+ libffi.call/err_bad_typedef.c libffi.call/cls_4_1byte.c \
51
+ libffi.call/closure_fn3.c libffi.call/return_ll1.c \
52
+ libffi.call/return_dbl2.c libffi.call/cls_align_sint64.c \
53
+ libffi.call/nested_struct1.c libffi.call/negint.c \
54
+ libffi.call/nested_struct3.c libffi.call/unwindtest.cc \
55
+ libffi.call/struct2.c libffi.call/struct3.c libffi.call/return_fl.c \
56
+ libffi.call/nested_struct5.c libffi.call/cls_multi_ushort.c \
57
+ libffi.call/nested_struct11.c libffi.call/cls_multi_sshortchar.c \
58
+ libffi.call/cls_align_longdouble.c libffi.call/cls_dbls_struct.c \
59
+ libffi.call/cls_many_mixed_float_double.c libffi.call/stret_large.c \
60
+ libffi.call/stret_large2.c libffi.call/cls_align_sint16.c \
61
+ libffi.call/cls_2byte.c libffi.call/offsets.c libffi.call/struct7.c \
62
+ libffi.call/nested_struct4.c libffi.call/problem1.c \
63
+ libffi.call/va_struct3.c libffi.call/testclosure.c \
64
+ libffi.call/float1.c libffi.call/nested_struct6.c \
65
+ libffi.call/cls_4byte.c libffi.call/cls_24byte.c \
66
+ libffi.call/uninitialized.c libffi.call/many2.c \
67
+ libffi.call/nested_struct10.c libffi.call/struct6.c \
68
+ libffi.call/strlen2.c libffi.call/float2.c libffi.call/cls_uint.c \
69
+ libffi.call/cls_12byte.c libffi.call/return_ul.c \
70
+ libffi.call/cls_sint.c libffi.call/cls_7_1_byte.c \
71
+ libffi.call/struct1.c libffi.call/cls_sshort.c \
72
+ libffi.call/cls_16byte.c libffi.call/strlen3.c \
73
+ libffi.call/nested_struct7.c libffi.call/cls_double_va.c \
74
+ libffi.call/return_dbl.c libffi.call/cls_3byte2.c \
75
+ libffi.call/float4.c libffi.call/cls_double.c libffi.call/many.c \
76
+ libffi.call/cls_7byte.c libffi.call/strlen.c \
77
+ libffi.call/closure_fn6.c libffi.call/return_uc.c \
78
+ libffi.call/closure_fn1.c libffi.call/cls_20byte.c \
79
+ libffi.call/cls_18byte.c libffi.call/err_bad_abi.c \
80
+ libffi.call/many_double.c libffi.call/return_ll.c \
81
+ libffi.call/promotion.c libffi.complex/complex_defs_longdouble.inc \
82
+ libffi.call/align_stdcall.c libffi.complex/cls_align_complex_float.c \
83
+ libffi.complex/cls_complex_va_float.c \
84
+ libffi.complex/cls_complex_struct_float.c \
85
+ libffi.complex/return_complex2_longdouble.c \
86
+ libffi.complex/cls_complex_float.c \
87
+ libffi.complex/return_complex_longdouble.c \
88
+ libffi.complex/return_complex2_float.c libffi.complex/cls_complex.inc \
89
+ libffi.complex/cls_complex_va_longdouble.c \
90
+ libffi.complex/return_complex_double.c \
91
+ libffi.complex/return_complex.inc libffi.complex/many_complex.inc \
92
+ libffi.complex/complex_float.c libffi.complex/cls_align_complex.inc \
93
+ libffi.complex/return_complex2_double.c \
94
+ libffi.complex/many_complex_float.c libffi.complex/ffitest.h \
95
+ libffi.complex/return_complex1_double.c \
96
+ libffi.complex/cls_complex_struct_longdouble.c \
97
+ libffi.complex/complex_defs_double.inc \
98
+ libffi.complex/cls_complex_va_double.c \
99
+ libffi.complex/many_complex_double.c \
100
+ libffi.complex/return_complex2.inc \
101
+ libffi.complex/return_complex1_float.c \
102
+ libffi.complex/complex_longdouble.c \
103
+ libffi.complex/complex_defs_float.inc \
104
+ libffi.complex/cls_complex_double.c \
105
+ libffi.complex/cls_align_complex_double.c \
106
+ libffi.complex/cls_align_complex_longdouble.c \
107
+ libffi.complex/complex_double.c libffi.complex/cls_complex_va.inc \
108
+ libffi.complex/many_complex_longdouble.c libffi.complex/complex.inc \
109
+ libffi.complex/return_complex1_longdouble.c \
110
+ libffi.complex/complex_int.c libffi.complex/cls_complex_longdouble.c \
111
+ libffi.complex/cls_complex_struct_double.c \
112
+ libffi.complex/return_complex1.inc libffi.complex/complex.exp \
113
+ libffi.complex/cls_complex_struct.inc \
114
+ libffi.complex/return_complex_float.c libffi.go/closure1.c \
115
+ libffi.go/aa-direct.c libffi.go/ffitest.h libffi.go/go.exp \
116
+ libffi.go/static-chain.h libffi.bhaible/bhaible.exp \
117
+ libffi.bhaible/test-call.c libffi.bhaible/alignof.h \
118
+ libffi.bhaible/testcases.c libffi.bhaible/test-callback.c \
119
+ libffi.bhaible/Makefile libffi.bhaible/README config/default.exp
@@ -0,0 +1 @@
1
+ load_lib "standard.exp"
@@ -0,0 +1,657 @@
1
+ # Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011, 2014, 2019 Free Software Foundation, Inc.
2
+
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with this program; see the file COPYING3. If not see
15
+ # <http://www.gnu.org/licenses/>.
16
+
17
+ proc load_gcc_lib { filename } {
18
+ global srcdir
19
+ load_file $srcdir/lib/$filename
20
+ }
21
+
22
+ load_lib dg.exp
23
+ load_lib libgloss.exp
24
+ load_gcc_lib target-libpath.exp
25
+ load_gcc_lib wrapper.exp
26
+
27
+ proc check_effective_target_gccbug { } {
28
+ global has_gccbug
29
+ return $has_gccbug
30
+ }
31
+
32
+ # Return 1 if the target matches the effective target 'arg', 0 otherwise.
33
+ # This can be used with any check_* proc that takes no argument and
34
+ # returns only 1 or 0. It could be used with check_* procs that take
35
+ # arguments with keywords that pass particular arguments.
36
+
37
+ proc is-effective-target { arg } {
38
+ global et_index
39
+ set selected 0
40
+ if { ![info exists et_index] } {
41
+ # Initialize the effective target index that is used in some
42
+ # check_effective_target_* procs.
43
+ set et_index 0
44
+ }
45
+ if { [info procs check_effective_target_${arg}] != [list] } {
46
+ set selected [check_effective_target_${arg}]
47
+ } else {
48
+ error "unknown effective target keyword `$arg'"
49
+ }
50
+ verbose "is-effective-target: $arg $selected" 2
51
+ return $selected
52
+ }
53
+
54
+ proc is-effective-target-keyword { arg } {
55
+ if { [info procs check_effective_target_${arg}] != [list] } {
56
+ return 1
57
+ } else {
58
+ return 0
59
+ }
60
+ }
61
+
62
+ # Intercept the call to the DejaGnu version of dg-process-target to
63
+ # support use of an effective-target keyword in place of a list of
64
+ # target triplets to xfail or skip a test.
65
+ #
66
+ # The argument to dg-process-target is the keyword "target" or "xfail"
67
+ # followed by a selector:
68
+ # target-triplet-1 ...
69
+ # effective-target-keyword
70
+ # selector-expression
71
+ #
72
+ # For a target list the result is "S" if the target is selected, "N" otherwise.
73
+ # For an xfail list the result is "F" if the target is affected, "P" otherwise.
74
+
75
+ # In contexts that allow either "target" or "xfail" the argument can be
76
+ # target selector1 xfail selector2
77
+ # which returns "N" if selector1 is not selected, otherwise the result of
78
+ # "xfail selector2".
79
+ #
80
+ # A selector expression appears within curly braces and uses a single logical
81
+ # operator: !, &&, or ||. An operand is another selector expression, an
82
+ # effective-target keyword, or a list of target triplets within quotes or
83
+ # curly braces.
84
+
85
+ if { [info procs saved-dg-process-target] == [list] } {
86
+ rename dg-process-target saved-dg-process-target
87
+
88
+ # Evaluate an operand within a selector expression.
89
+ proc selector_opd { op } {
90
+ set selector "target"
91
+ lappend selector $op
92
+ set answer [ expr { [dg-process-target $selector] == "S" } ]
93
+ verbose "selector_opd: `$op' $answer" 2
94
+ return $answer
95
+ }
96
+
97
+ # Evaluate a target triplet list within a selector expression.
98
+ # Unlike other operands, this needs to be expanded from a list to
99
+ # the same string as "target".
100
+ proc selector_list { op } {
101
+ set selector "target [join $op]"
102
+ set answer [ expr { [dg-process-target $selector] == "S" } ]
103
+ verbose "selector_list: `$op' $answer" 2
104
+ return $answer
105
+ }
106
+
107
+ # Evaluate a selector expression.
108
+ proc selector_expression { exp } {
109
+ if { [llength $exp] == 2 } {
110
+ if [string match "!" [lindex $exp 0]] {
111
+ set op1 [lindex $exp 1]
112
+ set answer [expr { ! [selector_opd $op1] }]
113
+ } else {
114
+ # Assume it's a list of target triplets.
115
+ set answer [selector_list $exp]
116
+ }
117
+ } elseif { [llength $exp] == 3 } {
118
+ set op1 [lindex $exp 0]
119
+ set opr [lindex $exp 1]
120
+ set op2 [lindex $exp 2]
121
+ if [string match "&&" $opr] {
122
+ set answer [expr { [selector_opd $op1] && [selector_opd $op2] }]
123
+ } elseif [string match "||" $opr] {
124
+ set answer [expr { [selector_opd $op1] || [selector_opd $op2] }]
125
+ } else {
126
+ # Assume it's a list of target triplets.
127
+ set answer [selector_list $exp]
128
+ }
129
+ } else {
130
+ # Assume it's a list of target triplets.
131
+ set answer [selector_list $exp]
132
+ }
133
+
134
+ verbose "selector_expression: `$exp' $answer" 2
135
+ return $answer
136
+ }
137
+
138
+ # Evaluate "target selector" or "xfail selector".
139
+
140
+ proc dg-process-target-1 { args } {
141
+ verbose "dg-process-target-1: `$args'" 2
142
+
143
+ # Extract the 'what' keyword from the argument list.
144
+ set selector [string trim [lindex $args 0]]
145
+ if [regexp "^xfail " $selector] {
146
+ set what "xfail"
147
+ } elseif [regexp "^target " $selector] {
148
+ set what "target"
149
+ } else {
150
+ error "syntax error in target selector \"$selector\""
151
+ }
152
+
153
+ # Extract the rest of the list, which might be a keyword.
154
+ regsub "^${what}" $selector "" rest
155
+ set rest [string trim $rest]
156
+
157
+ if [is-effective-target-keyword $rest] {
158
+ # The selector is an effective target keyword.
159
+ if [is-effective-target $rest] {
160
+ return [expr { $what == "xfail" ? "F" : "S" }]
161
+ } else {
162
+ return [expr { $what == "xfail" ? "P" : "N" }]
163
+ }
164
+ }
165
+
166
+ if [string match "{*}" $rest] {
167
+ if [selector_expression [lindex $rest 0]] {
168
+ return [expr { $what == "xfail" ? "F" : "S" }]
169
+ } else {
170
+ return [expr { $what == "xfail" ? "P" : "N" }]
171
+ }
172
+ }
173
+
174
+ # The selector is not an effective-target keyword, so process
175
+ # the list of target triplets.
176
+ return [saved-dg-process-target $selector]
177
+ }
178
+
179
+ # Intercept calls to the DejaGnu function. In addition to
180
+ # processing "target selector" or "xfail selector", handle
181
+ # "target selector1 xfail selector2".
182
+
183
+ proc dg-process-target { args } {
184
+ verbose "replacement dg-process-target: `$args'" 2
185
+
186
+ set selector [string trim [lindex $args 0]]
187
+
188
+ # If the argument list contains both 'target' and 'xfail',
189
+ # process 'target' and, if that succeeds, process 'xfail'.
190
+ if [regexp "^target .* xfail .*" $selector] {
191
+ set xfail_index [string first "xfail" $selector]
192
+ set xfail_selector [string range $selector $xfail_index end]
193
+ set target_selector [string range $selector 0 [expr $xfail_index-1]]
194
+ set target_selector [string trim $target_selector]
195
+ if { [dg-process-target-1 $target_selector] == "N" } {
196
+ return "N"
197
+ }
198
+ return [dg-process-target-1 $xfail_selector]
199
+
200
+ }
201
+ return [dg-process-target-1 $selector]
202
+ }
203
+ }
204
+
205
+ # Define libffi callbacks for dg.exp.
206
+
207
+ proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } {
208
+
209
+ # To get all \n in dg-output test strings to match printf output
210
+ # in a system that outputs it as \015\012 (i.e. not just \012), we
211
+ # need to change all \n into \r?\n. As there is no dejagnu flag
212
+ # or hook to do that, we simply change the text being tested.
213
+ # Unfortunately, we have to know that the variable is called
214
+ # dg-output-text and lives in the caller of libffi-dg-test, which
215
+ # is two calls up. Overriding proc dg-output would be longer and
216
+ # would necessarily have the same assumption.
217
+ upvar 2 dg-output-text output_match
218
+
219
+ if { [llength $output_match] > 1 } {
220
+ regsub -all "\n" [lindex $output_match 1] "\r?\n" x
221
+ set output_match [lreplace $output_match 1 1 $x]
222
+ }
223
+
224
+ # Set up the compiler flags, based on what we're going to do.
225
+
226
+ set options [list]
227
+ switch $do_what {
228
+ "compile" {
229
+ set compile_type "assembly"
230
+ set output_file "[file rootname [file tail $prog]].s"
231
+ }
232
+ "link" {
233
+ set compile_type "executable"
234
+ set output_file "[file rootname [file tail $prog]].exe"
235
+ # The following line is needed for targets like the i960 where
236
+ # the default output file is b.out. Sigh.
237
+ }
238
+ "run" {
239
+ set compile_type "executable"
240
+ # FIXME: "./" is to cope with "." not being in $PATH.
241
+ # Should this be handled elsewhere?
242
+ # YES.
243
+ set output_file "./[file rootname [file tail $prog]].exe"
244
+ # This is the only place where we care if an executable was
245
+ # created or not. If it was, dg.exp will try to run it.
246
+ remote_file build delete $output_file;
247
+ }
248
+ default {
249
+ perror "$do_what: not a valid dg-do keyword"
250
+ return ""
251
+ }
252
+ }
253
+
254
+ if { $extra_tool_flags != "" } {
255
+ lappend options "additional_flags=$extra_tool_flags"
256
+ }
257
+
258
+ set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options];
259
+
260
+
261
+ return [list $comp_output $output_file]
262
+ }
263
+
264
+
265
+ proc libffi-dg-test { prog do_what extra_tool_flags } {
266
+ return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags]
267
+ }
268
+
269
+ proc libffi-dg-prune { target_triplet text } {
270
+ # We get this with some qemu emulated systems (eg. ppc64le-linux-gnu)
271
+ regsub -all "(^|\n)\[^\n\]*unable to perform all requested operations" $text "" text
272
+ return $text
273
+ }
274
+
275
+ proc libffi-init { args } {
276
+ global gluefile wrap_flags;
277
+ global srcdir
278
+ global blddirffi
279
+ global objdir
280
+ global TOOL_OPTIONS
281
+ global tool
282
+ global libffi_include
283
+ global libffi_link_flags
284
+ global tool_root_dir
285
+ global ld_library_path
286
+ global compiler_vendor
287
+
288
+ if ![info exists blddirffi] {
289
+ set blddirffi [pwd]/..
290
+ }
291
+
292
+ verbose "libffi $blddirffi"
293
+
294
+ # Which compiler are we building with?
295
+ set tmp [grep "$blddirffi/config.log" "^ax_cv_c_compiler_vendor.*$"]
296
+ regexp -- {^[^=]*=(.*)$} $tmp nil compiler_vendor
297
+
298
+ if { [string match $compiler_vendor "gnu"] } {
299
+ set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
300
+ if {$gccdir != ""} {
301
+ set gccdir [file dirname $gccdir]
302
+ }
303
+ verbose "gccdir $gccdir"
304
+
305
+ set ld_library_path "."
306
+ append ld_library_path ":${gccdir}"
307
+
308
+ set compiler "${gccdir}/xgcc"
309
+ if { [is_remote host] == 0 && [which $compiler] != 0 } {
310
+ foreach i "[exec $compiler --print-multi-lib]" {
311
+ set mldir ""
312
+ regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
313
+ set mldir [string trimright $mldir "\;@"]
314
+ if { "$mldir" == "." } {
315
+ continue
316
+ }
317
+ if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
318
+ append ld_library_path ":${gccdir}/${mldir}"
319
+ }
320
+ }
321
+ }
322
+ }
323
+
324
+ # add the library path for libffi.
325
+ append ld_library_path ":${blddirffi}/.libs"
326
+
327
+ verbose "ld_library_path: $ld_library_path"
328
+
329
+ # Point to the Libffi headers in libffi.
330
+ set libffi_include "${blddirffi}/include"
331
+ verbose "libffi_include $libffi_include"
332
+
333
+ set libffi_dir "${blddirffi}/.libs"
334
+ verbose "libffi_dir $libffi_dir"
335
+ if { $libffi_dir != "" } {
336
+ set libffi_dir [file dirname ${libffi_dir}]
337
+ set libffi_link_flags "-L${libffi_dir}/.libs"
338
+ }
339
+
340
+ set_ld_library_path_env_vars
341
+ libffi_maybe_build_wrapper "${objdir}/testglue.o"
342
+ }
343
+
344
+ proc libffi_exit { } {
345
+ global gluefile;
346
+
347
+ if [info exists gluefile] {
348
+ file_on_build delete $gluefile;
349
+ unset gluefile;
350
+ }
351
+ }
352
+
353
+ proc libffi_target_compile { source dest type options } {
354
+ global gluefile wrap_flags;
355
+ global srcdir
356
+ global blddirffi
357
+ global TOOL_OPTIONS
358
+ global libffi_link_flags
359
+ global libffi_include
360
+ global target_triplet
361
+ global compiler_vendor
362
+
363
+ if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
364
+ lappend options "libs=${gluefile}"
365
+ lappend options "ldflags=$wrap_flags"
366
+ }
367
+
368
+ # TOOL_OPTIONS must come first, so that it doesn't override testcase
369
+ # specific options.
370
+ if [info exists TOOL_OPTIONS] {
371
+ lappend options "additional_flags=$TOOL_OPTIONS"
372
+ }
373
+
374
+ # search for ffi_mips.h in srcdir, too
375
+ lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.."
376
+ lappend options "additional_flags=${libffi_link_flags}"
377
+
378
+ # Darwin needs a stack execution allowed flag.
379
+
380
+ if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"]
381
+ || [istarget "*-*-darwin2*"] } {
382
+ lappend options "additional_flags=-Wl,-allow_stack_execute"
383
+ }
384
+
385
+ # If you're building the compiler with --prefix set to a place
386
+ # where it's not yet installed, then the linker won't be able to
387
+ # find the libgcc used by libffi.dylib. We could pass the
388
+ # -dylib_file option, but that's complicated, and it's much easier
389
+ # to just make the linker find libgcc using -L options.
390
+ if { [string match "*-*-darwin*" $target_triplet] } {
391
+ lappend options "libs= -shared-libgcc"
392
+ }
393
+
394
+ if { [string match "*-*-openbsd*" $target_triplet] } {
395
+ lappend options "libs= -lpthread"
396
+ }
397
+
398
+ lappend options "libs= -lffi"
399
+
400
+ if { [string match "aarch64*-*-linux*" $target_triplet] } {
401
+ lappend options "libs= -lpthread"
402
+ }
403
+
404
+ # this may be required for g++, but just confused clang.
405
+ if { [string match "*.cc" $source] } {
406
+ lappend options "c++"
407
+ }
408
+
409
+ if { [string match "arc*-*-linux*" $target_triplet] } {
410
+ lappend options "libs= -lpthread"
411
+ }
412
+
413
+ verbose "options: $options"
414
+ return [target_compile $source $dest $type $options]
415
+ }
416
+
417
+ # TEST should be a preprocessor condition. Returns true if it holds.
418
+ proc libffi_feature_test { test } {
419
+ set src "ffitest[pid].c"
420
+
421
+ set f [open $src "w"]
422
+ puts $f "#include <ffi.h>"
423
+ puts $f $test
424
+ puts $f "/* OK */"
425
+ puts $f "#else"
426
+ puts $f "# error Failed $test"
427
+ puts $f "#endif"
428
+ close $f
429
+
430
+ set lines [libffi_target_compile $src /dev/null assembly ""]
431
+ file delete $src
432
+
433
+ return [string match "" $lines]
434
+ }
435
+
436
+ # Utility routines.
437
+
438
+ #
439
+ # search_for -- looks for a string match in a file
440
+ #
441
+ proc search_for { file pattern } {
442
+ set fd [open $file r]
443
+ while { [gets $fd cur_line]>=0 } {
444
+ if [string match "*$pattern*" $cur_line] then {
445
+ close $fd
446
+ return 1
447
+ }
448
+ }
449
+ close $fd
450
+ return 0
451
+ }
452
+
453
+ # Modified dg-runtest that can cycle through a list of optimization options
454
+ # as c-torture does.
455
+ proc libffi-dg-runtest { testcases default-extra-flags } {
456
+ global runtests
457
+
458
+ foreach test $testcases {
459
+ # If we're only testing specific files and this isn't one of
460
+ # them, skip it.
461
+ if ![runtest_file_p $runtests $test] {
462
+ continue
463
+ }
464
+
465
+ # Look for a loop within the source code - if we don't find one,
466
+ # don't pass -funroll[-all]-loops.
467
+ global torture_with_loops torture_without_loops
468
+ if [expr [search_for $test "for*("]+[search_for $test "while*("]] {
469
+ set option_list $torture_with_loops
470
+ } else {
471
+ set option_list $torture_without_loops
472
+ }
473
+
474
+ set nshort [file tail [file dirname $test]]/[file tail $test]
475
+
476
+ foreach flags $option_list {
477
+ verbose "Testing $nshort, $flags" 1
478
+ dg-test $test $flags ${default-extra-flags}
479
+ }
480
+ }
481
+ }
482
+
483
+ proc run-many-tests { testcases extra_flags } {
484
+ global compiler_vendor
485
+ global has_gccbug
486
+ global env
487
+ switch $compiler_vendor {
488
+ "clang" {
489
+ set common "-W -Wall"
490
+ if [info exists env(LIBFFI_TEST_OPTIMIZATION)] {
491
+ set optimizations [ list $env(LIBFFI_TEST_OPTIMIZATION) ]
492
+ } else {
493
+ set optimizations { "-O0" "-O2" }
494
+ }
495
+ }
496
+ "gnu" {
497
+ set common "-W -Wall -Wno-psabi"
498
+ if [info exists env(LIBFFI_TEST_OPTIMIZATION)] {
499
+ set optimizations [ list $env(LIBFFI_TEST_OPTIMIZATION) ]
500
+ } else {
501
+ set optimizations { "-O0" "-O2" "-O2 -fomit-frame-pointer" }
502
+ }
503
+ }
504
+ default {
505
+ # Assume we are using the vendor compiler.
506
+ set common ""
507
+ if [info exists env(LIBFFI_TEST_OPTIMIZATION)] {
508
+ set optimizations [ list $env(LIBFFI_TEST_OPTIMIZATION) ]
509
+ } else {
510
+ set optimizations { "" }
511
+ }
512
+ }
513
+ }
514
+
515
+ info exists env(LD_LIBRARY_PATH)
516
+
517
+ set targetabis { "" }
518
+ if [string match $compiler_vendor "gnu"] {
519
+ if [libffi_feature_test "#ifdef __i386__"] {
520
+ set targetabis {
521
+ ""
522
+ "-DABI_NUM=FFI_STDCALL -DABI_ATTR=__STDCALL__"
523
+ "-DABI_NUM=FFI_THISCALL -DABI_ATTR=__THISCALL__"
524
+ "-DABI_NUM=FFI_FASTCALL -DABI_ATTR=__FASTCALL__"
525
+ }
526
+ } elseif { [istarget "x86_64-*-*"] \
527
+ && [libffi_feature_test "#if !defined __ILP32__ \
528
+ && !defined __i386__"] } {
529
+ set targetabis {
530
+ ""
531
+ "-DABI_NUM=FFI_GNUW64 -DABI_ATTR=__MSABI__"
532
+ }
533
+ }
534
+ }
535
+
536
+ set common [ concat $common $extra_flags ]
537
+ foreach test $testcases {
538
+ set testname [file tail $test]
539
+ if [search_for $test "ABI_NUM"] {
540
+ set abis $targetabis
541
+ } else {
542
+ set abis { "" }
543
+ }
544
+ foreach opt $optimizations {
545
+ foreach abi $abis {
546
+ set options [concat $common $opt $abi]
547
+ set has_gccbug false;
548
+ if { [string match $compiler_vendor "gnu"] \
549
+ && [string match "*MSABI*" $abi] \
550
+ && ( ( [string match "*DGTEST=57 *" $common] \
551
+ && [string match "*call.c*" $testname] ) \
552
+ || ( [string match "*DGTEST=54 *" $common] \
553
+ && [string match "*callback*" $testname] ) \
554
+ || [string match "*DGTEST=55 *" $common] \
555
+ || [string match "*DGTEST=56 *" $common] ) } then {
556
+ set has_gccbug true;
557
+ }
558
+ verbose "Testing $testname, $options" 1
559
+ dg-test $test $options ""
560
+ }
561
+ }
562
+ }
563
+ }
564
+
565
+ # Like check_conditional_xfail, but callable from a dg test.
566
+
567
+ proc dg-xfail-if { args } {
568
+ set args [lreplace $args 0 0]
569
+ set selector "target [join [lindex $args 1]]"
570
+ if { [dg-process-target $selector] == "S" } {
571
+ global compiler_conditional_xfail_data
572
+ set compiler_conditional_xfail_data $args
573
+ }
574
+ }
575
+
576
+ proc check-flags { args } {
577
+
578
+ # The args are within another list; pull them out.
579
+ set args [lindex $args 0]
580
+
581
+ # The next two arguments are optional. If they were not specified,
582
+ # use the defaults.
583
+ if { [llength $args] == 2 } {
584
+ lappend $args [list "*"]
585
+ }
586
+ if { [llength $args] == 3 } {
587
+ lappend $args [list ""]
588
+ }
589
+
590
+ # If the option strings are the defaults, or the same as the
591
+ # defaults, there is no need to call check_conditional_xfail to
592
+ # compare them to the actual options.
593
+ if { [string compare [lindex $args 2] "*"] == 0
594
+ && [string compare [lindex $args 3] "" ] == 0 } {
595
+ set result 1
596
+ } else {
597
+ # The target list might be an effective-target keyword, so replace
598
+ # the original list with "*-*-*", since we already know it matches.
599
+ set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
600
+ }
601
+
602
+ return $result
603
+ }
604
+
605
+ proc dg-skip-if { args } {
606
+ # Verify the number of arguments. The last two are optional.
607
+ set args [lreplace $args 0 0]
608
+ if { [llength $args] < 2 || [llength $args] > 4 } {
609
+ error "dg-skip-if 2: need 2, 3, or 4 arguments"
610
+ }
611
+
612
+ # Don't bother if we're already skipping the test.
613
+ upvar dg-do-what dg-do-what
614
+ if { [lindex ${dg-do-what} 1] == "N" } {
615
+ return
616
+ }
617
+
618
+ set selector [list target [lindex $args 1]]
619
+ if { [dg-process-target $selector] == "S" } {
620
+ if [check-flags $args] {
621
+ upvar dg-do-what dg-do-what
622
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
623
+ }
624
+ }
625
+ }
626
+
627
+ # We need to make sure that additional_files and additional_sources
628
+ # are both cleared out after every test. It is not enough to clear
629
+ # them out *before* the next test run because gcc-target-compile gets
630
+ # run directly from some .exp files (outside of any test). (Those
631
+ # uses should eventually be eliminated.)
632
+
633
+ # Because the DG framework doesn't provide a hook that is run at the
634
+ # end of a test, we must replace dg-test with a wrapper.
635
+
636
+ if { [info procs saved-dg-test] == [list] } {
637
+ rename dg-test saved-dg-test
638
+
639
+ proc dg-test { args } {
640
+ global additional_files
641
+ global additional_sources
642
+ global errorInfo
643
+
644
+ if { [ catch { eval saved-dg-test $args } errmsg ] } {
645
+ set saved_info $errorInfo
646
+ set additional_files ""
647
+ set additional_sources ""
648
+ error $errmsg $saved_info
649
+ }
650
+ set additional_files ""
651
+ set additional_sources ""
652
+ }
653
+ }
654
+
655
+ # Local Variables:
656
+ # tcl-indent-level:4
657
+ # End: