ffi 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (279) hide show
  1. data/LICENSE +51 -0
  2. data/README +0 -0
  3. data/Rakefile +90 -0
  4. data/ext/AbstractMemory.c +254 -0
  5. data/ext/AbstractMemory.h +36 -0
  6. data/ext/Buffer.c +94 -0
  7. data/ext/Callback.c +240 -0
  8. data/ext/Callback.h +47 -0
  9. data/ext/Invoker.c +269 -0
  10. data/ext/MemoryPointer.c +164 -0
  11. data/ext/MemoryPointer.h +25 -0
  12. data/ext/Platform.c +41 -0
  13. data/ext/Platform.h +23 -0
  14. data/ext/Types.c +65 -0
  15. data/ext/Types.h +51 -0
  16. data/ext/extconf.rb +13 -0
  17. data/ext/ffi.c +54 -0
  18. data/ext/ffi.mk +24 -0
  19. data/ext/libffi.darwin.mk +44 -0
  20. data/ext/libffi.mk +10 -0
  21. data/ext/libffi/ChangeLog +3243 -0
  22. data/ext/libffi/ChangeLog.libffi +347 -0
  23. data/ext/libffi/ChangeLog.libgcj +40 -0
  24. data/ext/libffi/ChangeLog.v1 +764 -0
  25. data/ext/libffi/LICENSE +21 -0
  26. data/ext/libffi/Makefile.am +177 -0
  27. data/ext/libffi/Makefile.in +1640 -0
  28. data/ext/libffi/README +328 -0
  29. data/ext/libffi/TODO +1 -0
  30. data/ext/libffi/acinclude.m4 +92 -0
  31. data/ext/libffi/aclocal.m4 +7516 -0
  32. data/ext/libffi/compile +142 -0
  33. data/ext/libffi/config.guess +1516 -0
  34. data/ext/libffi/config.sub +1626 -0
  35. data/ext/libffi/configure +24414 -0
  36. data/ext/libffi/configure.ac +365 -0
  37. data/ext/libffi/configure.host +11 -0
  38. data/ext/libffi/depcomp +584 -0
  39. data/ext/libffi/doc/libffi.info +533 -0
  40. data/ext/libffi/doc/libffi.texi +541 -0
  41. data/ext/libffi/doc/stamp-vti +4 -0
  42. data/ext/libffi/doc/version.texi +4 -0
  43. data/ext/libffi/fficonfig.h.in +160 -0
  44. data/ext/libffi/include/Makefile.am +9 -0
  45. data/ext/libffi/include/Makefile.in +422 -0
  46. data/ext/libffi/include/ffi.h.in +393 -0
  47. data/ext/libffi/include/ffi_common.h +98 -0
  48. data/ext/libffi/install-sh +323 -0
  49. data/ext/libffi/libffi.pc.in +10 -0
  50. data/ext/libffi/libtool-version +29 -0
  51. data/ext/libffi/ltcf-c.sh +861 -0
  52. data/ext/libffi/ltcf-cxx.sh +1069 -0
  53. data/ext/libffi/ltcf-gcj.sh +700 -0
  54. data/ext/libffi/ltconfig +2862 -0
  55. data/ext/libffi/ltmain.sh +6930 -0
  56. data/ext/libffi/man/Makefile.am +8 -0
  57. data/ext/libffi/man/Makefile.in +395 -0
  58. data/ext/libffi/man/ffi.3 +31 -0
  59. data/ext/libffi/man/ffi_call.3 +103 -0
  60. data/ext/libffi/man/ffi_prep_cif.3 +66 -0
  61. data/ext/libffi/mdate-sh +201 -0
  62. data/ext/libffi/missing +353 -0
  63. data/ext/libffi/mkinstalldirs +158 -0
  64. data/ext/libffi/src/alpha/ffi.c +284 -0
  65. data/ext/libffi/src/alpha/ffitarget.h +48 -0
  66. data/ext/libffi/src/alpha/osf.S +366 -0
  67. data/ext/libffi/src/arm/ffi.c +309 -0
  68. data/ext/libffi/src/arm/ffitarget.h +49 -0
  69. data/ext/libffi/src/arm/sysv.S +299 -0
  70. data/ext/libffi/src/closures.c +596 -0
  71. data/ext/libffi/src/cris/ffi.c +383 -0
  72. data/ext/libffi/src/cris/ffitarget.h +51 -0
  73. data/ext/libffi/src/cris/sysv.S +215 -0
  74. data/ext/libffi/src/debug.c +59 -0
  75. data/ext/libffi/src/dlmalloc.c +5099 -0
  76. data/ext/libffi/src/frv/eabi.S +128 -0
  77. data/ext/libffi/src/frv/ffi.c +292 -0
  78. data/ext/libffi/src/frv/ffitarget.h +61 -0
  79. data/ext/libffi/src/ia64/ffi.c +580 -0
  80. data/ext/libffi/src/ia64/ffitarget.h +50 -0
  81. data/ext/libffi/src/ia64/ia64_flags.h +40 -0
  82. data/ext/libffi/src/ia64/unix.S +560 -0
  83. data/ext/libffi/src/java_raw_api.c +359 -0
  84. data/ext/libffi/src/m32r/ffi.c +232 -0
  85. data/ext/libffi/src/m32r/ffitarget.h +48 -0
  86. data/ext/libffi/src/m32r/sysv.S +121 -0
  87. data/ext/libffi/src/m68k/ffi.c +278 -0
  88. data/ext/libffi/src/m68k/ffitarget.h +49 -0
  89. data/ext/libffi/src/m68k/sysv.S +234 -0
  90. data/ext/libffi/src/mips/ffi.c +926 -0
  91. data/ext/libffi/src/mips/ffitarget.h +202 -0
  92. data/ext/libffi/src/mips/n32.S +534 -0
  93. data/ext/libffi/src/mips/o32.S +381 -0
  94. data/ext/libffi/src/pa/ffi.c +709 -0
  95. data/ext/libffi/src/pa/ffitarget.h +77 -0
  96. data/ext/libffi/src/pa/hpux32.S +368 -0
  97. data/ext/libffi/src/pa/linux.S +357 -0
  98. data/ext/libffi/src/powerpc/aix.S +225 -0
  99. data/ext/libffi/src/powerpc/aix_closure.S +247 -0
  100. data/ext/libffi/src/powerpc/asm.h +125 -0
  101. data/ext/libffi/src/powerpc/darwin.S +245 -0
  102. data/ext/libffi/src/powerpc/darwin_closure.S +317 -0
  103. data/ext/libffi/src/powerpc/ffi.c +1429 -0
  104. data/ext/libffi/src/powerpc/ffi_darwin.c +800 -0
  105. data/ext/libffi/src/powerpc/ffitarget.h +118 -0
  106. data/ext/libffi/src/powerpc/linux64.S +187 -0
  107. data/ext/libffi/src/powerpc/linux64_closure.S +236 -0
  108. data/ext/libffi/src/powerpc/ppc_closure.S +327 -0
  109. data/ext/libffi/src/powerpc/sysv.S +230 -0
  110. data/ext/libffi/src/prep_cif.c +174 -0
  111. data/ext/libffi/src/raw_api.c +254 -0
  112. data/ext/libffi/src/s390/ffi.c +780 -0
  113. data/ext/libffi/src/s390/ffitarget.h +60 -0
  114. data/ext/libffi/src/s390/sysv.S +434 -0
  115. data/ext/libffi/src/sh/ffi.c +716 -0
  116. data/ext/libffi/src/sh/ffitarget.h +49 -0
  117. data/ext/libffi/src/sh/sysv.S +850 -0
  118. data/ext/libffi/src/sh64/ffi.c +453 -0
  119. data/ext/libffi/src/sh64/ffitarget.h +53 -0
  120. data/ext/libffi/src/sh64/sysv.S +530 -0
  121. data/ext/libffi/src/sparc/ffi.c +610 -0
  122. data/ext/libffi/src/sparc/ffitarget.h +66 -0
  123. data/ext/libffi/src/sparc/v8.S +272 -0
  124. data/ext/libffi/src/sparc/v9.S +307 -0
  125. data/ext/libffi/src/types.c +77 -0
  126. data/ext/libffi/src/x86/darwin.S +443 -0
  127. data/ext/libffi/src/x86/darwin64.S +416 -0
  128. data/ext/libffi/src/x86/ffi.c +475 -0
  129. data/ext/libffi/src/x86/ffi64.c +572 -0
  130. data/ext/libffi/src/x86/ffitarget.h +90 -0
  131. data/ext/libffi/src/x86/freebsd.S +458 -0
  132. data/ext/libffi/src/x86/sysv.S +437 -0
  133. data/ext/libffi/src/x86/unix64.S +418 -0
  134. data/ext/libffi/src/x86/win32.S +391 -0
  135. data/ext/libffi/testsuite/Makefile.am +71 -0
  136. data/ext/libffi/testsuite/Makefile.in +447 -0
  137. data/ext/libffi/testsuite/config/default.exp +1 -0
  138. data/ext/libffi/testsuite/lib/libffi-dg.exp +289 -0
  139. data/ext/libffi/testsuite/lib/target-libpath.exp +263 -0
  140. data/ext/libffi/testsuite/lib/wrapper.exp +45 -0
  141. data/ext/libffi/testsuite/libffi.call/call.exp +36 -0
  142. data/ext/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  143. data/ext/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  144. data/ext/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  145. data/ext/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  146. data/ext/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  147. data/ext/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  148. data/ext/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  149. data/ext/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  150. data/ext/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  151. data/ext/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  152. data/ext/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  153. data/ext/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  154. data/ext/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  155. data/ext/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  156. data/ext/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  157. data/ext/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  158. data/ext/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  159. data/ext/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  160. data/ext/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  161. data/ext/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  162. data/ext/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  163. data/ext/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  164. data/ext/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  165. data/ext/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  166. data/ext/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  167. data/ext/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  168. data/ext/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  169. data/ext/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  170. data/ext/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  171. data/ext/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  172. data/ext/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  173. data/ext/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  174. data/ext/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  175. data/ext/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  176. data/ext/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  177. data/ext/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  178. data/ext/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  179. data/ext/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  180. data/ext/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  181. data/ext/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  182. data/ext/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  183. data/ext/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  184. data/ext/libffi/testsuite/libffi.call/cls_double.c +51 -0
  185. data/ext/libffi/testsuite/libffi.call/cls_float.c +51 -0
  186. data/ext/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  187. data/ext/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  188. data/ext/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  189. data/ext/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  190. data/ext/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  191. data/ext/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  192. data/ext/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  193. data/ext/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  194. data/ext/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  195. data/ext/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  196. data/ext/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  197. data/ext/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  198. data/ext/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  199. data/ext/libffi/testsuite/libffi.call/ffitest.h +86 -0
  200. data/ext/libffi/testsuite/libffi.call/float.c +59 -0
  201. data/ext/libffi/testsuite/libffi.call/float1.c +58 -0
  202. data/ext/libffi/testsuite/libffi.call/float2.c +57 -0
  203. data/ext/libffi/testsuite/libffi.call/float3.c +72 -0
  204. data/ext/libffi/testsuite/libffi.call/float4.c +62 -0
  205. data/ext/libffi/testsuite/libffi.call/many.c +69 -0
  206. data/ext/libffi/testsuite/libffi.call/many_win32.c +63 -0
  207. data/ext/libffi/testsuite/libffi.call/negint.c +53 -0
  208. data/ext/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  209. data/ext/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  210. data/ext/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  211. data/ext/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  212. data/ext/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  213. data/ext/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  214. data/ext/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  215. data/ext/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  216. data/ext/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  217. data/ext/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  218. data/ext/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  219. data/ext/libffi/testsuite/libffi.call/problem1.c +98 -0
  220. data/ext/libffi/testsuite/libffi.call/promotion.c +59 -0
  221. data/ext/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  222. data/ext/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  223. data/ext/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  224. data/ext/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  225. data/ext/libffi/testsuite/libffi.call/return_fl.c +35 -0
  226. data/ext/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  227. data/ext/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  228. data/ext/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  229. data/ext/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  230. data/ext/libffi/testsuite/libffi.call/return_ll.c +41 -0
  231. data/ext/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  232. data/ext/libffi/testsuite/libffi.call/return_sc.c +36 -0
  233. data/ext/libffi/testsuite/libffi.call/return_sl.c +38 -0
  234. data/ext/libffi/testsuite/libffi.call/return_uc.c +38 -0
  235. data/ext/libffi/testsuite/libffi.call/return_ul.c +38 -0
  236. data/ext/libffi/testsuite/libffi.call/strlen.c +44 -0
  237. data/ext/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  238. data/ext/libffi/testsuite/libffi.call/struct1.c +65 -0
  239. data/ext/libffi/testsuite/libffi.call/struct2.c +67 -0
  240. data/ext/libffi/testsuite/libffi.call/struct3.c +59 -0
  241. data/ext/libffi/testsuite/libffi.call/struct4.c +63 -0
  242. data/ext/libffi/testsuite/libffi.call/struct5.c +65 -0
  243. data/ext/libffi/testsuite/libffi.call/struct6.c +64 -0
  244. data/ext/libffi/testsuite/libffi.call/struct7.c +74 -0
  245. data/ext/libffi/testsuite/libffi.call/struct8.c +80 -0
  246. data/ext/libffi/testsuite/libffi.call/struct9.c +67 -0
  247. data/ext/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  248. data/ext/libffi/testsuite/libffi.special/special.exp +38 -0
  249. data/ext/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  250. data/ext/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  251. data/ext/libffi/texinfo.tex +7482 -0
  252. data/ext/rbffi.h +32 -0
  253. data/lib/ffi.rb +2 -0
  254. data/lib/ffi/buffer.rb +25 -0
  255. data/lib/ffi/callback.rb +10 -0
  256. data/lib/ffi/ffi.rb +259 -0
  257. data/lib/ffi/memorypointer.rb +169 -0
  258. data/lib/ffi/platform.rb +75 -0
  259. data/lib/ffi/struct.rb +263 -0
  260. data/nbproject/Makefile-Default.mk +54 -0
  261. data/nbproject/Makefile-impl.mk +123 -0
  262. data/nbproject/configurations.xml +169 -0
  263. data/nbproject/private/configurations.xml +22 -0
  264. data/nbproject/private/private.xml +7 -0
  265. data/nbproject/project.properties +0 -0
  266. data/nbproject/project.xml +11 -0
  267. data/samples/getlogin.rb +7 -0
  268. data/samples/getpid.rb +7 -0
  269. data/samples/gettimeofday.rb +13 -0
  270. data/samples/hello.rb +7 -0
  271. data/samples/qsort.rb +20 -0
  272. data/specs/buffer_spec.rb +141 -0
  273. data/specs/callback_spec.rb +31 -0
  274. data/specs/rbx/attach_function_spec.rb +26 -0
  275. data/specs/rbx/memory_pointer_spec.rb +108 -0
  276. data/specs/rbx/spec_helper.rb +1 -0
  277. data/specs/rbx/struct_spec.rb +13 -0
  278. data/specs/spec_helper.rb +2 -0
  279. metadata +359 -0
