ffi 1.9.18-x86-mingw32 → 1.9.21-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/README.md +3 -2
- data/Rakefile +14 -4
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/extconf.rb +7 -2
- data/ext/ffi_c/libffi.bsd.mk +9 -3
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +2 -1
- data/ext/ffi_c/libffi.mk +9 -4
- data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
- data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/Makefile.am +166 -157
- data/ext/ffi_c/libffi/Makefile.in +923 -938
- data/ext/ffi_c/libffi/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +381 -0
- data/ext/ffi_c/libffi/aclocal.m4 +645 -384
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
- data/ext/ffi_c/libffi/compile +218 -14
- data/ext/ffi_c/libffi/config.guess +329 -368
- data/ext/ffi_c/libffi/config.sub +232 -112
- data/ext/ffi_c/libffi/configure +6970 -2189
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +265 -4
- data/ext/ffi_c/libffi/depcomp +346 -185
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
- data/ext/ffi_c/libffi/{mdate-sh → doc/mdate-sh} +40 -13
- data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
- data/ext/ffi_c/libffi/fficonfig.h.in~ +210 -0
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +188 -71
- data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
- data/ext/ffi_c/libffi/install-sh +190 -202
- data/ext/ffi_c/libffi/libffi.map.in +80 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
- data/ext/ffi_c/libffi/m4/libtool.m4 +1691 -1135
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
- data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +141 -49
- data/ext/ffi_c/libffi/man/ffi.3 +10 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
- data/ext/ffi_c/libffi/missing +150 -311
- data/ext/ffi_c/libffi/msvcc.sh +72 -9
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
- data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
- data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
- data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
- data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
- data/ext/ffi_c/libffi/src/closures.c +319 -44
- data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/debug.c +6 -1
- data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
- data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
- data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
- data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
- data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
- data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
- data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
- data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
- data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
- data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
- data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
- data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
- data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
- data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
- data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
- data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
- data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
- data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
- data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
- data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
- data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
- data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
- data/ext/ffi_c/libffi/src/types.c +43 -14
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
- data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
- data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
- data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
- data/ffi.gemspec +2 -2
- data/lib/2.0/ffi_c.so +0 -0
- data/lib/2.1/ffi_c.so +0 -0
- data/lib/2.2/ffi_c.so +0 -0
- data/lib/2.3/ffi_c.so +0 -0
- data/lib/2.4/ffi_c.so +0 -0
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +65 -13
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -1
- data/spec/ffi/bitmask_spec.rb +575 -0
- data/spec/ffi/embed-test/ext/Makefile +242 -0
- data/spec/ffi/fixtures/BitmaskTest.c +51 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
- data/spec/ffi/struct_spec.rb +0 -4
- metadata +158 -32
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- data/ext/ffi_c/libffi/doc/libffi.info +0 -593
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
- data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
- data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
- data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
- data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
- data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
- data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
- data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 1996-2003 Red Hat, Inc.
|
3
4
|
Target configuration macros for SPARC.
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -27,6 +28,10 @@
|
|
27
28
|
#ifndef LIBFFI_TARGET_H
|
28
29
|
#define LIBFFI_TARGET_H
|
29
30
|
|
31
|
+
#ifndef LIBFFI_H
|
32
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
+
#endif
|
34
|
+
|
30
35
|
/* ---- System specific configurations ----------------------------------- */
|
31
36
|
|
32
37
|
#if defined(__arch64__) || defined(__sparcv9)
|
@@ -41,21 +46,29 @@ typedef signed long ffi_sarg;
|
|
41
46
|
|
42
47
|
typedef enum ffi_abi {
|
43
48
|
FFI_FIRST_ABI = 0,
|
44
|
-
FFI_V8,
|
45
|
-
FFI_V8PLUS,
|
46
|
-
FFI_V9,
|
47
|
-
FFI_LAST_ABI,
|
48
49
|
#ifdef SPARC64
|
49
|
-
|
50
|
+
FFI_V9,
|
51
|
+
FFI_DEFAULT_ABI = FFI_V9,
|
50
52
|
#else
|
51
|
-
|
53
|
+
FFI_V8,
|
54
|
+
FFI_DEFAULT_ABI = FFI_V8,
|
52
55
|
#endif
|
56
|
+
FFI_LAST_ABI
|
53
57
|
} ffi_abi;
|
54
58
|
#endif
|
55
59
|
|
60
|
+
#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION 1
|
61
|
+
#define FFI_TARGET_HAS_COMPLEX_TYPE 1
|
62
|
+
|
63
|
+
#ifdef SPARC64
|
64
|
+
# define FFI_TARGET_SPECIFIC_VARIADIC 1
|
65
|
+
# define FFI_EXTRA_CIF_FIELDS unsigned int nfixedargs
|
66
|
+
#endif
|
67
|
+
|
56
68
|
/* ---- Definitions for closures ----------------------------------------- */
|
57
69
|
|
58
70
|
#define FFI_CLOSURES 1
|
71
|
+
#define FFI_GO_CLOSURES 1
|
59
72
|
#define FFI_NATIVE_RAW_API 0
|
60
73
|
|
61
74
|
#ifdef SPARC64
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#define SPARC_RET_VOID 0
|
2
|
+
#define SPARC_RET_STRUCT 1
|
3
|
+
#define SPARC_RET_UINT8 2
|
4
|
+
#define SPARC_RET_SINT8 3
|
5
|
+
#define SPARC_RET_UINT16 4
|
6
|
+
#define SPARC_RET_SINT16 5
|
7
|
+
#define SPARC_RET_UINT32 6
|
8
|
+
#define SP_V9_RET_SINT32 7 /* v9 only */
|
9
|
+
#define SP_V8_RET_CPLX16 7 /* v8 only */
|
10
|
+
#define SPARC_RET_INT64 8
|
11
|
+
#define SPARC_RET_INT128 9
|
12
|
+
|
13
|
+
/* Note that F_7 is missing, and is handled by SPARC_RET_STRUCT. */
|
14
|
+
#define SPARC_RET_F_8 10
|
15
|
+
#define SPARC_RET_F_6 11
|
16
|
+
#define SPARC_RET_F_4 12
|
17
|
+
#define SPARC_RET_F_2 13
|
18
|
+
#define SP_V9_RET_F_3 14 /* v9 only */
|
19
|
+
#define SP_V8_RET_CPLX8 14 /* v8 only */
|
20
|
+
#define SPARC_RET_F_1 15
|
21
|
+
|
22
|
+
#define SPARC_FLAG_RET_MASK 15
|
23
|
+
#define SPARC_FLAG_RET_IN_MEM 32
|
24
|
+
#define SPARC_FLAG_FP_ARGS 64
|
25
|
+
|
26
|
+
#define SPARC_SIZEMASK_SHIFT 8
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/* -----------------------------------------------------------------------
|
2
|
-
v8.S - Copyright (c)
|
3
|
-
|
4
|
-
|
2
|
+
v8.S - Copyright (c) 2013 The Written Word, Inc.
|
3
|
+
Copyright (c) 1996, 1997, 2003, 2004, 2008 Red Hat, Inc.
|
4
|
+
|
5
|
+
SPARC Foreign Function Interface
|
5
6
|
|
6
7
|
Permission is hereby granted, free of charge, to any person obtaining
|
7
8
|
a copy of this software and associated documentation files (the
|
@@ -24,151 +25,253 @@
|
|
24
25
|
DEALINGS IN THE SOFTWARE.
|
25
26
|
----------------------------------------------------------------------- */
|
26
27
|
|
27
|
-
#define LIBFFI_ASM
|
28
|
+
#define LIBFFI_ASM
|
28
29
|
#include <fficonfig.h>
|
29
30
|
#include <ffi.h>
|
31
|
+
#include "internal.h"
|
30
32
|
|
31
|
-
#
|
32
|
-
#define ARGS (64+4) /* Offset of register area in frame */
|
33
|
-
|
34
|
-
.text
|
35
|
-
.align 8
|
36
|
-
.globl ffi_call_v8
|
37
|
-
.globl _ffi_call_v8
|
38
|
-
|
39
|
-
ffi_call_v8:
|
40
|
-
_ffi_call_v8:
|
41
|
-
.LLFB1:
|
42
|
-
save %sp, -STACKFRAME, %sp
|
43
|
-
.LLCFI0:
|
44
|
-
|
45
|
-
sub %sp, %i2, %sp ! alloca() space in stack for frame to set up
|
46
|
-
add %sp, STACKFRAME, %l0 ! %l0 has start of
|
47
|
-
! frame to set up
|
48
|
-
|
49
|
-
mov %l0, %o0 ! call routine to set up frame
|
50
|
-
call %i0
|
51
|
-
mov %i1, %o1 ! (delay)
|
52
|
-
|
53
|
-
ld [%l0+ARGS], %o0 ! call foreign function
|
54
|
-
ld [%l0+ARGS+4], %o1
|
55
|
-
ld [%l0+ARGS+8], %o2
|
56
|
-
ld [%l0+ARGS+12], %o3
|
57
|
-
ld [%l0+ARGS+16], %o4
|
58
|
-
ld [%l0+ARGS+20], %o5
|
59
|
-
call %i5
|
60
|
-
mov %l0, %sp ! (delay) switch to frame
|
61
|
-
nop ! STRUCT returning functions skip 12 instead of 8 bytes
|
62
|
-
|
63
|
-
! If the return value pointer is NULL, assume no return value.
|
64
|
-
tst %i4
|
65
|
-
bz done
|
66
|
-
nop
|
67
|
-
|
68
|
-
cmp %i3, FFI_TYPE_INT
|
69
|
-
be,a done
|
70
|
-
st %o0, [%i4] ! (delay)
|
33
|
+
#ifndef SPARC64
|
71
34
|
|
72
|
-
|
73
|
-
|
74
|
-
st %f0, [%i4+0] ! (delay)
|
35
|
+
#define C2(X, Y) X ## Y
|
36
|
+
#define C1(X, Y) C2(X, Y)
|
75
37
|
|
76
|
-
|
77
|
-
|
78
|
-
|
38
|
+
#ifdef __USER_LABEL_PREFIX__
|
39
|
+
# define C(Y) C1(__USER_LABEL_PREFIX__, Y)
|
40
|
+
#else
|
41
|
+
# define C(Y) Y
|
42
|
+
#endif
|
43
|
+
#define L(Y) C1(.L, Y)
|
79
44
|
|
80
|
-
|
81
|
-
be,a sint8
|
82
|
-
sll %o0, 24, %o0 ! (delay)
|
45
|
+
.text
|
83
46
|
|
84
|
-
|
85
|
-
|
86
|
-
|
47
|
+
#ifndef __GNUC__
|
48
|
+
.align 8
|
49
|
+
.globl C(ffi_flush_icache)
|
50
|
+
.type C(ffi_flush_icache),#function
|
51
|
+
FFI_HIDDEN(C(ffi_flush_icache))
|
87
52
|
|
88
|
-
|
89
|
-
|
90
|
-
|
53
|
+
C(ffi_flush_icache):
|
54
|
+
1: iflush %o0
|
55
|
+
iflush %o+8
|
56
|
+
nop
|
57
|
+
nop
|
58
|
+
nop
|
59
|
+
nop
|
60
|
+
nop
|
61
|
+
retl
|
62
|
+
nop
|
63
|
+
.size C(ffi_flush_icache), . - C(ffi_flush_icache)
|
64
|
+
#endif
|
91
65
|
|
92
|
-
|
93
|
-
|
94
|
-
|
66
|
+
#if defined(__sun__) && defined(__svr4__)
|
67
|
+
# define E(INDEX) .align 16
|
68
|
+
#else
|
69
|
+
# define E(INDEX) .align 16; .org 2b + INDEX * 16
|
70
|
+
#endif
|
95
71
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
72
|
+
.align 8
|
73
|
+
.globl C(ffi_call_v8)
|
74
|
+
.type C(ffi_call_v8),#function
|
75
|
+
FFI_HIDDEN(C(ffi_call_v8))
|
76
|
+
|
77
|
+
C(ffi_call_v8):
|
78
|
+
.LUW0:
|
79
|
+
! Allocate a stack frame sized by ffi_call.
|
80
|
+
save %sp, %o4, %sp
|
81
|
+
.LUW1:
|
82
|
+
mov %i0, %o0 ! copy cif
|
83
|
+
add %sp, 64+32, %o1 ! load args area
|
84
|
+
mov %i2, %o2 ! copy rvalue
|
85
|
+
call C(ffi_prep_args_v8)
|
86
|
+
mov %i3, %o3 ! copy avalue
|
87
|
+
|
88
|
+
add %sp, 32, %sp ! deallocate prep frame
|
89
|
+
and %o0, SPARC_FLAG_RET_MASK, %l0 ! save return type
|
90
|
+
srl %o0, SPARC_SIZEMASK_SHIFT, %l1 ! save return size
|
91
|
+
ld [%sp+64+4], %o0 ! load all argument registers
|
92
|
+
ld [%sp+64+8], %o1
|
93
|
+
ld [%sp+64+12], %o2
|
94
|
+
ld [%sp+64+16], %o3
|
95
|
+
cmp %l0, SPARC_RET_STRUCT ! struct return needs an unimp 4
|
96
|
+
ld [%sp+64+20], %o4
|
97
|
+
be 8f
|
98
|
+
ld [%sp+64+24], %o5
|
99
|
+
|
100
|
+
! Call foreign function
|
101
|
+
call %i1
|
102
|
+
mov %i5, %g2 ! load static chain
|
103
|
+
|
104
|
+
0: call 1f ! load pc in %o7
|
105
|
+
sll %l0, 4, %l0
|
106
|
+
1: add %o7, %l0, %o7 ! o7 = 0b + ret_type*16
|
107
|
+
jmp %o7+(2f-0b)
|
108
|
+
nop
|
109
|
+
|
110
|
+
! Note that each entry is 4 insns, enforced by the E macro.
|
111
|
+
.align 16
|
112
|
+
2:
|
113
|
+
E(SPARC_RET_VOID)
|
100
114
|
ret
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
115
|
+
restore
|
116
|
+
E(SPARC_RET_STRUCT)
|
117
|
+
unimp
|
118
|
+
E(SPARC_RET_UINT8)
|
119
|
+
and %o0, 0xff, %o0
|
120
|
+
st %o0, [%i2]
|
105
121
|
ret
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
122
|
+
restore
|
123
|
+
E(SPARC_RET_SINT8)
|
124
|
+
sll %o0, 24, %o0
|
125
|
+
b 7f
|
126
|
+
sra %o0, 24, %o0
|
127
|
+
E(SPARC_RET_UINT16)
|
128
|
+
sll %o0, 16, %o0
|
129
|
+
b 7f
|
130
|
+
srl %o0, 16, %o0
|
131
|
+
E(SPARC_RET_SINT16)
|
132
|
+
sll %o0, 16, %o0
|
133
|
+
b 7f
|
134
|
+
sra %o0, 16, %o0
|
135
|
+
E(SPARC_RET_UINT32)
|
136
|
+
7: st %o0, [%i2]
|
111
137
|
ret
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
138
|
+
restore
|
139
|
+
E(SP_V8_RET_CPLX16)
|
140
|
+
sth %o0, [%i2+2]
|
141
|
+
b 9f
|
142
|
+
srl %o0, 16, %o0
|
143
|
+
E(SPARC_RET_INT64)
|
144
|
+
st %o0, [%i2]
|
145
|
+
st %o1, [%i2+4]
|
117
146
|
ret
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
st %o0, [%i4+0]
|
147
|
+
restore
|
148
|
+
E(SPARC_RET_INT128)
|
149
|
+
std %o0, [%i2]
|
150
|
+
std %o2, [%i2+8]
|
123
151
|
ret
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
st %
|
152
|
+
restore
|
153
|
+
E(SPARC_RET_F_8)
|
154
|
+
st %f7, [%i2+7*4]
|
155
|
+
nop
|
156
|
+
st %f6, [%i2+6*4]
|
157
|
+
nop
|
158
|
+
E(SPARC_RET_F_6)
|
159
|
+
st %f5, [%i2+5*4]
|
160
|
+
nop
|
161
|
+
st %f4, [%i2+4*4]
|
162
|
+
nop
|
163
|
+
E(SPARC_RET_F_4)
|
164
|
+
st %f3, [%i2+3*4]
|
165
|
+
nop
|
166
|
+
st %f2, [%i2+2*4]
|
167
|
+
nop
|
168
|
+
E(SPARC_RET_F_2)
|
169
|
+
st %f1, [%i2+4]
|
170
|
+
st %f0, [%i2]
|
129
171
|
ret
|
130
|
-
|
172
|
+
restore
|
173
|
+
E(SP_V8_RET_CPLX8)
|
174
|
+
stb %o0, [%i2+1]
|
175
|
+
b 0f
|
176
|
+
srl %o0, 8, %o0
|
177
|
+
E(SPARC_RET_F_1)
|
178
|
+
st %f0, [%i2]
|
179
|
+
ret
|
180
|
+
restore
|
131
181
|
|
132
|
-
|
133
|
-
|
182
|
+
.align 8
|
183
|
+
9: sth %o0, [%i2]
|
134
184
|
ret
|
135
|
-
|
136
|
-
.
|
185
|
+
restore
|
186
|
+
.align 8
|
187
|
+
0: stb %o0, [%i2]
|
188
|
+
ret
|
189
|
+
restore
|
190
|
+
|
191
|
+
! Struct returning functions expect and skip the unimp here.
|
192
|
+
! To make it worse, conforming callees examine the unimp and
|
193
|
+
! make sure the low 12 bits of the unimp match the size of
|
194
|
+
! the struct being returned.
|
195
|
+
.align 8
|
196
|
+
8: call 1f ! load pc in %o7
|
197
|
+
sll %l1, 2, %l0 ! size * 4
|
198
|
+
1: sll %l1, 4, %l1 ! size * 16
|
199
|
+
add %l0, %l1, %l0 ! size * 20
|
200
|
+
add %o7, %l0, %o7 ! o7 = 8b + size*20
|
201
|
+
jmp %o7+(2f-8b)
|
202
|
+
mov %i5, %g2 ! load static chain
|
203
|
+
2:
|
204
|
+
|
205
|
+
/* The Sun assembler doesn't understand .rept 0x1000. */
|
206
|
+
#define rept1 \
|
207
|
+
call %i1; \
|
208
|
+
nop; \
|
209
|
+
unimp (. - 2b) / 20; \
|
210
|
+
ret; \
|
211
|
+
restore
|
212
|
+
|
213
|
+
#define rept16 \
|
214
|
+
rept1; rept1; rept1; rept1; \
|
215
|
+
rept1; rept1; rept1; rept1; \
|
216
|
+
rept1; rept1; rept1; rept1; \
|
217
|
+
rept1; rept1; rept1; rept1
|
218
|
+
|
219
|
+
#define rept256 \
|
220
|
+
rept16; rept16; rept16; rept16; \
|
221
|
+
rept16; rept16; rept16; rept16; \
|
222
|
+
rept16; rept16; rept16; rept16; \
|
223
|
+
rept16; rept16; rept16; rept16
|
137
224
|
|
138
|
-
|
139
|
-
|
225
|
+
rept256; rept256; rept256; rept256
|
226
|
+
rept256; rept256; rept256; rept256
|
227
|
+
rept256; rept256; rept256; rept256
|
228
|
+
rept256; rept256; rept256; rept256
|
140
229
|
|
230
|
+
.LUW2:
|
231
|
+
.size C(ffi_call_v8),. - C(ffi_call_v8)
|
141
232
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
3*4 locals */
|
233
|
+
|
234
|
+
/* 16*4 register window + 1*4 struct return + 6*4 args backing store
|
235
|
+
+ 8*4 return storage + 1*4 alignment. */
|
236
|
+
#define STACKFRAME (16*4 + 4 + 6*4 + 8*4 + 4)
|
147
237
|
|
148
238
|
/* ffi_closure_v8(...)
|
149
239
|
|
150
240
|
Receives the closure argument in %g2. */
|
151
241
|
|
152
|
-
.text
|
153
|
-
.align 8
|
154
|
-
.globl ffi_closure_v8
|
155
|
-
|
156
|
-
ffi_closure_v8:
|
157
242
|
#ifdef HAVE_AS_REGISTER_PSEUDO_OP
|
158
|
-
|
243
|
+
.register %g2, #scratch
|
159
244
|
#endif
|
160
|
-
.LLFB2:
|
161
|
-
! Reserve frame space for all arguments in case
|
162
|
-
! we need to align them on a 8-byte boundary.
|
163
|
-
ld [%g2+FFI_TRAMPOLINE_SIZE], %g1
|
164
|
-
ld [%g1+4], %g1
|
165
|
-
sll %g1, 3, %g1
|
166
|
-
add %g1, STACKFRAME, %g1
|
167
|
-
! %g1 == STACKFRAME + 8*nargs
|
168
|
-
neg %g1
|
169
|
-
save %sp, %g1, %sp
|
170
|
-
.LLCFI1:
|
171
245
|
|
246
|
+
.align 8
|
247
|
+
.globl C(ffi_go_closure_v8)
|
248
|
+
.type C(ffi_go_closure_v8),#function
|
249
|
+
FFI_HIDDEN(C(ffi_go_closure_v8))
|
250
|
+
|
251
|
+
C(ffi_go_closure_v8):
|
252
|
+
.LUW3:
|
253
|
+
save %sp, -STACKFRAME, %sp
|
254
|
+
.LUW4:
|
255
|
+
ld [%g2+4], %o0 ! load cif
|
256
|
+
ld [%g2+8], %o1 ! load fun
|
257
|
+
b 0f
|
258
|
+
mov %g2, %o2 ! load user_data
|
259
|
+
.LUW5:
|
260
|
+
.size C(ffi_go_closure_v8), . - C(ffi_go_closure_v8)
|
261
|
+
|
262
|
+
.align 8
|
263
|
+
.globl C(ffi_closure_v8)
|
264
|
+
.type C(ffi_closure_v8),#function
|
265
|
+
FFI_HIDDEN(C(ffi_closure_v8))
|
266
|
+
|
267
|
+
C(ffi_closure_v8):
|
268
|
+
.LUW6:
|
269
|
+
save %sp, -STACKFRAME, %sp
|
270
|
+
.LUW7:
|
271
|
+
ld [%g2+FFI_TRAMPOLINE_SIZE], %o0 ! load cif
|
272
|
+
ld [%g2+FFI_TRAMPOLINE_SIZE+4], %o1 ! load fun
|
273
|
+
ld [%g2+FFI_TRAMPOLINE_SIZE+8], %o2 ! load user_data
|
274
|
+
0:
|
172
275
|
! Store all of the potential argument registers in va_list format.
|
173
276
|
st %i0, [%fp+68+0]
|
174
277
|
st %i1, [%fp+68+4]
|
@@ -178,136 +281,163 @@ ffi_closure_v8:
|
|
178
281
|
st %i5, [%fp+68+20]
|
179
282
|
|
180
283
|
! Call ffi_closure_sparc_inner to do the bulk of the work.
|
181
|
-
|
182
|
-
add %fp, -8, %o1
|
183
|
-
add %fp, 64, %o2
|
284
|
+
add %fp, -8*4, %o3
|
184
285
|
call ffi_closure_sparc_inner_v8
|
185
|
-
add %fp,
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
cmp %o0, FFI_TYPE_DOUBLE
|
201
|
-
be,a done1
|
202
|
-
ldd [%fp-8], %f0
|
203
|
-
|
204
|
-
#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
|
205
|
-
cmp %o0, FFI_TYPE_LONGDOUBLE
|
206
|
-
be done2
|
207
|
-
#endif
|
208
|
-
|
209
|
-
cmp %o0, FFI_TYPE_STRUCT
|
210
|
-
be done2
|
211
|
-
|
212
|
-
cmp %o0, FFI_TYPE_SINT64
|
213
|
-
be,a done1
|
214
|
-
ldd [%fp-8], %i0
|
215
|
-
|
216
|
-
ld [%fp-8], %i0
|
217
|
-
done1:
|
218
|
-
jmp %i7+8
|
286
|
+
add %fp, 64, %o4
|
287
|
+
|
288
|
+
0: call 1f
|
289
|
+
and %o0, SPARC_FLAG_RET_MASK, %o0
|
290
|
+
1: sll %o0, 4, %o0 ! o0 = o0 * 16
|
291
|
+
add %o7, %o0, %o7 ! o7 = 0b + o0*16
|
292
|
+
jmp %o7+(2f-0b)
|
293
|
+
add %fp, -8*4, %i2
|
294
|
+
|
295
|
+
! Note that each entry is 4 insns, enforced by the E macro.
|
296
|
+
.align 16
|
297
|
+
2:
|
298
|
+
E(SPARC_RET_VOID)
|
299
|
+
ret
|
219
300
|
restore
|
220
|
-
|
221
|
-
|
301
|
+
E(SPARC_RET_STRUCT)
|
302
|
+
ld [%i2], %i0
|
222
303
|
jmp %i7+12
|
223
304
|
restore
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
305
|
+
E(SPARC_RET_UINT8)
|
306
|
+
ldub [%i2+3], %i0
|
307
|
+
ret
|
308
|
+
restore
|
309
|
+
E(SPARC_RET_SINT8)
|
310
|
+
ldsb [%i2+3], %i0
|
311
|
+
ret
|
312
|
+
restore
|
313
|
+
E(SPARC_RET_UINT16)
|
314
|
+
lduh [%i2+2], %i0
|
315
|
+
ret
|
316
|
+
restore
|
317
|
+
E(SPARC_RET_SINT16)
|
318
|
+
ldsh [%i2+2], %i0
|
319
|
+
ret
|
320
|
+
restore
|
321
|
+
E(SPARC_RET_UINT32)
|
322
|
+
ld [%i2], %i0
|
323
|
+
ret
|
324
|
+
restore
|
325
|
+
E(SP_V8_RET_CPLX16)
|
326
|
+
ld [%i2], %i0
|
327
|
+
ret
|
328
|
+
restore
|
329
|
+
E(SPARC_RET_INT64)
|
330
|
+
ldd [%i2], %i0
|
331
|
+
ret
|
332
|
+
restore
|
333
|
+
E(SPARC_RET_INT128)
|
334
|
+
ldd [%i2], %i0
|
335
|
+
ldd [%i2+8], %i2
|
336
|
+
ret
|
337
|
+
restore
|
338
|
+
E(SPARC_RET_F_8)
|
339
|
+
ld [%i2+7*4], %f7
|
340
|
+
nop
|
341
|
+
ld [%i2+6*4], %f6
|
342
|
+
nop
|
343
|
+
E(SPARC_RET_F_6)
|
344
|
+
ld [%i2+5*4], %f5
|
345
|
+
nop
|
346
|
+
ld [%i2+4*4], %f4
|
347
|
+
nop
|
348
|
+
E(SPARC_RET_F_4)
|
349
|
+
ld [%i2+3*4], %f3
|
350
|
+
nop
|
351
|
+
ld [%i2+2*4], %f2
|
352
|
+
nop
|
353
|
+
E(SPARC_RET_F_2)
|
354
|
+
ldd [%i2], %f0
|
355
|
+
ret
|
356
|
+
restore
|
357
|
+
E(SP_V8_RET_CPLX8)
|
358
|
+
lduh [%i2], %i0
|
359
|
+
ret
|
360
|
+
restore
|
361
|
+
E(SPARC_RET_F_1)
|
362
|
+
ld [%i2], %f0
|
363
|
+
ret
|
364
|
+
restore
|
228
365
|
|
229
|
-
|
230
|
-
|
231
|
-
#define nword xword
|
232
|
-
#define uanword uaxword
|
233
|
-
#else
|
234
|
-
#define WS 4
|
235
|
-
#define nword long
|
236
|
-
#define uanword uaword
|
237
|
-
#endif
|
366
|
+
.LUW8:
|
367
|
+
.size C(ffi_closure_v8), . - C(ffi_closure_v8)
|
238
368
|
|
239
369
|
#ifdef HAVE_RO_EH_FRAME
|
240
|
-
|
370
|
+
.section ".eh_frame",#alloc
|
241
371
|
#else
|
242
|
-
|
372
|
+
.section ".eh_frame",#alloc,#write
|
243
373
|
#endif
|
244
|
-
|
245
|
-
.uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry
|
246
|
-
.LLSCIE1:
|
247
|
-
.uaword 0x0 ! CIE Identifier Tag
|
248
|
-
.byte 0x1 ! CIE Version
|
249
|
-
.ascii "zR\0" ! CIE Augmentation
|
250
|
-
.byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor
|
251
|
-
.byte 0x80-WS ! sleb128 -WS; CIE Data Alignment Factor
|
252
|
-
.byte 0xf ! CIE RA Column
|
253
|
-
.byte 0x1 ! uleb128 0x1; Augmentation size
|
254
|
-
#ifdef HAVE_AS_SPARC_UA_PCREL
|
255
|
-
.byte 0x1b ! FDE Encoding (pcrel sdata4)
|
256
|
-
#else
|
257
|
-
.byte 0x50 ! FDE Encoding (aligned absolute)
|
258
|
-
#endif
|
259
|
-
.byte 0xc ! DW_CFA_def_cfa
|
260
|
-
.byte 0xe ! uleb128 0xe
|
261
|
-
.byte 0x0 ! uleb128 0x0
|
262
|
-
.align WS
|
263
|
-
.LLECIE1:
|
264
|
-
.LLSFDE1:
|
265
|
-
.uaword .LLEFDE1-.LLASFDE1 ! FDE Length
|
266
|
-
.LLASFDE1:
|
267
|
-
.uaword .LLASFDE1-.LLframe1 ! FDE CIE offset
|
374
|
+
|
268
375
|
#ifdef HAVE_AS_SPARC_UA_PCREL
|
269
|
-
|
270
|
-
.uaword .LLFE1-.LLFB1 ! FDE address range
|
376
|
+
# define FDE_ADDR(X) %r_disp32(X)
|
271
377
|
#else
|
272
|
-
|
273
|
-
.nword .LLFB1
|
274
|
-
.uanword .LLFE1-.LLFB1 ! FDE address range
|
378
|
+
# define FDE_ADDR(X) X
|
275
379
|
#endif
|
276
|
-
|
277
|
-
.
|
278
|
-
|
279
|
-
.
|
280
|
-
|
281
|
-
.
|
282
|
-
.byte
|
283
|
-
.
|
284
|
-
.byte
|
285
|
-
.
|
286
|
-
.
|
287
|
-
.
|
288
|
-
.uaword .LLEFDE2-.LLASFDE2 ! FDE Length
|
289
|
-
.LLASFDE2:
|
290
|
-
.uaword .LLASFDE2-.LLframe1 ! FDE CIE offset
|
380
|
+
|
381
|
+
.align 4
|
382
|
+
.LCIE:
|
383
|
+
.long .LECIE - .LSCIE ! CIE Length
|
384
|
+
.LSCIE:
|
385
|
+
.long 0 ! CIE Identifier Tag
|
386
|
+
.byte 1 ! CIE Version
|
387
|
+
.ascii "zR\0" ! CIE Augmentation
|
388
|
+
.byte 4 ! CIE Code Alignment Factor
|
389
|
+
.byte 0x7c ! CIE Data Alignment Factor
|
390
|
+
.byte 15 ! CIE RA Column
|
391
|
+
.byte 1 ! Augmentation size
|
291
392
|
#ifdef HAVE_AS_SPARC_UA_PCREL
|
292
|
-
.
|
293
|
-
.uaword .LLFE2-.LLFB2 ! FDE address range
|
393
|
+
.byte 0x1b ! FDE Encoding (pcrel sdata4)
|
294
394
|
#else
|
295
|
-
.
|
296
|
-
.nword .LLFB2
|
297
|
-
.uanword .LLFE2-.LLFB2 ! FDE address range
|
395
|
+
.byte 0x50 ! FDE Encoding (aligned absolute)
|
298
396
|
#endif
|
299
|
-
.byte
|
300
|
-
.
|
301
|
-
|
302
|
-
|
303
|
-
.
|
304
|
-
|
305
|
-
.
|
306
|
-
.
|
307
|
-
.
|
308
|
-
.
|
309
|
-
.
|
310
|
-
|
397
|
+
.byte 0xc, 14, 0 ! DW_CFA_def_cfa, %o6, offset 0
|
398
|
+
.align 4
|
399
|
+
.LECIE:
|
400
|
+
|
401
|
+
.long .LEFDE1 - .LSFDE1 ! FDE Length
|
402
|
+
.LSFDE1:
|
403
|
+
.long .LSFDE1 - .LCIE ! FDE CIE offset
|
404
|
+
.long FDE_ADDR(.LUW0) ! Initial location
|
405
|
+
.long .LUW2 - .LUW0 ! Address range
|
406
|
+
.byte 0 ! Augmentation size
|
407
|
+
.byte 0x40+1 ! DW_CFA_advance_loc 4
|
408
|
+
.byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
|
409
|
+
.byte 0x2d ! DW_CFA_GNU_window_save
|
410
|
+
.byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
|
411
|
+
.align 4
|
412
|
+
.LEFDE1:
|
413
|
+
|
414
|
+
.long .LEFDE2 - .LSFDE2 ! FDE Length
|
415
|
+
.LSFDE2:
|
416
|
+
.long .LSFDE2 - .LCIE ! FDE CIE offset
|
417
|
+
.long FDE_ADDR(.LUW3) ! Initial location
|
418
|
+
.long .LUW5 - .LUW3 ! Address range
|
419
|
+
.byte 0 ! Augmentation size
|
420
|
+
.byte 0x40+1 ! DW_CFA_advance_loc 4
|
421
|
+
.byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
|
422
|
+
.byte 0x2d ! DW_CFA_GNU_window_save
|
423
|
+
.byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
|
424
|
+
.align 4
|
425
|
+
.LEFDE2:
|
426
|
+
|
427
|
+
.long .LEFDE3 - .LSFDE3 ! FDE Length
|
428
|
+
.LSFDE3:
|
429
|
+
.long .LSFDE3 - .LCIE ! FDE CIE offset
|
430
|
+
.long FDE_ADDR(.LUW6) ! Initial location
|
431
|
+
.long .LUW8 - .LUW6 ! Address range
|
432
|
+
.byte 0 ! Augmentation size
|
433
|
+
.byte 0x40+1 ! DW_CFA_advance_loc 4
|
434
|
+
.byte 0xd, 30 ! DW_CFA_def_cfa_register, %i6
|
435
|
+
.byte 0x2d ! DW_CFA_GNU_window_save
|
436
|
+
.byte 0x9, 15, 31 ! DW_CFA_register, %o7, %i7
|
437
|
+
.align 4
|
438
|
+
.LEFDE3:
|
439
|
+
|
440
|
+
#endif /* !SPARC64 */
|
311
441
|
#if defined __ELF__ && defined __linux__
|
312
442
|
.section .note.GNU-stack,"",@progbits
|
313
443
|
#endif
|