ffi 1.9.18-x64-mingw32 → 1.9.21-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/README.md +3 -2
- data/Rakefile +14 -4
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/extconf.rb +7 -2
- data/ext/ffi_c/libffi.bsd.mk +9 -3
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +2 -1
- data/ext/ffi_c/libffi.mk +9 -4
- data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
- data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/Makefile.am +166 -157
- data/ext/ffi_c/libffi/Makefile.in +923 -938
- data/ext/ffi_c/libffi/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +381 -0
- data/ext/ffi_c/libffi/aclocal.m4 +645 -384
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
- data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
- data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
- data/ext/ffi_c/libffi/compile +218 -14
- data/ext/ffi_c/libffi/config.guess +329 -368
- data/ext/ffi_c/libffi/config.sub +232 -112
- data/ext/ffi_c/libffi/configure +6970 -2189
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +265 -4
- data/ext/ffi_c/libffi/depcomp +346 -185
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
- data/ext/ffi_c/libffi/{mdate-sh → doc/mdate-sh} +40 -13
- data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
- data/ext/ffi_c/libffi/fficonfig.h.in~ +210 -0
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +188 -71
- data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
- data/ext/ffi_c/libffi/install-sh +190 -202
- data/ext/ffi_c/libffi/libffi.map.in +80 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
- data/ext/ffi_c/libffi/m4/libtool.m4 +1691 -1135
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
- data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +141 -49
- data/ext/ffi_c/libffi/man/ffi.3 +10 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
- data/ext/ffi_c/libffi/missing +150 -311
- data/ext/ffi_c/libffi/msvcc.sh +72 -9
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
- data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
- data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
- data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
- data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
- data/ext/ffi_c/libffi/src/closures.c +319 -44
- data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/debug.c +6 -1
- data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
- data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
- data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
- data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
- data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
- data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
- data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
- data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
- data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
- data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
- data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
- data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
- data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
- data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
- data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
- data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
- data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
- data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
- data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
- data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
- data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
- data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
- data/ext/ffi_c/libffi/src/types.c +43 -14
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
- data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
- data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
- data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
- data/ffi.gemspec +2 -2
- data/lib/2.0/ffi_c.so +0 -0
- data/lib/2.1/ffi_c.so +0 -0
- data/lib/2.2/ffi_c.so +0 -0
- data/lib/2.3/ffi_c.so +0 -0
- data/lib/2.4/ffi_c.so +0 -0
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +65 -13
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -1
- data/spec/ffi/bitmask_spec.rb +575 -0
- data/spec/ffi/embed-test/ext/Makefile +242 -0
- data/spec/ffi/fixtures/BitmaskTest.c +51 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
- data/spec/ffi/struct_spec.rb +0 -4
- metadata +158 -32
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- data/ext/ffi_c/libffi/doc/libffi.info +0 -593
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
- data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
- data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
- data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
- data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
- data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
- data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
- data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
@@ -31,15 +31,16 @@
|
|
31
31
|
|
32
32
|
.file "ppc_closure.S"
|
33
33
|
|
34
|
-
#ifndef
|
34
|
+
#ifndef POWERPC64
|
35
35
|
|
36
|
+
FFI_HIDDEN(ffi_closure_SYSV)
|
36
37
|
ENTRY(ffi_closure_SYSV)
|
37
|
-
.
|
38
|
+
.cfi_startproc
|
38
39
|
stwu %r1,-144(%r1)
|
39
|
-
.
|
40
|
+
.cfi_def_cfa_offset 144
|
40
41
|
mflr %r0
|
41
|
-
.LCFI1:
|
42
42
|
stw %r0,148(%r1)
|
43
|
+
.cfi_offset 65, 4
|
43
44
|
|
44
45
|
# we want to build up an areas for the parameters passed
|
45
46
|
# in registers (both floating point and integer)
|
@@ -48,6 +49,17 @@ ENTRY(ffi_closure_SYSV)
|
|
48
49
|
stw %r3, 16(%r1)
|
49
50
|
stw %r4, 20(%r1)
|
50
51
|
stw %r5, 24(%r1)
|
52
|
+
|
53
|
+
# set up registers for the routine that does the work
|
54
|
+
|
55
|
+
# closure->cif
|
56
|
+
lwz %r3,FFI_TRAMPOLINE_SIZE(%r11)
|
57
|
+
# closure->fun
|
58
|
+
lwz %r4,FFI_TRAMPOLINE_SIZE+4(%r11)
|
59
|
+
# closure->user_data
|
60
|
+
lwz %r5,FFI_TRAMPOLINE_SIZE+8(%r11)
|
61
|
+
|
62
|
+
.Ldoclosure:
|
51
63
|
stw %r6, 28(%r1)
|
52
64
|
stw %r7, 32(%r1)
|
53
65
|
stw %r8, 36(%r1)
|
@@ -66,23 +78,18 @@ ENTRY(ffi_closure_SYSV)
|
|
66
78
|
stfd %f8, 104(%r1)
|
67
79
|
#endif
|
68
80
|
|
69
|
-
#
|
70
|
-
|
71
|
-
mr %r3,%r11
|
81
|
+
# pointer to the result storage
|
82
|
+
addi %r6,%r1,112
|
72
83
|
|
73
|
-
#
|
74
|
-
addi %
|
84
|
+
# pointer to the saved gpr registers
|
85
|
+
addi %r7,%r1,16
|
75
86
|
|
76
|
-
#
|
77
|
-
addi %
|
87
|
+
# pointer to the saved fpr registers
|
88
|
+
addi %r8,%r1,48
|
78
89
|
|
79
|
-
#
|
80
|
-
addi %r6,%r1,48
|
81
|
-
|
82
|
-
# now load up the pointer to the outgoing parameter
|
83
|
-
# stack in the previous frame
|
90
|
+
# pointer to the outgoing parameter save area in the previous frame
|
84
91
|
# i.e. the previous frame pointer + 8
|
85
|
-
addi %
|
92
|
+
addi %r9,%r1,152
|
86
93
|
|
87
94
|
# make the call
|
88
95
|
bl ffi_closure_helper_SYSV@local
|
@@ -101,7 +108,6 @@ ENTRY(ffi_closure_SYSV)
|
|
101
108
|
add %r3,%r3,%r4 # add contents of table to table address
|
102
109
|
mtctr %r3
|
103
110
|
bctr # jump to it
|
104
|
-
.LFE1:
|
105
111
|
|
106
112
|
# Each of the ret_typeX code fragments has to be exactly 16 bytes long
|
107
113
|
# (4 instructions). For cache effectiveness we align to a 16 byte boundary
|
@@ -111,7 +117,9 @@ ENTRY(ffi_closure_SYSV)
|
|
111
117
|
.Lret_type0:
|
112
118
|
mtlr %r0
|
113
119
|
addi %r1,%r1,144
|
120
|
+
.cfi_def_cfa_offset 0
|
114
121
|
blr
|
122
|
+
.cfi_def_cfa_offset 144
|
115
123
|
nop
|
116
124
|
|
117
125
|
# case FFI_TYPE_INT
|
@@ -119,61 +127,110 @@ ENTRY(ffi_closure_SYSV)
|
|
119
127
|
mtlr %r0
|
120
128
|
.Lfinish:
|
121
129
|
addi %r1,%r1,144
|
130
|
+
.cfi_def_cfa_offset 0
|
122
131
|
blr
|
132
|
+
.cfi_def_cfa_offset 144
|
123
133
|
|
124
134
|
# case FFI_TYPE_FLOAT
|
135
|
+
#ifndef __NO_FPRS__
|
125
136
|
lfs %f1,112+0(%r1)
|
137
|
+
#else
|
138
|
+
nop
|
139
|
+
#endif
|
126
140
|
mtlr %r0
|
127
141
|
addi %r1,%r1,144
|
142
|
+
.cfi_def_cfa_offset 0
|
128
143
|
blr
|
144
|
+
.cfi_def_cfa_offset 144
|
129
145
|
|
130
146
|
# case FFI_TYPE_DOUBLE
|
147
|
+
#ifndef __NO_FPRS__
|
131
148
|
lfd %f1,112+0(%r1)
|
149
|
+
#else
|
150
|
+
nop
|
151
|
+
#endif
|
132
152
|
mtlr %r0
|
133
153
|
addi %r1,%r1,144
|
154
|
+
.cfi_def_cfa_offset 0
|
134
155
|
blr
|
156
|
+
.cfi_def_cfa_offset 144
|
135
157
|
|
136
158
|
# case FFI_TYPE_LONGDOUBLE
|
159
|
+
#ifndef __NO_FPRS__
|
137
160
|
lfd %f1,112+0(%r1)
|
138
161
|
lfd %f2,112+8(%r1)
|
139
162
|
mtlr %r0
|
140
163
|
b .Lfinish
|
164
|
+
#else
|
165
|
+
mtlr %r0
|
166
|
+
addi %r1,%r1,144
|
167
|
+
.cfi_def_cfa_offset 0
|
168
|
+
blr
|
169
|
+
.cfi_def_cfa_offset 144
|
170
|
+
nop
|
171
|
+
#endif
|
141
172
|
|
142
173
|
# case FFI_TYPE_UINT8
|
174
|
+
#ifdef __LITTLE_ENDIAN__
|
175
|
+
lbz %r3,112+0(%r1)
|
176
|
+
#else
|
143
177
|
lbz %r3,112+3(%r1)
|
178
|
+
#endif
|
144
179
|
mtlr %r0
|
145
180
|
addi %r1,%r1,144
|
181
|
+
.cfi_def_cfa_offset 0
|
146
182
|
blr
|
183
|
+
.cfi_def_cfa_offset 144
|
147
184
|
|
148
185
|
# case FFI_TYPE_SINT8
|
186
|
+
#ifdef __LITTLE_ENDIAN__
|
187
|
+
lbz %r3,112+0(%r1)
|
188
|
+
#else
|
149
189
|
lbz %r3,112+3(%r1)
|
190
|
+
#endif
|
150
191
|
extsb %r3,%r3
|
151
192
|
mtlr %r0
|
152
193
|
b .Lfinish
|
153
194
|
|
154
195
|
# case FFI_TYPE_UINT16
|
196
|
+
#ifdef __LITTLE_ENDIAN__
|
197
|
+
lhz %r3,112+0(%r1)
|
198
|
+
#else
|
155
199
|
lhz %r3,112+2(%r1)
|
200
|
+
#endif
|
156
201
|
mtlr %r0
|
157
202
|
addi %r1,%r1,144
|
203
|
+
.cfi_def_cfa_offset 0
|
158
204
|
blr
|
205
|
+
.cfi_def_cfa_offset 144
|
159
206
|
|
160
207
|
# case FFI_TYPE_SINT16
|
208
|
+
#ifdef __LITTLE_ENDIAN__
|
209
|
+
lha %r3,112+0(%r1)
|
210
|
+
#else
|
161
211
|
lha %r3,112+2(%r1)
|
212
|
+
#endif
|
162
213
|
mtlr %r0
|
163
214
|
addi %r1,%r1,144
|
215
|
+
.cfi_def_cfa_offset 0
|
164
216
|
blr
|
217
|
+
.cfi_def_cfa_offset 144
|
165
218
|
|
166
219
|
# case FFI_TYPE_UINT32
|
167
220
|
lwz %r3,112+0(%r1)
|
168
221
|
mtlr %r0
|
169
222
|
addi %r1,%r1,144
|
223
|
+
.cfi_def_cfa_offset 0
|
170
224
|
blr
|
225
|
+
.cfi_def_cfa_offset 144
|
171
226
|
|
172
227
|
# case FFI_TYPE_SINT32
|
173
228
|
lwz %r3,112+0(%r1)
|
174
229
|
mtlr %r0
|
175
230
|
addi %r1,%r1,144
|
231
|
+
.cfi_def_cfa_offset 0
|
176
232
|
blr
|
233
|
+
.cfi_def_cfa_offset 144
|
177
234
|
|
178
235
|
# case FFI_TYPE_UINT64
|
179
236
|
lwz %r3,112+0(%r1)
|
@@ -190,63 +247,96 @@ ENTRY(ffi_closure_SYSV)
|
|
190
247
|
# case FFI_TYPE_STRUCT
|
191
248
|
mtlr %r0
|
192
249
|
addi %r1,%r1,144
|
250
|
+
.cfi_def_cfa_offset 0
|
193
251
|
blr
|
252
|
+
.cfi_def_cfa_offset 144
|
194
253
|
nop
|
195
254
|
|
196
255
|
# case FFI_TYPE_POINTER
|
197
256
|
lwz %r3,112+0(%r1)
|
198
257
|
mtlr %r0
|
199
258
|
addi %r1,%r1,144
|
259
|
+
.cfi_def_cfa_offset 0
|
200
260
|
blr
|
261
|
+
.cfi_def_cfa_offset 144
|
201
262
|
|
202
263
|
# case FFI_TYPE_UINT128
|
203
264
|
lwz %r3,112+0(%r1)
|
204
265
|
lwz %r4,112+4(%r1)
|
205
266
|
lwz %r5,112+8(%r1)
|
206
|
-
|
267
|
+
b .Luint128
|
207
268
|
|
208
269
|
# The return types below are only used when the ABI type is FFI_SYSV.
|
209
270
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
|
210
271
|
lbz %r3,112+0(%r1)
|
211
272
|
mtlr %r0
|
212
273
|
addi %r1,%r1,144
|
274
|
+
.cfi_def_cfa_offset 0
|
213
275
|
blr
|
276
|
+
.cfi_def_cfa_offset 144
|
214
277
|
|
215
278
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct.
|
216
279
|
lhz %r3,112+0(%r1)
|
217
280
|
mtlr %r0
|
218
281
|
addi %r1,%r1,144
|
282
|
+
.cfi_def_cfa_offset 0
|
219
283
|
blr
|
284
|
+
.cfi_def_cfa_offset 144
|
220
285
|
|
221
286
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
|
222
287
|
lwz %r3,112+0(%r1)
|
288
|
+
#ifdef __LITTLE_ENDIAN__
|
289
|
+
mtlr %r0
|
290
|
+
addi %r1,%r1,144
|
291
|
+
.cfi_def_cfa_offset 0
|
292
|
+
blr
|
293
|
+
.cfi_def_cfa_offset 144
|
294
|
+
#else
|
223
295
|
srwi %r3,%r3,8
|
224
296
|
mtlr %r0
|
225
297
|
b .Lfinish
|
298
|
+
#endif
|
226
299
|
|
227
300
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
|
228
301
|
lwz %r3,112+0(%r1)
|
229
302
|
mtlr %r0
|
230
303
|
addi %r1,%r1,144
|
304
|
+
.cfi_def_cfa_offset 0
|
231
305
|
blr
|
306
|
+
.cfi_def_cfa_offset 144
|
232
307
|
|
233
308
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
|
234
309
|
lwz %r3,112+0(%r1)
|
235
310
|
lwz %r4,112+4(%r1)
|
311
|
+
#ifdef __LITTLE_ENDIAN__
|
312
|
+
mtlr %r0
|
313
|
+
b .Lfinish
|
314
|
+
#else
|
236
315
|
li %r5,24
|
237
316
|
b .Lstruct567
|
317
|
+
#endif
|
238
318
|
|
239
319
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
|
240
320
|
lwz %r3,112+0(%r1)
|
241
321
|
lwz %r4,112+4(%r1)
|
322
|
+
#ifdef __LITTLE_ENDIAN__
|
323
|
+
mtlr %r0
|
324
|
+
b .Lfinish
|
325
|
+
#else
|
242
326
|
li %r5,16
|
243
327
|
b .Lstruct567
|
328
|
+
#endif
|
244
329
|
|
245
330
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
|
246
331
|
lwz %r3,112+0(%r1)
|
247
332
|
lwz %r4,112+4(%r1)
|
333
|
+
#ifdef __LITTLE_ENDIAN__
|
334
|
+
mtlr %r0
|
335
|
+
b .Lfinish
|
336
|
+
#else
|
248
337
|
li %r5,8
|
249
338
|
b .Lstruct567
|
339
|
+
#endif
|
250
340
|
|
251
341
|
# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
|
252
342
|
lwz %r3,112+0(%r1)
|
@@ -254,6 +344,7 @@ ENTRY(ffi_closure_SYSV)
|
|
254
344
|
mtlr %r0
|
255
345
|
b .Lfinish
|
256
346
|
|
347
|
+
#ifndef __LITTLE_ENDIAN__
|
257
348
|
.Lstruct567:
|
258
349
|
subfic %r6,%r5,32
|
259
350
|
srw %r4,%r4,%r5
|
@@ -262,66 +353,45 @@ ENTRY(ffi_closure_SYSV)
|
|
262
353
|
or %r4,%r6,%r4
|
263
354
|
mtlr %r0
|
264
355
|
addi %r1,%r1,144
|
356
|
+
.cfi_def_cfa_offset 0
|
265
357
|
blr
|
358
|
+
.cfi_def_cfa_offset 144
|
359
|
+
#endif
|
266
360
|
|
267
361
|
.Luint128:
|
268
362
|
lwz %r6,112+12(%r1)
|
269
363
|
mtlr %r0
|
270
364
|
addi %r1,%r1,144
|
365
|
+
.cfi_def_cfa_offset 0
|
271
366
|
blr
|
272
|
-
|
367
|
+
.cfi_endproc
|
273
368
|
END(ffi_closure_SYSV)
|
274
369
|
|
275
|
-
.section ".eh_frame",EH_FRAME_FLAGS,@progbits
|
276
|
-
.Lframe1:
|
277
|
-
.4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
|
278
|
-
.LSCIE1:
|
279
|
-
.4byte 0x0 # CIE Identifier Tag
|
280
|
-
.byte 0x1 # CIE Version
|
281
|
-
#if defined _RELOCATABLE || defined __PIC__
|
282
|
-
.ascii "zR\0" # CIE Augmentation
|
283
|
-
#else
|
284
|
-
.ascii "\0" # CIE Augmentation
|
285
|
-
#endif
|
286
|
-
.uleb128 0x1 # CIE Code Alignment Factor
|
287
|
-
.sleb128 -4 # CIE Data Alignment Factor
|
288
|
-
.byte 0x41 # CIE RA Column
|
289
|
-
#if defined _RELOCATABLE || defined __PIC__
|
290
|
-
.uleb128 0x1 # Augmentation size
|
291
|
-
.byte 0x1b # FDE Encoding (pcrel sdata4)
|
292
|
-
#endif
|
293
|
-
.byte 0xc # DW_CFA_def_cfa
|
294
|
-
.uleb128 0x1
|
295
|
-
.uleb128 0x0
|
296
|
-
.align 2
|
297
|
-
.LECIE1:
|
298
|
-
.LSFDE1:
|
299
|
-
.4byte .LEFDE1-.LASFDE1 # FDE Length
|
300
|
-
.LASFDE1:
|
301
|
-
.4byte .LASFDE1-.Lframe1 # FDE CIE offset
|
302
|
-
#if defined _RELOCATABLE || defined __PIC__
|
303
|
-
.4byte .LFB1-. # FDE initial location
|
304
|
-
#else
|
305
|
-
.4byte .LFB1 # FDE initial location
|
306
|
-
#endif
|
307
|
-
.4byte .LFE1-.LFB1 # FDE address range
|
308
|
-
#if defined _RELOCATABLE || defined __PIC__
|
309
|
-
.uleb128 0x0 # Augmentation size
|
310
|
-
#endif
|
311
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
312
|
-
.4byte .LCFI0-.LFB1
|
313
|
-
.byte 0xe # DW_CFA_def_cfa_offset
|
314
|
-
.uleb128 144
|
315
|
-
.byte 0x4 # DW_CFA_advance_loc4
|
316
|
-
.4byte .LCFI1-.LCFI0
|
317
|
-
.byte 0x11 # DW_CFA_offset_extended_sf
|
318
|
-
.uleb128 0x41
|
319
|
-
.sleb128 -1
|
320
|
-
.align 2
|
321
|
-
.LEFDE1:
|
322
370
|
|
323
|
-
|
371
|
+
FFI_HIDDEN(ffi_go_closure_sysv)
|
372
|
+
ENTRY(ffi_go_closure_sysv)
|
373
|
+
.cfi_startproc
|
374
|
+
stwu %r1,-144(%r1)
|
375
|
+
.cfi_def_cfa_offset 144
|
376
|
+
mflr %r0
|
377
|
+
stw %r0,148(%r1)
|
378
|
+
.cfi_offset 65, 4
|
379
|
+
|
380
|
+
stw %r3, 16(%r1)
|
381
|
+
stw %r4, 20(%r1)
|
382
|
+
stw %r5, 24(%r1)
|
383
|
+
|
384
|
+
# closure->cif
|
385
|
+
lwz %r3,4(%r11)
|
386
|
+
# closure->fun
|
387
|
+
lwz %r4,8(%r11)
|
388
|
+
# user_data
|
389
|
+
mr %r5,%r11
|
390
|
+
b .Ldoclosure
|
391
|
+
.cfi_endproc
|
392
|
+
END(ffi_go_closure_sysv)
|
324
393
|
|
325
394
|
#if defined __ELF__ && defined __linux__
|
326
395
|
.section .note.GNU-stack,"",@progbits
|
327
396
|
#endif
|
397
|
+
#endif
|
@@ -30,35 +30,36 @@
|
|
30
30
|
#include <ffi.h>
|
31
31
|
#include <powerpc/asm.h>
|
32
32
|
|
33
|
-
#ifndef
|
34
|
-
|
33
|
+
#ifndef POWERPC64
|
34
|
+
FFI_HIDDEN(ffi_call_SYSV)
|
35
35
|
ENTRY(ffi_call_SYSV)
|
36
|
-
.
|
36
|
+
.cfi_startproc
|
37
37
|
/* Save the old stack pointer as AP. */
|
38
|
-
mr %
|
38
|
+
mr %r10,%r1
|
39
|
+
.cfi_def_cfa_register 10
|
39
40
|
|
40
|
-
.LCFI0:
|
41
41
|
/* Allocate the stack space we need. */
|
42
|
-
stwux %r1,%r1,%
|
42
|
+
stwux %r1,%r1,%r8
|
43
43
|
/* Save registers we use. */
|
44
44
|
mflr %r9
|
45
|
-
stw %r28,-16(%
|
46
|
-
|
47
|
-
stw %
|
48
|
-
|
49
|
-
stw %
|
50
|
-
.
|
51
|
-
|
52
|
-
.
|
53
|
-
|
54
|
-
.
|
45
|
+
stw %r28,-16(%r10)
|
46
|
+
stw %r29,-12(%r10)
|
47
|
+
stw %r30, -8(%r10)
|
48
|
+
stw %r31, -4(%r10)
|
49
|
+
stw %r9, 4(%r10)
|
50
|
+
.cfi_offset 65, 4
|
51
|
+
.cfi_offset 31, -4
|
52
|
+
.cfi_offset 30, -8
|
53
|
+
.cfi_offset 29, -12
|
54
|
+
.cfi_offset 28, -16
|
55
55
|
|
56
56
|
/* Save arguments over call... */
|
57
|
-
|
58
|
-
mr %
|
59
|
-
mr %
|
60
|
-
mr %
|
61
|
-
.
|
57
|
+
stw %r7, -20(%r10) /* closure, */
|
58
|
+
mr %r31,%r6 /* flags, */
|
59
|
+
mr %r30,%r5 /* rvalue, */
|
60
|
+
mr %r29,%r4 /* function address, */
|
61
|
+
mr %r28,%r10 /* our AP. */
|
62
|
+
.cfi_def_cfa_register 28
|
62
63
|
|
63
64
|
/* Call ffi_prep_args_SYSV. */
|
64
65
|
mr %r4,%r1
|
@@ -70,40 +71,45 @@ ENTRY(ffi_call_SYSV)
|
|
70
71
|
/* Get the address to call into CTR. */
|
71
72
|
mtctr %r29
|
72
73
|
/* Load all those argument registers. */
|
73
|
-
lwz %r3,-
|
74
|
-
lwz %r4,-
|
75
|
-
lwz %r5,-
|
76
|
-
lwz %r6,-
|
74
|
+
lwz %r3,-24-(8*4)(%r28)
|
75
|
+
lwz %r4,-24-(7*4)(%r28)
|
76
|
+
lwz %r5,-24-(6*4)(%r28)
|
77
|
+
lwz %r6,-24-(5*4)(%r28)
|
77
78
|
bf- 5,1f
|
78
79
|
nop
|
79
|
-
lwz %r7,-
|
80
|
-
lwz %r8,-
|
81
|
-
lwz %r9,-
|
82
|
-
lwz %r10,-
|
80
|
+
lwz %r7,-24-(4*4)(%r28)
|
81
|
+
lwz %r8,-24-(3*4)(%r28)
|
82
|
+
lwz %r9,-24-(2*4)(%r28)
|
83
|
+
lwz %r10,-24-(1*4)(%r28)
|
83
84
|
nop
|
84
85
|
1:
|
85
86
|
|
87
|
+
#ifndef __NO_FPRS__
|
86
88
|
/* Load all the FP registers. */
|
87
89
|
bf- 6,2f
|
88
|
-
lfd %f1,-
|
89
|
-
lfd %f2,-
|
90
|
-
lfd %f3,-
|
91
|
-
lfd %f4,-
|
90
|
+
lfd %f1,-24-(8*4)-(8*8)(%r28)
|
91
|
+
lfd %f2,-24-(8*4)-(7*8)(%r28)
|
92
|
+
lfd %f3,-24-(8*4)-(6*8)(%r28)
|
93
|
+
lfd %f4,-24-(8*4)-(5*8)(%r28)
|
92
94
|
nop
|
93
|
-
lfd %f5,-
|
94
|
-
lfd %f6,-
|
95
|
-
lfd %f7,-
|
96
|
-
lfd %f8,-
|
95
|
+
lfd %f5,-24-(8*4)-(4*8)(%r28)
|
96
|
+
lfd %f6,-24-(8*4)-(3*8)(%r28)
|
97
|
+
lfd %f7,-24-(8*4)-(2*8)(%r28)
|
98
|
+
lfd %f8,-24-(8*4)-(1*8)(%r28)
|
99
|
+
#endif
|
97
100
|
2:
|
98
101
|
|
99
102
|
/* Make the call. */
|
103
|
+
lwz %r11, -20(%r28)
|
100
104
|
bctrl
|
101
105
|
|
102
106
|
/* Now, deal with the return value. */
|
103
107
|
mtcrf 0x01,%r31 /* cr7 */
|
104
108
|
bt- 31,L(small_struct_return_value)
|
105
109
|
bt- 30,L(done_return_value)
|
110
|
+
#ifndef __NO_FPRS__
|
106
111
|
bt- 29,L(fp_return_value)
|
112
|
+
#endif
|
107
113
|
stw %r3,0(%r30)
|
108
114
|
bf+ 28,L(done_return_value)
|
109
115
|
stw %r4,4(%r30)
|
@@ -121,10 +127,24 @@ L(done_return_value):
|
|
121
127
|
lwz %r30, -8(%r28)
|
122
128
|
lwz %r29,-12(%r28)
|
123
129
|
lwz %r28,-16(%r28)
|
130
|
+
.cfi_remember_state
|
131
|
+
/* At this point we don't have a cfa register. Say all our
|
132
|
+
saved regs have been restored. */
|
133
|
+
.cfi_same_value 65
|
134
|
+
.cfi_same_value 31
|
135
|
+
.cfi_same_value 30
|
136
|
+
.cfi_same_value 29
|
137
|
+
.cfi_same_value 28
|
138
|
+
/* Hopefully this works.. */
|
139
|
+
.cfi_def_cfa_register 1
|
140
|
+
.cfi_offset 1, 0
|
124
141
|
lwz %r1,0(%r1)
|
142
|
+
.cfi_same_value 1
|
125
143
|
blr
|
126
144
|
|
145
|
+
#ifndef __NO_FPRS__
|
127
146
|
L(fp_return_value):
|
147
|
+
.cfi_restore_state
|
128
148
|
bf 28,L(float_return_value)
|
129
149
|
stfd %f1,0(%r30)
|
130
150
|
mtcrf 0x02,%r31 /* cr6 */
|
@@ -134,86 +154,22 @@ L(fp_return_value):
|
|
134
154
|
L(float_return_value):
|
135
155
|
stfs %f1,0(%r30)
|
136
156
|
b L(done_return_value)
|
157
|
+
#endif
|
137
158
|
|
138
159
|
L(small_struct_return_value):
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
bf+ 26,L(done_return_value) /* struct in r3:r4 ? */
|
149
|
-
add %r6,%r6,%r30 /* adjust pointer */
|
150
|
-
stswi %r4,%r6,4 /* store last four bytes */
|
151
|
-
b L(done_return_value)
|
160
|
+
/*
|
161
|
+
* The C code always allocates a properly-aligned 8-byte bounce
|
162
|
+
* buffer to make this assembly code very simple. Just write out
|
163
|
+
* r3 and r4 to the buffer to allow the C code to handle the rest.
|
164
|
+
*/
|
165
|
+
stw %r3, 0(%r30)
|
166
|
+
stw %r4, 4(%r30)
|
167
|
+
b L(done_return_value)
|
168
|
+
.cfi_endproc
|
152
169
|
|
153
|
-
.LFE1:
|
154
170
|
END(ffi_call_SYSV)
|
155
171
|
|
156
|
-
.section ".eh_frame",EH_FRAME_FLAGS,@progbits
|
157
|
-
.Lframe1:
|
158
|
-
.4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */
|
159
|
-
.LSCIE1:
|
160
|
-
.4byte 0x0 /* CIE Identifier Tag */
|
161
|
-
.byte 0x1 /* CIE Version */
|
162
|
-
#if defined _RELOCATABLE || defined __PIC__
|
163
|
-
.ascii "zR\0" /* CIE Augmentation */
|
164
|
-
#else
|
165
|
-
.ascii "\0" /* CIE Augmentation */
|
166
|
-
#endif
|
167
|
-
.uleb128 0x1 /* CIE Code Alignment Factor */
|
168
|
-
.sleb128 -4 /* CIE Data Alignment Factor */
|
169
|
-
.byte 0x41 /* CIE RA Column */
|
170
|
-
#if defined _RELOCATABLE || defined __PIC__
|
171
|
-
.uleb128 0x1 /* Augmentation size */
|
172
|
-
.byte 0x1b /* FDE Encoding (pcrel sdata4) */
|
173
|
-
#endif
|
174
|
-
.byte 0xc /* DW_CFA_def_cfa */
|
175
|
-
.uleb128 0x1
|
176
|
-
.uleb128 0x0
|
177
|
-
.align 2
|
178
|
-
.LECIE1:
|
179
|
-
.LSFDE1:
|
180
|
-
.4byte .LEFDE1-.LASFDE1 /* FDE Length */
|
181
|
-
.LASFDE1:
|
182
|
-
.4byte .LASFDE1-.Lframe1 /* FDE CIE offset */
|
183
|
-
#if defined _RELOCATABLE || defined __PIC__
|
184
|
-
.4byte .LFB1-. /* FDE initial location */
|
185
|
-
#else
|
186
|
-
.4byte .LFB1 /* FDE initial location */
|
187
|
-
#endif
|
188
|
-
.4byte .LFE1-.LFB1 /* FDE address range */
|
189
|
-
#if defined _RELOCATABLE || defined __PIC__
|
190
|
-
.uleb128 0x0 /* Augmentation size */
|
191
|
-
#endif
|
192
|
-
.byte 0x4 /* DW_CFA_advance_loc4 */
|
193
|
-
.4byte .LCFI0-.LFB1
|
194
|
-
.byte 0xd /* DW_CFA_def_cfa_register */
|
195
|
-
.uleb128 0x08
|
196
|
-
.byte 0x4 /* DW_CFA_advance_loc4 */
|
197
|
-
.4byte .LCFI5-.LCFI0
|
198
|
-
.byte 0x11 /* DW_CFA_offset_extended_sf */
|
199
|
-
.uleb128 0x41
|
200
|
-
.sleb128 -1
|
201
|
-
.byte 0x9f /* DW_CFA_offset, column 0x1f */
|
202
|
-
.uleb128 0x1
|
203
|
-
.byte 0x9e /* DW_CFA_offset, column 0x1e */
|
204
|
-
.uleb128 0x2
|
205
|
-
.byte 0x9d /* DW_CFA_offset, column 0x1d */
|
206
|
-
.uleb128 0x3
|
207
|
-
.byte 0x9c /* DW_CFA_offset, column 0x1c */
|
208
|
-
.uleb128 0x4
|
209
|
-
.byte 0x4 /* DW_CFA_advance_loc4 */
|
210
|
-
.4byte .LCFI6-.LCFI5
|
211
|
-
.byte 0xd /* DW_CFA_def_cfa_register */
|
212
|
-
.uleb128 0x1c
|
213
|
-
.align 2
|
214
|
-
.LEFDE1:
|
215
|
-
#endif
|
216
|
-
|
217
172
|
#if defined __ELF__ && defined __linux__
|
218
173
|
.section .note.GNU-stack,"",@progbits
|
219
174
|
#endif
|
175
|
+
#endif
|