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
|
@@ -37,35 +37,43 @@
|
|
|
37
37
|
#define flags a3
|
|
38
38
|
#define raddr a4
|
|
39
39
|
#define fn a5
|
|
40
|
+
#define closure a6
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
/* Note: to keep stack 16 byte aligned we need even number slots
|
|
43
|
+
used 9 slots here
|
|
44
|
+
*/
|
|
45
|
+
#define SIZEOF_FRAME ( 10 * FFI_SIZEOF_ARG )
|
|
42
46
|
|
|
43
47
|
#ifdef __GNUC__
|
|
44
48
|
.abicalls
|
|
49
|
+
#endif
|
|
50
|
+
#if !defined(__mips_isa_rev) || (__mips_isa_rev<6)
|
|
51
|
+
.set mips4
|
|
45
52
|
#endif
|
|
46
53
|
.text
|
|
47
54
|
.align 2
|
|
48
55
|
.globl ffi_call_N32
|
|
49
56
|
.ent ffi_call_N32
|
|
50
57
|
ffi_call_N32:
|
|
51
|
-
.
|
|
58
|
+
.LFB0:
|
|
52
59
|
.frame $fp, SIZEOF_FRAME, ra
|
|
53
60
|
.mask 0xc0000000,-FFI_SIZEOF_ARG
|
|
54
61
|
.fmask 0x00000000,0
|
|
55
62
|
|
|
56
63
|
# Prologue
|
|
57
64
|
SUBU $sp, SIZEOF_FRAME # Frame size
|
|
58
|
-
.
|
|
65
|
+
.LCFI00:
|
|
59
66
|
REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer
|
|
60
67
|
REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address
|
|
61
|
-
.
|
|
68
|
+
.LCFI01:
|
|
62
69
|
move $fp, $sp
|
|
63
|
-
.
|
|
70
|
+
.LCFI02:
|
|
64
71
|
move t9, callback # callback function pointer
|
|
65
72
|
REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes
|
|
66
73
|
REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags
|
|
67
74
|
REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr
|
|
68
75
|
REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn
|
|
76
|
+
REG_S closure, 6*FFI_SIZEOF_ARG($fp) # closure
|
|
69
77
|
|
|
70
78
|
# Allocate at least 4 words in the argstack
|
|
71
79
|
move v0, bytes
|
|
@@ -106,11 +114,19 @@ loadregs:
|
|
|
106
114
|
|
|
107
115
|
REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6.
|
|
108
116
|
|
|
117
|
+
#ifdef __mips_soft_float
|
|
118
|
+
REG_L a0, 0*FFI_SIZEOF_ARG(t9)
|
|
119
|
+
REG_L a1, 1*FFI_SIZEOF_ARG(t9)
|
|
120
|
+
REG_L a2, 2*FFI_SIZEOF_ARG(t9)
|
|
121
|
+
REG_L a3, 3*FFI_SIZEOF_ARG(t9)
|
|
122
|
+
REG_L a4, 4*FFI_SIZEOF_ARG(t9)
|
|
123
|
+
REG_L a5, 5*FFI_SIZEOF_ARG(t9)
|
|
124
|
+
REG_L a6, 6*FFI_SIZEOF_ARG(t9)
|
|
125
|
+
REG_L a7, 7*FFI_SIZEOF_ARG(t9)
|
|
126
|
+
#else
|
|
109
127
|
and t4, t6, ((1<<FFI_FLAG_BITS)-1)
|
|
110
|
-
bnez t4, arg1_floatp
|
|
111
128
|
REG_L a0, 0*FFI_SIZEOF_ARG(t9)
|
|
112
|
-
|
|
113
|
-
arg1_floatp:
|
|
129
|
+
beqz t4, arg1_next
|
|
114
130
|
bne t4, FFI_TYPE_FLOAT, arg1_doublep
|
|
115
131
|
l.s $f12, 0*FFI_SIZEOF_ARG(t9)
|
|
116
132
|
b arg1_next
|
|
@@ -120,10 +136,8 @@ arg1_next:
|
|
|
120
136
|
|
|
121
137
|
SRL t4, t6, 1*FFI_FLAG_BITS
|
|
122
138
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
123
|
-
bnez t4, arg2_floatp
|
|
124
139
|
REG_L a1, 1*FFI_SIZEOF_ARG(t9)
|
|
125
|
-
|
|
126
|
-
arg2_floatp:
|
|
140
|
+
beqz t4, arg2_next
|
|
127
141
|
bne t4, FFI_TYPE_FLOAT, arg2_doublep
|
|
128
142
|
l.s $f13, 1*FFI_SIZEOF_ARG(t9)
|
|
129
143
|
b arg2_next
|
|
@@ -133,10 +147,8 @@ arg2_next:
|
|
|
133
147
|
|
|
134
148
|
SRL t4, t6, 2*FFI_FLAG_BITS
|
|
135
149
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
136
|
-
bnez t4, arg3_floatp
|
|
137
150
|
REG_L a2, 2*FFI_SIZEOF_ARG(t9)
|
|
138
|
-
|
|
139
|
-
arg3_floatp:
|
|
151
|
+
beqz t4, arg3_next
|
|
140
152
|
bne t4, FFI_TYPE_FLOAT, arg3_doublep
|
|
141
153
|
l.s $f14, 2*FFI_SIZEOF_ARG(t9)
|
|
142
154
|
b arg3_next
|
|
@@ -146,10 +158,8 @@ arg3_next:
|
|
|
146
158
|
|
|
147
159
|
SRL t4, t6, 3*FFI_FLAG_BITS
|
|
148
160
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
149
|
-
bnez t4, arg4_floatp
|
|
150
161
|
REG_L a3, 3*FFI_SIZEOF_ARG(t9)
|
|
151
|
-
|
|
152
|
-
arg4_floatp:
|
|
162
|
+
beqz t4, arg4_next
|
|
153
163
|
bne t4, FFI_TYPE_FLOAT, arg4_doublep
|
|
154
164
|
l.s $f15, 3*FFI_SIZEOF_ARG(t9)
|
|
155
165
|
b arg4_next
|
|
@@ -159,10 +169,8 @@ arg4_next:
|
|
|
159
169
|
|
|
160
170
|
SRL t4, t6, 4*FFI_FLAG_BITS
|
|
161
171
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
162
|
-
bnez t4, arg5_floatp
|
|
163
172
|
REG_L a4, 4*FFI_SIZEOF_ARG(t9)
|
|
164
|
-
|
|
165
|
-
arg5_floatp:
|
|
173
|
+
beqz t4, arg5_next
|
|
166
174
|
bne t4, FFI_TYPE_FLOAT, arg5_doublep
|
|
167
175
|
l.s $f16, 4*FFI_SIZEOF_ARG(t9)
|
|
168
176
|
b arg5_next
|
|
@@ -172,10 +180,8 @@ arg5_next:
|
|
|
172
180
|
|
|
173
181
|
SRL t4, t6, 5*FFI_FLAG_BITS
|
|
174
182
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
175
|
-
bnez t4, arg6_floatp
|
|
176
183
|
REG_L a5, 5*FFI_SIZEOF_ARG(t9)
|
|
177
|
-
|
|
178
|
-
arg6_floatp:
|
|
184
|
+
beqz t4, arg6_next
|
|
179
185
|
bne t4, FFI_TYPE_FLOAT, arg6_doublep
|
|
180
186
|
l.s $f17, 5*FFI_SIZEOF_ARG(t9)
|
|
181
187
|
b arg6_next
|
|
@@ -185,10 +191,8 @@ arg6_next:
|
|
|
185
191
|
|
|
186
192
|
SRL t4, t6, 6*FFI_FLAG_BITS
|
|
187
193
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
188
|
-
bnez t4, arg7_floatp
|
|
189
194
|
REG_L a6, 6*FFI_SIZEOF_ARG(t9)
|
|
190
|
-
|
|
191
|
-
arg7_floatp:
|
|
195
|
+
beqz t4, arg7_next
|
|
192
196
|
bne t4, FFI_TYPE_FLOAT, arg7_doublep
|
|
193
197
|
l.s $f18, 6*FFI_SIZEOF_ARG(t9)
|
|
194
198
|
b arg7_next
|
|
@@ -198,21 +202,23 @@ arg7_next:
|
|
|
198
202
|
|
|
199
203
|
SRL t4, t6, 7*FFI_FLAG_BITS
|
|
200
204
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
|
201
|
-
bnez t4, arg8_floatp
|
|
202
205
|
REG_L a7, 7*FFI_SIZEOF_ARG(t9)
|
|
203
|
-
|
|
204
|
-
arg8_floatp:
|
|
206
|
+
beqz t4, arg8_next
|
|
205
207
|
bne t4, FFI_TYPE_FLOAT, arg8_doublep
|
|
206
208
|
l.s $f19, 7*FFI_SIZEOF_ARG(t9)
|
|
207
209
|
b arg8_next
|
|
208
210
|
arg8_doublep:
|
|
209
211
|
l.d $f19, 7*FFI_SIZEOF_ARG(t9)
|
|
210
212
|
arg8_next:
|
|
213
|
+
#endif
|
|
211
214
|
|
|
212
215
|
callit:
|
|
213
216
|
# Load the function pointer
|
|
214
217
|
REG_L t9, 5*FFI_SIZEOF_ARG($fp)
|
|
215
218
|
|
|
219
|
+
# install the static chain(t7=$15)
|
|
220
|
+
REG_L t7, 6*FFI_SIZEOF_ARG($fp)
|
|
221
|
+
|
|
216
222
|
# If the return value pointer is NULL, assume no return value.
|
|
217
223
|
REG_L t5, 4*FFI_SIZEOF_ARG($fp)
|
|
218
224
|
beqz t5, noretval
|
|
@@ -229,6 +235,7 @@ retint:
|
|
|
229
235
|
b epilogue
|
|
230
236
|
|
|
231
237
|
retfloat:
|
|
238
|
+
#ifndef __mips_soft_float
|
|
232
239
|
bne t6, FFI_TYPE_FLOAT, retdouble
|
|
233
240
|
jal t9
|
|
234
241
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
|
@@ -287,6 +294,7 @@ retstruct_f_d:
|
|
|
287
294
|
s.s $f0, 0(t4)
|
|
288
295
|
s.d $f2, 8(t4)
|
|
289
296
|
b epilogue
|
|
297
|
+
#endif
|
|
290
298
|
|
|
291
299
|
retstruct_d_soft:
|
|
292
300
|
bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft
|
|
@@ -361,7 +369,7 @@ epilogue:
|
|
|
361
369
|
ADDU $sp, SIZEOF_FRAME # Fix stack pointer
|
|
362
370
|
j ra
|
|
363
371
|
|
|
364
|
-
.
|
|
372
|
+
.LFE0:
|
|
365
373
|
.end ffi_call_N32
|
|
366
374
|
|
|
367
375
|
/* ffi_closure_N32. Expects address of the passed-in ffi_closure in t0
|
|
@@ -420,6 +428,41 @@ epilogue:
|
|
|
420
428
|
#define RA_OFF2 (1 * FFI_SIZEOF_ARG)
|
|
421
429
|
#define GP_OFF2 (0 * FFI_SIZEOF_ARG)
|
|
422
430
|
|
|
431
|
+
.align 2
|
|
432
|
+
.globl ffi_go_closure_N32
|
|
433
|
+
.ent ffi_go_closure_N32
|
|
434
|
+
ffi_go_closure_N32:
|
|
435
|
+
.LFB1:
|
|
436
|
+
.frame $sp, SIZEOF_FRAME2, ra
|
|
437
|
+
.mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
|
|
438
|
+
.fmask 0x00000000,0
|
|
439
|
+
SUBU $sp, SIZEOF_FRAME2
|
|
440
|
+
.LCFI10:
|
|
441
|
+
.cpsetup t9, GP_OFF2, ffi_go_closure_N32
|
|
442
|
+
REG_S ra, RA_OFF2($sp) # Save return address
|
|
443
|
+
.LCFI11:
|
|
444
|
+
|
|
445
|
+
REG_S a0, A0_OFF2($sp)
|
|
446
|
+
REG_S a1, A1_OFF2($sp)
|
|
447
|
+
REG_S a2, A2_OFF2($sp)
|
|
448
|
+
REG_S a3, A3_OFF2($sp)
|
|
449
|
+
REG_S a4, A4_OFF2($sp)
|
|
450
|
+
REG_S a5, A5_OFF2($sp)
|
|
451
|
+
|
|
452
|
+
# Call ffi_closure_mips_inner_N32 to do the real work.
|
|
453
|
+
LA t9, ffi_closure_mips_inner_N32
|
|
454
|
+
REG_L a0, 8($15) # cif
|
|
455
|
+
REG_L a1, 16($15) # fun
|
|
456
|
+
move a2, t7 # userdata=closure
|
|
457
|
+
ADDU a3, $sp, V0_OFF2 # rvalue
|
|
458
|
+
ADDU a4, $sp, A0_OFF2 # ar
|
|
459
|
+
ADDU a5, $sp, F12_OFF2 # fpr
|
|
460
|
+
|
|
461
|
+
b $do_closure
|
|
462
|
+
|
|
463
|
+
.LFE1:
|
|
464
|
+
.end ffi_go_closure_N32
|
|
465
|
+
|
|
423
466
|
.align 2
|
|
424
467
|
.globl ffi_closure_N32
|
|
425
468
|
.ent ffi_closure_N32
|
|
@@ -429,21 +472,33 @@ ffi_closure_N32:
|
|
|
429
472
|
.mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
|
|
430
473
|
.fmask 0x00000000,0
|
|
431
474
|
SUBU $sp, SIZEOF_FRAME2
|
|
432
|
-
.
|
|
475
|
+
.LCFI20:
|
|
433
476
|
.cpsetup t9, GP_OFF2, ffi_closure_N32
|
|
434
477
|
REG_S ra, RA_OFF2($sp) # Save return address
|
|
435
|
-
.
|
|
436
|
-
# Store all possible argument registers. If there are more than
|
|
437
|
-
# fit in registers, then they were stored on the stack.
|
|
478
|
+
.LCFI21:
|
|
438
479
|
REG_S a0, A0_OFF2($sp)
|
|
439
480
|
REG_S a1, A1_OFF2($sp)
|
|
440
481
|
REG_S a2, A2_OFF2($sp)
|
|
441
482
|
REG_S a3, A3_OFF2($sp)
|
|
442
483
|
REG_S a4, A4_OFF2($sp)
|
|
443
484
|
REG_S a5, A5_OFF2($sp)
|
|
485
|
+
|
|
486
|
+
# Call ffi_closure_mips_inner_N32 to do the real work.
|
|
487
|
+
LA t9, ffi_closure_mips_inner_N32
|
|
488
|
+
REG_L a0, 56($12) # cif
|
|
489
|
+
REG_L a1, 64($12) # fun
|
|
490
|
+
REG_L a2, 72($12) # user_data
|
|
491
|
+
ADDU a3, $sp, V0_OFF2
|
|
492
|
+
ADDU a4, $sp, A0_OFF2
|
|
493
|
+
ADDU a5, $sp, F12_OFF2
|
|
494
|
+
|
|
495
|
+
$do_closure:
|
|
496
|
+
# Store all possible argument registers. If there are more than
|
|
497
|
+
# fit in registers, then they were stored on the stack.
|
|
444
498
|
REG_S a6, A6_OFF2($sp)
|
|
445
499
|
REG_S a7, A7_OFF2($sp)
|
|
446
500
|
|
|
501
|
+
#ifndef __mips_soft_float
|
|
447
502
|
# Store all possible float/double registers.
|
|
448
503
|
s.d $f12, F12_OFF2($sp)
|
|
449
504
|
s.d $f13, F13_OFF2($sp)
|
|
@@ -453,13 +508,8 @@ ffi_closure_N32:
|
|
|
453
508
|
s.d $f17, F17_OFF2($sp)
|
|
454
509
|
s.d $f18, F18_OFF2($sp)
|
|
455
510
|
s.d $f19, F19_OFF2($sp)
|
|
511
|
+
#endif
|
|
456
512
|
|
|
457
|
-
# Call ffi_closure_mips_inner_N32 to do the real work.
|
|
458
|
-
LA t9, ffi_closure_mips_inner_N32
|
|
459
|
-
move a0, $12 # Pointer to the ffi_closure
|
|
460
|
-
ADDU a1, $sp, V0_OFF2
|
|
461
|
-
ADDU a2, $sp, A0_OFF2
|
|
462
|
-
ADDU a3, $sp, F12_OFF2
|
|
463
513
|
jalr t9
|
|
464
514
|
|
|
465
515
|
# Return flags are in v0
|
|
@@ -473,6 +523,7 @@ cls_retint:
|
|
|
473
523
|
b cls_epilogue
|
|
474
524
|
|
|
475
525
|
cls_retfloat:
|
|
526
|
+
#ifndef __mips_soft_float
|
|
476
527
|
bne v0, FFI_TYPE_FLOAT, cls_retdouble
|
|
477
528
|
l.s $f0, V0_OFF2($sp)
|
|
478
529
|
b cls_epilogue
|
|
@@ -515,6 +566,7 @@ cls_retstruct_f_d:
|
|
|
515
566
|
l.s $f0, V0_OFF2($sp)
|
|
516
567
|
l.d $f2, V1_OFF2($sp)
|
|
517
568
|
b cls_epilogue
|
|
569
|
+
#endif
|
|
518
570
|
|
|
519
571
|
cls_retstruct_small2:
|
|
520
572
|
REG_L v0, V0_OFF2($sp)
|
|
@@ -546,46 +598,66 @@ cls_epilogue:
|
|
|
546
598
|
.align EH_FRAME_ALIGN
|
|
547
599
|
.LECIE1:
|
|
548
600
|
|
|
549
|
-
.
|
|
550
|
-
.4byte .
|
|
551
|
-
.
|
|
552
|
-
.4byte .
|
|
553
|
-
FDE_ADDR_BYTES .
|
|
554
|
-
FDE_ADDR_BYTES .
|
|
601
|
+
.LSFDE0:
|
|
602
|
+
.4byte .LEFDE0-.LASFDE0 # length.
|
|
603
|
+
.LASFDE0:
|
|
604
|
+
.4byte .LASFDE0-.Lframe1 # CIE_pointer.
|
|
605
|
+
FDE_ADDR_BYTES .LFB0 # initial_location.
|
|
606
|
+
FDE_ADDR_BYTES .LFE0-.LFB0 # address_range.
|
|
555
607
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
556
|
-
.4byte .
|
|
608
|
+
.4byte .LCFI00-.LFB0 # to .LCFI00
|
|
557
609
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
558
610
|
.uleb128 SIZEOF_FRAME # adjust stack.by SIZEOF_FRAME
|
|
559
611
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
560
|
-
.4byte .
|
|
612
|
+
.4byte .LCFI01-.LCFI00 # to .LCFI01
|
|
561
613
|
.byte 0x9e # DW_CFA_offset of $fp
|
|
562
614
|
.uleb128 2*FFI_SIZEOF_ARG/4 #
|
|
563
615
|
.byte 0x9f # DW_CFA_offset of ra
|
|
564
616
|
.uleb128 1*FFI_SIZEOF_ARG/4 #
|
|
565
617
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
566
|
-
.4byte .
|
|
618
|
+
.4byte .LCFI02-.LCFI01 # to .LCFI02
|
|
567
619
|
.byte 0xd # DW_CFA_def_cfa_register
|
|
568
620
|
.uleb128 0x1e # in $fp
|
|
569
621
|
.align EH_FRAME_ALIGN
|
|
622
|
+
.LEFDE0:
|
|
623
|
+
|
|
624
|
+
.LSFDE1:
|
|
625
|
+
.4byte .LEFDE1-.LASFDE1 # length
|
|
626
|
+
.LASFDE1:
|
|
627
|
+
.4byte .LASFDE1-.Lframe1 # CIE_pointer.
|
|
628
|
+
FDE_ADDR_BYTES .LFB1 # initial_location.
|
|
629
|
+
FDE_ADDR_BYTES .LFE1-.LFB1 # address_range.
|
|
630
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
|
631
|
+
.4byte .LCFI10-.LFB1 # to .LCFI10
|
|
632
|
+
.byte 0xe # DW_CFA_def_cfa_offset
|
|
633
|
+
.uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
|
|
634
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
|
635
|
+
.4byte .LCFI11-.LCFI10 # to .LCFI11
|
|
636
|
+
.byte 0x9c # DW_CFA_offset of $gp ($28)
|
|
637
|
+
.uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
|
|
638
|
+
.byte 0x9f # DW_CFA_offset of ra ($31)
|
|
639
|
+
.uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
|
|
640
|
+
.align EH_FRAME_ALIGN
|
|
570
641
|
.LEFDE1:
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
.
|
|
574
|
-
|
|
642
|
+
|
|
643
|
+
.LSFDE2:
|
|
644
|
+
.4byte .LEFDE2-.LASFDE2 # length
|
|
645
|
+
.LASFDE2:
|
|
646
|
+
.4byte .LASFDE2-.Lframe1 # CIE_pointer.
|
|
575
647
|
FDE_ADDR_BYTES .LFB2 # initial_location.
|
|
576
648
|
FDE_ADDR_BYTES .LFE2-.LFB2 # address_range.
|
|
577
649
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
578
|
-
.4byte .
|
|
650
|
+
.4byte .LCFI20-.LFB2 # to .LCFI20
|
|
579
651
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
580
652
|
.uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
|
|
581
653
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
582
|
-
.4byte .
|
|
654
|
+
.4byte .LCFI21-.LCFI20 # to .LCFI21
|
|
583
655
|
.byte 0x9c # DW_CFA_offset of $gp ($28)
|
|
584
656
|
.uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
|
|
585
657
|
.byte 0x9f # DW_CFA_offset of ra ($31)
|
|
586
658
|
.uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
|
|
587
659
|
.align EH_FRAME_ALIGN
|
|
588
|
-
.
|
|
660
|
+
.LEFDE2:
|
|
589
661
|
#endif /* __GNUC__ */
|
|
590
662
|
|
|
591
663
|
#endif
|
|
@@ -50,14 +50,14 @@ ffi_call_O32:
|
|
|
50
50
|
$LFB0:
|
|
51
51
|
# Prologue
|
|
52
52
|
SUBU $sp, SIZEOF_FRAME # Frame size
|
|
53
|
-
$
|
|
53
|
+
$LCFI00:
|
|
54
54
|
REG_S $fp, FP_OFF($sp) # Save frame pointer
|
|
55
|
-
$
|
|
55
|
+
$LCFI01:
|
|
56
56
|
REG_S ra, RA_OFF($sp) # Save return address
|
|
57
|
-
$
|
|
57
|
+
$LCFI02:
|
|
58
58
|
move $fp, $sp
|
|
59
59
|
|
|
60
|
-
$
|
|
60
|
+
$LCFI03:
|
|
61
61
|
move t9, callback # callback function pointer
|
|
62
62
|
REG_S flags, A3_OFF($fp) # flags
|
|
63
63
|
|
|
@@ -82,13 +82,16 @@ sixteen:
|
|
|
82
82
|
|
|
83
83
|
ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args
|
|
84
84
|
|
|
85
|
+
#ifndef __mips_soft_float
|
|
85
86
|
bnez t0, pass_d # make it quick for int
|
|
87
|
+
#endif
|
|
86
88
|
REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the
|
|
87
89
|
REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs.
|
|
88
90
|
REG_L a2, 2*FFI_SIZEOF_ARG($sp)
|
|
89
91
|
REG_L a3, 3*FFI_SIZEOF_ARG($sp)
|
|
90
92
|
b call_it
|
|
91
93
|
|
|
94
|
+
#ifndef __mips_soft_float
|
|
92
95
|
pass_d:
|
|
93
96
|
bne t0, FFI_ARGS_D, pass_f
|
|
94
97
|
l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
|
|
@@ -130,8 +133,12 @@ pass_f_d:
|
|
|
130
133
|
# bne t0, FFI_ARGS_F_D, call_it
|
|
131
134
|
l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
|
|
132
135
|
l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float
|
|
136
|
+
#endif
|
|
133
137
|
|
|
134
138
|
call_it:
|
|
139
|
+
# Load the static chain pointer
|
|
140
|
+
REG_L t7, SIZEOF_FRAME + 6*FFI_SIZEOF_ARG($fp)
|
|
141
|
+
|
|
135
142
|
# Load the function pointer
|
|
136
143
|
REG_L t9, SIZEOF_FRAME + 5*FFI_SIZEOF_ARG($fp)
|
|
137
144
|
|
|
@@ -158,14 +165,23 @@ retfloat:
|
|
|
158
165
|
bne t2, FFI_TYPE_FLOAT, retdouble
|
|
159
166
|
jalr t9
|
|
160
167
|
REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
|
|
168
|
+
#ifndef __mips_soft_float
|
|
161
169
|
s.s $f0, 0(t0)
|
|
170
|
+
#else
|
|
171
|
+
REG_S v0, 0(t0)
|
|
172
|
+
#endif
|
|
162
173
|
b epilogue
|
|
163
174
|
|
|
164
175
|
retdouble:
|
|
165
176
|
bne t2, FFI_TYPE_DOUBLE, noretval
|
|
166
177
|
jalr t9
|
|
167
178
|
REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
|
|
179
|
+
#ifndef __mips_soft_float
|
|
168
180
|
s.d $f0, 0(t0)
|
|
181
|
+
#else
|
|
182
|
+
REG_S v1, 4(t0)
|
|
183
|
+
REG_S v0, 0(t0)
|
|
184
|
+
#endif
|
|
169
185
|
b epilogue
|
|
170
186
|
|
|
171
187
|
noretval:
|
|
@@ -204,13 +220,15 @@ $LFE0:
|
|
|
204
220
|
-8 - f14 (le low, be high)
|
|
205
221
|
-9 - f12 (le high, be low)
|
|
206
222
|
-10 - f12 (le low, be high)
|
|
207
|
-
-11 - Called function
|
|
208
|
-
-12 - Called function
|
|
209
|
-
-13 - Called function
|
|
210
|
-
-14 - Called function
|
|
223
|
+
-11 - Called function a5 save
|
|
224
|
+
-12 - Called function a4 save
|
|
225
|
+
-13 - Called function a3 save
|
|
226
|
+
-14 - Called function a2 save
|
|
227
|
+
-15 - Called function a1 save
|
|
228
|
+
-16 - Called function a0 save, our sp and fp point here
|
|
211
229
|
*/
|
|
212
230
|
|
|
213
|
-
#define SIZEOF_FRAME2 (
|
|
231
|
+
#define SIZEOF_FRAME2 (16 * FFI_SIZEOF_ARG)
|
|
214
232
|
#define A3_OFF2 (SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG)
|
|
215
233
|
#define A2_OFF2 (SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG)
|
|
216
234
|
#define A1_OFF2 (SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG)
|
|
@@ -225,13 +243,71 @@ $LFE0:
|
|
|
225
243
|
#define FA_1_0_OFF2 (SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG)
|
|
226
244
|
#define FA_0_1_OFF2 (SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG)
|
|
227
245
|
#define FA_0_0_OFF2 (SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG)
|
|
246
|
+
#define CALLED_A5_OFF2 (SIZEOF_FRAME2 - 11 * FFI_SIZEOF_ARG)
|
|
247
|
+
#define CALLED_A4_OFF2 (SIZEOF_FRAME2 - 12 * FFI_SIZEOF_ARG)
|
|
228
248
|
|
|
229
249
|
.text
|
|
250
|
+
|
|
251
|
+
.align 2
|
|
252
|
+
.globl ffi_go_closure_O32
|
|
253
|
+
.ent ffi_go_closure_O32
|
|
254
|
+
ffi_go_closure_O32:
|
|
255
|
+
$LFB1:
|
|
256
|
+
# Prologue
|
|
257
|
+
.frame $fp, SIZEOF_FRAME2, ra
|
|
258
|
+
.set noreorder
|
|
259
|
+
.cpload t9
|
|
260
|
+
.set reorder
|
|
261
|
+
SUBU $sp, SIZEOF_FRAME2
|
|
262
|
+
.cprestore GP_OFF2
|
|
263
|
+
$LCFI10:
|
|
264
|
+
|
|
265
|
+
REG_S $16, S0_OFF2($sp) # Save s0
|
|
266
|
+
REG_S $fp, FP_OFF2($sp) # Save frame pointer
|
|
267
|
+
REG_S ra, RA_OFF2($sp) # Save return address
|
|
268
|
+
$LCFI11:
|
|
269
|
+
|
|
270
|
+
move $fp, $sp
|
|
271
|
+
$LCFI12:
|
|
272
|
+
|
|
273
|
+
REG_S a0, A0_OFF2($fp)
|
|
274
|
+
REG_S a1, A1_OFF2($fp)
|
|
275
|
+
REG_S a2, A2_OFF2($fp)
|
|
276
|
+
REG_S a3, A3_OFF2($fp)
|
|
277
|
+
|
|
278
|
+
# Load ABI enum to s0
|
|
279
|
+
REG_L $16, 4($15) # cif
|
|
280
|
+
REG_L $16, 0($16) # abi is first member.
|
|
281
|
+
|
|
282
|
+
li $13, 1 # FFI_O32
|
|
283
|
+
bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
|
|
284
|
+
|
|
285
|
+
# Store all possible float/double registers.
|
|
286
|
+
s.d $f12, FA_0_0_OFF2($fp)
|
|
287
|
+
s.d $f14, FA_1_0_OFF2($fp)
|
|
288
|
+
1:
|
|
289
|
+
# prepare arguments for ffi_closure_mips_inner_O32
|
|
290
|
+
REG_L a0, 4($15) # cif
|
|
291
|
+
REG_L a1, 8($15) # fun
|
|
292
|
+
move a2, $15 # user_data = go closure
|
|
293
|
+
addu a3, $fp, V0_OFF2 # rvalue
|
|
294
|
+
|
|
295
|
+
addu t9, $fp, A0_OFF2 # ar
|
|
296
|
+
REG_S t9, CALLED_A4_OFF2($fp)
|
|
297
|
+
|
|
298
|
+
addu t9, $fp, FA_0_0_OFF2 #fpr
|
|
299
|
+
REG_S t9, CALLED_A5_OFF2($fp)
|
|
300
|
+
|
|
301
|
+
b $do_closure
|
|
302
|
+
|
|
303
|
+
$LFE1:
|
|
304
|
+
.end ffi_go_closure_O32
|
|
305
|
+
|
|
230
306
|
.align 2
|
|
231
307
|
.globl ffi_closure_O32
|
|
232
308
|
.ent ffi_closure_O32
|
|
233
309
|
ffi_closure_O32:
|
|
234
|
-
$
|
|
310
|
+
$LFB2:
|
|
235
311
|
# Prologue
|
|
236
312
|
.frame $fp, SIZEOF_FRAME2, ra
|
|
237
313
|
.set noreorder
|
|
@@ -239,14 +315,14 @@ $LFB1:
|
|
|
239
315
|
.set reorder
|
|
240
316
|
SUBU $sp, SIZEOF_FRAME2
|
|
241
317
|
.cprestore GP_OFF2
|
|
242
|
-
$
|
|
318
|
+
$LCFI20:
|
|
243
319
|
REG_S $16, S0_OFF2($sp) # Save s0
|
|
244
320
|
REG_S $fp, FP_OFF2($sp) # Save frame pointer
|
|
245
321
|
REG_S ra, RA_OFF2($sp) # Save return address
|
|
246
|
-
$
|
|
322
|
+
$LCFI21:
|
|
247
323
|
move $fp, $sp
|
|
248
324
|
|
|
249
|
-
$
|
|
325
|
+
$LCFI22:
|
|
250
326
|
# Store all possible argument registers. If there are more than
|
|
251
327
|
# four arguments, then they are stored above where we put a3.
|
|
252
328
|
REG_S a0, A0_OFF2($fp)
|
|
@@ -261,16 +337,27 @@ $LCFI7:
|
|
|
261
337
|
li $13, 1 # FFI_O32
|
|
262
338
|
bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
|
|
263
339
|
|
|
340
|
+
#ifndef __mips_soft_float
|
|
264
341
|
# Store all possible float/double registers.
|
|
265
342
|
s.d $f12, FA_0_0_OFF2($fp)
|
|
266
343
|
s.d $f14, FA_1_0_OFF2($fp)
|
|
344
|
+
#endif
|
|
267
345
|
1:
|
|
268
|
-
#
|
|
346
|
+
# prepare arguments for ffi_closure_mips_inner_O32
|
|
347
|
+
REG_L a0, 20($12) # cif pointer follows tramp.
|
|
348
|
+
REG_L a1, 24($12) # fun
|
|
349
|
+
REG_L a2, 28($12) # user_data
|
|
350
|
+
addu a3, $fp, V0_OFF2 # rvalue
|
|
351
|
+
|
|
352
|
+
addu t9, $fp, A0_OFF2 # ar
|
|
353
|
+
REG_S t9, CALLED_A4_OFF2($fp)
|
|
354
|
+
|
|
355
|
+
addu t9, $fp, FA_0_0_OFF2 #fpr
|
|
356
|
+
REG_S t9, CALLED_A5_OFF2($fp)
|
|
357
|
+
|
|
358
|
+
$do_closure:
|
|
269
359
|
la t9, ffi_closure_mips_inner_O32
|
|
270
|
-
|
|
271
|
-
addu a1, $fp, V0_OFF2
|
|
272
|
-
addu a2, $fp, A0_OFF2
|
|
273
|
-
addu a3, $fp, FA_0_0_OFF2
|
|
360
|
+
# Call ffi_closure_mips_inner_O32 to do the work.
|
|
274
361
|
jalr t9
|
|
275
362
|
|
|
276
363
|
# Load the return value into the appropriate register.
|
|
@@ -281,6 +368,7 @@ $LCFI7:
|
|
|
281
368
|
li $13, 1 # FFI_O32
|
|
282
369
|
bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT
|
|
283
370
|
|
|
371
|
+
#ifndef __mips_soft_float
|
|
284
372
|
li $9, FFI_TYPE_FLOAT
|
|
285
373
|
l.s $f0, V0_OFF2($fp)
|
|
286
374
|
beq $8, $9, closure_done
|
|
@@ -288,6 +376,7 @@ $LCFI7:
|
|
|
288
376
|
li $9, FFI_TYPE_DOUBLE
|
|
289
377
|
l.d $f0, V0_OFF2($fp)
|
|
290
378
|
beq $8, $9, closure_done
|
|
379
|
+
#endif
|
|
291
380
|
1:
|
|
292
381
|
REG_L $3, V1_OFF2($fp)
|
|
293
382
|
REG_L $2, V0_OFF2($fp)
|
|
@@ -300,7 +389,7 @@ closure_done:
|
|
|
300
389
|
REG_L ra, RA_OFF2($sp) # Restore return address
|
|
301
390
|
ADDU $sp, SIZEOF_FRAME2
|
|
302
391
|
j ra
|
|
303
|
-
$
|
|
392
|
+
$LFE2:
|
|
304
393
|
.end ffi_closure_O32
|
|
305
394
|
|
|
306
395
|
/* DWARF-2 unwind info. */
|
|
@@ -322,6 +411,7 @@ $LSCIE0:
|
|
|
322
411
|
.uleb128 0x0
|
|
323
412
|
.align 2
|
|
324
413
|
$LECIE0:
|
|
414
|
+
|
|
325
415
|
$LSFDE0:
|
|
326
416
|
.4byte $LEFDE0-$LASFDE0 # FDE Length
|
|
327
417
|
$LASFDE0:
|
|
@@ -330,11 +420,11 @@ $LASFDE0:
|
|
|
330
420
|
.4byte $LFE0-$LFB0 # FDE address range
|
|
331
421
|
.uleb128 0x0 # Augmentation size
|
|
332
422
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
333
|
-
.4byte $
|
|
423
|
+
.4byte $LCFI00-$LFB0
|
|
334
424
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
335
425
|
.uleb128 0x18
|
|
336
426
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
337
|
-
.4byte $
|
|
427
|
+
.4byte $LCFI01-$LCFI00
|
|
338
428
|
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
339
429
|
.uleb128 0x1e # $fp
|
|
340
430
|
.sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
|
|
@@ -342,12 +432,13 @@ $LASFDE0:
|
|
|
342
432
|
.uleb128 0x1f # $ra
|
|
343
433
|
.sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
|
|
344
434
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
345
|
-
.4byte $
|
|
435
|
+
.4byte $LCFI02-$LCFI01
|
|
346
436
|
.byte 0xc # DW_CFA_def_cfa
|
|
347
437
|
.uleb128 0x1e
|
|
348
438
|
.uleb128 0x18
|
|
349
439
|
.align 2
|
|
350
440
|
$LEFDE0:
|
|
441
|
+
|
|
351
442
|
$LSFDE1:
|
|
352
443
|
.4byte $LEFDE1-$LASFDE1 # FDE Length
|
|
353
444
|
$LASFDE1:
|
|
@@ -356,11 +447,11 @@ $LASFDE1:
|
|
|
356
447
|
.4byte $LFE1-$LFB1 # FDE address range
|
|
357
448
|
.uleb128 0x0 # Augmentation size
|
|
358
449
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
359
|
-
.4byte $
|
|
450
|
+
.4byte $LCFI10-$LFB1
|
|
360
451
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
361
|
-
.uleb128
|
|
452
|
+
.uleb128 SIZEOF_FRAME2
|
|
362
453
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
363
|
-
.4byte $
|
|
454
|
+
.4byte $LCFI11-$LCFI10
|
|
364
455
|
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
365
456
|
.uleb128 0x10 # $16
|
|
366
457
|
.sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)
|
|
@@ -371,11 +462,41 @@ $LASFDE1:
|
|
|
371
462
|
.uleb128 0x1f # $ra
|
|
372
463
|
.sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
|
|
373
464
|
.byte 0x4 # DW_CFA_advance_loc4
|
|
374
|
-
.4byte $
|
|
465
|
+
.4byte $LCFI12-$LCFI11
|
|
375
466
|
.byte 0xc # DW_CFA_def_cfa
|
|
376
467
|
.uleb128 0x1e
|
|
377
|
-
.uleb128
|
|
468
|
+
.uleb128 SIZEOF_FRAME2
|
|
378
469
|
.align 2
|
|
379
470
|
$LEFDE1:
|
|
380
471
|
|
|
472
|
+
$LSFDE2:
|
|
473
|
+
.4byte $LEFDE2-$LASFDE2 # FDE Length
|
|
474
|
+
$LASFDE2:
|
|
475
|
+
.4byte $LASFDE2-$Lframe0 # FDE CIE offset
|
|
476
|
+
.4byte $LFB2 # FDE initial location
|
|
477
|
+
.4byte $LFE2-$LFB2 # FDE address range
|
|
478
|
+
.uleb128 0x0 # Augmentation size
|
|
479
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
|
480
|
+
.4byte $LCFI20-$LFB2
|
|
481
|
+
.byte 0xe # DW_CFA_def_cfa_offset
|
|
482
|
+
.uleb128 SIZEOF_FRAME2
|
|
483
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
|
484
|
+
.4byte $LCFI21-$LCFI20
|
|
485
|
+
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
486
|
+
.uleb128 0x10 # $16
|
|
487
|
+
.sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp)
|
|
488
|
+
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
489
|
+
.uleb128 0x1e # $fp
|
|
490
|
+
.sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp)
|
|
491
|
+
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
492
|
+
.uleb128 0x1f # $ra
|
|
493
|
+
.sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp)
|
|
494
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
|
495
|
+
.4byte $LCFI22-$LCFI21
|
|
496
|
+
.byte 0xc # DW_CFA_def_cfa
|
|
497
|
+
.uleb128 0x1e
|
|
498
|
+
.uleb128 SIZEOF_FRAME2
|
|
499
|
+
.align 2
|
|
500
|
+
$LEFDE2:
|
|
501
|
+
|
|
381
502
|
#endif
|