ffi 1.9.18 → 1.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +22 -0
- data/.gitmodules +3 -0
- data/.travis.yml +52 -0
- data/.yardopts +5 -0
- data/Gemfile +15 -0
- data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
- data/README.md +3 -4
- data/Rakefile +41 -5
- data/appveyor.yml +22 -0
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Call.c +1 -22
- data/ext/ffi_c/Call.h +0 -9
- data/ext/ffi_c/Closure.c +54 -0
- data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
- data/ext/ffi_c/Function.c +16 -25
- data/ext/ffi_c/Function.h +1 -2
- data/ext/ffi_c/FunctionInfo.c +0 -4
- data/ext/ffi_c/MethodHandle.c +33 -268
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/extconf.rb +10 -5
- data/ext/ffi_c/ffi.c +2 -2
- data/ext/ffi_c/libffi/.appveyor.yml +48 -0
- data/ext/ffi_c/libffi/.gitignore +36 -0
- data/ext/ffi_c/libffi/.travis/install.sh +14 -0
- data/ext/ffi_c/libffi/.travis.yml +30 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
- data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/Makefile.am +169 -158
- data/ext/ffi_c/libffi/Makefile.in +927 -938
- data/ext/ffi_c/libffi/README +164 -52
- data/ext/ffi_c/libffi/acinclude.m4 +387 -0
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/config.guess +336 -371
- data/ext/ffi_c/libffi/config.sub +246 -115
- data/ext/ffi_c/libffi/configure +6976 -2189
- data/ext/ffi_c/libffi/configure.ac +148 -256
- data/ext/ffi_c/libffi/configure.host +277 -4
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +188 -71
- data/ext/ffi_c/libffi/include/ffi.h.in +112 -50
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
- data/ext/ffi_c/libffi/install-sh +190 -202
- data/ext/ffi_c/libffi/libffi.map.in +80 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +141 -49
- data/ext/ffi_c/libffi/man/ffi.3 +10 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
- data/ext/ffi_c/libffi/missing +150 -311
- data/ext/ffi_c/libffi/msvcc.sh +72 -9
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +964 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
- data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
- data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
- data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
- data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
- data/ext/ffi_c/libffi/src/closures.c +366 -45
- data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/debug.c +6 -1
- data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
- data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/unix.S +2 -0
- data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
- data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
- data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
- data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
- data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
- data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +103 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +10 -3
- data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
- data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
- data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
- data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
- data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
- data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
- data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
- data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
- data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
- data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
- data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
- data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
- data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
- data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
- data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
- data/ext/ffi_c/libffi/src/types.c +43 -14
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
- data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +591 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +359 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
- data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
- data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +121 -25
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
- data/ext/ffi_c/libffi.bsd.mk +11 -5
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +3 -2
- data/ext/ffi_c/libffi.mk +10 -5
- data/ext/ffi_c/libffi.vc.mk +1 -1
- data/ext/ffi_c/libffi.vc64.mk +1 -1
- data/ffi.gemspec +16 -3
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +66 -14
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -2
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +7 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +76 -0
- data/samples/qsort.rb +21 -0
- data/samples/sample_helper.rb +6 -0
- metadata +164 -115
- data/ext/ffi_c/ClosurePool.c +0 -283
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- data/ext/ffi_c/libffi/compile +0 -143
- data/ext/ffi_c/libffi/depcomp +0 -630
- data/ext/ffi_c/libffi/doc/libffi.info +0 -593
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
- data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
- data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
- data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
- data/ext/ffi_c/libffi/mdate-sh +0 -201
- data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
- data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
- data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
- data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
- data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
- data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
- data/ext/ffi_c/libffi/texinfo.tex +0 -7210
- data/gen/Rakefile +0 -30
- data/libtest/Benchmark.c +0 -52
- data/libtest/BoolTest.c +0 -34
- data/libtest/BufferTest.c +0 -31
- data/libtest/ClosureTest.c +0 -205
- data/libtest/EnumTest.c +0 -51
- data/libtest/FunctionTest.c +0 -70
- data/libtest/GNUmakefile +0 -149
- data/libtest/GlobalVariable.c +0 -62
- data/libtest/LastErrorTest.c +0 -21
- data/libtest/NumberTest.c +0 -132
- data/libtest/PointerTest.c +0 -63
- data/libtest/ReferenceTest.c +0 -23
- data/libtest/StringTest.c +0 -34
- data/libtest/StructTest.c +0 -243
- data/libtest/UnionTest.c +0 -43
- data/libtest/VariadicTest.c +0 -99
- data/spec/ffi/async_callback_spec.rb +0 -35
- data/spec/ffi/bool_spec.rb +0 -32
- data/spec/ffi/buffer_spec.rb +0 -279
- data/spec/ffi/callback_spec.rb +0 -773
- data/spec/ffi/custom_param_type.rb +0 -37
- data/spec/ffi/custom_type_spec.rb +0 -74
- data/spec/ffi/dup_spec.rb +0 -52
- data/spec/ffi/enum_spec.rb +0 -423
- data/spec/ffi/errno_spec.rb +0 -20
- data/spec/ffi/ffi_spec.rb +0 -28
- data/spec/ffi/fixtures/Benchmark.c +0 -52
- data/spec/ffi/fixtures/BoolTest.c +0 -34
- data/spec/ffi/fixtures/BufferTest.c +0 -31
- data/spec/ffi/fixtures/ClosureTest.c +0 -205
- data/spec/ffi/fixtures/EnumTest.c +0 -51
- data/spec/ffi/fixtures/FunctionTest.c +0 -142
- data/spec/ffi/fixtures/GNUmakefile +0 -149
- data/spec/ffi/fixtures/GlobalVariable.c +0 -62
- data/spec/ffi/fixtures/LastErrorTest.c +0 -21
- data/spec/ffi/fixtures/NumberTest.c +0 -132
- data/spec/ffi/fixtures/PipeHelper.h +0 -21
- data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
- data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
- data/spec/ffi/fixtures/PointerTest.c +0 -63
- data/spec/ffi/fixtures/ReferenceTest.c +0 -23
- data/spec/ffi/fixtures/StringTest.c +0 -34
- data/spec/ffi/fixtures/StructTest.c +0 -243
- data/spec/ffi/fixtures/UnionTest.c +0 -43
- data/spec/ffi/fixtures/VariadicTest.c +0 -99
- data/spec/ffi/fixtures/classes.rb +0 -438
- data/spec/ffi/function_spec.rb +0 -97
- data/spec/ffi/io_spec.rb +0 -16
- data/spec/ffi/library_spec.rb +0 -286
- data/spec/ffi/long_double.rb +0 -30
- data/spec/ffi/managed_struct_spec.rb +0 -68
- data/spec/ffi/memorypointer_spec.rb +0 -78
- data/spec/ffi/number_spec.rb +0 -247
- data/spec/ffi/platform_spec.rb +0 -114
- data/spec/ffi/pointer_spec.rb +0 -285
- data/spec/ffi/rbx/attach_function_spec.rb +0 -34
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
- data/spec/ffi/rbx/spec_helper.rb +0 -6
- data/spec/ffi/rbx/struct_spec.rb +0 -18
- data/spec/ffi/spec_helper.rb +0 -93
- data/spec/ffi/string_spec.rb +0 -118
- data/spec/ffi/strptr_spec.rb +0 -50
- data/spec/ffi/struct_by_ref_spec.rb +0 -43
- data/spec/ffi/struct_callback_spec.rb +0 -69
- data/spec/ffi/struct_initialize_spec.rb +0 -35
- data/spec/ffi/struct_packed_spec.rb +0 -50
- data/spec/ffi/struct_spec.rb +0 -886
- data/spec/ffi/typedef_spec.rb +0 -91
- data/spec/ffi/union_spec.rb +0 -67
- data/spec/ffi/variadic_spec.rb +0 -132
- data/spec/spec.opts +0 -4
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
|
2
|
-
ffitarget.h - Copyright (c)
|
|
3
|
-
|
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
|
3
|
+
Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc
|
|
4
|
+
Copyright (c) 1996-2003 Red Hat, Inc.
|
|
5
|
+
|
|
4
6
|
Target configuration macros for PowerPC.
|
|
5
7
|
|
|
6
8
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
@@ -28,6 +30,10 @@
|
|
|
28
30
|
#ifndef LIBFFI_TARGET_H
|
|
29
31
|
#define LIBFFI_TARGET_H
|
|
30
32
|
|
|
33
|
+
#ifndef LIBFFI_H
|
|
34
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
|
35
|
+
#endif
|
|
36
|
+
|
|
31
37
|
/* ---- System specific configurations ----------------------------------- */
|
|
32
38
|
|
|
33
39
|
#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */
|
|
@@ -54,49 +60,76 @@ typedef signed long ffi_sarg;
|
|
|
54
60
|
typedef enum ffi_abi {
|
|
55
61
|
FFI_FIRST_ABI = 0,
|
|
56
62
|
|
|
57
|
-
#
|
|
58
|
-
FFI_SYSV,
|
|
59
|
-
FFI_GCC_SYSV,
|
|
60
|
-
FFI_LINUX64,
|
|
61
|
-
FFI_LINUX,
|
|
62
|
-
FFI_LINUX_SOFT_FLOAT,
|
|
63
|
-
# ifdef POWERPC64
|
|
64
|
-
FFI_DEFAULT_ABI = FFI_LINUX64,
|
|
65
|
-
# else
|
|
66
|
-
# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106))
|
|
67
|
-
FFI_DEFAULT_ABI = FFI_LINUX,
|
|
68
|
-
# else
|
|
69
|
-
# ifdef __NO_FPRS__
|
|
70
|
-
FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT,
|
|
71
|
-
# else
|
|
72
|
-
FFI_DEFAULT_ABI = FFI_GCC_SYSV,
|
|
73
|
-
# endif
|
|
74
|
-
# endif
|
|
75
|
-
# endif
|
|
76
|
-
#endif
|
|
77
|
-
|
|
78
|
-
#ifdef POWERPC_AIX
|
|
63
|
+
#if defined (POWERPC_AIX)
|
|
79
64
|
FFI_AIX,
|
|
80
65
|
FFI_DARWIN,
|
|
81
66
|
FFI_DEFAULT_ABI = FFI_AIX,
|
|
82
|
-
|
|
67
|
+
FFI_LAST_ABI
|
|
83
68
|
|
|
84
|
-
#
|
|
69
|
+
#elif defined (POWERPC_DARWIN)
|
|
85
70
|
FFI_AIX,
|
|
86
71
|
FFI_DARWIN,
|
|
87
72
|
FFI_DEFAULT_ABI = FFI_DARWIN,
|
|
88
|
-
|
|
73
|
+
FFI_LAST_ABI
|
|
74
|
+
|
|
75
|
+
#else
|
|
76
|
+
/* The FFI_COMPAT values are used by old code. Since libffi may be
|
|
77
|
+
a shared library we have to support old values for backwards
|
|
78
|
+
compatibility. */
|
|
79
|
+
FFI_COMPAT_SYSV,
|
|
80
|
+
FFI_COMPAT_GCC_SYSV,
|
|
81
|
+
FFI_COMPAT_LINUX64,
|
|
82
|
+
FFI_COMPAT_LINUX,
|
|
83
|
+
FFI_COMPAT_LINUX_SOFT_FLOAT,
|
|
84
|
+
|
|
85
|
+
# if defined (POWERPC64)
|
|
86
|
+
/* This bit, always set in new code, must not be set in any of the
|
|
87
|
+
old FFI_COMPAT values that might be used for 64-bit linux. We
|
|
88
|
+
only need worry about FFI_COMPAT_LINUX64, but to be safe avoid
|
|
89
|
+
all old values. */
|
|
90
|
+
FFI_LINUX = 8,
|
|
91
|
+
/* This and following bits can reuse FFI_COMPAT values. */
|
|
92
|
+
FFI_LINUX_STRUCT_ALIGN = 1,
|
|
93
|
+
FFI_LINUX_LONG_DOUBLE_128 = 2,
|
|
94
|
+
FFI_DEFAULT_ABI = (FFI_LINUX
|
|
95
|
+
# ifdef __STRUCT_PARM_ALIGN__
|
|
96
|
+
| FFI_LINUX_STRUCT_ALIGN
|
|
97
|
+
# endif
|
|
98
|
+
# ifdef __LONG_DOUBLE_128__
|
|
99
|
+
| FFI_LINUX_LONG_DOUBLE_128
|
|
100
|
+
# endif
|
|
101
|
+
),
|
|
102
|
+
FFI_LAST_ABI = 12
|
|
89
103
|
|
|
90
|
-
#
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
104
|
+
# else
|
|
105
|
+
/* This bit, always set in new code, must not be set in any of the
|
|
106
|
+
old FFI_COMPAT values that might be used for 32-bit linux/sysv/bsd. */
|
|
107
|
+
FFI_SYSV = 8,
|
|
108
|
+
/* This and following bits can reuse FFI_COMPAT values. */
|
|
109
|
+
FFI_SYSV_SOFT_FLOAT = 1,
|
|
110
|
+
FFI_SYSV_STRUCT_RET = 2,
|
|
111
|
+
FFI_SYSV_IBM_LONG_DOUBLE = 4,
|
|
112
|
+
FFI_SYSV_LONG_DOUBLE_128 = 16,
|
|
113
|
+
|
|
114
|
+
FFI_DEFAULT_ABI = (FFI_SYSV
|
|
115
|
+
# ifdef __NO_FPRS__
|
|
116
|
+
| FFI_SYSV_SOFT_FLOAT
|
|
117
|
+
# endif
|
|
118
|
+
# if (defined (__SVR4_STRUCT_RETURN) \
|
|
119
|
+
|| defined (POWERPC_FREEBSD) && !defined (__AIX_STRUCT_RETURN))
|
|
120
|
+
| FFI_SYSV_STRUCT_RET
|
|
121
|
+
# endif
|
|
122
|
+
# if __LDBL_MANT_DIG__ == 106
|
|
123
|
+
| FFI_SYSV_IBM_LONG_DOUBLE
|
|
124
|
+
# endif
|
|
125
|
+
# ifdef __LONG_DOUBLE_128__
|
|
126
|
+
| FFI_SYSV_LONG_DOUBLE_128
|
|
127
|
+
# endif
|
|
128
|
+
),
|
|
129
|
+
FFI_LAST_ABI = 32
|
|
130
|
+
# endif
|
|
97
131
|
#endif
|
|
98
132
|
|
|
99
|
-
FFI_LAST_ABI
|
|
100
133
|
} ffi_abi;
|
|
101
134
|
#endif
|
|
102
135
|
|
|
@@ -104,26 +137,52 @@ typedef enum ffi_abi {
|
|
|
104
137
|
|
|
105
138
|
#define FFI_CLOSURES 1
|
|
106
139
|
#define FFI_NATIVE_RAW_API 0
|
|
140
|
+
#if defined (POWERPC) || defined (POWERPC_FREEBSD)
|
|
141
|
+
# define FFI_GO_CLOSURES 1
|
|
142
|
+
# define FFI_TARGET_SPECIFIC_VARIADIC 1
|
|
143
|
+
# define FFI_EXTRA_CIF_FIELDS unsigned nfixedargs
|
|
144
|
+
#endif
|
|
145
|
+
#if defined (POWERPC_AIX)
|
|
146
|
+
# define FFI_GO_CLOSURES 1
|
|
147
|
+
#endif
|
|
107
148
|
|
|
108
|
-
/*
|
|
109
|
-
|
|
149
|
+
/* ppc_closure.S and linux64_closure.S expect this. */
|
|
150
|
+
#define FFI_PPC_TYPE_LAST FFI_TYPE_POINTER
|
|
151
|
+
|
|
152
|
+
/* We define additional types below. If generic types are added that
|
|
153
|
+
must be supported by powerpc libffi then it is likely that
|
|
154
|
+
FFI_PPC_TYPE_LAST needs increasing *and* the jump tables in
|
|
155
|
+
ppc_closure.S and linux64_closure.S be extended. */
|
|
156
|
+
|
|
157
|
+
#if !(FFI_TYPE_LAST == FFI_PPC_TYPE_LAST \
|
|
158
|
+
|| (FFI_TYPE_LAST == FFI_TYPE_COMPLEX \
|
|
159
|
+
&& !defined FFI_TARGET_HAS_COMPLEX_TYPE))
|
|
160
|
+
# error "You likely have a broken powerpc libffi"
|
|
161
|
+
#endif
|
|
110
162
|
|
|
111
163
|
/* Needed for soft-float long-double-128 support. */
|
|
112
|
-
#define FFI_TYPE_UINT128 (
|
|
164
|
+
#define FFI_TYPE_UINT128 (FFI_PPC_TYPE_LAST + 1)
|
|
165
|
+
|
|
166
|
+
/* Needed for FFI_SYSV small structure returns. */
|
|
167
|
+
#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_PPC_TYPE_LAST + 2)
|
|
113
168
|
|
|
114
|
-
/*
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
#define
|
|
169
|
+
/* Used by ELFv2 for homogenous structure returns. */
|
|
170
|
+
#define FFI_V2_TYPE_FLOAT_HOMOG (FFI_PPC_TYPE_LAST + 1)
|
|
171
|
+
#define FFI_V2_TYPE_DOUBLE_HOMOG (FFI_PPC_TYPE_LAST + 2)
|
|
172
|
+
#define FFI_V2_TYPE_SMALL_STRUCT (FFI_PPC_TYPE_LAST + 3)
|
|
118
173
|
|
|
119
|
-
#if
|
|
174
|
+
#if _CALL_ELF == 2
|
|
175
|
+
# define FFI_TRAMPOLINE_SIZE 32
|
|
176
|
+
#else
|
|
177
|
+
# if defined(POWERPC64) || defined(POWERPC_AIX)
|
|
120
178
|
# if defined(POWERPC_DARWIN64)
|
|
121
179
|
# define FFI_TRAMPOLINE_SIZE 48
|
|
122
180
|
# else
|
|
123
181
|
# define FFI_TRAMPOLINE_SIZE 24
|
|
124
182
|
# endif
|
|
125
|
-
#else /* POWERPC || POWERPC_AIX */
|
|
183
|
+
# else /* POWERPC || POWERPC_AIX */
|
|
126
184
|
# define FFI_TRAMPOLINE_SIZE 40
|
|
185
|
+
# endif
|
|
127
186
|
#endif
|
|
128
187
|
|
|
129
188
|
#ifndef LIBFFI_ASM
|
|
@@ -29,47 +29,83 @@
|
|
|
29
29
|
#include <fficonfig.h>
|
|
30
30
|
#include <ffi.h>
|
|
31
31
|
|
|
32
|
-
#ifdef
|
|
33
|
-
.hidden ffi_call_LINUX64
|
|
34
|
-
.globl ffi_call_LINUX64
|
|
32
|
+
#ifdef POWERPC64
|
|
33
|
+
.hidden ffi_call_LINUX64
|
|
34
|
+
.globl ffi_call_LINUX64
|
|
35
|
+
.text
|
|
36
|
+
.cfi_startproc
|
|
37
|
+
# if _CALL_ELF == 2
|
|
38
|
+
ffi_call_LINUX64:
|
|
39
|
+
addis %r2, %r12, .TOC.-ffi_call_LINUX64@ha
|
|
40
|
+
addi %r2, %r2, .TOC.-ffi_call_LINUX64@l
|
|
41
|
+
.localentry ffi_call_LINUX64, . - ffi_call_LINUX64
|
|
42
|
+
# else
|
|
35
43
|
.section ".opd","aw"
|
|
36
44
|
.align 3
|
|
37
45
|
ffi_call_LINUX64:
|
|
46
|
+
# ifdef _CALL_LINUX
|
|
47
|
+
.quad .L.ffi_call_LINUX64,.TOC.@tocbase,0
|
|
48
|
+
.type ffi_call_LINUX64,@function
|
|
49
|
+
.text
|
|
50
|
+
.L.ffi_call_LINUX64:
|
|
51
|
+
# else
|
|
52
|
+
.hidden .ffi_call_LINUX64
|
|
53
|
+
.globl .ffi_call_LINUX64
|
|
38
54
|
.quad .ffi_call_LINUX64,.TOC.@tocbase,0
|
|
39
55
|
.size ffi_call_LINUX64,24
|
|
40
56
|
.type .ffi_call_LINUX64,@function
|
|
41
57
|
.text
|
|
42
58
|
.ffi_call_LINUX64:
|
|
43
|
-
|
|
59
|
+
# endif
|
|
60
|
+
# endif
|
|
44
61
|
mflr %r0
|
|
45
62
|
std %r28, -32(%r1)
|
|
46
63
|
std %r29, -24(%r1)
|
|
47
64
|
std %r30, -16(%r1)
|
|
48
65
|
std %r31, -8(%r1)
|
|
66
|
+
std %r7, 8(%r1) /* closure, saved in cr field. */
|
|
49
67
|
std %r0, 16(%r1)
|
|
50
68
|
|
|
51
69
|
mr %r28, %r1 /* our AP. */
|
|
52
|
-
.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
70
|
+
.cfi_def_cfa_register 28
|
|
71
|
+
.cfi_offset 65, 16
|
|
72
|
+
.cfi_offset 31, -8
|
|
73
|
+
.cfi_offset 30, -16
|
|
74
|
+
.cfi_offset 29, -24
|
|
75
|
+
.cfi_offset 28, -32
|
|
76
|
+
|
|
77
|
+
stdux %r1, %r1, %r8
|
|
78
|
+
mr %r31, %r6 /* flags, */
|
|
79
|
+
mr %r30, %r5 /* rvalue, */
|
|
80
|
+
mr %r29, %r4 /* function address. */
|
|
81
|
+
/* Save toc pointer, not for the ffi_prep_args64 call, but for the later
|
|
82
|
+
bctrl function call. */
|
|
83
|
+
# if _CALL_ELF == 2
|
|
84
|
+
std %r2, 24(%r1)
|
|
85
|
+
# else
|
|
57
86
|
std %r2, 40(%r1)
|
|
87
|
+
# endif
|
|
58
88
|
|
|
59
89
|
/* Call ffi_prep_args64. */
|
|
60
90
|
mr %r4, %r1
|
|
91
|
+
# if defined _CALL_LINUX || _CALL_ELF == 2
|
|
92
|
+
bl ffi_prep_args64
|
|
93
|
+
# else
|
|
61
94
|
bl .ffi_prep_args64
|
|
95
|
+
# endif
|
|
62
96
|
|
|
63
|
-
|
|
97
|
+
# if _CALL_ELF == 2
|
|
98
|
+
mr %r12, %r29
|
|
99
|
+
# else
|
|
100
|
+
ld %r12, 0(%r29)
|
|
64
101
|
ld %r2, 8(%r29)
|
|
65
|
-
|
|
66
|
-
|
|
102
|
+
# endif
|
|
67
103
|
/* Now do the call. */
|
|
68
104
|
/* Set up cr1 with bits 4-7 of the flags. */
|
|
69
105
|
mtcrf 0x40, %r31
|
|
70
106
|
|
|
71
107
|
/* Get the address to call into CTR. */
|
|
72
|
-
mtctr %
|
|
108
|
+
mtctr %r12
|
|
73
109
|
/* Load all those argument registers. */
|
|
74
110
|
ld %r3, -32-(8*8)(%r28)
|
|
75
111
|
ld %r4, -32-(7*8)(%r28)
|
|
@@ -100,24 +136,31 @@ ffi_call_LINUX64:
|
|
|
100
136
|
2:
|
|
101
137
|
|
|
102
138
|
/* Make the call. */
|
|
139
|
+
ld %r11, 8(%r28)
|
|
103
140
|
bctrl
|
|
104
141
|
|
|
105
142
|
/* This must follow the call immediately, the unwinder
|
|
106
143
|
uses this to find out if r2 has been saved or not. */
|
|
144
|
+
# if _CALL_ELF == 2
|
|
145
|
+
ld %r2, 24(%r1)
|
|
146
|
+
# else
|
|
107
147
|
ld %r2, 40(%r1)
|
|
148
|
+
# endif
|
|
108
149
|
|
|
109
150
|
/* Now, deal with the return value. */
|
|
110
151
|
mtcrf 0x01, %r31
|
|
111
|
-
bt
|
|
112
|
-
bt
|
|
152
|
+
bt 31, .Lstruct_return_value
|
|
153
|
+
bt 30, .Ldone_return_value
|
|
154
|
+
bt 29, .Lfp_return_value
|
|
113
155
|
std %r3, 0(%r30)
|
|
114
156
|
/* Fall through... */
|
|
115
157
|
|
|
116
158
|
.Ldone_return_value:
|
|
117
159
|
/* Restore the registers we used and return. */
|
|
118
160
|
mr %r1, %r28
|
|
161
|
+
.cfi_def_cfa_register 1
|
|
119
162
|
ld %r0, 16(%r28)
|
|
120
|
-
ld %r28, -32(%
|
|
163
|
+
ld %r28, -32(%r28)
|
|
121
164
|
mtlr %r0
|
|
122
165
|
ld %r29, -24(%r1)
|
|
123
166
|
ld %r30, -16(%r1)
|
|
@@ -125,6 +168,7 @@ ffi_call_LINUX64:
|
|
|
125
168
|
blr
|
|
126
169
|
|
|
127
170
|
.Lfp_return_value:
|
|
171
|
+
.cfi_def_cfa_register 28
|
|
128
172
|
bf 28, .Lfloat_return_value
|
|
129
173
|
stfd %f1, 0(%r30)
|
|
130
174
|
mtcrf 0x02, %r31 /* cr6 */
|
|
@@ -134,54 +178,51 @@ ffi_call_LINUX64:
|
|
|
134
178
|
.Lfloat_return_value:
|
|
135
179
|
stfs %f1, 0(%r30)
|
|
136
180
|
b .Ldone_return_value
|
|
137
|
-
|
|
181
|
+
|
|
182
|
+
.Lstruct_return_value:
|
|
183
|
+
bf 29, .Lsmall_struct
|
|
184
|
+
bf 28, .Lfloat_homog_return_value
|
|
185
|
+
stfd %f1, 0(%r30)
|
|
186
|
+
stfd %f2, 8(%r30)
|
|
187
|
+
stfd %f3, 16(%r30)
|
|
188
|
+
stfd %f4, 24(%r30)
|
|
189
|
+
stfd %f5, 32(%r30)
|
|
190
|
+
stfd %f6, 40(%r30)
|
|
191
|
+
stfd %f7, 48(%r30)
|
|
192
|
+
stfd %f8, 56(%r30)
|
|
193
|
+
b .Ldone_return_value
|
|
194
|
+
|
|
195
|
+
.Lfloat_homog_return_value:
|
|
196
|
+
stfs %f1, 0(%r30)
|
|
197
|
+
stfs %f2, 4(%r30)
|
|
198
|
+
stfs %f3, 8(%r30)
|
|
199
|
+
stfs %f4, 12(%r30)
|
|
200
|
+
stfs %f5, 16(%r30)
|
|
201
|
+
stfs %f6, 20(%r30)
|
|
202
|
+
stfs %f7, 24(%r30)
|
|
203
|
+
stfs %f8, 28(%r30)
|
|
204
|
+
b .Ldone_return_value
|
|
205
|
+
|
|
206
|
+
.Lsmall_struct:
|
|
207
|
+
std %r3, 0(%r30)
|
|
208
|
+
std %r4, 8(%r30)
|
|
209
|
+
b .Ldone_return_value
|
|
210
|
+
|
|
211
|
+
.cfi_endproc
|
|
212
|
+
# if _CALL_ELF == 2
|
|
213
|
+
.size ffi_call_LINUX64,.-ffi_call_LINUX64
|
|
214
|
+
# else
|
|
215
|
+
# ifdef _CALL_LINUX
|
|
216
|
+
.size ffi_call_LINUX64,.-.L.ffi_call_LINUX64
|
|
217
|
+
# else
|
|
138
218
|
.long 0
|
|
139
219
|
.byte 0,12,0,1,128,4,0,0
|
|
140
220
|
.size .ffi_call_LINUX64,.-.ffi_call_LINUX64
|
|
221
|
+
# endif
|
|
222
|
+
# endif
|
|
141
223
|
|
|
142
|
-
.section .eh_frame,EH_FRAME_FLAGS,@progbits
|
|
143
|
-
.Lframe1:
|
|
144
|
-
.4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
|
|
145
|
-
.LSCIE1:
|
|
146
|
-
.4byte 0x0 # CIE Identifier Tag
|
|
147
|
-
.byte 0x1 # CIE Version
|
|
148
|
-
.ascii "zR\0" # CIE Augmentation
|
|
149
|
-
.uleb128 0x1 # CIE Code Alignment Factor
|
|
150
|
-
.sleb128 -8 # CIE Data Alignment Factor
|
|
151
|
-
.byte 0x41 # CIE RA Column
|
|
152
|
-
.uleb128 0x1 # Augmentation size
|
|
153
|
-
.byte 0x14 # FDE Encoding (pcrel udata8)
|
|
154
|
-
.byte 0xc # DW_CFA_def_cfa
|
|
155
|
-
.uleb128 0x1
|
|
156
|
-
.uleb128 0x0
|
|
157
|
-
.align 3
|
|
158
|
-
.LECIE1:
|
|
159
|
-
.LSFDE1:
|
|
160
|
-
.4byte .LEFDE1-.LASFDE1 # FDE Length
|
|
161
|
-
.LASFDE1:
|
|
162
|
-
.4byte .LASFDE1-.Lframe1 # FDE CIE offset
|
|
163
|
-
.8byte .LFB1-. # FDE initial location
|
|
164
|
-
.8byte .LFE1-.LFB1 # FDE address range
|
|
165
|
-
.uleb128 0x0 # Augmentation size
|
|
166
|
-
.byte 0x2 # DW_CFA_advance_loc1
|
|
167
|
-
.byte .LCFI0-.LFB1
|
|
168
|
-
.byte 0xd # DW_CFA_def_cfa_register
|
|
169
|
-
.uleb128 0x1c
|
|
170
|
-
.byte 0x11 # DW_CFA_offset_extended_sf
|
|
171
|
-
.uleb128 0x41
|
|
172
|
-
.sleb128 -2
|
|
173
|
-
.byte 0x9f # DW_CFA_offset, column 0x1f
|
|
174
|
-
.uleb128 0x1
|
|
175
|
-
.byte 0x9e # DW_CFA_offset, column 0x1e
|
|
176
|
-
.uleb128 0x2
|
|
177
|
-
.byte 0x9d # DW_CFA_offset, column 0x1d
|
|
178
|
-
.uleb128 0x3
|
|
179
|
-
.byte 0x9c # DW_CFA_offset, column 0x1c
|
|
180
|
-
.uleb128 0x4
|
|
181
|
-
.align 3
|
|
182
|
-
.LEFDE1:
|
|
183
224
|
#endif
|
|
184
225
|
|
|
185
|
-
#if defined __ELF__ && defined __linux__
|
|
226
|
+
#if (defined __ELF__ && defined __linux__) || _CALL_ELF == 2
|
|
186
227
|
.section .note.GNU-stack,"",@progbits
|
|
187
228
|
#endif
|