ffi 1.9.18-x64-mingw32 → 1.9.21-x64-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.
- checksums.yaml +5 -5
- data/README.md +3 -2
- data/Rakefile +14 -4
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/extconf.rb +7 -2
- data/ext/ffi_c/libffi.bsd.mk +9 -3
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +2 -1
- data/ext/ffi_c/libffi.mk +9 -4
- 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 +166 -157
- data/ext/ffi_c/libffi/Makefile.in +923 -938
- data/ext/ffi_c/libffi/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +381 -0
- data/ext/ffi_c/libffi/aclocal.m4 +645 -384
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
- data/ext/ffi_c/libffi/compile +218 -14
- data/ext/ffi_c/libffi/config.guess +329 -368
- data/ext/ffi_c/libffi/config.sub +232 -112
- data/ext/ffi_c/libffi/configure +6970 -2189
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +265 -4
- data/ext/ffi_c/libffi/depcomp +346 -185
- 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/{mdate-sh → doc/mdate-sh} +40 -13
- data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
- 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/fficonfig.h.in~ +210 -0
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -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 +107 -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 +637 -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/m4/libtool.m4 +1691 -1135
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
- data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
- 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 +941 -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 +597 -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 +319 -44
- 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/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 +95 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
- data/ext/ffi_c/libffi/src/mips/n32.S +126 -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 +6 -6
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
- 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 +25 -25
- 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 +100 -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 +589 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -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 +78 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -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_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/ffi.gemspec +2 -2
- data/lib/2.0/ffi_c.so +0 -0
- data/lib/2.1/ffi_c.so +0 -0
- data/lib/2.2/ffi_c.so +0 -0
- data/lib/2.3/ffi_c.so +0 -0
- data/lib/2.4/ffi_c.so +0 -0
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +65 -13
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -1
- data/spec/ffi/bitmask_spec.rb +575 -0
- data/spec/ffi/embed-test/ext/Makefile +242 -0
- data/spec/ffi/fixtures/BitmaskTest.c +51 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
- data/spec/ffi/struct_spec.rb +0 -4
- metadata +158 -32
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- 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/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
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
|
1
|
+
# Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011, 2014 Free Software Foundation, Inc.
|
2
2
|
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -100,33 +100,44 @@ proc libffi-init { args } {
|
|
100
100
|
global libffi_link_flags
|
101
101
|
global tool_root_dir
|
102
102
|
global ld_library_path
|
103
|
+
global compiler_vendor
|
104
|
+
|
105
|
+
if ![info exists blddirffi] {
|
106
|
+
set blddirffi [pwd]/..
|
107
|
+
}
|
103
108
|
|
104
|
-
set blddirffi [pwd]/..
|
105
109
|
verbose "libffi $blddirffi"
|
106
110
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
111
|
+
# Which compiler are we building with?
|
112
|
+
set tmp [grep "$blddirffi/config.log" "^ax_cv_c_compiler_vendor.*$"]
|
113
|
+
regexp -- {^[^=]*=(.*)$} $tmp nil compiler_vendor
|
114
|
+
|
115
|
+
if { [string match $compiler_vendor "gnu"] } {
|
116
|
+
set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
|
117
|
+
if {$gccdir != ""} {
|
118
|
+
set gccdir [file dirname $gccdir]
|
119
|
+
}
|
120
|
+
verbose "gccdir $gccdir"
|
121
|
+
|
122
|
+
set ld_library_path "."
|
123
|
+
append ld_library_path ":${gccdir}"
|
124
|
+
|
125
|
+
set compiler "${gccdir}/xgcc"
|
126
|
+
if { [is_remote host] == 0 && [which $compiler] != 0 } {
|
127
|
+
foreach i "[exec $compiler --print-multi-lib]" {
|
128
|
+
set mldir ""
|
129
|
+
regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
|
130
|
+
set mldir [string trimright $mldir "\;@"]
|
131
|
+
if { "$mldir" == "." } {
|
132
|
+
continue
|
133
|
+
}
|
134
|
+
if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
|
135
|
+
append ld_library_path ":${gccdir}/${mldir}"
|
136
|
+
}
|
127
137
|
}
|
128
|
-
|
138
|
+
}
|
129
139
|
}
|
140
|
+
|
130
141
|
# add the library path for libffi.
|
131
142
|
append ld_library_path ":${blddirffi}/.libs"
|
132
143
|
|
@@ -164,7 +175,7 @@ proc libffi_target_compile { source dest type options } {
|
|
164
175
|
global libffi_link_flags
|
165
176
|
global libffi_include
|
166
177
|
global target_triplet
|
167
|
-
|
178
|
+
global compiler_vendor
|
168
179
|
|
169
180
|
if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
|
170
181
|
lappend options "libs=${gluefile}"
|
@@ -174,7 +185,7 @@ proc libffi_target_compile { source dest type options } {
|
|
174
185
|
# TOOL_OPTIONS must come first, so that it doesn't override testcase
|
175
186
|
# specific options.
|
176
187
|
if [info exists TOOL_OPTIONS] {
|
177
|
-
lappend options
|
188
|
+
lappend options "additional_flags=$TOOL_OPTIONS"
|
178
189
|
}
|
179
190
|
|
180
191
|
# search for ffi_mips.h in srcdir, too
|
@@ -203,10 +214,42 @@ proc libffi_target_compile { source dest type options } {
|
|
203
214
|
|
204
215
|
lappend options "libs= -lffi"
|
205
216
|
|
217
|
+
if { [string match "aarch64*-*-linux*" $target_triplet] } {
|
218
|
+
lappend options "libs= -lpthread"
|
219
|
+
}
|
220
|
+
|
221
|
+
# this may be required for g++, but just confused clang.
|
222
|
+
if { [string match "*.cc" $source] } {
|
223
|
+
lappend options "c++"
|
224
|
+
}
|
225
|
+
|
226
|
+
if { [string match "arc*-*-linux*" $target_triplet] } {
|
227
|
+
lappend options "libs= -lpthread"
|
228
|
+
}
|
229
|
+
|
206
230
|
verbose "options: $options"
|
207
231
|
return [target_compile $source $dest $type $options]
|
208
232
|
}
|
209
233
|
|
234
|
+
# TEST should be a preprocessor condition. Returns true if it holds.
|
235
|
+
proc libffi_feature_test { test } {
|
236
|
+
set src "ffitest[pid].c"
|
237
|
+
|
238
|
+
set f [open $src "w"]
|
239
|
+
puts $f "#include <ffi.h>"
|
240
|
+
puts $f $test
|
241
|
+
puts $f "/* OK */"
|
242
|
+
puts $f "#else"
|
243
|
+
puts $f "# error Failed $test"
|
244
|
+
puts $f "#endif"
|
245
|
+
close $f
|
246
|
+
|
247
|
+
set lines [libffi_target_compile $src /dev/null assembly ""]
|
248
|
+
file delete $src
|
249
|
+
|
250
|
+
return [string match "" $lines]
|
251
|
+
}
|
252
|
+
|
210
253
|
# Utility routines.
|
211
254
|
|
212
255
|
#
|
@@ -254,6 +297,58 @@ proc libffi-dg-runtest { testcases default-extra-flags } {
|
|
254
297
|
}
|
255
298
|
}
|
256
299
|
|
300
|
+
proc run-many-tests { testcases extra_flags } {
|
301
|
+
global compiler_vendor
|
302
|
+
switch $compiler_vendor {
|
303
|
+
"clang" {
|
304
|
+
set common "-W -Wall"
|
305
|
+
set optimizations { "-O0" "-O1" "-O2" "-O3" "-Os" }
|
306
|
+
}
|
307
|
+
"gnu" {
|
308
|
+
set common "-W -Wall -Wno-psabi"
|
309
|
+
set optimizations { "-O0" "-O2" "-O3" "-Os" "-O2 -fomit-frame-pointer" }
|
310
|
+
}
|
311
|
+
default {
|
312
|
+
# Assume we are using the vendor compiler.
|
313
|
+
set common ""
|
314
|
+
set optimizations { "" }
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
set targetabis { "" }
|
319
|
+
if [string match $compiler_vendor "gnu"] {
|
320
|
+
if [istarget "i?86-*-*"] {
|
321
|
+
set targetabis {
|
322
|
+
""
|
323
|
+
"-DABI_NUM=FFI_STDCALL -DABI_ATTR=__STDCALL__"
|
324
|
+
"-DABI_NUM=FFI_THISCALL -DABI_ATTR=__THISCALL__"
|
325
|
+
"-DABI_NUM=FFI_FASTCALL -DABI_ATTR=__FASTCALL__"
|
326
|
+
}
|
327
|
+
} elseif [istarget "x86_64-*-*"] {
|
328
|
+
set targetabis {
|
329
|
+
""
|
330
|
+
"-DABI_NUM=FFI_WIN64 -DABI_ATTR=__MSABI__"
|
331
|
+
}
|
332
|
+
}
|
333
|
+
}
|
334
|
+
|
335
|
+
set common [ concat $common $extra_flags ]
|
336
|
+
foreach test $testcases {
|
337
|
+
set testname [file tail $test]
|
338
|
+
if [search_for $test "ABI_NUM"] {
|
339
|
+
set abis $targetabis
|
340
|
+
} else {
|
341
|
+
set abis { "" }
|
342
|
+
}
|
343
|
+
foreach opt $optimizations {
|
344
|
+
foreach abi $abis {
|
345
|
+
set options [concat $common $opt $abi]
|
346
|
+
verbose "Testing $testname, $options" 1
|
347
|
+
dg-test $test $options ""
|
348
|
+
}
|
349
|
+
}
|
350
|
+
}
|
351
|
+
}
|
257
352
|
|
258
353
|
# Like check_conditional_xfail, but callable from a dg test.
|
259
354
|
|
@@ -25,7 +25,7 @@ set orig_ld_library64_path_saved 0
|
|
25
25
|
set orig_ld_library_path_32_saved 0
|
26
26
|
set orig_ld_library_path_64_saved 0
|
27
27
|
set orig_dyld_library_path_saved 0
|
28
|
-
|
28
|
+
set orig_path_saved 0
|
29
29
|
|
30
30
|
#######################################
|
31
31
|
# proc set_ld_library_path_env_vars { }
|
@@ -42,6 +42,7 @@ proc set_ld_library_path_env_vars { } {
|
|
42
42
|
global orig_ld_library_path_32_saved
|
43
43
|
global orig_ld_library_path_64_saved
|
44
44
|
global orig_dyld_library_path_saved
|
45
|
+
global orig_path_saved
|
45
46
|
global orig_ld_library_path
|
46
47
|
global orig_ld_run_path
|
47
48
|
global orig_shlib_path
|
@@ -50,6 +51,7 @@ proc set_ld_library_path_env_vars { } {
|
|
50
51
|
global orig_ld_library_path_32
|
51
52
|
global orig_ld_library_path_64
|
52
53
|
global orig_dyld_library_path
|
54
|
+
global orig_path
|
53
55
|
global GCC_EXEC_PREFIX
|
54
56
|
|
55
57
|
# Set the relocated compiler prefix, but only if the user hasn't specified one.
|
@@ -100,6 +102,10 @@ proc set_ld_library_path_env_vars { } {
|
|
100
102
|
set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)"
|
101
103
|
set orig_dyld_library_path_saved 1
|
102
104
|
}
|
105
|
+
if [info exists env(PATH)] {
|
106
|
+
set orig_path "$env(PATH)"
|
107
|
+
set orig_path_saved 1
|
108
|
+
}
|
103
109
|
}
|
104
110
|
|
105
111
|
# We need to set ld library path in the environment. Currently,
|
@@ -169,6 +175,13 @@ proc set_ld_library_path_env_vars { } {
|
|
169
175
|
} else {
|
170
176
|
setenv DYLD_LIBRARY_PATH "$ld_library_path"
|
171
177
|
}
|
178
|
+
if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } {
|
179
|
+
if { $orig_path_saved } {
|
180
|
+
setenv PATH "$ld_library_path:$orig_path"
|
181
|
+
} else {
|
182
|
+
setenv PATH "$ld_library_path"
|
183
|
+
}
|
184
|
+
}
|
172
185
|
|
173
186
|
verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path"
|
174
187
|
}
|
@@ -187,6 +200,7 @@ proc restore_ld_library_path_env_vars { } {
|
|
187
200
|
global orig_ld_library_path_32_saved
|
188
201
|
global orig_ld_library_path_64_saved
|
189
202
|
global orig_dyld_library_path_saved
|
203
|
+
global orig_path_saved
|
190
204
|
global orig_ld_library_path
|
191
205
|
global orig_ld_run_path
|
192
206
|
global orig_shlib_path
|
@@ -195,6 +209,7 @@ proc restore_ld_library_path_env_vars { } {
|
|
195
209
|
global orig_ld_library_path_32
|
196
210
|
global orig_ld_library_path_64
|
197
211
|
global orig_dyld_library_path
|
212
|
+
global orig_path
|
198
213
|
|
199
214
|
if { $orig_environment_saved == 0 } {
|
200
215
|
return
|
@@ -240,6 +255,11 @@ proc restore_ld_library_path_env_vars { } {
|
|
240
255
|
} elseif [info exists env(DYLD_LIBRARY_PATH)] {
|
241
256
|
unsetenv DYLD_LIBRARY_PATH
|
242
257
|
}
|
258
|
+
if { $orig_path_saved } {
|
259
|
+
setenv PATH "$orig_path"
|
260
|
+
} elseif [info exists env(PATH)] {
|
261
|
+
unsetenv PATH
|
262
|
+
}
|
243
263
|
}
|
244
264
|
|
245
265
|
#######################################
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/* Area: ffi_call
|
2
|
+
Purpose: Check for proper argument alignment.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <twalljava@java.net> (from many_win32.c) */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
|
9
|
+
#include "ffitest.h"
|
10
|
+
|
11
|
+
static float ABI_ATTR align_arguments(int i1,
|
12
|
+
double f2,
|
13
|
+
int i3,
|
14
|
+
double f4)
|
15
|
+
{
|
16
|
+
return i1+f2+i3+f4;
|
17
|
+
}
|
18
|
+
|
19
|
+
int main(void)
|
20
|
+
{
|
21
|
+
ffi_cif cif;
|
22
|
+
ffi_type *args[4] = {
|
23
|
+
&ffi_type_sint,
|
24
|
+
&ffi_type_double,
|
25
|
+
&ffi_type_sint,
|
26
|
+
&ffi_type_double
|
27
|
+
};
|
28
|
+
double fa[2] = {1,2};
|
29
|
+
int ia[2] = {1,2};
|
30
|
+
void *values[4] = {&ia[0], &fa[0], &ia[1], &fa[1]};
|
31
|
+
float f, ff;
|
32
|
+
|
33
|
+
/* Initialize the cif */
|
34
|
+
CHECK(ffi_prep_cif(&cif, ABI_NUM, 4,
|
35
|
+
&ffi_type_float, args) == FFI_OK);
|
36
|
+
|
37
|
+
ff = align_arguments(ia[0], fa[0], ia[1], fa[1]);
|
38
|
+
|
39
|
+
ffi_call(&cif, FFI_FN(align_arguments), &f, values);
|
40
|
+
|
41
|
+
if (f == ff)
|
42
|
+
printf("align arguments tests ok!\n");
|
43
|
+
else
|
44
|
+
CHECK(0);
|
45
|
+
exit(0);
|
46
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc.
|
1
|
+
# Copyright (C) 2003, 2006, 2009, 2010, 2014 Free Software Foundation, Inc.
|
2
2
|
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -19,11 +19,9 @@ libffi-init
|
|
19
19
|
|
20
20
|
global srcdir subdir
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" ""
|
26
|
-
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2 -fomit-frame-pointer" ""
|
22
|
+
set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.{c,cc}]]
|
23
|
+
|
24
|
+
run-many-tests $tlist ""
|
27
25
|
|
28
26
|
dg-finish
|
29
27
|
|
@@ -1,15 +1,14 @@
|
|
1
|
-
/* Area: closure_call
|
2
|
-
Purpose: Check
|
1
|
+
/* Area: closure_call
|
2
|
+
Purpose: Check simple closure handling with all ABIs
|
3
3
|
Limitations: none.
|
4
4
|
PR: none.
|
5
5
|
Originator: <twalljava@dev.java.net> */
|
6
6
|
|
7
|
-
/* { dg-do run
|
7
|
+
/* { dg-do run } */
|
8
8
|
#include "ffitest.h"
|
9
9
|
|
10
10
|
static void
|
11
|
-
|
12
|
-
void* userdata)
|
11
|
+
closure_test(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata)
|
13
12
|
{
|
14
13
|
*(ffi_arg*)resp =
|
15
14
|
(int)*(int *)args[0] + (int)(*(int *)args[1])
|
@@ -23,7 +22,7 @@ closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
|
23
22
|
|
24
23
|
}
|
25
24
|
|
26
|
-
typedef int (
|
25
|
+
typedef int (ABI_ATTR *closure_test_type0)(int, int, int, int);
|
27
26
|
|
28
27
|
int main (void)
|
29
28
|
{
|
@@ -32,9 +31,6 @@ int main (void)
|
|
32
31
|
ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
|
33
32
|
ffi_type * cl_arg_types[17];
|
34
33
|
int res;
|
35
|
-
void* sp_pre;
|
36
|
-
void* sp_post;
|
37
|
-
char buf[1024];
|
38
34
|
|
39
35
|
cl_arg_types[0] = &ffi_type_uint;
|
40
36
|
cl_arg_types[1] = &ffi_type_uint;
|
@@ -43,22 +39,17 @@ int main (void)
|
|
43
39
|
cl_arg_types[4] = NULL;
|
44
40
|
|
45
41
|
/* Initialize the cif */
|
46
|
-
CHECK(ffi_prep_cif(&cif,
|
42
|
+
CHECK(ffi_prep_cif(&cif, ABI_NUM, 4,
|
47
43
|
&ffi_type_sint, cl_arg_types) == FFI_OK);
|
48
44
|
|
49
|
-
CHECK(ffi_prep_closure_loc(pcl, &cif,
|
45
|
+
CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test,
|
50
46
|
(void *) 3 /* userdata */, code) == FFI_OK);
|
51
47
|
|
52
|
-
asm volatile (" movl %%esp,%0" : "=g" (sp_pre));
|
53
48
|
res = (*(closure_test_type0)code)(0, 1, 2, 3);
|
54
|
-
asm volatile (" movl %%esp,%0" : "=g" (sp_post));
|
55
49
|
/* { dg-output "0 1 2 3: 9" } */
|
56
50
|
|
57
51
|
printf("res: %d\n",res);
|
58
52
|
/* { dg-output "\nres: 9" } */
|
59
53
|
|
60
|
-
sprintf(buf, "mismatch: pre=%p vs post=%p", sp_pre, sp_post);
|
61
|
-
printf("stack pointer %s\n", (sp_pre == sp_post ? "match" : buf));
|
62
|
-
/* { dg-output "\nstack pointer match" } */
|
63
54
|
exit(0);
|
64
55
|
}
|
@@ -49,15 +49,15 @@ int main (void)
|
|
49
49
|
ffi_type cls_struct_type;
|
50
50
|
ffi_type* dbl_arg_types[5];
|
51
51
|
|
52
|
+
struct cls_struct_12byte h_dbl = { 7, 4, 9 };
|
53
|
+
struct cls_struct_12byte j_dbl = { 1, 5, 3 };
|
54
|
+
struct cls_struct_12byte res_dbl;
|
55
|
+
|
52
56
|
cls_struct_type.size = 0;
|
53
57
|
cls_struct_type.alignment = 0;
|
54
58
|
cls_struct_type.type = FFI_TYPE_STRUCT;
|
55
59
|
cls_struct_type.elements = cls_struct_fields;
|
56
60
|
|
57
|
-
struct cls_struct_12byte h_dbl = { 7, 4, 9 };
|
58
|
-
struct cls_struct_12byte j_dbl = { 1, 5, 3 };
|
59
|
-
struct cls_struct_12byte res_dbl;
|
60
|
-
|
61
61
|
cls_struct_fields[0] = &ffi_type_sint;
|
62
62
|
cls_struct_fields[1] = &ffi_type_sint;
|
63
63
|
cls_struct_fields[2] = &ffi_type_sint;
|
@@ -50,15 +50,15 @@ int main (void)
|
|
50
50
|
ffi_type cls_struct_type;
|
51
51
|
ffi_type* dbl_arg_types[5];
|
52
52
|
|
53
|
+
struct cls_struct_16byte h_dbl = { 7, 8.0, 9 };
|
54
|
+
struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
|
55
|
+
struct cls_struct_16byte res_dbl;
|
56
|
+
|
53
57
|
cls_struct_type.size = 0;
|
54
58
|
cls_struct_type.alignment = 0;
|
55
59
|
cls_struct_type.type = FFI_TYPE_STRUCT;
|
56
60
|
cls_struct_type.elements = cls_struct_fields;
|
57
61
|
|
58
|
-
struct cls_struct_16byte h_dbl = { 7, 8.0, 9 };
|
59
|
-
struct cls_struct_16byte j_dbl = { 1, 9.0, 3 };
|
60
|
-
struct cls_struct_16byte res_dbl;
|
61
|
-
|
62
62
|
cls_struct_fields[0] = &ffi_type_sint;
|
63
63
|
cls_struct_fields[1] = &ffi_type_double;
|
64
64
|
cls_struct_fields[2] = &ffi_type_sint;
|
@@ -54,15 +54,15 @@ int main (void)
|
|
54
54
|
ffi_type cls_struct_type;
|
55
55
|
ffi_type* dbl_arg_types[3];
|
56
56
|
|
57
|
+
struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 };
|
58
|
+
struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
|
59
|
+
struct cls_struct_18byte res_dbl;
|
60
|
+
|
57
61
|
cls_struct_type.size = 0;
|
58
62
|
cls_struct_type.alignment = 0;
|
59
63
|
cls_struct_type.type = FFI_TYPE_STRUCT;
|
60
64
|
cls_struct_type.elements = cls_struct_fields;
|
61
65
|
|
62
|
-
struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 };
|
63
|
-
struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 };
|
64
|
-
struct cls_struct_18byte res_dbl;
|
65
|
-
|
66
66
|
cls_struct_fields[0] = &ffi_type_double;
|
67
67
|
cls_struct_fields[1] = &ffi_type_uchar;
|
68
68
|
cls_struct_fields[2] = &ffi_type_uchar;
|