ffi 1.9.18 → 1.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +22 -0
- data/.gitmodules +3 -0
- data/.travis.yml +52 -0
- data/.yardopts +5 -0
- data/Gemfile +15 -0
- data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
- data/README.md +3 -4
- data/Rakefile +41 -5
- data/appveyor.yml +22 -0
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Call.c +1 -22
- data/ext/ffi_c/Call.h +0 -9
- data/ext/ffi_c/Closure.c +54 -0
- data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
- data/ext/ffi_c/Function.c +16 -25
- data/ext/ffi_c/Function.h +1 -2
- data/ext/ffi_c/FunctionInfo.c +0 -4
- data/ext/ffi_c/MethodHandle.c +33 -268
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/extconf.rb +10 -5
- data/ext/ffi_c/ffi.c +2 -2
- data/ext/ffi_c/libffi/.appveyor.yml +48 -0
- data/ext/ffi_c/libffi/.gitignore +36 -0
- data/ext/ffi_c/libffi/.travis/install.sh +14 -0
- data/ext/ffi_c/libffi/.travis.yml +30 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
- data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/Makefile.am +169 -158
- data/ext/ffi_c/libffi/Makefile.in +927 -938
- data/ext/ffi_c/libffi/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +387 -0
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/config.guess +336 -371
- data/ext/ffi_c/libffi/config.sub +246 -115
- data/ext/ffi_c/libffi/configure +6976 -2189
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +277 -4
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +188 -71
- data/ext/ffi_c/libffi/include/ffi.h.in +112 -50
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
- data/ext/ffi_c/libffi/install-sh +190 -202
- data/ext/ffi_c/libffi/libffi.map.in +80 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +141 -49
- data/ext/ffi_c/libffi/man/ffi.3 +10 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
- data/ext/ffi_c/libffi/missing +150 -311
- data/ext/ffi_c/libffi/msvcc.sh +72 -9
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +964 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
- data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
- data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
- data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
- data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
- data/ext/ffi_c/libffi/src/closures.c +366 -45
- data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/debug.c +6 -1
- data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
- data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/unix.S +2 -0
- data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
- data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
- data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
- data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
- data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
- data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +103 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +10 -3
- data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
- data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
- data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
- data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
- data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
- data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
- data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
- data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
- data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
- data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
- data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
- data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
- data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
- data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
- data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
- data/ext/ffi_c/libffi/src/types.c +43 -14
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
- data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +591 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +359 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
- data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
- data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +121 -25
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
- data/ext/ffi_c/libffi.bsd.mk +11 -5
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +3 -2
- data/ext/ffi_c/libffi.mk +10 -5
- data/ext/ffi_c/libffi.vc.mk +1 -1
- data/ext/ffi_c/libffi.vc64.mk +1 -1
- data/ffi.gemspec +16 -3
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +66 -14
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -2
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +7 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +76 -0
- data/samples/qsort.rb +21 -0
- data/samples/sample_helper.rb +6 -0
- metadata +164 -115
- data/ext/ffi_c/ClosurePool.c +0 -283
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- data/ext/ffi_c/libffi/compile +0 -143
- data/ext/ffi_c/libffi/depcomp +0 -630
- data/ext/ffi_c/libffi/doc/libffi.info +0 -593
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
- data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
- data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
- data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
- data/ext/ffi_c/libffi/mdate-sh +0 -201
- data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
- data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
- data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
- data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
- data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
- data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
- data/ext/ffi_c/libffi/texinfo.tex +0 -7210
- data/gen/Rakefile +0 -30
- data/libtest/Benchmark.c +0 -52
- data/libtest/BoolTest.c +0 -34
- data/libtest/BufferTest.c +0 -31
- data/libtest/ClosureTest.c +0 -205
- data/libtest/EnumTest.c +0 -51
- data/libtest/FunctionTest.c +0 -70
- data/libtest/GNUmakefile +0 -149
- data/libtest/GlobalVariable.c +0 -62
- data/libtest/LastErrorTest.c +0 -21
- data/libtest/NumberTest.c +0 -132
- data/libtest/PointerTest.c +0 -63
- data/libtest/ReferenceTest.c +0 -23
- data/libtest/StringTest.c +0 -34
- data/libtest/StructTest.c +0 -243
- data/libtest/UnionTest.c +0 -43
- data/libtest/VariadicTest.c +0 -99
- data/spec/ffi/async_callback_spec.rb +0 -35
- data/spec/ffi/bool_spec.rb +0 -32
- data/spec/ffi/buffer_spec.rb +0 -279
- data/spec/ffi/callback_spec.rb +0 -773
- data/spec/ffi/custom_param_type.rb +0 -37
- data/spec/ffi/custom_type_spec.rb +0 -74
- data/spec/ffi/dup_spec.rb +0 -52
- data/spec/ffi/enum_spec.rb +0 -423
- data/spec/ffi/errno_spec.rb +0 -20
- data/spec/ffi/ffi_spec.rb +0 -28
- data/spec/ffi/fixtures/Benchmark.c +0 -52
- data/spec/ffi/fixtures/BoolTest.c +0 -34
- data/spec/ffi/fixtures/BufferTest.c +0 -31
- data/spec/ffi/fixtures/ClosureTest.c +0 -205
- data/spec/ffi/fixtures/EnumTest.c +0 -51
- data/spec/ffi/fixtures/FunctionTest.c +0 -142
- data/spec/ffi/fixtures/GNUmakefile +0 -149
- data/spec/ffi/fixtures/GlobalVariable.c +0 -62
- data/spec/ffi/fixtures/LastErrorTest.c +0 -21
- data/spec/ffi/fixtures/NumberTest.c +0 -132
- data/spec/ffi/fixtures/PipeHelper.h +0 -21
- data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
- data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
- data/spec/ffi/fixtures/PointerTest.c +0 -63
- data/spec/ffi/fixtures/ReferenceTest.c +0 -23
- data/spec/ffi/fixtures/StringTest.c +0 -34
- data/spec/ffi/fixtures/StructTest.c +0 -243
- data/spec/ffi/fixtures/UnionTest.c +0 -43
- data/spec/ffi/fixtures/VariadicTest.c +0 -99
- data/spec/ffi/fixtures/classes.rb +0 -438
- data/spec/ffi/function_spec.rb +0 -97
- data/spec/ffi/io_spec.rb +0 -16
- data/spec/ffi/library_spec.rb +0 -286
- data/spec/ffi/long_double.rb +0 -30
- data/spec/ffi/managed_struct_spec.rb +0 -68
- data/spec/ffi/memorypointer_spec.rb +0 -78
- data/spec/ffi/number_spec.rb +0 -247
- data/spec/ffi/platform_spec.rb +0 -114
- data/spec/ffi/pointer_spec.rb +0 -285
- data/spec/ffi/rbx/attach_function_spec.rb +0 -34
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
- data/spec/ffi/rbx/spec_helper.rb +0 -6
- data/spec/ffi/rbx/struct_spec.rb +0 -18
- data/spec/ffi/spec_helper.rb +0 -93
- data/spec/ffi/string_spec.rb +0 -118
- data/spec/ffi/strptr_spec.rb +0 -50
- data/spec/ffi/struct_by_ref_spec.rb +0 -43
- data/spec/ffi/struct_callback_spec.rb +0 -69
- data/spec/ffi/struct_initialize_spec.rb +0 -35
- data/spec/ffi/struct_packed_spec.rb +0 -50
- data/spec/ffi/struct_spec.rb +0 -886
- data/spec/ffi/typedef_spec.rb +0 -91
- data/spec/ffi/union_spec.rb +0 -67
- data/spec/ffi/variadic_spec.rb +0 -132
- data/spec/spec.opts +0 -4
|
@@ -15,14 +15,26 @@
|
|
|
15
15
|
|
|
16
16
|
#define MAX_ARGS 256
|
|
17
17
|
|
|
18
|
-
#define CHECK(x) !(x) ? abort() : 0
|
|
18
|
+
#define CHECK(x) (void)(!(x) ? (abort(), 1) : 0)
|
|
19
19
|
|
|
20
|
-
/* Define
|
|
20
|
+
/* Define macros so that compilers other than gcc can run the tests. */
|
|
21
21
|
#undef __UNUSED__
|
|
22
22
|
#if defined(__GNUC__)
|
|
23
23
|
#define __UNUSED__ __attribute__((__unused__))
|
|
24
|
+
#define __STDCALL__ __attribute__((stdcall))
|
|
25
|
+
#define __THISCALL__ __attribute__((thiscall))
|
|
26
|
+
#define __FASTCALL__ __attribute__((fastcall))
|
|
27
|
+
#define __MSABI__ __attribute__((ms_abi))
|
|
24
28
|
#else
|
|
25
29
|
#define __UNUSED__
|
|
30
|
+
#define __STDCALL__ __stdcall
|
|
31
|
+
#define __THISCALL__ __thiscall
|
|
32
|
+
#define __FASTCALL__ __fastcall
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#ifndef ABI_NUM
|
|
36
|
+
#define ABI_NUM FFI_DEFAULT_ABI
|
|
37
|
+
#define ABI_ATTR
|
|
26
38
|
#endif
|
|
27
39
|
|
|
28
40
|
/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
|
|
@@ -110,44 +122,15 @@
|
|
|
110
122
|
#endif
|
|
111
123
|
#endif
|
|
112
124
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
#
|
|
119
|
-
|
|
120
|
-
#endif
|
|
121
|
-
|
|
122
|
-
#ifdef HAVE_MMAP_DEV_ZERO
|
|
123
|
-
if (dev_zero_fd == -1)
|
|
124
|
-
{
|
|
125
|
-
dev_zero_fd = open ("/dev/zero", O_RDONLY);
|
|
126
|
-
if (dev_zero_fd == -1)
|
|
127
|
-
{
|
|
128
|
-
perror ("open /dev/zero: %m");
|
|
129
|
-
exit (1);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
#endif
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
#ifdef HAVE_MMAP_ANON
|
|
136
|
-
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
|
|
137
|
-
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
|
138
|
-
#endif
|
|
139
|
-
#ifdef HAVE_MMAP_DEV_ZERO
|
|
140
|
-
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
|
|
141
|
-
MAP_PRIVATE, dev_zero_fd, 0);
|
|
125
|
+
/* MSVC kludge. */
|
|
126
|
+
#if defined _MSC_VER
|
|
127
|
+
#define PRIuPTR "lu"
|
|
128
|
+
#define PRIu8 "u"
|
|
129
|
+
#define PRId8 "d"
|
|
130
|
+
#define PRIu64 "I64u"
|
|
131
|
+
#define PRId64 "I64d"
|
|
142
132
|
#endif
|
|
143
133
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
perror ("virtual memory exhausted");
|
|
147
|
-
exit (1);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return page;
|
|
151
|
-
}
|
|
152
|
-
|
|
134
|
+
#ifndef PRIuPTR
|
|
135
|
+
#define PRIuPTR "u"
|
|
153
136
|
#endif
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
#include "ffitest.h"
|
|
9
9
|
#include "float.h"
|
|
10
10
|
|
|
11
|
+
#include <math.h>
|
|
12
|
+
|
|
11
13
|
typedef union
|
|
12
14
|
{
|
|
13
15
|
double d;
|
|
@@ -47,7 +49,7 @@ int main (void)
|
|
|
47
49
|
|
|
48
50
|
/* These are not always the same!! Check for a reasonable delta */
|
|
49
51
|
|
|
50
|
-
CHECK(result[0].d - dblit(f) < DBL_EPSILON);
|
|
52
|
+
CHECK(fabs(result[0].d - dblit(f)) < DBL_EPSILON);
|
|
51
53
|
|
|
52
54
|
/* Check the canary. */
|
|
53
55
|
for (i = 0; i < sizeof (double); ++i)
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Limitations: none.
|
|
4
4
|
PR: none.
|
|
5
5
|
Originator: From the original ffitest.c */
|
|
6
|
-
|
|
7
|
-
/* { dg-excess-errors "fails" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
|
|
8
|
-
/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
|
|
6
|
+
/* { dg-do run } */
|
|
9
7
|
|
|
10
8
|
#include "ffitest.h"
|
|
11
9
|
#include "float.h"
|
|
12
10
|
|
|
11
|
+
#include <math.h>
|
|
12
|
+
|
|
13
13
|
static long double ldblit(float f)
|
|
14
14
|
{
|
|
15
15
|
return (long double) (((long double) f)/ (long double) 3.0);
|
|
@@ -22,6 +22,7 @@ int main (void)
|
|
|
22
22
|
void *values[MAX_ARGS];
|
|
23
23
|
float f;
|
|
24
24
|
long double ld;
|
|
25
|
+
long double original;
|
|
25
26
|
|
|
26
27
|
args[0] = &ffi_type_float;
|
|
27
28
|
values[0] = &f;
|
|
@@ -49,7 +50,8 @@ int main (void)
|
|
|
49
50
|
#endif
|
|
50
51
|
|
|
51
52
|
/* These are not always the same!! Check for a reasonable delta */
|
|
52
|
-
|
|
53
|
+
original = ldblit(f);
|
|
54
|
+
if (((ld > original) ? (ld - original) : (original - ld)) < LDBL_EPSILON)
|
|
53
55
|
puts("long double return value tests ok!");
|
|
54
56
|
else
|
|
55
57
|
CHECK(0);
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
#include "ffitest.h"
|
|
10
10
|
#include "float.h"
|
|
11
11
|
|
|
12
|
+
#include <math.h>
|
|
13
|
+
|
|
12
14
|
static double floating_1(float a, double b, long double c)
|
|
13
15
|
{
|
|
14
16
|
return (double) a + b + (double) c;
|
|
@@ -49,7 +51,7 @@ int main (void)
|
|
|
49
51
|
|
|
50
52
|
ffi_call(&cif, FFI_FN(floating_1), &rd, values);
|
|
51
53
|
|
|
52
|
-
CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
|
|
54
|
+
CHECK(fabs(rd - floating_1(f, d, ld)) < DBL_EPSILON);
|
|
53
55
|
|
|
54
56
|
args[0] = &ffi_type_longdouble;
|
|
55
57
|
values[0] = &ld;
|
|
@@ -66,7 +68,7 @@ int main (void)
|
|
|
66
68
|
|
|
67
69
|
ffi_call(&cif, FFI_FN(floating_2), &rd, values);
|
|
68
70
|
|
|
69
|
-
CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
|
|
71
|
+
CHECK(fabs(rd - floating_2(ld, d, f)) < DBL_EPSILON);
|
|
70
72
|
|
|
71
73
|
exit (0);
|
|
72
74
|
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* Area: fp and variadics
|
|
2
|
+
Purpose: check fp inputs and returns work on variadics, even the fixed params
|
|
3
|
+
Limitations: None
|
|
4
|
+
PR: none
|
|
5
|
+
Originator: <david.gilbert@linaro.org> 2011-01-25
|
|
6
|
+
|
|
7
|
+
Intended to stress the difference in ABI on ARM vfp
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* { dg-do run } */
|
|
11
|
+
|
|
12
|
+
#include <stdarg.h>
|
|
13
|
+
|
|
14
|
+
#include "ffitest.h"
|
|
15
|
+
|
|
16
|
+
/* prints out all the parameters, and returns the sum of them all.
|
|
17
|
+
* 'x' is the number of variadic parameters all of which are double in this test
|
|
18
|
+
*/
|
|
19
|
+
double float_va_fn(unsigned int x, double y,...)
|
|
20
|
+
{
|
|
21
|
+
double total=0.0;
|
|
22
|
+
va_list ap;
|
|
23
|
+
unsigned int i;
|
|
24
|
+
|
|
25
|
+
total+=(double)x;
|
|
26
|
+
total+=y;
|
|
27
|
+
|
|
28
|
+
printf("%u: %.1f :", x, y);
|
|
29
|
+
|
|
30
|
+
va_start(ap, y);
|
|
31
|
+
for(i=0;i<x;i++)
|
|
32
|
+
{
|
|
33
|
+
double arg=va_arg(ap, double);
|
|
34
|
+
total+=arg;
|
|
35
|
+
printf(" %d:%.1f ", i, arg);
|
|
36
|
+
}
|
|
37
|
+
va_end(ap);
|
|
38
|
+
|
|
39
|
+
printf(" total: %.1f\n", total);
|
|
40
|
+
|
|
41
|
+
return total;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
int main (void)
|
|
45
|
+
{
|
|
46
|
+
ffi_cif cif;
|
|
47
|
+
|
|
48
|
+
ffi_type *arg_types[5];
|
|
49
|
+
void *values[5];
|
|
50
|
+
double doubles[5];
|
|
51
|
+
unsigned int firstarg;
|
|
52
|
+
double resfp;
|
|
53
|
+
|
|
54
|
+
/* First test, pass float_va_fn(0,2.0) - note there are no actual
|
|
55
|
+
* variadic parameters, but it's declared variadic so the ABI may be
|
|
56
|
+
* different. */
|
|
57
|
+
/* Call it statically and then via ffi */
|
|
58
|
+
resfp=float_va_fn(0,2.0);
|
|
59
|
+
/* { dg-output "0: 2.0 : total: 2.0" } */
|
|
60
|
+
printf("compiled: %.1f\n", resfp);
|
|
61
|
+
/* { dg-output "\ncompiled: 2.0" } */
|
|
62
|
+
|
|
63
|
+
arg_types[0] = &ffi_type_uint;
|
|
64
|
+
arg_types[1] = &ffi_type_double;
|
|
65
|
+
arg_types[2] = NULL;
|
|
66
|
+
CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 2,
|
|
67
|
+
&ffi_type_double, arg_types) == FFI_OK);
|
|
68
|
+
|
|
69
|
+
firstarg = 0;
|
|
70
|
+
doubles[0] = 2.0;
|
|
71
|
+
values[0] = &firstarg;
|
|
72
|
+
values[1] = &doubles[0];
|
|
73
|
+
ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
|
|
74
|
+
/* { dg-output "\n0: 2.0 : total: 2.0" } */
|
|
75
|
+
printf("ffi: %.1f\n", resfp);
|
|
76
|
+
/* { dg-output "\nffi: 2.0" } */
|
|
77
|
+
|
|
78
|
+
/* Second test, float_va_fn(2,2.0,3.0,4.0), now with variadic params */
|
|
79
|
+
/* Call it statically and then via ffi */
|
|
80
|
+
resfp=float_va_fn(2,2.0,3.0,4.0);
|
|
81
|
+
/* { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } */
|
|
82
|
+
printf("compiled: %.1f\n", resfp);
|
|
83
|
+
/* { dg-output "\ncompiled: 11.0" } */
|
|
84
|
+
|
|
85
|
+
arg_types[0] = &ffi_type_uint;
|
|
86
|
+
arg_types[1] = &ffi_type_double;
|
|
87
|
+
arg_types[2] = &ffi_type_double;
|
|
88
|
+
arg_types[3] = &ffi_type_double;
|
|
89
|
+
arg_types[4] = NULL;
|
|
90
|
+
CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 4,
|
|
91
|
+
&ffi_type_double, arg_types) == FFI_OK);
|
|
92
|
+
|
|
93
|
+
firstarg = 2;
|
|
94
|
+
doubles[0] = 2.0;
|
|
95
|
+
doubles[1] = 3.0;
|
|
96
|
+
doubles[2] = 4.0;
|
|
97
|
+
values[0] = &firstarg;
|
|
98
|
+
values[1] = &doubles[0];
|
|
99
|
+
values[2] = &doubles[1];
|
|
100
|
+
values[3] = &doubles[2];
|
|
101
|
+
ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values);
|
|
102
|
+
/* { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } */
|
|
103
|
+
printf("ffi: %.1f\n", resfp);
|
|
104
|
+
/* { dg-output "\nffi: 11.0" } */
|
|
105
|
+
|
|
106
|
+
exit(0);
|
|
107
|
+
}
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
Originator: Blake Chaffin 6/18/2007
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
/* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
|
|
9
8
|
/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
|
|
10
9
|
/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
|
|
11
|
-
/* { dg-
|
|
10
|
+
/* { dg-options -Wformat=0 { target moxie*-*-elf } } */
|
|
12
11
|
|
|
13
12
|
#include "ffitest.h"
|
|
14
13
|
|
|
@@ -229,6 +228,19 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
229
228
|
ffi_type* st_fields[51];
|
|
230
229
|
BigStruct retVal;
|
|
231
230
|
|
|
231
|
+
uint8_t ui8 = 1;
|
|
232
|
+
int8_t si8 = 2;
|
|
233
|
+
uint16_t ui16 = 3;
|
|
234
|
+
int16_t si16 = 4;
|
|
235
|
+
uint32_t ui32 = 5;
|
|
236
|
+
int32_t si32 = 6;
|
|
237
|
+
uint64_t ui64 = 7;
|
|
238
|
+
int64_t si64 = 8;
|
|
239
|
+
float f = 9;
|
|
240
|
+
double d = 10;
|
|
241
|
+
long double ld = 11;
|
|
242
|
+
char* p = (char*)0x12345678;
|
|
243
|
+
|
|
232
244
|
memset (&retVal, 0, sizeof(retVal));
|
|
233
245
|
|
|
234
246
|
ret_struct_type.size = 0;
|
|
@@ -251,19 +263,6 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
251
263
|
|
|
252
264
|
st_fields[50] = NULL;
|
|
253
265
|
|
|
254
|
-
uint8_t ui8 = 1;
|
|
255
|
-
int8_t si8 = 2;
|
|
256
|
-
uint16_t ui16 = 3;
|
|
257
|
-
int16_t si16 = 4;
|
|
258
|
-
uint32_t ui32 = 5;
|
|
259
|
-
int32_t si32 = 6;
|
|
260
|
-
uint64_t ui64 = 7;
|
|
261
|
-
int64_t si64 = 8;
|
|
262
|
-
float f = 9;
|
|
263
|
-
double d = 10;
|
|
264
|
-
long double ld = 11;
|
|
265
|
-
char* p = (char*)0x12345678;
|
|
266
|
-
|
|
267
266
|
argTypes[0] = argTypes[12] = argTypes[24] = argTypes[36] = argTypes[48] = &ffi_type_uint8;
|
|
268
267
|
argValues[0] = argValues[12] = argValues[24] = argValues[36] = argValues[48] = &ui8;
|
|
269
268
|
argTypes[1] = argTypes[13] = argTypes[25] = argTypes[37] = argTypes[49] = &ffi_type_sint8;
|
|
@@ -295,7 +294,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
295
294
|
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
|
|
296
295
|
|
|
297
296
|
ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
|
|
298
|
-
|
|
297
|
+
/* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
|
|
299
298
|
printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
300
299
|
"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
301
300
|
"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
@@ -308,7 +307,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
308
307
|
retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
|
|
309
308
|
retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
|
|
310
309
|
retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
|
|
311
|
-
|
|
310
|
+
/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
|
|
312
311
|
|
|
313
312
|
CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
|
|
314
313
|
|
|
@@ -323,7 +322,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
323
322
|
ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
|
|
324
323
|
ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
|
|
325
324
|
ui8, si8);
|
|
326
|
-
|
|
325
|
+
/* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
|
|
327
326
|
printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
328
327
|
"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
329
328
|
"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
|
|
@@ -336,7 +335,7 @@ main(int argc __UNUSED__, const char** argv __UNUSED__)
|
|
|
336
335
|
retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
|
|
337
336
|
retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
|
|
338
337
|
retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
|
|
339
|
-
|
|
338
|
+
/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
|
|
340
339
|
|
|
341
340
|
return 0;
|
|
342
341
|
}
|
|
@@ -7,21 +7,11 @@
|
|
|
7
7
|
/* { dg-do run } */
|
|
8
8
|
#include "ffitest.h"
|
|
9
9
|
|
|
10
|
+
#include <stdlib.h>
|
|
10
11
|
#include <float.h>
|
|
12
|
+
#include <math.h>
|
|
11
13
|
|
|
12
|
-
static float many(float f1,
|
|
13
|
-
float f2,
|
|
14
|
-
float f3,
|
|
15
|
-
float f4,
|
|
16
|
-
float f5,
|
|
17
|
-
float f6,
|
|
18
|
-
float f7,
|
|
19
|
-
float f8,
|
|
20
|
-
float f9,
|
|
21
|
-
float f10,
|
|
22
|
-
float f11,
|
|
23
|
-
float f12,
|
|
24
|
-
float f13)
|
|
14
|
+
static float ABI_ATTR many(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13)
|
|
25
15
|
{
|
|
26
16
|
#if 0
|
|
27
17
|
printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
|
|
@@ -30,7 +20,7 @@ static float many(float f1,
|
|
|
30
20
|
(double) f11, (double) f12, (double) f13);
|
|
31
21
|
#endif
|
|
32
22
|
|
|
33
|
-
return
|
|
23
|
+
return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13;
|
|
34
24
|
}
|
|
35
25
|
|
|
36
26
|
int main (void)
|
|
@@ -50,7 +40,7 @@ int main (void)
|
|
|
50
40
|
}
|
|
51
41
|
|
|
52
42
|
/* Initialize the cif */
|
|
53
|
-
CHECK(ffi_prep_cif(&cif,
|
|
43
|
+
CHECK(ffi_prep_cif(&cif, ABI_NUM, 13,
|
|
54
44
|
&ffi_type_float, args) == FFI_OK);
|
|
55
45
|
|
|
56
46
|
ffi_call(&cif, FFI_FN(many), &f, values);
|
|
@@ -62,7 +52,7 @@ int main (void)
|
|
|
62
52
|
fa[8], fa[9],
|
|
63
53
|
fa[10],fa[11],fa[12]);
|
|
64
54
|
|
|
65
|
-
if (f - ff < FLT_EPSILON)
|
|
55
|
+
if (fabs(f - ff) < FLT_EPSILON)
|
|
66
56
|
exit(0);
|
|
67
57
|
else
|
|
68
58
|
abort();
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* Area: ffi_call
|
|
2
|
+
Purpose: Check uint8_t arguments.
|
|
3
|
+
Limitations: none.
|
|
4
|
+
PR: PR45677.
|
|
5
|
+
Originator: Dan Witte <dwitte@gmail.com> 20100916 */
|
|
6
|
+
|
|
7
|
+
/* { dg-do run } */
|
|
8
|
+
|
|
9
|
+
#include "ffitest.h"
|
|
10
|
+
|
|
11
|
+
#define NARGS 7
|
|
12
|
+
|
|
13
|
+
typedef unsigned char u8;
|
|
14
|
+
|
|
15
|
+
#ifdef __GNUC__
|
|
16
|
+
__attribute__((noinline))
|
|
17
|
+
#endif
|
|
18
|
+
uint8_t
|
|
19
|
+
foo (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
|
|
20
|
+
uint8_t e, uint8_t f, uint8_t g)
|
|
21
|
+
{
|
|
22
|
+
return a + b + c + d + e + f + g;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
uint8_t ABI_ATTR
|
|
26
|
+
bar (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
|
|
27
|
+
uint8_t e, uint8_t f, uint8_t g)
|
|
28
|
+
{
|
|
29
|
+
return foo (a, b, c, d, e, f, g);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
int
|
|
33
|
+
main (void)
|
|
34
|
+
{
|
|
35
|
+
ffi_type *ffitypes[NARGS];
|
|
36
|
+
int i;
|
|
37
|
+
ffi_cif cif;
|
|
38
|
+
ffi_arg result = 0;
|
|
39
|
+
uint8_t args[NARGS];
|
|
40
|
+
void *argptrs[NARGS];
|
|
41
|
+
|
|
42
|
+
for (i = 0; i < NARGS; ++i)
|
|
43
|
+
ffitypes[i] = &ffi_type_uint8;
|
|
44
|
+
|
|
45
|
+
CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS,
|
|
46
|
+
&ffi_type_uint8, ffitypes) == FFI_OK);
|
|
47
|
+
|
|
48
|
+
for (i = 0; i < NARGS; ++i)
|
|
49
|
+
{
|
|
50
|
+
args[i] = i;
|
|
51
|
+
argptrs[i] = &args[i];
|
|
52
|
+
}
|
|
53
|
+
ffi_call (&cif, FFI_FN (bar), &result, argptrs);
|
|
54
|
+
|
|
55
|
+
CHECK (result == 21);
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* Area: ffi_call
|
|
2
|
+
Purpose: Check return value double, with many arguments
|
|
3
|
+
Limitations: none.
|
|
4
|
+
PR: none.
|
|
5
|
+
Originator: From the original ffitest.c */
|
|
6
|
+
|
|
7
|
+
/* { dg-do run } */
|
|
8
|
+
#include "ffitest.h"
|
|
9
|
+
|
|
10
|
+
#include <stdlib.h>
|
|
11
|
+
#include <float.h>
|
|
12
|
+
#include <math.h>
|
|
13
|
+
|
|
14
|
+
static double many(double f1,
|
|
15
|
+
double f2,
|
|
16
|
+
double f3,
|
|
17
|
+
double f4,
|
|
18
|
+
double f5,
|
|
19
|
+
double f6,
|
|
20
|
+
double f7,
|
|
21
|
+
double f8,
|
|
22
|
+
double f9,
|
|
23
|
+
double f10,
|
|
24
|
+
double f11,
|
|
25
|
+
double f12,
|
|
26
|
+
double f13)
|
|
27
|
+
{
|
|
28
|
+
#if 0
|
|
29
|
+
printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
|
|
30
|
+
(double) f1, (double) f2, (double) f3, (double) f4, (double) f5,
|
|
31
|
+
(double) f6, (double) f7, (double) f8, (double) f9, (double) f10,
|
|
32
|
+
(double) f11, (double) f12, (double) f13);
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
int main (void)
|
|
39
|
+
{
|
|
40
|
+
ffi_cif cif;
|
|
41
|
+
ffi_type *args[13];
|
|
42
|
+
void *values[13];
|
|
43
|
+
double fa[13];
|
|
44
|
+
double f, ff;
|
|
45
|
+
int i;
|
|
46
|
+
|
|
47
|
+
for (i = 0; i < 13; i++)
|
|
48
|
+
{
|
|
49
|
+
args[i] = &ffi_type_double;
|
|
50
|
+
values[i] = &fa[i];
|
|
51
|
+
fa[i] = (double) i;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Initialize the cif */
|
|
55
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13,
|
|
56
|
+
&ffi_type_double, args) == FFI_OK);
|
|
57
|
+
|
|
58
|
+
ffi_call(&cif, FFI_FN(many), &f, values);
|
|
59
|
+
|
|
60
|
+
ff = many(fa[0], fa[1],
|
|
61
|
+
fa[2], fa[3],
|
|
62
|
+
fa[4], fa[5],
|
|
63
|
+
fa[6], fa[7],
|
|
64
|
+
fa[8], fa[9],
|
|
65
|
+
fa[10],fa[11],fa[12]);
|
|
66
|
+
if (fabs(f - ff) < FLT_EPSILON)
|
|
67
|
+
exit(0);
|
|
68
|
+
else
|
|
69
|
+
abort();
|
|
70
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* Area: ffi_call
|
|
2
|
+
Purpose: Check return value double, with many arguments
|
|
3
|
+
Limitations: none.
|
|
4
|
+
PR: none.
|
|
5
|
+
Originator: From the original ffitest.c */
|
|
6
|
+
|
|
7
|
+
/* { dg-do run } */
|
|
8
|
+
#include "ffitest.h"
|
|
9
|
+
|
|
10
|
+
#include <stdlib.h>
|
|
11
|
+
#include <float.h>
|
|
12
|
+
#include <math.h>
|
|
13
|
+
|
|
14
|
+
static double many(double f1,
|
|
15
|
+
double f2,
|
|
16
|
+
long int i1,
|
|
17
|
+
double f3,
|
|
18
|
+
double f4,
|
|
19
|
+
long int i2,
|
|
20
|
+
double f5,
|
|
21
|
+
double f6,
|
|
22
|
+
long int i3,
|
|
23
|
+
double f7,
|
|
24
|
+
double f8,
|
|
25
|
+
long int i4,
|
|
26
|
+
double f9,
|
|
27
|
+
double f10,
|
|
28
|
+
long int i5,
|
|
29
|
+
double f11,
|
|
30
|
+
double f12,
|
|
31
|
+
long int i6,
|
|
32
|
+
double f13)
|
|
33
|
+
{
|
|
34
|
+
return ((double) (i1 + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
int main (void)
|
|
38
|
+
{
|
|
39
|
+
ffi_cif cif;
|
|
40
|
+
ffi_type *args[19];
|
|
41
|
+
void *values[19];
|
|
42
|
+
double fa[19];
|
|
43
|
+
long int la[19];
|
|
44
|
+
double f, ff;
|
|
45
|
+
int i;
|
|
46
|
+
|
|
47
|
+
for (i = 0; i < 19; i++)
|
|
48
|
+
{
|
|
49
|
+
if( (i - 2) % 3 == 0) {
|
|
50
|
+
args[i] = &ffi_type_slong;
|
|
51
|
+
la[i] = (long int) i;
|
|
52
|
+
values[i] = &la[i];
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
args[i] = &ffi_type_double;
|
|
56
|
+
fa[i] = (double) i;
|
|
57
|
+
values[i] = &fa[i];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Initialize the cif */
|
|
62
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19,
|
|
63
|
+
&ffi_type_double, args) == FFI_OK);
|
|
64
|
+
|
|
65
|
+
ffi_call(&cif, FFI_FN(many), &f, values);
|
|
66
|
+
|
|
67
|
+
ff = many(fa[0], fa[1], la[2],
|
|
68
|
+
fa[3], fa[4], la[5],
|
|
69
|
+
fa[6], fa[7], la[8],
|
|
70
|
+
fa[9], fa[10], la[11],
|
|
71
|
+
fa[12], fa[13], la[14],
|
|
72
|
+
fa[15], fa[16], la[17],
|
|
73
|
+
fa[18]);
|
|
74
|
+
if (fabs(f - ff) < FLT_EPSILON)
|
|
75
|
+
exit(0);
|
|
76
|
+
else
|
|
77
|
+
abort();
|
|
78
|
+
}
|
|
@@ -77,6 +77,12 @@ int main (void)
|
|
|
77
77
|
ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
|
|
78
78
|
ffi_type* dbl_arg_types[5];
|
|
79
79
|
|
|
80
|
+
struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
|
|
81
|
+
struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
|
|
82
|
+
struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
|
|
83
|
+
{3, 1.0, 8.0}};
|
|
84
|
+
struct cls_struct_combined res_dbl;
|
|
85
|
+
|
|
80
86
|
cls_struct_type.size = 0;
|
|
81
87
|
cls_struct_type.alignment = 0;
|
|
82
88
|
cls_struct_type.type = FFI_TYPE_STRUCT;
|
|
@@ -92,12 +98,6 @@ int main (void)
|
|
|
92
98
|
cls_struct_type2.type = FFI_TYPE_STRUCT;
|
|
93
99
|
cls_struct_type2.elements = cls_struct_fields2;
|
|
94
100
|
|
|
95
|
-
struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
|
|
96
|
-
struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
|
|
97
|
-
struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
|
|
98
|
-
{3, 1.0, 8.0}};
|
|
99
|
-
struct cls_struct_combined res_dbl;
|
|
100
|
-
|
|
101
101
|
cls_struct_fields[0] = &ffi_type_double;
|
|
102
102
|
cls_struct_fields[1] = &ffi_type_float;
|
|
103
103
|
cls_struct_fields[2] = &ffi_type_sint;
|
|
@@ -81,6 +81,13 @@ int main (void)
|
|
|
81
81
|
ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
|
|
82
82
|
ffi_type* dbl_arg_types[5];
|
|
83
83
|
|
|
84
|
+
struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
|
|
85
|
+
struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
|
|
86
|
+
struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
|
|
87
|
+
{3, 1.0, 8.0}};
|
|
88
|
+
struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
|
|
89
|
+
struct cls_struct_combined res_dbl;
|
|
90
|
+
|
|
84
91
|
cls_struct_type.size = 0;
|
|
85
92
|
cls_struct_type.alignment = 0;
|
|
86
93
|
cls_struct_type.type = FFI_TYPE_STRUCT;
|
|
@@ -96,13 +103,6 @@ int main (void)
|
|
|
96
103
|
cls_struct_type2.type = FFI_TYPE_STRUCT;
|
|
97
104
|
cls_struct_type2.elements = cls_struct_fields2;
|
|
98
105
|
|
|
99
|
-
struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6};
|
|
100
|
-
struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0};
|
|
101
|
-
struct cls_struct_combined g_dbl = {{4.0, 5.0, 6},
|
|
102
|
-
{3, 1.0, 8.0}};
|
|
103
|
-
struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4};
|
|
104
|
-
struct cls_struct_combined res_dbl;
|
|
105
|
-
|
|
106
106
|
cls_struct_fields[0] = &ffi_type_double;
|
|
107
107
|
cls_struct_fields[1] = &ffi_type_float;
|
|
108
108
|
cls_struct_fields[2] = &ffi_type_sint;
|
|
@@ -156,6 +156,6 @@ int main (void)
|
|
|
156
156
|
CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii));
|
|
157
157
|
CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd));
|
|
158
158
|
CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff));
|
|
159
|
-
|
|
159
|
+
/* CHECK( 1 == 0); */
|
|
160
160
|
exit(0);
|
|
161
161
|
}
|