ffi 1.9.18 → 1.9.21
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 +4 -4
- data/README.md +3 -2
- data/Rakefile +14 -3
- 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/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +381 -0
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +265 -4
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -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/generate-darwin-source-and-headers.py +207 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- 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/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/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/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/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/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/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/fixtures/BitmaskTest.c +51 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
- data/spec/ffi/struct_spec.rb +0 -4
- metadata +143 -51
- data/ext/ffi_c/libffi/Makefile.in +0 -1820
- 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/config.guess +0 -1501
- data/ext/ffi_c/libffi/config.sub +0 -1705
- data/ext/ffi_c/libffi/configure +0 -17191
- 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/fficonfig.h.in +0 -199
- data/ext/ffi_c/libffi/include/Makefile.in +0 -487
- 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/install-sh +0 -520
- data/ext/ffi_c/libffi/ltmain.sh +0 -9636
- 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/man/Makefile.in +0 -466
- data/ext/ffi_c/libffi/mdate-sh +0 -201
- data/ext/ffi_c/libffi/missing +0 -376
- 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/Makefile.in +0 -500
- 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
@@ -29,7 +29,7 @@
|
|
29
29
|
#include <ffi.h>
|
30
30
|
#include <ffi_common.h>
|
31
31
|
|
32
|
-
#define STACK_ARG_SIZE(x)
|
32
|
+
#define STACK_ARG_SIZE(x) FFI_ALIGN(x, FFI_SIZEOF_ARG)
|
33
33
|
|
34
34
|
static ffi_status
|
35
35
|
initialize_aggregate_packed_struct (ffi_type * arg)
|
@@ -153,21 +153,24 @@ ffi_prep_args (char *stack, extended_cif * ecif)
|
|
153
153
|
return (struct_count);
|
154
154
|
}
|
155
155
|
|
156
|
-
ffi_status
|
157
|
-
|
158
|
-
|
159
|
-
|
156
|
+
ffi_status FFI_HIDDEN
|
157
|
+
ffi_prep_cif_core (ffi_cif * cif,
|
158
|
+
ffi_abi abi, unsigned int isvariadic,
|
159
|
+
unsigned int nfixedargs, unsigned int ntotalargs,
|
160
|
+
ffi_type * rtype, ffi_type ** atypes)
|
160
161
|
{
|
161
162
|
unsigned bytes = 0;
|
162
163
|
unsigned int i;
|
163
164
|
ffi_type **ptr;
|
164
165
|
|
165
166
|
FFI_ASSERT (cif != NULL);
|
167
|
+
FFI_ASSERT((!isvariadic) || (nfixedargs >= 1));
|
168
|
+
FFI_ASSERT(nfixedargs <= ntotalargs);
|
166
169
|
FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI);
|
167
170
|
|
168
171
|
cif->abi = abi;
|
169
172
|
cif->arg_types = atypes;
|
170
|
-
cif->nargs =
|
173
|
+
cif->nargs = ntotalargs;
|
171
174
|
cif->rtype = rtype;
|
172
175
|
|
173
176
|
cif->flags = 0;
|
@@ -187,7 +190,7 @@ ffi_prep_cif (ffi_cif * cif,
|
|
187
190
|
FFI_ASSERT_VALID_TYPE (*ptr);
|
188
191
|
|
189
192
|
if (((*ptr)->alignment - 1) & bytes)
|
190
|
-
bytes =
|
193
|
+
bytes = FFI_ALIGN (bytes, (*ptr)->alignment);
|
191
194
|
if ((*ptr)->type == FFI_TYPE_STRUCT)
|
192
195
|
{
|
193
196
|
if ((*ptr)->size > 8)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 1996-2003 Red Hat, Inc.
|
3
4
|
Target configuration macros for CRIS.
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -27,6 +28,10 @@
|
|
27
28
|
#ifndef LIBFFI_TARGET_H
|
28
29
|
#define LIBFFI_TARGET_H
|
29
30
|
|
31
|
+
#ifndef LIBFFI_H
|
32
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
+
#endif
|
34
|
+
|
30
35
|
#ifndef LIBFFI_ASM
|
31
36
|
typedef unsigned long ffi_arg;
|
32
37
|
typedef signed long ffi_sarg;
|
@@ -54,6 +54,11 @@ void ffi_type_test(ffi_type *a, char *file, int line)
|
|
54
54
|
FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line);
|
55
55
|
FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line);
|
56
56
|
FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line);
|
57
|
-
FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT
|
57
|
+
FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX)
|
58
|
+
|| a->elements != NULL, file, line);
|
59
|
+
FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX
|
60
|
+
|| (a->elements != NULL
|
61
|
+
&& a->elements[0] != NULL && a->elements[1] == NULL),
|
62
|
+
file, line);
|
58
63
|
|
59
64
|
}
|
@@ -438,6 +438,11 @@ DEFAULT_MMAP_THRESHOLD default: 256K
|
|
438
438
|
|
439
439
|
*/
|
440
440
|
|
441
|
+
#if defined __linux__ && !defined _GNU_SOURCE
|
442
|
+
/* mremap() on Linux requires this via sys/mman.h */
|
443
|
+
#define _GNU_SOURCE 1
|
444
|
+
#endif
|
445
|
+
|
441
446
|
#ifndef WIN32
|
442
447
|
#ifdef _WIN32
|
443
448
|
#define WIN32 1
|
@@ -1255,7 +1260,7 @@ extern void* sbrk(ptrdiff_t);
|
|
1255
1260
|
#define SIZE_T_BITSIZE (sizeof(size_t) << 3)
|
1256
1261
|
|
1257
1262
|
/* Some constants coerced to size_t */
|
1258
|
-
/* Annoying but necessary to avoid errors on some
|
1263
|
+
/* Annoying but necessary to avoid errors on some platforms */
|
1259
1264
|
#define SIZE_T_ZERO ((size_t)0)
|
1260
1265
|
#define SIZE_T_ONE ((size_t)1)
|
1261
1266
|
#define SIZE_T_TWO ((size_t)2)
|
@@ -1409,7 +1414,7 @@ static int win32munmap(void* ptr, size_t size) {
|
|
1409
1414
|
#define CALL_MORECORE(S) MFAIL
|
1410
1415
|
#endif /* HAVE_MORECORE */
|
1411
1416
|
|
1412
|
-
/* mstate bit set if
|
1417
|
+
/* mstate bit set if contiguous morecore disabled or failed */
|
1413
1418
|
#define USE_NONCONTIGUOUS_BIT (4U)
|
1414
1419
|
|
1415
1420
|
/* segment bit set in create_mspace_with_base */
|
@@ -1661,7 +1666,7 @@ struct malloc_chunk {
|
|
1661
1666
|
typedef struct malloc_chunk mchunk;
|
1662
1667
|
typedef struct malloc_chunk* mchunkptr;
|
1663
1668
|
typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
|
1664
|
-
typedef
|
1669
|
+
typedef size_t bindex_t; /* Described below */
|
1665
1670
|
typedef unsigned int binmap_t; /* Described below */
|
1666
1671
|
typedef unsigned int flag_t; /* The type of various bit flag sets */
|
1667
1672
|
|
@@ -2291,7 +2296,7 @@ static size_t traverse_and_check(mstate m);
|
|
2291
2296
|
#define treebin_at(M,i) (&((M)->treebins[i]))
|
2292
2297
|
|
2293
2298
|
/* assign tree index for size S to variable I */
|
2294
|
-
#if defined(__GNUC__) && defined(
|
2299
|
+
#if defined(__GNUC__) && defined(__i386__)
|
2295
2300
|
#define compute_tree_index(S, I)\
|
2296
2301
|
{\
|
2297
2302
|
size_t X = S >> TREEBIN_SHIFT;\
|
@@ -2356,7 +2361,7 @@ static size_t traverse_and_check(mstate m);
|
|
2356
2361
|
|
2357
2362
|
/* index corresponding to given bit */
|
2358
2363
|
|
2359
|
-
#if defined(__GNUC__) && defined(
|
2364
|
+
#if defined(__GNUC__) && defined(__i386__)
|
2360
2365
|
#define compute_bit2idx(X, I)\
|
2361
2366
|
{\
|
2362
2367
|
unsigned int J;\
|
@@ -3090,8 +3095,8 @@ static void internal_malloc_stats(mstate m) {
|
|
3090
3095
|
and choose its bk node as its replacement.
|
3091
3096
|
2. If x was the last node of its size, but not a leaf node, it must
|
3092
3097
|
be replaced with a leaf node (not merely one with an open left or
|
3093
|
-
right), to make sure that lefts and rights of
|
3094
|
-
correspond properly to bit masks. We use the rightmost
|
3098
|
+
right), to make sure that lefts and rights of descendants
|
3099
|
+
correspond properly to bit masks. We use the rightmost descendant
|
3095
3100
|
of x. We could use any other leaf, but this is easy to locate and
|
3096
3101
|
tends to counteract removal of leftmosts elsewhere, and so keeps
|
3097
3102
|
paths shorter than minimally guaranteed. This doesn't loop much
|
@@ -3388,7 +3393,7 @@ static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
|
|
3388
3393
|
*ss = m->seg; /* Push current record */
|
3389
3394
|
m->seg.base = tbase;
|
3390
3395
|
m->seg.size = tsize;
|
3391
|
-
set_segment_flags(&m->seg, mmapped);
|
3396
|
+
(void)set_segment_flags(&m->seg, mmapped);
|
3392
3397
|
m->seg.next = ss;
|
3393
3398
|
|
3394
3399
|
/* Insert trailing fenceposts */
|
@@ -3548,7 +3553,7 @@ static void* sys_alloc(mstate m, size_t nb) {
|
|
3548
3553
|
if (!is_initialized(m)) { /* first-time initialization */
|
3549
3554
|
m->seg.base = m->least_addr = tbase;
|
3550
3555
|
m->seg.size = tsize;
|
3551
|
-
set_segment_flags(&m->seg, mmap_flag);
|
3556
|
+
(void)set_segment_flags(&m->seg, mmap_flag);
|
3552
3557
|
m->magic = mparams.magic;
|
3553
3558
|
init_bins(m);
|
3554
3559
|
if (is_global(m))
|
@@ -5091,10 +5096,10 @@ History:
|
|
5091
5096
|
Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
|
5092
5097
|
* Use last_remainder in more cases.
|
5093
5098
|
* Pack bins using idea from colin@nyx10.cs.du.edu
|
5094
|
-
* Use ordered bins instead of best-fit
|
5099
|
+
* Use ordered bins instead of best-fit threshold
|
5095
5100
|
* Eliminate block-local decls to simplify tracing and debugging.
|
5096
5101
|
* Support another case of realloc via move into top
|
5097
|
-
* Fix error
|
5102
|
+
* Fix error occurring when initial sbrk_base not word-aligned.
|
5098
5103
|
* Rely on page size for units instead of SBRK_UNIT to
|
5099
5104
|
avoid surprises about sbrk alignment conventions.
|
5100
5105
|
* Add mallinfo, mallopt. Thanks to Raymond Nijssen
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 1996-2004 Red Hat, Inc.
|
3
4
|
Target configuration macros for FR-V
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -27,6 +28,10 @@
|
|
27
28
|
#ifndef LIBFFI_TARGET_H
|
28
29
|
#define LIBFFI_TARGET_H
|
29
30
|
|
31
|
+
#ifndef LIBFFI_H
|
32
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
+
#endif
|
34
|
+
|
30
35
|
/* ---- System specific configurations ----------------------------------- */
|
31
36
|
|
32
37
|
#ifndef LIBFFI_ASM
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/* -----------------------------------------------------------------------
|
2
|
-
ffi.c - Copyright (c)
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
|
3
|
+
Copyright (c) 2000 Hewlett Packard Company
|
4
|
+
Copyright (c) 2011 Anthony Green
|
5
|
+
|
6
6
|
IA64 Foreign Function Interface
|
7
7
|
|
8
8
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -325,13 +325,17 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
|
|
325
325
|
case FFI_TYPE_FLOAT:
|
326
326
|
if (gpcount < 8 && fpcount < 8)
|
327
327
|
stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
|
328
|
-
|
328
|
+
{
|
329
|
+
UINT32 tmp;
|
330
|
+
memcpy (&tmp, avalue[i], sizeof (UINT32));
|
331
|
+
stack->gp_regs[gpcount++] = tmp;
|
332
|
+
}
|
329
333
|
break;
|
330
334
|
|
331
335
|
case FFI_TYPE_DOUBLE:
|
332
336
|
if (gpcount < 8 && fpcount < 8)
|
333
337
|
stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
|
334
|
-
stack->gp_regs[gpcount++]
|
338
|
+
memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64));
|
335
339
|
break;
|
336
340
|
|
337
341
|
case FFI_TYPE_LONGDOUBLE:
|
@@ -397,7 +401,7 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
|
|
397
401
|
the closure (in the "trampoline" area), but we replace the gp
|
398
402
|
pointer with a pointer to the closure itself. We also add the real
|
399
403
|
gp pointer to the closure. This allows the function entry code to
|
400
|
-
both retrieve the user data, and to
|
404
|
+
both retrieve the user data, and to restore the correct gp pointer. */
|
401
405
|
|
402
406
|
extern void ffi_closure_unix ();
|
403
407
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 1996-2003 Red Hat, Inc.
|
3
4
|
Target configuration macros for IA-64.
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -27,6 +28,10 @@
|
|
27
28
|
#ifndef LIBFFI_TARGET_H
|
28
29
|
#define LIBFFI_TARGET_H
|
29
30
|
|
31
|
+
#ifndef LIBFFI_H
|
32
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
+
#endif
|
34
|
+
|
30
35
|
#ifndef LIBFFI_ASM
|
31
36
|
typedef unsigned long long ffi_arg;
|
32
37
|
typedef signed long long ffi_sarg;
|
@@ -39,7 +39,7 @@
|
|
39
39
|
#include <ffi_common.h>
|
40
40
|
#include <stdlib.h>
|
41
41
|
|
42
|
-
#if !defined(NO_JAVA_RAW_API)
|
42
|
+
#if !defined(NO_JAVA_RAW_API)
|
43
43
|
|
44
44
|
size_t
|
45
45
|
ffi_java_raw_size (ffi_cif *cif)
|
@@ -60,6 +60,9 @@ ffi_java_raw_size (ffi_cif *cif)
|
|
60
60
|
case FFI_TYPE_STRUCT:
|
61
61
|
/* No structure parameters in Java. */
|
62
62
|
abort();
|
63
|
+
case FFI_TYPE_COMPLEX:
|
64
|
+
/* Not supported yet. */
|
65
|
+
abort();
|
63
66
|
default:
|
64
67
|
result += FFI_SIZEOF_JAVA_RAW;
|
65
68
|
}
|
@@ -104,10 +107,14 @@ ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args)
|
|
104
107
|
*args = (void*) &(raw++)->ptr;
|
105
108
|
break;
|
106
109
|
|
110
|
+
case FFI_TYPE_COMPLEX:
|
111
|
+
/* Not supported yet. */
|
112
|
+
abort();
|
113
|
+
|
107
114
|
default:
|
108
115
|
*args = raw;
|
109
116
|
raw +=
|
110
|
-
|
117
|
+
FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
|
111
118
|
}
|
112
119
|
}
|
113
120
|
|
@@ -126,13 +133,16 @@ ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args)
|
|
126
133
|
*args = (void*) raw;
|
127
134
|
raw += 2;
|
128
135
|
break;
|
136
|
+
case FFI_TYPE_COMPLEX:
|
137
|
+
/* Not supported yet. */
|
138
|
+
abort();
|
129
139
|
default:
|
130
140
|
*args = (void*) raw++;
|
131
141
|
}
|
132
142
|
#else /* FFI_SIZEOF_JAVA_RAW != 8 */
|
133
143
|
*args = (void*) raw;
|
134
144
|
raw +=
|
135
|
-
|
145
|
+
FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
|
136
146
|
#endif /* FFI_SIZEOF_JAVA_RAW == 8 */
|
137
147
|
}
|
138
148
|
|
@@ -224,7 +234,7 @@ ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw)
|
|
224
234
|
#else
|
225
235
|
memcpy ((void*) raw->data, (void*)*args, (*tp)->size);
|
226
236
|
raw +=
|
227
|
-
|
237
|
+
FFI_ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw);
|
228
238
|
#endif
|
229
239
|
}
|
230
240
|
}
|
@@ -254,6 +264,10 @@ ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue)
|
|
254
264
|
*(SINT64 *)rvalue <<= 32;
|
255
265
|
break;
|
256
266
|
|
267
|
+
case FFI_TYPE_COMPLEX:
|
268
|
+
/* Not supported yet. */
|
269
|
+
abort();
|
270
|
+
|
257
271
|
default:
|
258
272
|
break;
|
259
273
|
}
|
@@ -279,6 +293,10 @@ ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue)
|
|
279
293
|
*(SINT64 *)rvalue >>= 32;
|
280
294
|
break;
|
281
295
|
|
296
|
+
case FFI_TYPE_COMPLEX:
|
297
|
+
/* Not supported yet. */
|
298
|
+
abort();
|
299
|
+
|
282
300
|
default:
|
283
301
|
break;
|
284
302
|
}
|
@@ -353,4 +371,4 @@ ffi_prep_java_raw_closure (ffi_java_raw_closure* cl,
|
|
353
371
|
|
354
372
|
#endif /* FFI_CLOSURES */
|
355
373
|
#endif /* !FFI_NATIVE_RAW_API */
|
356
|
-
#endif /* !
|
374
|
+
#endif /* !NO_JAVA_RAW_API */
|
@@ -61,7 +61,7 @@ void ffi_prep_args(char *stack, extended_cif *ecif)
|
|
61
61
|
|
62
62
|
/* Align if necessary. */
|
63
63
|
if (((*p_arg)->alignment - 1) & (unsigned) argp)
|
64
|
-
argp = (char *)
|
64
|
+
argp = (char *) FFI_ALIGN (argp, (*p_arg)->alignment);
|
65
65
|
|
66
66
|
if (avn != 0)
|
67
67
|
{
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 2004 Renesas Technology.
|
3
4
|
Target configuration macros for M32R.
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -26,6 +27,10 @@
|
|
26
27
|
#ifndef LIBFFI_TARGET_H
|
27
28
|
#define LIBFFI_TARGET_H
|
28
29
|
|
30
|
+
#ifndef LIBFFI_H
|
31
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
32
|
+
#endif
|
33
|
+
|
29
34
|
/* ---- Generic type definitions ----------------------------------------- */
|
30
35
|
|
31
36
|
#ifndef LIBFFI_ASM
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -----------------------------------------------------------------------
|
2
2
|
ffi.c
|
3
|
-
|
4
|
-
m68k Foreign Function Interface
|
3
|
+
|
4
|
+
m68k Foreign Function Interface
|
5
5
|
----------------------------------------------------------------------- */
|
6
6
|
|
7
7
|
#include <ffi.h>
|
@@ -13,8 +13,13 @@
|
|
13
13
|
void rtems_cache_flush_multiple_data_lines( const void *, size_t );
|
14
14
|
#else
|
15
15
|
#include <sys/syscall.h>
|
16
|
+
#ifdef __MINT__
|
17
|
+
#include <mint/mintbind.h>
|
18
|
+
#include <mint/ssystem.h>
|
19
|
+
#else
|
16
20
|
#include <asm/cachectl.h>
|
17
21
|
#endif
|
22
|
+
#endif
|
18
23
|
|
19
24
|
void ffi_call_SYSV (extended_cif *,
|
20
25
|
unsigned, unsigned,
|
@@ -39,8 +44,12 @@ ffi_prep_args (void *stack, extended_cif *ecif)
|
|
39
44
|
|
40
45
|
argp = stack;
|
41
46
|
|
42
|
-
if (
|
43
|
-
|
47
|
+
if (
|
48
|
+
#ifdef __MINT__
|
49
|
+
(ecif->cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
|
50
|
+
#endif
|
51
|
+
(((ecif->cif->rtype->type == FFI_TYPE_STRUCT)
|
52
|
+
&& !ecif->cif->flags)))
|
44
53
|
struct_value_ptr = ecif->rvalue;
|
45
54
|
else
|
46
55
|
struct_value_ptr = NULL;
|
@@ -51,12 +60,12 @@ ffi_prep_args (void *stack, extended_cif *ecif)
|
|
51
60
|
i != 0;
|
52
61
|
i--, p_arg++)
|
53
62
|
{
|
54
|
-
size_t z;
|
63
|
+
size_t z = (*p_arg)->size;
|
64
|
+
int type = (*p_arg)->type;
|
55
65
|
|
56
|
-
z = (*p_arg)->size;
|
57
66
|
if (z < sizeof (int))
|
58
67
|
{
|
59
|
-
switch (
|
68
|
+
switch (type)
|
60
69
|
{
|
61
70
|
case FFI_TYPE_SINT8:
|
62
71
|
*(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
|
@@ -75,7 +84,14 @@ ffi_prep_args (void *stack, extended_cif *ecif)
|
|
75
84
|
break;
|
76
85
|
|
77
86
|
case FFI_TYPE_STRUCT:
|
87
|
+
#ifdef __MINT__
|
88
|
+
if (z == 1 || z == 2)
|
89
|
+
memcpy (argp + 2, *p_argv, z);
|
90
|
+
else
|
91
|
+
memcpy (argp, *p_argv, z);
|
92
|
+
#else
|
78
93
|
memcpy (argp + sizeof (int) - z, *p_argv, z);
|
94
|
+
#endif
|
79
95
|
break;
|
80
96
|
|
81
97
|
default:
|
@@ -89,7 +105,7 @@ ffi_prep_args (void *stack, extended_cif *ecif)
|
|
89
105
|
|
90
106
|
/* Align if necessary. */
|
91
107
|
if ((sizeof(int) - 1) & z)
|
92
|
-
z =
|
108
|
+
z = FFI_ALIGN(z, sizeof(int));
|
93
109
|
}
|
94
110
|
|
95
111
|
p_argv++;
|
@@ -107,6 +123,8 @@ ffi_prep_args (void *stack, extended_cif *ecif)
|
|
107
123
|
#define CIF_FLAGS_POINTER 32
|
108
124
|
#define CIF_FLAGS_STRUCT1 64
|
109
125
|
#define CIF_FLAGS_STRUCT2 128
|
126
|
+
#define CIF_FLAGS_SINT8 256
|
127
|
+
#define CIF_FLAGS_SINT16 512
|
110
128
|
|
111
129
|
/* Perform machine dependent cif processing */
|
112
130
|
ffi_status
|
@@ -120,17 +138,34 @@ ffi_prep_cif_machdep (ffi_cif *cif)
|
|
120
138
|
break;
|
121
139
|
|
122
140
|
case FFI_TYPE_STRUCT:
|
141
|
+
if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
|
142
|
+
cif->rtype->elements[1])
|
143
|
+
{
|
144
|
+
cif->flags = 0;
|
145
|
+
break;
|
146
|
+
}
|
147
|
+
|
123
148
|
switch (cif->rtype->size)
|
124
149
|
{
|
125
150
|
case 1:
|
151
|
+
#ifdef __MINT__
|
152
|
+
cif->flags = CIF_FLAGS_STRUCT2;
|
153
|
+
#else
|
126
154
|
cif->flags = CIF_FLAGS_STRUCT1;
|
155
|
+
#endif
|
127
156
|
break;
|
128
157
|
case 2:
|
129
158
|
cif->flags = CIF_FLAGS_STRUCT2;
|
130
159
|
break;
|
160
|
+
#ifdef __MINT__
|
161
|
+
case 3:
|
162
|
+
#endif
|
131
163
|
case 4:
|
132
164
|
cif->flags = CIF_FLAGS_INT;
|
133
165
|
break;
|
166
|
+
#ifdef __MINT__
|
167
|
+
case 7:
|
168
|
+
#endif
|
134
169
|
case 8:
|
135
170
|
cif->flags = CIF_FLAGS_DINT;
|
136
171
|
break;
|
@@ -150,7 +185,11 @@ ffi_prep_cif_machdep (ffi_cif *cif)
|
|
150
185
|
|
151
186
|
#if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE)
|
152
187
|
case FFI_TYPE_LONGDOUBLE:
|
188
|
+
#ifdef __MINT__
|
189
|
+
cif->flags = 0;
|
190
|
+
#else
|
153
191
|
cif->flags = CIF_FLAGS_LDOUBLE;
|
192
|
+
#endif
|
154
193
|
break;
|
155
194
|
#endif
|
156
195
|
|
@@ -163,6 +202,14 @@ ffi_prep_cif_machdep (ffi_cif *cif)
|
|
163
202
|
cif->flags = CIF_FLAGS_DINT;
|
164
203
|
break;
|
165
204
|
|
205
|
+
case FFI_TYPE_SINT16:
|
206
|
+
cif->flags = CIF_FLAGS_SINT16;
|
207
|
+
break;
|
208
|
+
|
209
|
+
case FFI_TYPE_SINT8:
|
210
|
+
cif->flags = CIF_FLAGS_SINT8;
|
211
|
+
break;
|
212
|
+
|
166
213
|
default:
|
167
214
|
cif->flags = CIF_FLAGS_INT;
|
168
215
|
break;
|
@@ -218,6 +265,26 @@ ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif)
|
|
218
265
|
size_t z;
|
219
266
|
|
220
267
|
z = (*p_arg)->size;
|
268
|
+
#ifdef __MINT__
|
269
|
+
if (cif->flags &&
|
270
|
+
cif->rtype->type == FFI_TYPE_STRUCT &&
|
271
|
+
(z == 1 || z == 2))
|
272
|
+
{
|
273
|
+
*p_argv = (void *) (argp + 2);
|
274
|
+
|
275
|
+
z = 4;
|
276
|
+
}
|
277
|
+
else
|
278
|
+
if (cif->flags &&
|
279
|
+
cif->rtype->type == FFI_TYPE_STRUCT &&
|
280
|
+
(z == 3 || z == 4))
|
281
|
+
{
|
282
|
+
*p_argv = (void *) (argp);
|
283
|
+
|
284
|
+
z = 4;
|
285
|
+
}
|
286
|
+
else
|
287
|
+
#endif
|
221
288
|
if (z <= 4)
|
222
289
|
{
|
223
290
|
*p_argv = (void *) (argp + 4 - z);
|
@@ -230,7 +297,7 @@ ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif)
|
|
230
297
|
|
231
298
|
/* Align if necessary */
|
232
299
|
if ((sizeof(int) - 1) & z)
|
233
|
-
z =
|
300
|
+
z = FFI_ALIGN(z, sizeof(int));
|
234
301
|
}
|
235
302
|
|
236
303
|
p_argv++;
|
@@ -261,19 +328,27 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
|
261
328
|
void *user_data,
|
262
329
|
void *codeloc)
|
263
330
|
{
|
264
|
-
|
331
|
+
if (cif->abi != FFI_SYSV)
|
332
|
+
return FFI_BAD_ABI;
|
265
333
|
|
266
334
|
*(unsigned short *)closure->tramp = 0x207c;
|
267
335
|
*(void **)(closure->tramp + 2) = codeloc;
|
268
336
|
*(unsigned short *)(closure->tramp + 6) = 0x4ef9;
|
269
|
-
|
270
|
-
|
337
|
+
|
338
|
+
if (
|
339
|
+
#ifdef __MINT__
|
340
|
+
(cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
|
341
|
+
#endif
|
342
|
+
(((cif->rtype->type == FFI_TYPE_STRUCT)
|
343
|
+
&& !cif->flags)))
|
271
344
|
*(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV;
|
272
345
|
else
|
273
346
|
*(void **)(closure->tramp + 8) = ffi_closure_SYSV;
|
274
347
|
|
275
348
|
#ifdef __rtems__
|
276
349
|
rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE );
|
350
|
+
#elif defined(__MINT__)
|
351
|
+
Ssystem(S_FLUSHCACHE, codeloc, FFI_TRAMPOLINE_SIZE);
|
277
352
|
#else
|
278
353
|
syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE,
|
279
354
|
FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE);
|
@@ -285,4 +360,3 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
|
285
360
|
|
286
361
|
return FFI_OK;
|
287
362
|
}
|
288
|
-
|