@@ -0,0 +1,100 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure alignment of uint64.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <hos@tamanegi.org> 20031203 */
6
+
7
+
8
+ /* { dg-do run } */
9
+ #include "ffitest.h"
10
+
11
+ typedef struct cls_struct_align {
12
+ unsigned char a;
13
+ unsigned long long b;
14
+ unsigned char c;
15
+ } cls_struct_align;
16
+
17
+ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
18
+ struct cls_struct_align a2)
19
+ {
20
+ struct cls_struct_align result;
21
+
22
+ result.a = a1.a + a2.a;
23
+ result.b = a1.b + a2.b;
24
+ result.c = a1.c + a2.c;
25
+
26
+ printf("%d %lld %d %d %lld %d: %d %lld %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
27
+
28
+ return result;
29
+ }
30
+
31
+ static void
32
+ cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
33
+ void* userdata __UNUSED__)
34
+ {
35
+
36
+ struct cls_struct_align a1, a2;
37
+
38
+ a1 = *(struct cls_struct_align*)(args[0]);
39
+ a2 = *(struct cls_struct_align*)(args[1]);
40
+
41
+ *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
42
+ }
43
+
44
+ int main (void)
45
+ {
46
+ ffi_cif cif;
47
+ #ifndef USING_MMAP
48
+ static ffi_closure cl;
49
+ #endif
50
+ ffi_closure *pcl;
51
+ void* args_dbl[5];
52
+ ffi_type* cls_struct_fields[4];
53
+ ffi_type cls_struct_type;
54
+ ffi_type* dbl_arg_types[5];
55
+
56
+ #ifdef USING_MMAP
57
+ pcl = allocate_mmap (sizeof(ffi_closure));
58
+ #else
59
+ pcl = &cl;
60
+ #endif
61
+
62
+ cls_struct_type.size = 0;
63
+ cls_struct_type.alignment = 0;
64
+ cls_struct_type.type = FFI_TYPE_STRUCT;
65
+ cls_struct_type.elements = cls_struct_fields;
66
+
67
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
68
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
69
+ struct cls_struct_align res_dbl;
70
+
71
+ cls_struct_fields[0] = &ffi_type_uchar;
72
+ cls_struct_fields[1] = &ffi_type_uint64;
73
+ cls_struct_fields[2] = &ffi_type_uchar;
74
+ cls_struct_fields[3] = NULL;
75
+
76
+ dbl_arg_types[0] = &cls_struct_type;
77
+ dbl_arg_types[1] = &cls_struct_type;
78
+ dbl_arg_types[2] = NULL;
79
+
80
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
81
+ dbl_arg_types) == FFI_OK);
82
+
83
+ args_dbl[0] = &g_dbl;
84
+ args_dbl[1] = &f_dbl;
85
+ args_dbl[2] = NULL;
86
+
87
+ ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
88
+ /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
89
+ printf("res: %d %lld %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
90
+ /* { dg-output "\nres: 13 14271 140" } */
91
+
92
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
93
+
94
+ res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
95
+ /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
96
+ printf("res: %d %lld %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
97
+ /* { dg-output "\nres: 13 14271 140" } */
98
+
99
+ exit(0);
100
+ }
@@ -0,0 +1,51 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value double.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20030828 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(double *)resp = *(double *)args[0];
14
+
15
+ printf("%f: %f\n",*(double *)args[0],
16
+ *(double *)resp);
17
+ }
18
+ typedef double (*cls_ret_double)(double);
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ #ifndef USING_MMAP
24
+ static ffi_closure cl;
25
+ #endif
26
+ ffi_closure *pcl;
27
+ ffi_type * cl_arg_types[2];
28
+ double res;
29
+
30
+ #ifdef USING_MMAP
31
+ pcl = allocate_mmap (sizeof(ffi_closure));
32
+ #else
33
+ pcl = &cl;
34
+ #endif
35
+
36
+ cl_arg_types[0] = &ffi_type_double;
37
+ cl_arg_types[1] = NULL;
38
+
39
+ /* Initialize the cif */
40
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
41
+ &ffi_type_double, cl_arg_types) == FFI_OK);
42
+
43
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_double_fn, NULL) == FFI_OK);
44
+
45
+ res = (*((cls_ret_double)pcl))(21474.789);
46
+ /* { dg-output "21474.789000: 21474.789000" } */
47
+ printf("res: %.6f\n", res);
48
+ /* { dg-output "\nres: 21474.789000" } */
49
+
50
+ exit(0);
51
+ }
@@ -0,0 +1,51 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value float.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20030828 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(float *)resp = *(float *)args[0];
14
+
15
+ printf("%g: %g\n",*(float *)args[0],
16
+ *(float *)resp);
17
+ }
18
+
19
+ typedef float (*cls_ret_float)(float);
20
+
21
+ int main (void)
22
+ {
23
+ ffi_cif cif;
24
+ #ifndef USING_MMAP
25
+ static ffi_closure cl;
26
+ #endif
27
+ ffi_closure *pcl;
28
+ ffi_type * cl_arg_types[2];
29
+ float res;
30
+
31
+ #ifdef USING_MMAP
32
+ pcl = allocate_mmap (sizeof(ffi_closure));
33
+ #else
34
+ pcl = &cl;
35
+ #endif
36
+
37
+
38
+ cl_arg_types[0] = &ffi_type_float;
39
+ cl_arg_types[1] = NULL;
40
+
41
+ /* Initialize the cif */
42
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
43
+ &ffi_type_float, cl_arg_types) == FFI_OK);
44
+
45
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_float_fn, NULL) == FFI_OK);
46
+ res = ((((cls_ret_float)pcl)(-2122.12)));
47
+ /* { dg-output "\\-2122.12: \\-2122.12" } */
48
+ printf("res: %.6f\n", res);
49
+ /* { dg-output "\nres: \-2122.120117" } */
50
+ exit(0);
51
+ }
@@ -0,0 +1,82 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check passing of multiple signed char values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <hos@tamanegi.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ signed char test_func_fn(signed char a1, signed char a2)
11
+ {
12
+ signed char result;
13
+
14
+ result = a1 + a2;
15
+
16
+ printf("%d %d: %d\n", a1, a2, result);
17
+
18
+ return result;
19
+
20
+ }
21
+
22
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
23
+ void *data __UNUSED__)
24
+ {
25
+ signed char a1, a2;
26
+
27
+ a1 = *(signed char *)avals[0];
28
+ a2 = *(signed char *)avals[1];
29
+
30
+ *(ffi_arg *)rval = test_func_fn(a1, a2);
31
+
32
+ }
33
+
34
+ typedef signed char (*test_type)(signed char, signed char);
35
+
36
+ int main (void)
37
+ {
38
+ ffi_cif cif;
39
+ #ifndef USING_MMAP
40
+ static ffi_closure cl;
41
+ #endif
42
+ ffi_closure *pcl;
43
+ void * args_dbl[3];
44
+ ffi_type * cl_arg_types[3];
45
+ ffi_arg res_call;
46
+ signed char a, b, res_closure;
47
+
48
+ #ifdef USING_MMAP
49
+ pcl = allocate_mmap (sizeof(ffi_closure));
50
+ #else
51
+ pcl = &cl;
52
+ #endif
53
+
54
+ a = 2;
55
+ b = 125;
56
+
57
+ args_dbl[0] = &a;
58
+ args_dbl[1] = &b;
59
+ args_dbl[2] = NULL;
60
+
61
+ cl_arg_types[0] = &ffi_type_schar;
62
+ cl_arg_types[1] = &ffi_type_schar;
63
+ cl_arg_types[2] = NULL;
64
+
65
+ /* Initialize the cif */
66
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
67
+ &ffi_type_schar, cl_arg_types) == FFI_OK);
68
+
69
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
70
+ /* { dg-output "2 125: 127" } */
71
+ printf("res: %d\n", (signed char)res_call);
72
+ /* { dg-output "\nres: 127" } */
73
+
74
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
75
+
76
+ res_closure = (*((test_type)pcl))(2, 125);
77
+ /* { dg-output "\n2 125: 127" } */
78
+ printf("res: %d\n", res_closure);
79
+ /* { dg-output "\nres: 127" } */
80
+
81
+ exit(0);
82
+ }
@@ -0,0 +1,82 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check passing of multiple signed short values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <andreast@gcc.gnu.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ signed short test_func_fn(signed short a1, signed short a2)
11
+ {
12
+ signed short result;
13
+
14
+ result = a1 + a2;
15
+
16
+ printf("%d %d: %d\n", a1, a2, result);
17
+
18
+ return result;
19
+
20
+ }
21
+
22
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
23
+ void *data __UNUSED__)
24
+ {
25
+ signed short a1, a2;
26
+
27
+ a1 = *(signed short *)avals[0];
28
+ a2 = *(signed short *)avals[1];
29
+
30
+ *(ffi_arg *)rval = test_func_fn(a1, a2);
31
+
32
+ }
33
+
34
+ typedef signed short (*test_type)(signed short, signed short);
35
+
36
+ int main (void)
37
+ {
38
+ ffi_cif cif;
39
+ #ifndef USING_MMAP
40
+ static ffi_closure cl;
41
+ #endif
42
+ ffi_closure *pcl;
43
+ void * args_dbl[3];
44
+ ffi_type * cl_arg_types[3];
45
+ ffi_arg res_call;
46
+ unsigned short a, b, res_closure;
47
+
48
+ #ifdef USING_MMAP
49
+ pcl = allocate_mmap (sizeof(ffi_closure));
50
+ #else
51
+ pcl = &cl;
52
+ #endif
53
+
54
+ a = 2;
55
+ b = 32765;
56
+
57
+ args_dbl[0] = &a;
58
+ args_dbl[1] = &b;
59
+ args_dbl[2] = NULL;
60
+
61
+ cl_arg_types[0] = &ffi_type_sshort;
62
+ cl_arg_types[1] = &ffi_type_sshort;
63
+ cl_arg_types[2] = NULL;
64
+
65
+ /* Initialize the cif */
66
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
67
+ &ffi_type_sshort, cl_arg_types) == FFI_OK);
68
+
69
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
70
+ /* { dg-output "2 32765: 32767" } */
71
+ printf("res: %d\n", (unsigned short)res_call);
72
+ /* { dg-output "\nres: 32767" } */
73
+
74
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
75
+
76
+ res_closure = (*((test_type)pcl))(2, 32765);
77
+ /* { dg-output "\n2 32765: 32767" } */
78
+ printf("res: %d\n", res_closure);
79
+ /* { dg-output "\nres: 32767" } */
80
+
81
+ exit(0);
82
+ }
@@ -0,0 +1,94 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check passing of multiple signed short/char values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <andreast@gcc.gnu.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ signed short test_func_fn(signed char a1, signed short a2,
11
+ signed char a3, signed short a4)
12
+ {
13
+ signed short result;
14
+
15
+ result = a1 + a2 + a3 + a4;
16
+
17
+ printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result);
18
+
19
+ return result;
20
+
21
+ }
22
+
23
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
24
+ void *data __UNUSED__)
25
+ {
26
+ signed char a1, a3;
27
+ signed short a2, a4;
28
+
29
+ a1 = *(signed char *)avals[0];
30
+ a2 = *(signed short *)avals[1];
31
+ a3 = *(signed char *)avals[2];
32
+ a4 = *(signed short *)avals[3];
33
+
34
+ *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
35
+
36
+ }
37
+
38
+ typedef signed short (*test_type)(signed char, signed short,
39
+ signed char, signed short);
40
+
41
+ int main (void)
42
+ {
43
+ ffi_cif cif;
44
+ #ifndef USING_MMAP
45
+ static ffi_closure cl;
46
+ #endif
47
+ ffi_closure *pcl;
48
+ void * args_dbl[5];
49
+ ffi_type * cl_arg_types[5];
50
+ ffi_arg res_call;
51
+ signed char a, c;
52
+ signed short b, d, res_closure;
53
+
54
+ #ifdef USING_MMAP
55
+ pcl = allocate_mmap (sizeof(ffi_closure));
56
+ #else
57
+ pcl = &cl;
58
+ #endif
59
+
60
+ a = 1;
61
+ b = 32765;
62
+ c = 127;
63
+ d = -128;
64
+
65
+ args_dbl[0] = &a;
66
+ args_dbl[1] = &b;
67
+ args_dbl[2] = &c;
68
+ args_dbl[3] = &d;
69
+ args_dbl[4] = NULL;
70
+
71
+ cl_arg_types[0] = &ffi_type_schar;
72
+ cl_arg_types[1] = &ffi_type_sshort;
73
+ cl_arg_types[2] = &ffi_type_schar;
74
+ cl_arg_types[3] = &ffi_type_sshort;
75
+ cl_arg_types[4] = NULL;
76
+
77
+ /* Initialize the cif */
78
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
79
+ &ffi_type_sshort, cl_arg_types) == FFI_OK);
80
+
81
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
82
+ /* { dg-output "1 32765 127 -128: 32765" } */
83
+ printf("res: %d\n", (signed short)res_call);
84
+ /* { dg-output "\nres: 32765" } */
85
+
86
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
87
+
88
+ res_closure = (*((test_type)pcl))(1, 32765, 127, -128);
89
+ /* { dg-output "\n1 32765 127 -128: 32765" } */
90
+ printf("res: %d\n", res_closure);
91
+ /* { dg-output "\nres: 32765" } */
92
+
93
+ exit(0);
94
+ }