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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* -----------------------------------------------------------------------
|
|
2
|
-
osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat
|
|
3
|
-
|
|
4
|
-
Alpha/OSF Foreign Function Interface
|
|
2
|
+
osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011, 2014 Red Hat
|
|
3
|
+
|
|
4
|
+
Alpha/OSF Foreign Function Interface
|
|
5
5
|
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
7
7
|
a copy of this software and associated documentation files (the
|
|
@@ -24,40 +24,49 @@
|
|
|
24
24
|
DEALINGS IN THE SOFTWARE.
|
|
25
25
|
----------------------------------------------------------------------- */
|
|
26
26
|
|
|
27
|
-
#define LIBFFI_ASM
|
|
27
|
+
#define LIBFFI_ASM
|
|
28
28
|
#include <fficonfig.h>
|
|
29
29
|
#include <ffi.h>
|
|
30
|
+
#include <ffi_cfi.h>
|
|
31
|
+
#include "internal.h"
|
|
30
32
|
|
|
31
33
|
.arch ev6
|
|
32
34
|
.text
|
|
33
35
|
|
|
34
|
-
/*
|
|
35
|
-
|
|
36
|
+
/* Aid in building a direct addressed jump table, 4 insns per entry. */
|
|
37
|
+
.macro E index
|
|
38
|
+
.align 4
|
|
39
|
+
.org 99b + \index * 16
|
|
40
|
+
.endm
|
|
41
|
+
|
|
42
|
+
/* ffi_call_osf (void *stack, void *frame, unsigned flags,
|
|
43
|
+
void *raddr, void (*fnaddr)(void), void *closure)
|
|
36
44
|
|
|
37
|
-
Bit o trickiness here --
|
|
45
|
+
Bit o trickiness here -- FRAME is the base of the stack frame
|
|
38
46
|
for this function. This has been allocated by ffi_call. We also
|
|
39
47
|
deallocate some of the stack that has been alloca'd. */
|
|
40
48
|
|
|
41
|
-
.align
|
|
49
|
+
.align 4
|
|
42
50
|
.globl ffi_call_osf
|
|
43
51
|
.ent ffi_call_osf
|
|
44
52
|
FFI_HIDDEN(ffi_call_osf)
|
|
45
53
|
|
|
46
54
|
ffi_call_osf:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
$LFB1:
|
|
50
|
-
addq $16,$17,$1
|
|
55
|
+
cfi_startproc
|
|
56
|
+
cfi_def_cfa($17, 32)
|
|
51
57
|
mov $16, $30
|
|
52
|
-
stq $26, 0($
|
|
53
|
-
stq $15, 8($
|
|
54
|
-
|
|
55
|
-
mov $1, $15
|
|
56
|
-
$LCFI1:
|
|
58
|
+
stq $26, 0($17)
|
|
59
|
+
stq $15, 8($17)
|
|
60
|
+
mov $17, $15
|
|
57
61
|
.prologue 0
|
|
62
|
+
cfi_def_cfa_register($15)
|
|
63
|
+
cfi_rel_offset($26, 0)
|
|
64
|
+
cfi_rel_offset($15, 8)
|
|
58
65
|
|
|
59
|
-
stq $
|
|
60
|
-
|
|
66
|
+
stq $18, 16($17) # save flags into frame
|
|
67
|
+
stq $19, 24($17) # save rvalue into frame
|
|
68
|
+
mov $20, $27 # fn into place for call
|
|
69
|
+
mov $21, $1 # closure into static chain
|
|
61
70
|
|
|
62
71
|
# Load up all of the (potential) argument registers.
|
|
63
72
|
ldq $16, 0($30)
|
|
@@ -77,311 +86,197 @@ $LCFI1:
|
|
|
77
86
|
lda $30, 48($30)
|
|
78
87
|
|
|
79
88
|
jsr $26, ($27), 0
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
ldq $
|
|
89
|
+
0:
|
|
90
|
+
ldah $29, 0($26) !gpdisp!1
|
|
91
|
+
ldq $2, 24($15) # reload rvalue
|
|
92
|
+
lda $29, 0($29) !gpdisp!1
|
|
93
|
+
ldq $3, 16($15) # reload flags
|
|
94
|
+
lda $1, 99f-0b($26)
|
|
85
95
|
ldq $26, 0($15)
|
|
86
|
-
$LCFI2:
|
|
87
|
-
beq $19, $noretval
|
|
88
|
-
|
|
89
|
-
# Store the return value out in the proper type.
|
|
90
|
-
cmpeq $18, FFI_TYPE_INT, $1
|
|
91
|
-
bne $1, $retint
|
|
92
|
-
cmpeq $18, FFI_TYPE_FLOAT, $2
|
|
93
|
-
bne $2, $retfloat
|
|
94
|
-
cmpeq $18, FFI_TYPE_DOUBLE, $3
|
|
95
|
-
bne $3, $retdouble
|
|
96
|
-
|
|
97
|
-
.align 3
|
|
98
|
-
$noretval:
|
|
99
96
|
ldq $15, 8($15)
|
|
100
|
-
|
|
97
|
+
cfi_restore($26)
|
|
98
|
+
cfi_restore($15)
|
|
99
|
+
cfi_def_cfa($sp, 0)
|
|
100
|
+
cmoveq $2, ALPHA_ST_VOID, $3 # mash null rvalue to void
|
|
101
|
+
addq $3, $3, $3
|
|
102
|
+
s8addq $3, $1, $1 # 99f + stcode * 16
|
|
103
|
+
jmp $31, ($1), $st_int
|
|
101
104
|
|
|
102
105
|
.align 4
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
nop
|
|
106
|
-
ldq $15, 8($15)
|
|
106
|
+
99:
|
|
107
|
+
E ALPHA_ST_VOID
|
|
107
108
|
ret
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
$
|
|
111
|
-
sts $f0, 0($19)
|
|
112
|
-
nop
|
|
113
|
-
ldq $15, 8($15)
|
|
109
|
+
E ALPHA_ST_INT
|
|
110
|
+
$st_int:
|
|
111
|
+
stq $0, 0($2)
|
|
114
112
|
ret
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
113
|
+
E ALPHA_ST_FLOAT
|
|
114
|
+
sts $f0, 0($2)
|
|
115
|
+
ret
|
|
116
|
+
E ALPHA_ST_DOUBLE
|
|
117
|
+
stt $f0, 0($2)
|
|
118
|
+
ret
|
|
119
|
+
E ALPHA_ST_CPLXF
|
|
120
|
+
sts $f0, 0($2)
|
|
121
|
+
sts $f1, 4($2)
|
|
122
|
+
ret
|
|
123
|
+
E ALPHA_ST_CPLXD
|
|
124
|
+
stt $f0, 0($2)
|
|
125
|
+
stt $f1, 8($2)
|
|
121
126
|
ret
|
|
122
|
-
$LFE1:
|
|
123
127
|
|
|
128
|
+
cfi_endproc
|
|
124
129
|
.end ffi_call_osf
|
|
125
130
|
|
|
126
131
|
/* ffi_closure_osf(...)
|
|
127
132
|
|
|
128
133
|
Receives the closure argument in $1. */
|
|
129
134
|
|
|
130
|
-
|
|
135
|
+
#define CLOSURE_FS (16*8)
|
|
136
|
+
|
|
137
|
+
.align 4
|
|
138
|
+
.globl ffi_go_closure_osf
|
|
139
|
+
.ent ffi_go_closure_osf
|
|
140
|
+
FFI_HIDDEN(ffi_go_closure_osf)
|
|
141
|
+
|
|
142
|
+
ffi_go_closure_osf:
|
|
143
|
+
cfi_startproc
|
|
144
|
+
ldgp $29, 0($27)
|
|
145
|
+
subq $30, CLOSURE_FS, $30
|
|
146
|
+
cfi_adjust_cfa_offset(CLOSURE_FS)
|
|
147
|
+
stq $26, 0($30)
|
|
148
|
+
.prologue 1
|
|
149
|
+
cfi_rel_offset($26, 0)
|
|
150
|
+
|
|
151
|
+
stq $16, 10*8($30)
|
|
152
|
+
stq $17, 11*8($30)
|
|
153
|
+
stq $18, 12*8($30)
|
|
154
|
+
|
|
155
|
+
ldq $16, 8($1) # load cif
|
|
156
|
+
ldq $17, 16($1) # load fun
|
|
157
|
+
mov $1, $18 # closure is user_data
|
|
158
|
+
br $do_closure
|
|
159
|
+
|
|
160
|
+
cfi_endproc
|
|
161
|
+
.end ffi_go_closure_osf
|
|
162
|
+
|
|
163
|
+
.align 4
|
|
131
164
|
.globl ffi_closure_osf
|
|
132
165
|
.ent ffi_closure_osf
|
|
133
166
|
FFI_HIDDEN(ffi_closure_osf)
|
|
134
167
|
|
|
135
168
|
ffi_closure_osf:
|
|
136
|
-
|
|
137
|
-
.mask 0x4000000, -16*8
|
|
138
|
-
$LFB2:
|
|
169
|
+
cfi_startproc
|
|
139
170
|
ldgp $29, 0($27)
|
|
140
|
-
subq $30,
|
|
141
|
-
|
|
171
|
+
subq $30, CLOSURE_FS, $30
|
|
172
|
+
cfi_adjust_cfa_offset(CLOSURE_FS)
|
|
142
173
|
stq $26, 0($30)
|
|
143
|
-
$LCFI6:
|
|
144
174
|
.prologue 1
|
|
175
|
+
cfi_rel_offset($26, 0)
|
|
145
176
|
|
|
146
177
|
# Store all of the potential argument registers in va_list format.
|
|
147
|
-
stt $f16, 4*8($30)
|
|
148
|
-
stt $f17, 5*8($30)
|
|
149
|
-
stt $f18, 6*8($30)
|
|
150
|
-
stt $f19, 7*8($30)
|
|
151
|
-
stt $f20, 8*8($30)
|
|
152
|
-
stt $f21, 9*8($30)
|
|
153
178
|
stq $16, 10*8($30)
|
|
154
179
|
stq $17, 11*8($30)
|
|
155
180
|
stq $18, 12*8($30)
|
|
181
|
+
|
|
182
|
+
ldq $16, 24($1) # load cif
|
|
183
|
+
ldq $17, 32($1) # load fun
|
|
184
|
+
ldq $18, 40($1) # load user_data
|
|
185
|
+
|
|
186
|
+
$do_closure:
|
|
156
187
|
stq $19, 13*8($30)
|
|
157
188
|
stq $20, 14*8($30)
|
|
158
189
|
stq $21, 15*8($30)
|
|
190
|
+
stt $f16, 4*8($30)
|
|
191
|
+
stt $f17, 5*8($30)
|
|
192
|
+
stt $f18, 6*8($30)
|
|
193
|
+
stt $f19, 7*8($30)
|
|
194
|
+
stt $f20, 8*8($30)
|
|
195
|
+
stt $f21, 9*8($30)
|
|
159
196
|
|
|
160
197
|
# Call ffi_closure_osf_inner to do the bulk of the work.
|
|
161
|
-
|
|
162
|
-
lda $
|
|
163
|
-
lda $18, 10*8($30)
|
|
198
|
+
lda $19, 2*8($30)
|
|
199
|
+
lda $20, 10*8($30)
|
|
164
200
|
jsr $26, ffi_closure_osf_inner
|
|
165
|
-
|
|
201
|
+
0:
|
|
202
|
+
ldah $29, 0($26) !gpdisp!2
|
|
203
|
+
lda $2, 99f-0b($26)
|
|
204
|
+
s4addq $0, 0, $1 # ldcode * 4
|
|
205
|
+
ldq $0, 16($30) # preload return value
|
|
206
|
+
s4addq $1, $2, $1 # 99f + ldcode * 16
|
|
207
|
+
lda $29, 0($29) !gpdisp!2
|
|
166
208
|
ldq $26, 0($30)
|
|
167
|
-
|
|
168
|
-
# Load up the return value in the proper type.
|
|
169
|
-
lda $1, $load_table
|
|
170
|
-
s4addq $0, $1, $1
|
|
171
|
-
ldl $1, 0($1)
|
|
172
|
-
addq $1, $29, $1
|
|
209
|
+
cfi_restore($26)
|
|
173
210
|
jmp $31, ($1), $load_32
|
|
174
211
|
|
|
175
|
-
|
|
176
|
-
$
|
|
177
|
-
|
|
212
|
+
.macro epilogue
|
|
213
|
+
addq $30, CLOSURE_FS, $30
|
|
214
|
+
cfi_adjust_cfa_offset(-CLOSURE_FS)
|
|
178
215
|
ret
|
|
216
|
+
.align 4
|
|
217
|
+
cfi_adjust_cfa_offset(CLOSURE_FS)
|
|
218
|
+
.endm
|
|
179
219
|
|
|
180
220
|
.align 4
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
addq $30, 16*8, $30
|
|
185
|
-
ret
|
|
221
|
+
99:
|
|
222
|
+
E ALPHA_LD_VOID
|
|
223
|
+
epilogue
|
|
186
224
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
ldt $f0, 16($30)
|
|
190
|
-
nop
|
|
191
|
-
addq $30, 16*8, $30
|
|
192
|
-
ret
|
|
225
|
+
E ALPHA_LD_INT64
|
|
226
|
+
epilogue
|
|
193
227
|
|
|
194
|
-
|
|
195
|
-
$
|
|
228
|
+
E ALPHA_LD_INT32
|
|
229
|
+
$load_32:
|
|
230
|
+
sextl $0, $0
|
|
231
|
+
epilogue
|
|
232
|
+
|
|
233
|
+
E ALPHA_LD_UINT16
|
|
234
|
+
zapnot $0, 3, $0
|
|
235
|
+
epilogue
|
|
236
|
+
|
|
237
|
+
E ALPHA_LD_SINT16
|
|
196
238
|
#ifdef __alpha_bwx__
|
|
197
|
-
|
|
198
|
-
nop
|
|
239
|
+
sextw $0, $0
|
|
199
240
|
#else
|
|
200
|
-
|
|
201
|
-
|
|
241
|
+
sll $0, 48, $0
|
|
242
|
+
sra $0, 48, $0
|
|
202
243
|
#endif
|
|
203
|
-
|
|
204
|
-
ret
|
|
244
|
+
epilogue
|
|
205
245
|
|
|
206
|
-
|
|
207
|
-
$
|
|
246
|
+
E ALPHA_LD_UINT8
|
|
247
|
+
and $0, 0xff, $0
|
|
248
|
+
epilogue
|
|
249
|
+
|
|
250
|
+
E ALPHA_LD_SINT8
|
|
208
251
|
#ifdef __alpha_bwx__
|
|
209
|
-
ldbu $0, 16($30)
|
|
210
252
|
sextb $0, $0
|
|
211
253
|
#else
|
|
212
|
-
ldq $0, 16($30)
|
|
213
254
|
sll $0, 56, $0
|
|
214
255
|
sra $0, 56, $0
|
|
215
256
|
#endif
|
|
216
|
-
|
|
217
|
-
ret
|
|
257
|
+
epilogue
|
|
218
258
|
|
|
219
|
-
|
|
220
|
-
$
|
|
221
|
-
|
|
222
|
-
ldwu $0, 16($30)
|
|
223
|
-
nop
|
|
224
|
-
#else
|
|
225
|
-
ldq $0, 16($30)
|
|
226
|
-
zapnot $0, 3, $0
|
|
227
|
-
#endif
|
|
228
|
-
addq $30, 16*8, $30
|
|
229
|
-
ret
|
|
259
|
+
E ALPHA_LD_FLOAT
|
|
260
|
+
lds $f0, 16($sp)
|
|
261
|
+
epilogue
|
|
230
262
|
|
|
231
|
-
|
|
232
|
-
$
|
|
233
|
-
|
|
234
|
-
ldwu $0, 16($30)
|
|
235
|
-
sextw $0, $0
|
|
236
|
-
#else
|
|
237
|
-
ldq $0, 16($30)
|
|
238
|
-
sll $0, 48, $0
|
|
239
|
-
sra $0, 48, $0
|
|
240
|
-
#endif
|
|
241
|
-
addq $30, 16*8, $30
|
|
242
|
-
ret
|
|
263
|
+
E ALPHA_LD_DOUBLE
|
|
264
|
+
ldt $f0, 16($sp)
|
|
265
|
+
epilogue
|
|
243
266
|
|
|
244
|
-
|
|
245
|
-
$
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
addq $30, 16*8, $30
|
|
249
|
-
ret
|
|
267
|
+
E ALPHA_LD_CPLXF
|
|
268
|
+
lds $f0, 16($sp)
|
|
269
|
+
lds $f1, 20($sp)
|
|
270
|
+
epilogue
|
|
250
271
|
|
|
251
|
-
|
|
252
|
-
$
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
addq $30, 16*8, $30
|
|
256
|
-
ret
|
|
257
|
-
$LFE2:
|
|
272
|
+
E ALPHA_LD_CPLXD
|
|
273
|
+
ldt $f0, 16($sp)
|
|
274
|
+
ldt $f1, 24($sp)
|
|
275
|
+
epilogue
|
|
258
276
|
|
|
277
|
+
cfi_endproc
|
|
259
278
|
.end ffi_closure_osf
|
|
260
279
|
|
|
261
|
-
#ifdef __ELF__
|
|
262
|
-
.section .rodata
|
|
263
|
-
#else
|
|
264
|
-
.rdata
|
|
265
|
-
#endif
|
|
266
|
-
$load_table:
|
|
267
|
-
.gprel32 $load_none # FFI_TYPE_VOID
|
|
268
|
-
.gprel32 $load_32 # FFI_TYPE_INT
|
|
269
|
-
.gprel32 $load_float # FFI_TYPE_FLOAT
|
|
270
|
-
.gprel32 $load_double # FFI_TYPE_DOUBLE
|
|
271
|
-
.gprel32 $load_none # FFI_TYPE_LONGDOUBLE
|
|
272
|
-
.gprel32 $load_u8 # FFI_TYPE_UINT8
|
|
273
|
-
.gprel32 $load_s8 # FFI_TYPE_SINT8
|
|
274
|
-
.gprel32 $load_u16 # FFI_TYPE_UINT16
|
|
275
|
-
.gprel32 $load_s16 # FFI_TYPE_SINT16
|
|
276
|
-
.gprel32 $load_32 # FFI_TYPE_UINT32
|
|
277
|
-
.gprel32 $load_32 # FFI_TYPE_SINT32
|
|
278
|
-
.gprel32 $load_64 # FFI_TYPE_UINT64
|
|
279
|
-
.gprel32 $load_64 # FFI_TYPE_SINT64
|
|
280
|
-
.gprel32 $load_none # FFI_TYPE_STRUCT
|
|
281
|
-
.gprel32 $load_64 # FFI_TYPE_POINTER
|
|
282
|
-
|
|
283
|
-
/* Assert that the table above is in sync with ffi.h. */
|
|
284
|
-
|
|
285
|
-
#if FFI_TYPE_FLOAT != 2 \
|
|
286
|
-
|| FFI_TYPE_DOUBLE != 3 \
|
|
287
|
-
|| FFI_TYPE_UINT8 != 5 \
|
|
288
|
-
|| FFI_TYPE_SINT8 != 6 \
|
|
289
|
-
|| FFI_TYPE_UINT16 != 7 \
|
|
290
|
-
|| FFI_TYPE_SINT16 != 8 \
|
|
291
|
-
|| FFI_TYPE_UINT32 != 9 \
|
|
292
|
-
|| FFI_TYPE_SINT32 != 10 \
|
|
293
|
-
|| FFI_TYPE_UINT64 != 11 \
|
|
294
|
-
|| FFI_TYPE_SINT64 != 12 \
|
|
295
|
-
|| FFI_TYPE_STRUCT != 13 \
|
|
296
|
-
|| FFI_TYPE_POINTER != 14 \
|
|
297
|
-
|| FFI_TYPE_LAST != 14
|
|
298
|
-
#error "osf.S out of sync with ffi.h"
|
|
299
|
-
#endif
|
|
300
|
-
|
|
301
|
-
#ifdef __ELF__
|
|
302
|
-
# define UA_SI .4byte
|
|
303
|
-
# define FDE_ENCODING 0x1b /* pcrel sdata4 */
|
|
304
|
-
# define FDE_ENCODE(X) .4byte X-.
|
|
305
|
-
# define FDE_ARANGE(X) .4byte X
|
|
306
|
-
#elif defined __osf__
|
|
307
|
-
# define UA_SI .align 0; .long
|
|
308
|
-
# define FDE_ENCODING 0x50 /* aligned absolute */
|
|
309
|
-
# define FDE_ENCODE(X) .align 3; .quad X
|
|
310
|
-
# define FDE_ARANGE(X) .align 0; .quad X
|
|
311
|
-
#endif
|
|
312
|
-
|
|
313
|
-
#ifdef __ELF__
|
|
314
|
-
.section .eh_frame,EH_FRAME_FLAGS,@progbits
|
|
315
|
-
#elif defined __osf__
|
|
316
|
-
.data
|
|
317
|
-
.align 3
|
|
318
|
-
.globl _GLOBAL__F_ffi_call_osf
|
|
319
|
-
_GLOBAL__F_ffi_call_osf:
|
|
320
|
-
#endif
|
|
321
|
-
__FRAME_BEGIN__:
|
|
322
|
-
UA_SI $LECIE1-$LSCIE1 # Length of Common Information Entry
|
|
323
|
-
$LSCIE1:
|
|
324
|
-
UA_SI 0x0 # CIE Identifier Tag
|
|
325
|
-
.byte 0x1 # CIE Version
|
|
326
|
-
.ascii "zR\0" # CIE Augmentation
|
|
327
|
-
.byte 0x1 # uleb128 0x1; CIE Code Alignment Factor
|
|
328
|
-
.byte 0x78 # sleb128 -8; CIE Data Alignment Factor
|
|
329
|
-
.byte 26 # CIE RA Column
|
|
330
|
-
.byte 0x1 # uleb128 0x1; Augmentation size
|
|
331
|
-
.byte FDE_ENCODING # FDE Encoding
|
|
332
|
-
.byte 0xc # DW_CFA_def_cfa
|
|
333
|
-
.byte 30 # uleb128 column 30
|
|
334
|
-
.byte 0 # uleb128 offset 0
|
|
335
|
-
.align 3
|
|
336
|
-
$LECIE1:
|
|
337
|
-
$LSFDE1:
|
|
338
|
-
UA_SI $LEFDE1-$LASFDE1 # FDE Length
|
|
339
|
-
$LASFDE1:
|
|
340
|
-
UA_SI $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset
|
|
341
|
-
FDE_ENCODE($LFB1) # FDE initial location
|
|
342
|
-
FDE_ARANGE($LFE1-$LFB1) # FDE address range
|
|
343
|
-
.byte 0x0 # uleb128 0x0; Augmentation size
|
|
344
|
-
|
|
345
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
|
346
|
-
UA_SI $LCFI1-$LFB1
|
|
347
|
-
.byte 0x9a # DW_CFA_offset, column 26
|
|
348
|
-
.byte 4 # uleb128 4*-8
|
|
349
|
-
.byte 0x8f # DW_CFA_offset, column 15
|
|
350
|
-
.byte 0x3 # uleb128 3*-8
|
|
351
|
-
.byte 0xc # DW_CFA_def_cfa
|
|
352
|
-
.byte 15 # uleb128 column 15
|
|
353
|
-
.byte 32 # uleb128 offset 32
|
|
354
|
-
|
|
355
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
|
356
|
-
UA_SI $LCFI2-$LCFI1
|
|
357
|
-
.byte 0xda # DW_CFA_restore, column 26
|
|
358
|
-
.align 3
|
|
359
|
-
$LEFDE1:
|
|
360
|
-
|
|
361
|
-
$LSFDE3:
|
|
362
|
-
UA_SI $LEFDE3-$LASFDE3 # FDE Length
|
|
363
|
-
$LASFDE3:
|
|
364
|
-
UA_SI $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset
|
|
365
|
-
FDE_ENCODE($LFB2) # FDE initial location
|
|
366
|
-
FDE_ARANGE($LFE2-$LFB2) # FDE address range
|
|
367
|
-
.byte 0x0 # uleb128 0x0; Augmentation size
|
|
368
|
-
|
|
369
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
|
370
|
-
UA_SI $LCFI5-$LFB2
|
|
371
|
-
.byte 0xe # DW_CFA_def_cfa_offset
|
|
372
|
-
.byte 0x80,0x1 # uleb128 128
|
|
373
|
-
|
|
374
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
|
375
|
-
UA_SI $LCFI6-$LCFI5
|
|
376
|
-
.byte 0x9a # DW_CFA_offset, column 26
|
|
377
|
-
.byte 16 # uleb128 offset 16*-8
|
|
378
|
-
.align 3
|
|
379
|
-
$LEFDE3:
|
|
380
|
-
#if defined __osf__
|
|
381
|
-
.align 0
|
|
382
|
-
.long 0 # End of Table
|
|
383
|
-
#endif
|
|
384
|
-
|
|
385
280
|
#if defined __ELF__ && defined __linux__
|
|
386
281
|
.section .note.GNU-stack,"",@progbits
|
|
387
282
|
#endif
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* -----------------------------------------------------------------------
|
|
2
|
+
arcompact.S - Copyright (c) 2013 Synposys, Inc. (www.synopsys.com)
|
|
3
|
+
|
|
4
|
+
ARCompact Foreign Function Interface
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
a copy of this software and associated documentation files (the
|
|
8
|
+
``Software''), to deal in the Software without restriction, including
|
|
9
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included
|
|
15
|
+
in all copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
18
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
20
|
+
IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
21
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
22
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
23
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
----------------------------------------------------------------------- */
|
|
25
|
+
|
|
26
|
+
#define LIBFFI_ASM
|
|
27
|
+
#include <fficonfig.h>
|
|
28
|
+
#include <ffi.h>
|
|
29
|
+
#ifdef HAVE_MACHINE_ASM_H
|
|
30
|
+
#include <machine/asm.h>
|
|
31
|
+
#else
|
|
32
|
+
#define CNAME(x) x
|
|
33
|
+
#define ENTRY(x) .globl CNAME(x)` .type CNAME(x),%function` CNAME(x):
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
.text
|
|
37
|
+
|
|
38
|
+
/* R0: ffi_prep_args */
|
|
39
|
+
/* R1: &ecif */
|
|
40
|
+
/* R2: cif->bytes */
|
|
41
|
+
/* R3: fig->flags */
|
|
42
|
+
/* R4: ecif.rvalue */
|
|
43
|
+
/* R5: fn */
|
|
44
|
+
ENTRY(ffi_call_ARCompact)
|
|
45
|
+
/* Save registers. */
|
|
46
|
+
st.a fp, [sp, -4] /* fp + 20, fp */
|
|
47
|
+
push_s blink /* fp + 16, blink */
|
|
48
|
+
st.a r4, [sp, -4] /* fp + 12, ecif.rvalue */
|
|
49
|
+
push_s r3 /* fp + 8, fig->flags */
|
|
50
|
+
st.a r5, [sp, -4] /* fp + 4, fn */
|
|
51
|
+
push_s r2 /* fp + 0, cif->bytes */
|
|
52
|
+
mov fp, sp
|
|
53
|
+
|
|
54
|
+
/* Make room for all of the new args. */
|
|
55
|
+
sub sp, sp, r2
|
|
56
|
+
|
|
57
|
+
/* Place all of the ffi_prep_args in position. */
|
|
58
|
+
/* ffi_prep_args(char *stack, extended_cif *ecif) */
|
|
59
|
+
/* R1 already set. */
|
|
60
|
+
|
|
61
|
+
/* And call. */
|
|
62
|
+
jl_s.d [r0]
|
|
63
|
+
mov_s r0, sp
|
|
64
|
+
|
|
65
|
+
ld.ab r12, [fp, 4] /* cif->bytes */
|
|
66
|
+
ld.ab r11, [fp, 4] /* fn */
|
|
67
|
+
|
|
68
|
+
/* Move first 8 parameters in registers... */
|
|
69
|
+
ld_s r0, [sp]
|
|
70
|
+
ld_s r1, [sp, 4]
|
|
71
|
+
ld_s r2, [sp, 8]
|
|
72
|
+
ld_s r3, [sp, 12]
|
|
73
|
+
ld r4, [sp, 16]
|
|
74
|
+
ld r5, [sp, 20]
|
|
75
|
+
ld r6, [sp, 24]
|
|
76
|
+
ld r7, [sp, 28]
|
|
77
|
+
|
|
78
|
+
/* ...and adjust the stack. */
|
|
79
|
+
min r12, r12, 32
|
|
80
|
+
|
|
81
|
+
/* Call the function. */
|
|
82
|
+
jl.d [r11]
|
|
83
|
+
add sp, sp, r12
|
|
84
|
+
|
|
85
|
+
mov sp, fp
|
|
86
|
+
pop_s r3 /* fig->flags, return type */
|
|
87
|
+
pop_s r2 /* ecif.rvalue, pointer for return value */
|
|
88
|
+
|
|
89
|
+
/* If the return value pointer is NULL, assume no return value. */
|
|
90
|
+
breq.d r2, 0, epilogue
|
|
91
|
+
pop_s blink
|
|
92
|
+
|
|
93
|
+
/* Return INT. */
|
|
94
|
+
brne r3, FFI_TYPE_INT, return_double
|
|
95
|
+
b.d epilogue
|
|
96
|
+
st_s r0, [r2]
|
|
97
|
+
|
|
98
|
+
return_double:
|
|
99
|
+
brne r3, FFI_TYPE_DOUBLE, epilogue
|
|
100
|
+
st_s r0, [r2]
|
|
101
|
+
st_s r1, [r2,4]
|
|
102
|
+
|
|
103
|
+
epilogue:
|
|
104
|
+
j_s.d [blink]
|
|
105
|
+
ld.ab fp, [sp, 4]
|
|
106
|
+
|
|
107
|
+
ENTRY(ffi_closure_ARCompact)
|
|
108
|
+
st.a r0, [sp, -32]
|
|
109
|
+
st_s r1, [sp, 4]
|
|
110
|
+
st_s r2, [sp, 8]
|
|
111
|
+
st_s r3, [sp, 12]
|
|
112
|
+
st r4, [sp, 16]
|
|
113
|
+
st r5, [sp, 20]
|
|
114
|
+
st r6, [sp, 24]
|
|
115
|
+
st r7, [sp, 28]
|
|
116
|
+
|
|
117
|
+
/* pointer to arguments */
|
|
118
|
+
mov_s r2, sp
|
|
119
|
+
|
|
120
|
+
/* return value goes here */
|
|
121
|
+
sub sp, sp, 8
|
|
122
|
+
mov_s r1, sp
|
|
123
|
+
|
|
124
|
+
push_s blink
|
|
125
|
+
|
|
126
|
+
bl.d ffi_closure_inner_ARCompact
|
|
127
|
+
mov_s r0, r8 /* codeloc, set by trampoline */
|
|
128
|
+
|
|
129
|
+
pop_s blink
|
|
130
|
+
|
|
131
|
+
/* set return value to r1:r0 */
|
|
132
|
+
pop_s r0
|
|
133
|
+
pop_s r1
|
|
134
|
+
j_s.d [blink]
|
|
135
|
+
add_s sp, sp, 32
|