ffi 0.5.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- data/LICENSE +51 -0
- data/README.rdoc +69 -0
- data/Rakefile +191 -0
- data/ext/ffi_c/AbstractMemory.c +489 -0
- data/ext/ffi_c/AbstractMemory.h +160 -0
- data/ext/ffi_c/ArrayType.c +129 -0
- data/ext/ffi_c/ArrayType.h +58 -0
- data/ext/ffi_c/AutoPointer.c +61 -0
- data/ext/ffi_c/AutoPointer.h +18 -0
- data/ext/ffi_c/Buffer.c +187 -0
- data/ext/ffi_c/Call.c +853 -0
- data/ext/ffi_c/Call.h +86 -0
- data/ext/ffi_c/ClosurePool.c +302 -0
- data/ext/ffi_c/ClosurePool.h +29 -0
- data/ext/ffi_c/DynamicLibrary.c +216 -0
- data/ext/ffi_c/DynamicLibrary.h +22 -0
- data/ext/ffi_c/Function.c +478 -0
- data/ext/ffi_c/Function.h +80 -0
- data/ext/ffi_c/FunctionInfo.c +221 -0
- data/ext/ffi_c/LastError.c +159 -0
- data/ext/ffi_c/LastError.h +18 -0
- data/ext/ffi_c/MemoryPointer.c +178 -0
- data/ext/ffi_c/MemoryPointer.h +20 -0
- data/ext/ffi_c/MethodHandle.c +346 -0
- data/ext/ffi_c/MethodHandle.h +53 -0
- data/ext/ffi_c/Platform.c +59 -0
- data/ext/ffi_c/Platform.h +16 -0
- data/ext/ffi_c/Pointer.c +224 -0
- data/ext/ffi_c/Pointer.h +49 -0
- data/ext/ffi_c/Struct.c +770 -0
- data/ext/ffi_c/Struct.h +80 -0
- data/ext/ffi_c/StructByValue.c +140 -0
- data/ext/ffi_c/StructByValue.h +53 -0
- data/ext/ffi_c/StructLayout.c +450 -0
- data/ext/ffi_c/Type.c +329 -0
- data/ext/ffi_c/Type.h +57 -0
- data/ext/ffi_c/Types.c +103 -0
- data/ext/ffi_c/Types.h +85 -0
- data/ext/ffi_c/Variadic.c +260 -0
- data/ext/ffi_c/compat.h +72 -0
- data/ext/ffi_c/endian.h +40 -0
- data/ext/ffi_c/extconf.rb +30 -0
- data/ext/ffi_c/ffi.c +82 -0
- data/ext/ffi_c/libffi.bsd.mk +34 -0
- data/ext/ffi_c/libffi.darwin.mk +75 -0
- data/ext/ffi_c/libffi.gnu.mk +29 -0
- data/ext/ffi_c/libffi.mk +13 -0
- data/ext/ffi_c/libffi/ChangeLog +3243 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
- data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
- data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
- data/ext/ffi_c/libffi/LICENSE +21 -0
- data/ext/ffi_c/libffi/Makefile.am +177 -0
- data/ext/ffi_c/libffi/Makefile.in +1640 -0
- data/ext/ffi_c/libffi/README +328 -0
- data/ext/ffi_c/libffi/TODO +1 -0
- data/ext/ffi_c/libffi/acinclude.m4 +92 -0
- data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
- data/ext/ffi_c/libffi/compile +142 -0
- data/ext/ffi_c/libffi/config.guess +1516 -0
- data/ext/ffi_c/libffi/config.sub +1626 -0
- data/ext/ffi_c/libffi/configure +24414 -0
- data/ext/ffi_c/libffi/configure.ac +365 -0
- data/ext/ffi_c/libffi/configure.host +11 -0
- data/ext/ffi_c/libffi/depcomp +584 -0
- data/ext/ffi_c/libffi/doc/libffi.info +533 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
- data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
- data/ext/ffi_c/libffi/doc/version.texi +4 -0
- data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
- data/ext/ffi_c/libffi/include/Makefile.am +9 -0
- data/ext/ffi_c/libffi/include/Makefile.in +422 -0
- data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
- data/ext/ffi_c/libffi/install-sh +323 -0
- data/ext/ffi_c/libffi/libffi.pc.in +10 -0
- data/ext/ffi_c/libffi/libtool-version +29 -0
- data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
- data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
- data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
- data/ext/ffi_c/libffi/ltconfig +2862 -0
- data/ext/ffi_c/libffi/ltmain.sh +6930 -0
- data/ext/ffi_c/libffi/man/Makefile.am +8 -0
- data/ext/ffi_c/libffi/man/Makefile.in +395 -0
- data/ext/ffi_c/libffi/man/ffi.3 +31 -0
- data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
- data/ext/ffi_c/libffi/mdate-sh +201 -0
- data/ext/ffi_c/libffi/missing +353 -0
- data/ext/ffi_c/libffi/mkinstalldirs +158 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
- data/ext/ffi_c/libffi/src/closures.c +596 -0
- data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
- data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
- data/ext/ffi_c/libffi/src/debug.c +59 -0
- data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
- data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
- data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
- data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
- data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
- data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
- data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
- data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
- data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
- data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
- data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
- data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
- data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
- data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
- data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
- data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
- data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
- data/ext/ffi_c/libffi/src/raw_api.c +254 -0
- data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
- data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
- data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
- data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
- data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
- data/ext/ffi_c/libffi/src/types.c +77 -0
- data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
- data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
- data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
- data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
- data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
- data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
- data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
- data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
- data/ext/ffi_c/libffi/texinfo.tex +7482 -0
- data/ext/ffi_c/rbffi.h +26 -0
- data/gen/Rakefile +12 -0
- data/lib/1.8/ffi_c.so +0 -0
- data/lib/1.9/ffi_c.so +0 -0
- data/lib/ffi.rb +11 -0
- data/lib/ffi/autopointer.rb +61 -0
- data/lib/ffi/buffer.rb +0 -0
- data/lib/ffi/callback.rb +10 -0
- data/lib/ffi/enum.rb +78 -0
- data/lib/ffi/errno.rb +8 -0
- data/lib/ffi/ffi.rb +99 -0
- data/lib/ffi/io.rb +21 -0
- data/lib/ffi/library.rb +218 -0
- data/lib/ffi/managedstruct.rb +55 -0
- data/lib/ffi/memorypointer.rb +73 -0
- data/lib/ffi/platform.rb +88 -0
- data/lib/ffi/pointer.rb +119 -0
- data/lib/ffi/struct.rb +183 -0
- data/lib/ffi/tools/const_generator.rb +177 -0
- data/lib/ffi/tools/generator.rb +58 -0
- data/lib/ffi/tools/generator_task.rb +35 -0
- data/lib/ffi/tools/struct_generator.rb +194 -0
- data/lib/ffi/tools/types_generator.rb +123 -0
- data/lib/ffi/types.rb +153 -0
- data/lib/ffi/union.rb +12 -0
- data/lib/ffi/variadic.rb +25 -0
- data/spec/ffi/bool_spec.rb +24 -0
- data/spec/ffi/buffer_spec.rb +202 -0
- data/spec/ffi/callback_spec.rb +591 -0
- data/spec/ffi/enum_spec.rb +164 -0
- data/spec/ffi/errno_spec.rb +13 -0
- data/spec/ffi/function_spec.rb +73 -0
- data/spec/ffi/library_spec.rb +148 -0
- data/spec/ffi/managed_struct_spec.rb +56 -0
- data/spec/ffi/number_spec.rb +231 -0
- data/spec/ffi/pointer_spec.rb +195 -0
- data/spec/ffi/rbx/attach_function_spec.rb +27 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
- data/spec/ffi/rbx/spec_helper.rb +1 -0
- data/spec/ffi/rbx/struct_spec.rb +13 -0
- data/spec/ffi/spec_helper.rb +17 -0
- data/spec/ffi/string_spec.rb +103 -0
- data/spec/ffi/struct_callback_spec.rb +64 -0
- data/spec/ffi/struct_initialize_spec.rb +30 -0
- data/spec/ffi/struct_spec.rb +529 -0
- data/spec/ffi/typedef_spec.rb +48 -0
- data/spec/ffi/union_spec.rb +60 -0
- data/spec/ffi/variadic_spec.rb +84 -0
- data/spec/spec.opts +4 -0
- metadata +396 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
/* Area: ffi_call, closure_call
|
2
|
+
Purpose: Check structure alignment of sint16.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <hos@tamanegi.org> 20031203 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
typedef struct cls_struct_align {
|
11
|
+
unsigned char a;
|
12
|
+
signed short b;
|
13
|
+
unsigned char c;
|
14
|
+
} cls_struct_align;
|
15
|
+
|
16
|
+
cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
|
17
|
+
struct cls_struct_align a2)
|
18
|
+
{
|
19
|
+
struct cls_struct_align result;
|
20
|
+
|
21
|
+
result.a = a1.a + a2.a;
|
22
|
+
result.b = a1.b + a2.b;
|
23
|
+
result.c = a1.c + a2.c;
|
24
|
+
|
25
|
+
printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
|
26
|
+
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
|
30
|
+
static void
|
31
|
+
cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
32
|
+
void* userdata __UNUSED__)
|
33
|
+
{
|
34
|
+
|
35
|
+
struct cls_struct_align a1, a2;
|
36
|
+
|
37
|
+
a1 = *(struct cls_struct_align*)(args[0]);
|
38
|
+
a2 = *(struct cls_struct_align*)(args[1]);
|
39
|
+
|
40
|
+
*(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
|
41
|
+
}
|
42
|
+
|
43
|
+
int main (void)
|
44
|
+
{
|
45
|
+
ffi_cif cif;
|
46
|
+
#ifndef USING_MMAP
|
47
|
+
static ffi_closure cl;
|
48
|
+
#endif
|
49
|
+
ffi_closure *pcl;
|
50
|
+
void* args_dbl[5];
|
51
|
+
ffi_type* cls_struct_fields[4];
|
52
|
+
ffi_type cls_struct_type;
|
53
|
+
ffi_type* dbl_arg_types[5];
|
54
|
+
|
55
|
+
#ifdef USING_MMAP
|
56
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
57
|
+
#else
|
58
|
+
pcl = &cl;
|
59
|
+
#endif
|
60
|
+
|
61
|
+
cls_struct_type.size = 0;
|
62
|
+
cls_struct_type.alignment = 0;
|
63
|
+
cls_struct_type.type = FFI_TYPE_STRUCT;
|
64
|
+
cls_struct_type.elements = cls_struct_fields;
|
65
|
+
|
66
|
+
struct cls_struct_align g_dbl = { 12, 4951, 127 };
|
67
|
+
struct cls_struct_align f_dbl = { 1, 9320, 13 };
|
68
|
+
struct cls_struct_align res_dbl;
|
69
|
+
|
70
|
+
cls_struct_fields[0] = &ffi_type_uchar;
|
71
|
+
cls_struct_fields[1] = &ffi_type_sshort;
|
72
|
+
cls_struct_fields[2] = &ffi_type_uchar;
|
73
|
+
cls_struct_fields[3] = NULL;
|
74
|
+
|
75
|
+
dbl_arg_types[0] = &cls_struct_type;
|
76
|
+
dbl_arg_types[1] = &cls_struct_type;
|
77
|
+
dbl_arg_types[2] = NULL;
|
78
|
+
|
79
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
|
80
|
+
dbl_arg_types) == FFI_OK);
|
81
|
+
|
82
|
+
args_dbl[0] = &g_dbl;
|
83
|
+
args_dbl[1] = &f_dbl;
|
84
|
+
args_dbl[2] = NULL;
|
85
|
+
|
86
|
+
ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
|
87
|
+
/* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
|
88
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
89
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
90
|
+
|
91
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
|
92
|
+
|
93
|
+
res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
|
94
|
+
/* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
|
95
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
96
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
97
|
+
|
98
|
+
exit(0);
|
99
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/* Area: ffi_call, closure_call
|
2
|
+
Purpose: Check structure alignment of sint32.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <hos@tamanegi.org> 20031203 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
typedef struct cls_struct_align {
|
11
|
+
unsigned char a;
|
12
|
+
signed int b;
|
13
|
+
unsigned char c;
|
14
|
+
} cls_struct_align;
|
15
|
+
|
16
|
+
cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
|
17
|
+
struct cls_struct_align a2)
|
18
|
+
{
|
19
|
+
struct cls_struct_align result;
|
20
|
+
|
21
|
+
result.a = a1.a + a2.a;
|
22
|
+
result.b = a1.b + a2.b;
|
23
|
+
result.c = a1.c + a2.c;
|
24
|
+
|
25
|
+
printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
|
26
|
+
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
|
30
|
+
static void
|
31
|
+
cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
32
|
+
void* userdata __UNUSED__)
|
33
|
+
{
|
34
|
+
|
35
|
+
struct cls_struct_align a1, a2;
|
36
|
+
|
37
|
+
a1 = *(struct cls_struct_align*)(args[0]);
|
38
|
+
a2 = *(struct cls_struct_align*)(args[1]);
|
39
|
+
|
40
|
+
*(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
|
41
|
+
}
|
42
|
+
|
43
|
+
int main (void)
|
44
|
+
{
|
45
|
+
ffi_cif cif;
|
46
|
+
#ifndef USING_MMAP
|
47
|
+
static ffi_closure cl;
|
48
|
+
#endif
|
49
|
+
ffi_closure *pcl;
|
50
|
+
void* args_dbl[5];
|
51
|
+
ffi_type* cls_struct_fields[4];
|
52
|
+
ffi_type cls_struct_type;
|
53
|
+
ffi_type* dbl_arg_types[5];
|
54
|
+
|
55
|
+
#ifdef USING_MMAP
|
56
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
57
|
+
#else
|
58
|
+
pcl = &cl;
|
59
|
+
#endif
|
60
|
+
|
61
|
+
cls_struct_type.size = 0;
|
62
|
+
cls_struct_type.alignment = 0;
|
63
|
+
cls_struct_type.type = FFI_TYPE_STRUCT;
|
64
|
+
cls_struct_type.elements = cls_struct_fields;
|
65
|
+
|
66
|
+
struct cls_struct_align g_dbl = { 12, 4951, 127 };
|
67
|
+
struct cls_struct_align f_dbl = { 1, 9320, 13 };
|
68
|
+
struct cls_struct_align res_dbl;
|
69
|
+
|
70
|
+
cls_struct_fields[0] = &ffi_type_uchar;
|
71
|
+
cls_struct_fields[1] = &ffi_type_sint;
|
72
|
+
cls_struct_fields[2] = &ffi_type_uchar;
|
73
|
+
cls_struct_fields[3] = NULL;
|
74
|
+
|
75
|
+
dbl_arg_types[0] = &cls_struct_type;
|
76
|
+
dbl_arg_types[1] = &cls_struct_type;
|
77
|
+
dbl_arg_types[2] = NULL;
|
78
|
+
|
79
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
|
80
|
+
dbl_arg_types) == FFI_OK);
|
81
|
+
|
82
|
+
args_dbl[0] = &g_dbl;
|
83
|
+
args_dbl[1] = &f_dbl;
|
84
|
+
args_dbl[2] = NULL;
|
85
|
+
|
86
|
+
ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
|
87
|
+
/* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
|
88
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
89
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
90
|
+
|
91
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
|
92
|
+
|
93
|
+
res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
|
94
|
+
/* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
|
95
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
96
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
97
|
+
|
98
|
+
exit(0);
|
99
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/* Area: ffi_call, closure_call
|
2
|
+
Purpose: Check structure alignment of sint64.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <hos@tamanegi.org> 20031203 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
typedef struct cls_struct_align {
|
11
|
+
unsigned char a;
|
12
|
+
signed long long b;
|
13
|
+
unsigned char c;
|
14
|
+
} cls_struct_align;
|
15
|
+
|
16
|
+
cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
|
17
|
+
struct cls_struct_align a2)
|
18
|
+
{
|
19
|
+
struct cls_struct_align result;
|
20
|
+
|
21
|
+
result.a = a1.a + a2.a;
|
22
|
+
result.b = a1.b + a2.b;
|
23
|
+
result.c = a1.c + a2.c;
|
24
|
+
|
25
|
+
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);
|
26
|
+
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
|
30
|
+
static void
|
31
|
+
cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
32
|
+
void* userdata __UNUSED__)
|
33
|
+
{
|
34
|
+
|
35
|
+
struct cls_struct_align a1, a2;
|
36
|
+
|
37
|
+
a1 = *(struct cls_struct_align*)(args[0]);
|
38
|
+
a2 = *(struct cls_struct_align*)(args[1]);
|
39
|
+
|
40
|
+
*(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
|
41
|
+
}
|
42
|
+
|
43
|
+
int main (void)
|
44
|
+
{
|
45
|
+
ffi_cif cif;
|
46
|
+
#ifndef USING_MMAP
|
47
|
+
static ffi_closure cl;
|
48
|
+
#endif
|
49
|
+
ffi_closure *pcl;
|
50
|
+
void* args_dbl[5];
|
51
|
+
ffi_type* cls_struct_fields[4];
|
52
|
+
ffi_type cls_struct_type;
|
53
|
+
ffi_type* dbl_arg_types[5];
|
54
|
+
|
55
|
+
#ifdef USING_MMAP
|
56
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
57
|
+
#else
|
58
|
+
pcl = &cl;
|
59
|
+
#endif
|
60
|
+
|
61
|
+
cls_struct_type.size = 0;
|
62
|
+
cls_struct_type.alignment = 0;
|
63
|
+
cls_struct_type.type = FFI_TYPE_STRUCT;
|
64
|
+
cls_struct_type.elements = cls_struct_fields;
|
65
|
+
|
66
|
+
struct cls_struct_align g_dbl = { 12, 4951, 127 };
|
67
|
+
struct cls_struct_align f_dbl = { 1, 9320, 13 };
|
68
|
+
struct cls_struct_align res_dbl;
|
69
|
+
|
70
|
+
cls_struct_fields[0] = &ffi_type_uchar;
|
71
|
+
cls_struct_fields[1] = &ffi_type_sint64;
|
72
|
+
cls_struct_fields[2] = &ffi_type_uchar;
|
73
|
+
cls_struct_fields[3] = NULL;
|
74
|
+
|
75
|
+
dbl_arg_types[0] = &cls_struct_type;
|
76
|
+
dbl_arg_types[1] = &cls_struct_type;
|
77
|
+
dbl_arg_types[2] = NULL;
|
78
|
+
|
79
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
|
80
|
+
dbl_arg_types) == FFI_OK);
|
81
|
+
|
82
|
+
args_dbl[0] = &g_dbl;
|
83
|
+
args_dbl[1] = &f_dbl;
|
84
|
+
args_dbl[2] = NULL;
|
85
|
+
|
86
|
+
ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
|
87
|
+
/* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
|
88
|
+
printf("res: %d %lld %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
89
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
90
|
+
|
91
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
|
92
|
+
|
93
|
+
res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
|
94
|
+
/* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
|
95
|
+
printf("res: %d %lld %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
96
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
97
|
+
|
98
|
+
exit(0);
|
99
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/* Area: ffi_call, closure_call
|
2
|
+
Purpose: Check structure alignment of uint16.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <hos@tamanegi.org> 20031203 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
typedef struct cls_struct_align {
|
11
|
+
unsigned char a;
|
12
|
+
unsigned short b;
|
13
|
+
unsigned char c;
|
14
|
+
} cls_struct_align;
|
15
|
+
|
16
|
+
cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
|
17
|
+
struct cls_struct_align a2)
|
18
|
+
{
|
19
|
+
struct cls_struct_align result;
|
20
|
+
|
21
|
+
result.a = a1.a + a2.a;
|
22
|
+
result.b = a1.b + a2.b;
|
23
|
+
result.c = a1.c + a2.c;
|
24
|
+
|
25
|
+
printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
|
26
|
+
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
|
30
|
+
static void
|
31
|
+
cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
32
|
+
void* userdata __UNUSED__)
|
33
|
+
{
|
34
|
+
|
35
|
+
struct cls_struct_align a1, a2;
|
36
|
+
|
37
|
+
a1 = *(struct cls_struct_align*)(args[0]);
|
38
|
+
a2 = *(struct cls_struct_align*)(args[1]);
|
39
|
+
|
40
|
+
*(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
|
41
|
+
}
|
42
|
+
|
43
|
+
int main (void)
|
44
|
+
{
|
45
|
+
ffi_cif cif;
|
46
|
+
#ifndef USING_MMAP
|
47
|
+
static ffi_closure cl;
|
48
|
+
#endif
|
49
|
+
ffi_closure *pcl;
|
50
|
+
void* args_dbl[5];
|
51
|
+
ffi_type* cls_struct_fields[4];
|
52
|
+
ffi_type cls_struct_type;
|
53
|
+
ffi_type* dbl_arg_types[5];
|
54
|
+
|
55
|
+
#ifdef USING_MMAP
|
56
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
57
|
+
#else
|
58
|
+
pcl = &cl;
|
59
|
+
#endif
|
60
|
+
|
61
|
+
cls_struct_type.size = 0;
|
62
|
+
cls_struct_type.alignment = 0;
|
63
|
+
cls_struct_type.type = FFI_TYPE_STRUCT;
|
64
|
+
cls_struct_type.elements = cls_struct_fields;
|
65
|
+
|
66
|
+
struct cls_struct_align g_dbl = { 12, 4951, 127 };
|
67
|
+
struct cls_struct_align f_dbl = { 1, 9320, 13 };
|
68
|
+
struct cls_struct_align res_dbl;
|
69
|
+
|
70
|
+
cls_struct_fields[0] = &ffi_type_uchar;
|
71
|
+
cls_struct_fields[1] = &ffi_type_ushort;
|
72
|
+
cls_struct_fields[2] = &ffi_type_uchar;
|
73
|
+
cls_struct_fields[3] = NULL;
|
74
|
+
|
75
|
+
dbl_arg_types[0] = &cls_struct_type;
|
76
|
+
dbl_arg_types[1] = &cls_struct_type;
|
77
|
+
dbl_arg_types[2] = NULL;
|
78
|
+
|
79
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
|
80
|
+
dbl_arg_types) == FFI_OK);
|
81
|
+
|
82
|
+
args_dbl[0] = &g_dbl;
|
83
|
+
args_dbl[1] = &f_dbl;
|
84
|
+
args_dbl[2] = NULL;
|
85
|
+
|
86
|
+
ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
|
87
|
+
/* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
|
88
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
89
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
90
|
+
|
91
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
|
92
|
+
|
93
|
+
res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
|
94
|
+
/* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
|
95
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
96
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
97
|
+
|
98
|
+
exit(0);
|
99
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/* Area: ffi_call, closure_call
|
2
|
+
Purpose: Check structure alignment of uint32.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <hos@tamanegi.org> 20031203 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
typedef struct cls_struct_align {
|
11
|
+
unsigned char a;
|
12
|
+
unsigned int b;
|
13
|
+
unsigned char c;
|
14
|
+
} cls_struct_align;
|
15
|
+
|
16
|
+
cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
|
17
|
+
struct cls_struct_align a2)
|
18
|
+
{
|
19
|
+
struct cls_struct_align result;
|
20
|
+
|
21
|
+
result.a = a1.a + a2.a;
|
22
|
+
result.b = a1.b + a2.b;
|
23
|
+
result.c = a1.c + a2.c;
|
24
|
+
|
25
|
+
printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
|
26
|
+
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
|
30
|
+
static void
|
31
|
+
cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
32
|
+
void* userdata __UNUSED__)
|
33
|
+
{
|
34
|
+
|
35
|
+
struct cls_struct_align a1, a2;
|
36
|
+
|
37
|
+
a1 = *(struct cls_struct_align*)(args[0]);
|
38
|
+
a2 = *(struct cls_struct_align*)(args[1]);
|
39
|
+
|
40
|
+
*(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
|
41
|
+
}
|
42
|
+
|
43
|
+
int main (void)
|
44
|
+
{
|
45
|
+
ffi_cif cif;
|
46
|
+
#ifndef USING_MMAP
|
47
|
+
static ffi_closure cl;
|
48
|
+
#endif
|
49
|
+
ffi_closure *pcl;
|
50
|
+
void* args_dbl[5];
|
51
|
+
ffi_type* cls_struct_fields[4];
|
52
|
+
ffi_type cls_struct_type;
|
53
|
+
ffi_type* dbl_arg_types[5];
|
54
|
+
|
55
|
+
#ifdef USING_MMAP
|
56
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
57
|
+
#else
|
58
|
+
pcl = &cl;
|
59
|
+
#endif
|
60
|
+
|
61
|
+
cls_struct_type.size = 0;
|
62
|
+
cls_struct_type.alignment = 0;
|
63
|
+
cls_struct_type.type = FFI_TYPE_STRUCT;
|
64
|
+
cls_struct_type.elements = cls_struct_fields;
|
65
|
+
|
66
|
+
struct cls_struct_align g_dbl = { 12, 4951, 127 };
|
67
|
+
struct cls_struct_align f_dbl = { 1, 9320, 13 };
|
68
|
+
struct cls_struct_align res_dbl;
|
69
|
+
|
70
|
+
cls_struct_fields[0] = &ffi_type_uchar;
|
71
|
+
cls_struct_fields[1] = &ffi_type_uint;
|
72
|
+
cls_struct_fields[2] = &ffi_type_uchar;
|
73
|
+
cls_struct_fields[3] = NULL;
|
74
|
+
|
75
|
+
dbl_arg_types[0] = &cls_struct_type;
|
76
|
+
dbl_arg_types[1] = &cls_struct_type;
|
77
|
+
dbl_arg_types[2] = NULL;
|
78
|
+
|
79
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
|
80
|
+
dbl_arg_types) == FFI_OK);
|
81
|
+
|
82
|
+
args_dbl[0] = &g_dbl;
|
83
|
+
args_dbl[1] = &f_dbl;
|
84
|
+
args_dbl[2] = NULL;
|
85
|
+
|
86
|
+
ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
|
87
|
+
/* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
|
88
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
89
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
90
|
+
|
91
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
|
92
|
+
|
93
|
+
res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
|
94
|
+
/* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
|
95
|
+
printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
|
96
|
+
/* { dg-output "\nres: 13 14271 140" } */
|
97
|
+
|
98
|
+
exit(0);
|
99
|
+
}
|