ffi 1.0.0 → 1.17.1
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 +7 -0
- checksums.yaml.gz.sig +4 -0
- data/CHANGELOG.md +465 -0
- data/COPYING +49 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -11
- data/LICENSE.SPECS +22 -0
- data/README.md +137 -0
- data/Rakefile +165 -148
- data/ext/ffi_c/AbstractMemory.c +716 -97
- data/ext/ffi_c/AbstractMemory.h +38 -17
- data/ext/ffi_c/ArrayType.c +102 -33
- data/ext/ffi_c/ArrayType.h +20 -18
- data/ext/ffi_c/Buffer.c +229 -54
- data/ext/ffi_c/Call.c +211 -100
- data/ext/ffi_c/Call.h +46 -28
- data/ext/ffi_c/ClosurePool.c +110 -81
- data/ext/ffi_c/ClosurePool.h +31 -1
- data/ext/ffi_c/DynamicLibrary.c +216 -54
- data/ext/ffi_c/DynamicLibrary.h +76 -0
- data/ext/ffi_c/Function.c +527 -164
- data/ext/ffi_c/Function.h +24 -20
- data/ext/ffi_c/FunctionInfo.c +151 -50
- data/ext/ffi_c/LastError.c +112 -28
- data/ext/ffi_c/LastError.h +29 -0
- data/ext/ffi_c/LongDouble.c +65 -0
- data/ext/ffi_c/LongDouble.h +47 -0
- data/ext/ffi_c/MappedType.c +107 -42
- data/ext/ffi_c/MappedType.h +20 -20
- data/ext/ffi_c/MemoryPointer.c +108 -46
- data/ext/ffi_c/MemoryPointer.h +33 -4
- data/ext/ffi_c/MethodHandle.c +71 -67
- data/ext/ffi_c/MethodHandle.h +26 -23
- data/ext/ffi_c/Platform.c +42 -25
- data/ext/ffi_c/Platform.h +32 -3
- data/ext/ffi_c/Pointer.c +324 -51
- data/ext/ffi_c/Pointer.h +29 -18
- data/ext/ffi_c/Struct.c +434 -161
- data/ext/ffi_c/Struct.h +47 -27
- data/ext/ffi_c/StructByValue.c +74 -37
- data/ext/ffi_c/StructByValue.h +20 -18
- data/ext/ffi_c/StructLayout.c +358 -87
- data/ext/ffi_c/Thread.c +129 -0
- data/ext/ffi_c/Thread.h +76 -0
- data/ext/ffi_c/Type.c +241 -76
- data/ext/ffi_c/Type.h +27 -11
- data/ext/ffi_c/Types.c +54 -34
- data/ext/ffi_c/Types.h +24 -24
- data/ext/ffi_c/Variadic.c +151 -55
- data/ext/ffi_c/compat.h +48 -38
- data/ext/ffi_c/extconf.rb +106 -34
- data/ext/ffi_c/ffi.c +35 -26
- data/ext/ffi_c/libffi/.allow-ai-service +0 -0
- data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
- data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
- data/ext/ffi_c/libffi/.appveyor.yml +84 -0
- data/ext/ffi_c/libffi/.ci/ar-lib +270 -0
- data/ext/ffi_c/libffi/.ci/bfin-sim.exp +58 -0
- data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
- data/ext/ffi_c/libffi/.ci/build-in-container.sh +10 -0
- data/ext/ffi_c/libffi/.ci/build.sh +124 -0
- data/ext/ffi_c/libffi/.ci/compile +351 -0
- data/ext/ffi_c/libffi/.ci/install.sh +78 -0
- data/ext/ffi_c/libffi/.ci/m32r-sim.exp +58 -0
- data/ext/ffi_c/libffi/.ci/moxie-sim.exp +60 -0
- data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
- data/ext/ffi_c/libffi/.ci/or1k-sim.exp +58 -0
- data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +58 -0
- data/ext/ffi_c/libffi/.ci/site.exp +29 -0
- data/ext/ffi_c/libffi/.ci/wine-sim.exp +55 -0
- data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
- data/ext/ffi_c/libffi/.gitattributes +4 -0
- data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
- data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
- data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
- data/ext/ffi_c/libffi/.gitignore +46 -0
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.old} +6528 -3180
- data/ext/ffi_c/libffi/LICENSE +3 -3
- data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +353 -0
- data/ext/ffi_c/libffi/Makefile.am +132 -162
- data/ext/ffi_c/libffi/Makefile.in +1339 -1003
- data/ext/ffi_c/libffi/README.md +531 -0
- data/ext/ffi_c/libffi/acinclude.m4 +289 -4
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/compile +227 -21
- data/ext/ffi_c/libffi/config.guess +1034 -778
- data/ext/ffi_c/libffi/config.sub +1394 -1204
- data/ext/ffi_c/libffi/configure +14327 -8503
- data/ext/ffi_c/libffi/configure.ac +294 -247
- data/ext/ffi_c/libffi/configure.host +330 -4
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +818 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +572 -67
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +53 -46
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +312 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +219 -79
- data/ext/ffi_c/libffi/include/ffi.h.in +230 -111
- data/ext/ffi_c/libffi/include/ffi_cfi.h +76 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +78 -16
- data/ext/ffi_c/libffi/include/tramp.h +45 -0
- data/ext/ffi_c/libffi/install-sh +402 -184
- data/ext/ffi_c/libffi/libffi.map.in +81 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +997 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +2 -2
- data/ext/ffi_c/libffi/ltmain.sh +5752 -2722
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +50 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +198 -0
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +158 -0
- data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +53 -0
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +119 -0
- data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +49 -0
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +267 -0
- data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
- data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
- data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
- data/ext/ffi_c/libffi/make_sunver.pl +333 -0
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +174 -57
- 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 +155 -300
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +219 -0
- data/ext/ffi_c/libffi/msvcc.sh +353 -0
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +1142 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +97 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +100 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +695 -0
- data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -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 +162 -246
- data/ext/ffi_c/libffi/src/arc/arcompact.S +210 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +443 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +67 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +806 -194
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +43 -3
- data/ext/ffi_c/libffi/src/arm/internal.h +17 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +381 -231
- data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
- data/ext/ffi_c/libffi/src/avr32/ffi.c +4 -2
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +8 -3
- 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 +574 -100
- data/ext/ffi_c/libffi/src/cris/ffi.c +11 -8
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +8 -3
- data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
- data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
- data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
- data/ext/ffi_c/libffi/src/debug.c +8 -3
- data/ext/ffi_c/libffi/src/dlmalloc.c +89 -17
- data/ext/ffi_c/libffi/src/frv/ffi.c +2 -2
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +8 -7
- data/ext/ffi_c/libffi/src/ia64/ffi.c +48 -12
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +10 -4
- data/ext/ffi_c/libffi/src/ia64/unix.S +28 -3
- data/ext/ffi_c/libffi/src/java_raw_api.c +24 -6
- data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
- data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
- data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
- data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
- data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
- data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
- data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
- data/ext/ffi_c/libffi/src/m32r/ffi.c +32 -15
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +8 -3
- data/ext/ffi_c/libffi/src/m68k/ffi.c +97 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +8 -3
- data/ext/ffi_c/libffi/src/m68k/sysv.S +148 -25
- 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/src/metag/ffitarget.h +53 -0
- 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 +392 -104
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +40 -24
- data/ext/ffi_c/libffi/src/mips/n32.S +325 -93
- data/ext/ffi_c/libffi/src/mips/o32.S +211 -31
- data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
- data/ext/ffi_c/libffi/src/moxie/ffi.c +310 -0
- 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 +341 -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/ffi.c +68 -111
- data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +34 -17
- data/ext/ffi_c/libffi/src/pa/hpux32.S +87 -38
- data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
- data/ext/ffi_c/libffi/src/pa/linux.S +109 -39
- data/ext/ffi_c/libffi/src/powerpc/aix.S +250 -8
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +255 -4
- data/ext/ffi_c/libffi/src/powerpc/asm.h +3 -3
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +211 -78
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +356 -102
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +108 -1375
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +746 -210
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1153 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +105 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +126 -48
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +191 -85
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +438 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +73 -119
- data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
- data/ext/ffi_c/libffi/src/prep_cif.c +141 -32
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/riscv/ffi.c +514 -0
- data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
- data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +13 -3
- 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 +8 -3
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +8 -3
- data/ext/ffi_c/libffi/src/sparc/ffi.c +334 -491
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +630 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -5
- 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/tramp.c +716 -0
- data/ext/ffi_c/libffi/src/types.c +48 -19
- 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/wasm32/ffi.c +947 -0
- data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +690 -540
- data/ext/ffi_c/libffi/src/x86/ffi64.c +450 -126
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +86 -42
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +361 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +43 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +36 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +1199 -381
- data/ext/ffi_c/libffi/src/x86/sysv_intel.S +998 -0
- data/ext/ffi_c/libffi/src/x86/unix64.S +587 -298
- data/ext/ffi_c/libffi/src/x86/win64.S +251 -457
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +238 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +306 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +57 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +268 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +251 -117
- data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +682 -0
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +22 -2
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1746 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +747 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +28 -10
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +4 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +88 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +15 -12
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +110 -0
- 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/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_ll1.c +6 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +9 -10
- 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/struct10.c +57 -0
- 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/struct_by_value_2.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +134 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +134 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +140 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +67 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn0.c +3 -2
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn1.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn2.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn3.c +21 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn4.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn5.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn6.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_loc_fn0.c +7 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call/closure_stdcall.c → libffi.closures/closure_simple.c} +13 -16
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_12byte.c +22 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_16byte.c +26 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_18byte.c +28 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_19byte.c +33 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_1_1byte.c +8 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte1.c +25 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_24byte.c +40 -8
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_2byte.c +17 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3_1byte.c +23 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte1.c +17 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte2.c +17 -4
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +113 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4_1byte.c +26 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4byte.c +17 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5_1_byte.c +33 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5byte.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_64byte.c +29 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6_1_byte.c +32 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6byte.c +28 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7_1_byte.c +43 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7byte.c +29 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_8byte.c +18 -4
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte1.c +18 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte2.c +18 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_double.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_float.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble.c +24 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split.c +44 -31
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split2.c +44 -9
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_pointer.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint16.c +22 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint32.c +22 -7
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint64.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint16.c +22 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint32.c +23 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint64.c +24 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_dbls_struct.c +7 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double_va.c +21 -9
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_float.c +4 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble.c +13 -3
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble_va.c +34 -11
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_schar.c +5 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshort.c +6 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshortchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_uchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushort.c +6 -2
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushortchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer.c +7 -2
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer_stack.c +22 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_schar.c +3 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sint.c +2 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sshort.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +125 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar.c +3 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +49 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulonglong.c +8 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort.c +3 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/err_bad_abi.c +2 -3
- data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/huge_struct.c +57 -56
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct.c +38 -15
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct1.c +9 -9
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct10.c +19 -6
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +137 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct2.c +15 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct3.c +15 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct4.c +14 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct5.c +14 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct6.c +17 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct7.c +14 -5
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct8.c +17 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct9.c +17 -6
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium.c +6 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium2.c +7 -6
- data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/testclosure.c +8 -3
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest.cc +4 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest_ffi_call.cc +4 -2
- 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 -10
- 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 +14 -8
- data/ext/ffi_c/libffi.darwin.mk +56 -26
- data/ext/ffi_c/libffi.gnu.mk +9 -6
- data/ext/ffi_c/libffi.mk +13 -8
- data/ext/ffi_c/libffi.vc.mk +26 -0
- data/ext/ffi_c/libffi.vc64.mk +26 -0
- data/ext/ffi_c/rbffi.h +34 -6
- data/ext/ffi_c/{endian.h → rbffi_endian.h} +21 -2
- data/ffi.gemspec +42 -0
- data/lib/ffi/abstract_memory.rb +44 -0
- data/lib/ffi/autopointer.rb +111 -52
- data/lib/ffi/compat.rb +43 -0
- data/lib/ffi/data_converter.rb +67 -0
- data/lib/ffi/dynamic_library.rb +118 -0
- data/lib/ffi/enum.rb +203 -22
- data/lib/ffi/errno.rb +27 -12
- data/lib/ffi/ffi.rb +88 -11
- data/lib/ffi/function.rb +71 -0
- data/lib/ffi/io.rb +35 -14
- data/lib/ffi/library.rb +382 -96
- data/lib/ffi/library_path.rb +109 -0
- data/lib/ffi/managedstruct.rb +64 -35
- data/lib/ffi/memorypointer.rb +1 -33
- data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
- data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/aarch64-freebsd12/types.conf +181 -0
- data/lib/ffi/platform/aarch64-linux/types.conf +175 -0
- data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
- data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
- data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/arm-linux/types.conf +132 -0
- data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
- data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
- data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
- data/lib/ffi/platform/i386-darwin/types.conf +100 -0
- data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
- data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/i386-gnu/types.conf +107 -0
- data/lib/ffi/platform/i386-linux/types.conf +103 -0
- data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
- data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
- data/lib/ffi/platform/i386-solaris/types.conf +122 -0
- data/lib/ffi/platform/i386-windows/types.conf +52 -0
- data/lib/ffi/platform/ia64-linux/types.conf +104 -0
- data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
- data/lib/ffi/platform/mips-linux/types.conf +102 -0
- data/lib/ffi/platform/mips64-linux/types.conf +104 -0
- data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
- data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
- data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
- data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
- data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
- data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
- data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
- data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
- data/lib/ffi/platform/s390-linux/types.conf +102 -0
- data/lib/ffi/platform/s390x-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
- data/lib/ffi/platform/sparcv9-linux/types.conf +102 -0
- data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
- data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
- data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
- data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
- data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
- data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
- data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
- data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
- data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
- data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
- data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
- data/lib/ffi/platform.rb +110 -34
- data/lib/ffi/pointer.rb +117 -90
- data/lib/ffi/struct.rb +101 -70
- data/lib/ffi/struct_by_reference.rb +72 -0
- data/lib/ffi/struct_layout.rb +96 -0
- data/lib/ffi/struct_layout_builder.rb +90 -21
- data/lib/ffi/tools/const_generator.rb +86 -31
- data/lib/ffi/tools/generator.rb +49 -2
- data/lib/ffi/tools/generator_task.rb +13 -16
- data/lib/ffi/tools/struct_generator.rb +6 -5
- data/lib/ffi/tools/types_generator.rb +25 -11
- data/lib/ffi/types.rb +105 -36
- data/lib/ffi/union.rb +23 -12
- data/lib/ffi/variadic.rb +44 -29
- data/lib/ffi/version.rb +3 -0
- data/lib/ffi.rb +25 -9
- data/rakelib/ffi_gem_helper.rb +65 -0
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +8 -0
- data/samples/hello_ractor.rb +11 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +75 -0
- data/samples/qsort.rb +20 -0
- data/samples/qsort_ractor.rb +28 -0
- data/sig/ffi/abstract_memory.rbs +165 -0
- data/sig/ffi/auto_pointer.rbs +26 -0
- data/sig/ffi/buffer.rbs +18 -0
- data/sig/ffi/data_converter.rbs +10 -0
- data/sig/ffi/dynamic_library.rbs +9 -0
- data/sig/ffi/enum.rbs +38 -0
- data/sig/ffi/function.rbs +39 -0
- data/sig/ffi/library.rbs +42 -0
- data/sig/ffi/native_type.rbs +86 -0
- data/sig/ffi/pointer.rbs +42 -0
- data/sig/ffi/struct.rbs +76 -0
- data/sig/ffi/struct_by_reference.rbs +11 -0
- data/sig/ffi/struct_by_value.rbs +7 -0
- data/sig/ffi/struct_layout.rbs +9 -0
- data/sig/ffi/struct_layout_builder.rbs +5 -0
- data/sig/ffi/type.rbs +39 -0
- data/sig/ffi.rbs +26 -0
- data.tar.gz.sig +0 -0
- metadata +547 -248
- metadata.gz.sig +0 -0
- data/History.txt +0 -109
- data/README.rdoc +0 -70
- data/ext/ffi_c/DataConverter.c +0 -62
- data/ext/ffi_c/StructByReference.c +0 -150
- data/ext/ffi_c/StructByReference.h +0 -50
- data/ext/ffi_c/libffi/ChangeLog.libffi +0 -658
- data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
- data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
- data/ext/ffi_c/libffi/README +0 -306
- data/ext/ffi_c/libffi/aclocal.m4 +0 -8998
- data/ext/ffi_c/libffi/depcomp +0 -584
- data/ext/ffi_c/libffi/doc/libffi.info +0 -533
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7360
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -368
- 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 -92
- data/ext/ffi_c/libffi/mdate-sh +0 -201
- 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 -877
- 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 -14
- data/spec/ffi/async_callback_spec.rb +0 -23
- data/spec/ffi/bool_spec.rb +0 -24
- data/spec/ffi/buffer_spec.rb +0 -202
- data/spec/ffi/callback_spec.rb +0 -653
- data/spec/ffi/custom_param_type.rb +0 -31
- data/spec/ffi/custom_type_spec.rb +0 -73
- data/spec/ffi/enum_spec.rb +0 -183
- data/spec/ffi/errno_spec.rb +0 -13
- data/spec/ffi/ffi_spec.rb +0 -24
- data/spec/ffi/function_spec.rb +0 -73
- data/spec/ffi/library_spec.rb +0 -174
- data/spec/ffi/managed_struct_spec.rb +0 -56
- data/spec/ffi/number_spec.rb +0 -231
- data/spec/ffi/pointer_spec.rb +0 -210
- data/spec/ffi/rbx/attach_function_spec.rb +0 -28
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -109
- data/spec/ffi/rbx/spec_helper.rb +0 -1
- data/spec/ffi/rbx/struct_spec.rb +0 -13
- data/spec/ffi/spec_helper.rb +0 -21
- data/spec/ffi/string_spec.rb +0 -103
- data/spec/ffi/strptr_spec.rb +0 -36
- data/spec/ffi/struct_callback_spec.rb +0 -64
- data/spec/ffi/struct_initialize_spec.rb +0 -30
- data/spec/ffi/struct_packed_spec.rb +0 -46
- data/spec/ffi/struct_spec.rb +0 -638
- data/spec/ffi/typedef_spec.rb +0 -62
- data/spec/ffi/union_spec.rb +0 -60
- data/spec/ffi/variadic_spec.rb +0 -84
- data/spec/spec.opts +0 -4
- data/tasks/ann.rake +0 -80
- data/tasks/extension.rake +0 -25
- data/tasks/gem.rake +0 -200
- data/tasks/git.rake +0 -41
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -50
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -301
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
- /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
- /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double.c +0 -0
- /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/problem1.c +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
/* -----------------------------------------------------------------------
|
2
|
-
n32.S - Copyright (c) 1996, 1998, 2005 Red Hat, Inc.
|
2
|
+
n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc.
|
3
3
|
|
4
4
|
MIPS Foreign Function Interface
|
5
5
|
|
@@ -37,35 +37,43 @@
|
|
37
37
|
#define flags a3
|
38
38
|
#define raddr a4
|
39
39
|
#define fn a5
|
40
|
+
#define closure a6
|
40
41
|
|
41
|
-
|
42
|
+
/* Note: to keep stack 16 byte aligned we need even number slots
|
43
|
+
used 9 slots here
|
44
|
+
*/
|
45
|
+
#define SIZEOF_FRAME ( 10 * FFI_SIZEOF_ARG )
|
42
46
|
|
43
|
-
#ifdef
|
47
|
+
#ifdef __GNUC__
|
44
48
|
.abicalls
|
49
|
+
#endif
|
50
|
+
#if !defined(__mips_isa_rev) || (__mips_isa_rev<6)
|
51
|
+
.set mips4
|
45
52
|
#endif
|
46
53
|
.text
|
47
54
|
.align 2
|
48
55
|
.globl ffi_call_N32
|
49
56
|
.ent ffi_call_N32
|
50
57
|
ffi_call_N32:
|
51
|
-
.
|
58
|
+
.LFB0:
|
52
59
|
.frame $fp, SIZEOF_FRAME, ra
|
53
60
|
.mask 0xc0000000,-FFI_SIZEOF_ARG
|
54
61
|
.fmask 0x00000000,0
|
55
62
|
|
56
63
|
# Prologue
|
57
64
|
SUBU $sp, SIZEOF_FRAME # Frame size
|
58
|
-
.
|
65
|
+
.LCFI00:
|
59
66
|
REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer
|
60
67
|
REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address
|
61
|
-
.
|
68
|
+
.LCFI01:
|
62
69
|
move $fp, $sp
|
63
|
-
.
|
70
|
+
.LCFI02:
|
64
71
|
move t9, callback # callback function pointer
|
65
72
|
REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes
|
66
73
|
REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags
|
67
74
|
REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr
|
68
75
|
REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn
|
76
|
+
REG_S closure, 6*FFI_SIZEOF_ARG($fp) # closure
|
69
77
|
|
70
78
|
# Allocate at least 4 words in the argstack
|
71
79
|
move v0, bytes
|
@@ -106,11 +114,29 @@ loadregs:
|
|
106
114
|
|
107
115
|
REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6.
|
108
116
|
|
109
|
-
|
110
|
-
|
117
|
+
# when retval is _Complex long double, $f12/$a0, $f13/$a1 will be skipped
|
118
|
+
# no idea why, but gcc does it.
|
119
|
+
SRL t4, t6, 8*FFI_FLAG_BITS
|
120
|
+
move t8, t6
|
121
|
+
bne t4, FFI_TYPE_COMPLEX_LDLD, loadregs1
|
122
|
+
|
123
|
+
SLL t8, t6, 2*FFI_FLAG_BITS
|
124
|
+
|
125
|
+
|
126
|
+
loadregs1:
|
127
|
+
#ifdef __mips_soft_float
|
111
128
|
REG_L a0, 0*FFI_SIZEOF_ARG(t9)
|
112
|
-
|
113
|
-
|
129
|
+
REG_L a1, 1*FFI_SIZEOF_ARG(t9)
|
130
|
+
REG_L a2, 2*FFI_SIZEOF_ARG(t9)
|
131
|
+
REG_L a3, 3*FFI_SIZEOF_ARG(t9)
|
132
|
+
REG_L a4, 4*FFI_SIZEOF_ARG(t9)
|
133
|
+
REG_L a5, 5*FFI_SIZEOF_ARG(t9)
|
134
|
+
REG_L a6, 6*FFI_SIZEOF_ARG(t9)
|
135
|
+
REG_L a7, 7*FFI_SIZEOF_ARG(t9)
|
136
|
+
#else
|
137
|
+
and t4, t8, ((1<<FFI_FLAG_BITS)-1)
|
138
|
+
REG_L a0, 0*FFI_SIZEOF_ARG(t9)
|
139
|
+
beqz t4, arg1_next
|
114
140
|
bne t4, FFI_TYPE_FLOAT, arg1_doublep
|
115
141
|
l.s $f12, 0*FFI_SIZEOF_ARG(t9)
|
116
142
|
b arg1_next
|
@@ -118,12 +144,10 @@ arg1_doublep:
|
|
118
144
|
l.d $f12, 0*FFI_SIZEOF_ARG(t9)
|
119
145
|
arg1_next:
|
120
146
|
|
121
|
-
SRL t4,
|
147
|
+
SRL t4, t8, 1*FFI_FLAG_BITS
|
122
148
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
123
|
-
bnez t4, arg2_floatp
|
124
149
|
REG_L a1, 1*FFI_SIZEOF_ARG(t9)
|
125
|
-
|
126
|
-
arg2_floatp:
|
150
|
+
beqz t4, arg2_next
|
127
151
|
bne t4, FFI_TYPE_FLOAT, arg2_doublep
|
128
152
|
l.s $f13, 1*FFI_SIZEOF_ARG(t9)
|
129
153
|
b arg2_next
|
@@ -131,12 +155,10 @@ arg2_doublep:
|
|
131
155
|
l.d $f13, 1*FFI_SIZEOF_ARG(t9)
|
132
156
|
arg2_next:
|
133
157
|
|
134
|
-
SRL t4,
|
158
|
+
SRL t4, t8, 2*FFI_FLAG_BITS
|
135
159
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
136
|
-
bnez t4, arg3_floatp
|
137
160
|
REG_L a2, 2*FFI_SIZEOF_ARG(t9)
|
138
|
-
|
139
|
-
arg3_floatp:
|
161
|
+
beqz t4, arg3_next
|
140
162
|
bne t4, FFI_TYPE_FLOAT, arg3_doublep
|
141
163
|
l.s $f14, 2*FFI_SIZEOF_ARG(t9)
|
142
164
|
b arg3_next
|
@@ -144,12 +166,10 @@ arg3_doublep:
|
|
144
166
|
l.d $f14, 2*FFI_SIZEOF_ARG(t9)
|
145
167
|
arg3_next:
|
146
168
|
|
147
|
-
SRL t4,
|
169
|
+
SRL t4, t8, 3*FFI_FLAG_BITS
|
148
170
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
149
|
-
bnez t4, arg4_floatp
|
150
171
|
REG_L a3, 3*FFI_SIZEOF_ARG(t9)
|
151
|
-
|
152
|
-
arg4_floatp:
|
172
|
+
beqz t4, arg4_next
|
153
173
|
bne t4, FFI_TYPE_FLOAT, arg4_doublep
|
154
174
|
l.s $f15, 3*FFI_SIZEOF_ARG(t9)
|
155
175
|
b arg4_next
|
@@ -157,12 +177,10 @@ arg4_doublep:
|
|
157
177
|
l.d $f15, 3*FFI_SIZEOF_ARG(t9)
|
158
178
|
arg4_next:
|
159
179
|
|
160
|
-
SRL t4,
|
180
|
+
SRL t4, t8, 4*FFI_FLAG_BITS
|
161
181
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
162
|
-
bnez t4, arg5_floatp
|
163
182
|
REG_L a4, 4*FFI_SIZEOF_ARG(t9)
|
164
|
-
|
165
|
-
arg5_floatp:
|
183
|
+
beqz t4, arg5_next
|
166
184
|
bne t4, FFI_TYPE_FLOAT, arg5_doublep
|
167
185
|
l.s $f16, 4*FFI_SIZEOF_ARG(t9)
|
168
186
|
b arg5_next
|
@@ -170,12 +188,10 @@ arg5_doublep:
|
|
170
188
|
l.d $f16, 4*FFI_SIZEOF_ARG(t9)
|
171
189
|
arg5_next:
|
172
190
|
|
173
|
-
SRL t4,
|
191
|
+
SRL t4, t8, 5*FFI_FLAG_BITS
|
174
192
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
175
|
-
bnez t4, arg6_floatp
|
176
193
|
REG_L a5, 5*FFI_SIZEOF_ARG(t9)
|
177
|
-
|
178
|
-
arg6_floatp:
|
194
|
+
beqz t4, arg6_next
|
179
195
|
bne t4, FFI_TYPE_FLOAT, arg6_doublep
|
180
196
|
l.s $f17, 5*FFI_SIZEOF_ARG(t9)
|
181
197
|
b arg6_next
|
@@ -183,12 +199,10 @@ arg6_doublep:
|
|
183
199
|
l.d $f17, 5*FFI_SIZEOF_ARG(t9)
|
184
200
|
arg6_next:
|
185
201
|
|
186
|
-
SRL t4,
|
202
|
+
SRL t4, t8, 6*FFI_FLAG_BITS
|
187
203
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
188
|
-
bnez t4, arg7_floatp
|
189
204
|
REG_L a6, 6*FFI_SIZEOF_ARG(t9)
|
190
|
-
|
191
|
-
arg7_floatp:
|
205
|
+
beqz t4, arg7_next
|
192
206
|
bne t4, FFI_TYPE_FLOAT, arg7_doublep
|
193
207
|
l.s $f18, 6*FFI_SIZEOF_ARG(t9)
|
194
208
|
b arg7_next
|
@@ -196,23 +210,25 @@ arg7_doublep:
|
|
196
210
|
l.d $f18, 6*FFI_SIZEOF_ARG(t9)
|
197
211
|
arg7_next:
|
198
212
|
|
199
|
-
SRL t4,
|
213
|
+
SRL t4, t8, 7*FFI_FLAG_BITS
|
200
214
|
and t4, ((1<<FFI_FLAG_BITS)-1)
|
201
|
-
bnez t4, arg8_floatp
|
202
215
|
REG_L a7, 7*FFI_SIZEOF_ARG(t9)
|
203
|
-
|
204
|
-
arg8_floatp:
|
216
|
+
beqz t4, arg8_next
|
205
217
|
bne t4, FFI_TYPE_FLOAT, arg8_doublep
|
206
218
|
l.s $f19, 7*FFI_SIZEOF_ARG(t9)
|
207
219
|
b arg8_next
|
208
220
|
arg8_doublep:
|
209
221
|
l.d $f19, 7*FFI_SIZEOF_ARG(t9)
|
210
222
|
arg8_next:
|
223
|
+
#endif
|
211
224
|
|
212
|
-
callit:
|
225
|
+
callit:
|
213
226
|
# Load the function pointer
|
214
227
|
REG_L t9, 5*FFI_SIZEOF_ARG($fp)
|
215
228
|
|
229
|
+
# install the static chain(t7=$15)
|
230
|
+
REG_L t7, 6*FFI_SIZEOF_ARG($fp)
|
231
|
+
|
216
232
|
# If the return value pointer is NULL, assume no return value.
|
217
233
|
REG_L t5, 4*FFI_SIZEOF_ARG($fp)
|
218
234
|
beqz t5, noretval
|
@@ -220,15 +236,58 @@ callit:
|
|
220
236
|
# Shift the return type flag over
|
221
237
|
SRL t6, 8*FFI_FLAG_BITS
|
222
238
|
|
223
|
-
|
224
|
-
|
225
|
-
|
239
|
+
bne t6, FFI_TYPE_UINT64, retsint32
|
240
|
+
|
241
|
+
retuint64:
|
226
242
|
jal t9
|
227
243
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
228
|
-
|
244
|
+
sd v0, 0(t4)
|
245
|
+
b epilogue
|
246
|
+
|
247
|
+
retsint32:
|
248
|
+
bne t6, FFI_TYPE_SINT32, retuint16
|
249
|
+
jal t9
|
250
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
251
|
+
sll v0, v0, 0
|
252
|
+
sd v0, 0(t4)
|
253
|
+
b epilogue
|
254
|
+
|
255
|
+
retuint16:
|
256
|
+
bne t6, FFI_TYPE_UINT16, retsint16
|
257
|
+
jal t9
|
258
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
259
|
+
andi v0, v0, 0xffff
|
260
|
+
sd v0, 0(t4)
|
261
|
+
b epilogue
|
262
|
+
|
263
|
+
retsint16:
|
264
|
+
bne t6, FFI_TYPE_SINT16, retuint8
|
265
|
+
jal t9
|
266
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
267
|
+
dsll v0, v0, 48
|
268
|
+
dsra v0, v0, 48
|
269
|
+
sd v0, 0(t4)
|
270
|
+
b epilogue
|
271
|
+
|
272
|
+
retuint8:
|
273
|
+
bne t6, FFI_TYPE_UINT8, retsint8
|
274
|
+
jal t9
|
275
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
276
|
+
andi v0, v0, 0xff
|
277
|
+
sd v0, 0(t4)
|
278
|
+
b epilogue
|
279
|
+
|
280
|
+
retsint8:
|
281
|
+
bne t6, FFI_TYPE_SINT8, retfloat
|
282
|
+
jal t9
|
283
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
284
|
+
sd v0, 0(t4)
|
285
|
+
dsll v0, v0, 56
|
286
|
+
dsra v0, v0, 56
|
229
287
|
b epilogue
|
230
288
|
|
231
289
|
retfloat:
|
290
|
+
#ifndef __mips_soft_float
|
232
291
|
bne t6, FFI_TYPE_FLOAT, retdouble
|
233
292
|
jal t9
|
234
293
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
@@ -242,7 +301,7 @@ retdouble:
|
|
242
301
|
s.d $f0, 0(t4)
|
243
302
|
b epilogue
|
244
303
|
|
245
|
-
retstruct_d:
|
304
|
+
retstruct_d:
|
246
305
|
bne t6, FFI_TYPE_STRUCT_D, retstruct_f
|
247
306
|
jal t9
|
248
307
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
@@ -256,16 +315,37 @@ retstruct_f:
|
|
256
315
|
s.s $f0, 0(t4)
|
257
316
|
b epilogue
|
258
317
|
|
259
|
-
retstruct_d_d:
|
260
|
-
bne t6, FFI_TYPE_STRUCT_DD,
|
318
|
+
retstruct_d_d:
|
319
|
+
bne t6, FFI_TYPE_STRUCT_DD, retcomplex_d_d
|
261
320
|
jal t9
|
262
321
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
263
322
|
s.d $f0, 0(t4)
|
264
323
|
s.d $f2, 8(t4)
|
265
324
|
b epilogue
|
325
|
+
|
326
|
+
retcomplex_d_d:
|
327
|
+
bne t6, FFI_TYPE_COMPLEX_DD, retcomplex_ld_ld
|
328
|
+
jal t9
|
329
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
330
|
+
s.d $f0, 0(t4)
|
331
|
+
s.d $f2, 8(t4)
|
332
|
+
b epilogue
|
333
|
+
|
334
|
+
retcomplex_ld_ld:
|
335
|
+
bne t6, FFI_TYPE_COMPLEX_LDLD, retstruct_f_f
|
336
|
+
jal t9
|
337
|
+
b epilogue
|
266
338
|
|
267
|
-
retstruct_f_f:
|
268
|
-
bne t6, FFI_TYPE_STRUCT_FF,
|
339
|
+
retstruct_f_f:
|
340
|
+
bne t6, FFI_TYPE_STRUCT_FF, retcomplex_f_f
|
341
|
+
jal t9
|
342
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
343
|
+
s.s $f0, 0(t4)
|
344
|
+
s.s $f2, 4(t4)
|
345
|
+
b epilogue
|
346
|
+
|
347
|
+
retcomplex_f_f:
|
348
|
+
bne t6, FFI_TYPE_COMPLEX_FF, retstruct_d_f
|
269
349
|
jal t9
|
270
350
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
271
351
|
s.s $f0, 0(t4)
|
@@ -287,6 +367,7 @@ retstruct_f_d:
|
|
287
367
|
s.s $f0, 0(t4)
|
288
368
|
s.d $f2, 8(t4)
|
289
369
|
b epilogue
|
370
|
+
#endif
|
290
371
|
|
291
372
|
retstruct_d_soft:
|
292
373
|
bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft
|
@@ -307,7 +388,7 @@ retstruct_d_d_soft:
|
|
307
388
|
jal t9
|
308
389
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
309
390
|
sd v0, 0(t4)
|
310
|
-
sd
|
391
|
+
sd a0, 8(t4) # not typo, it is a0, I have no idea, gcc does do it
|
311
392
|
b epilogue
|
312
393
|
|
313
394
|
retstruct_f_f_soft:
|
@@ -331,7 +412,7 @@ retstruct_f_d_soft:
|
|
331
412
|
jal t9
|
332
413
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
333
414
|
sw v0, 0(t4)
|
334
|
-
sd
|
415
|
+
sd a0, 8(t4) # not typo, it is a0, I have no idea, gcc does do it
|
335
416
|
b epilogue
|
336
417
|
|
337
418
|
retstruct_small:
|
@@ -342,14 +423,37 @@ retstruct_small:
|
|
342
423
|
b epilogue
|
343
424
|
|
344
425
|
retstruct_small2:
|
345
|
-
bne t6, FFI_TYPE_STRUCT_SMALL2,
|
426
|
+
bne t6, FFI_TYPE_STRUCT_SMALL2, retlongdouble_soft
|
346
427
|
jal t9
|
347
428
|
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
348
429
|
REG_S v0, 0(t4)
|
349
430
|
REG_S v1, 8(t4)
|
350
431
|
b epilogue
|
351
432
|
|
352
|
-
|
433
|
+
retlongdouble_soft:
|
434
|
+
bne t6, FFI_TYPE_LONGDOUBLE, retcomplex_small
|
435
|
+
jal t9
|
436
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
437
|
+
REG_S v0, 0(t4)
|
438
|
+
REG_S a0, 8(t4) # not typo, it is a0, I have no idea, gcc does do it
|
439
|
+
b epilogue
|
440
|
+
|
441
|
+
retcomplex_small:
|
442
|
+
bne t6, FFI_TYPE_COMPLEX_SMALL, retcomplex_small2
|
443
|
+
jal t9
|
444
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
445
|
+
REG_S v0, 0(t4)
|
446
|
+
b epilogue
|
447
|
+
|
448
|
+
retcomplex_small2:
|
449
|
+
bne t6, FFI_TYPE_COMPLEX_SMALL2, retstruct
|
450
|
+
jal t9
|
451
|
+
REG_L t4, 4*FFI_SIZEOF_ARG($fp)
|
452
|
+
REG_S v0, 0(t4)
|
453
|
+
REG_S v1, 8(t4)
|
454
|
+
b epilogue
|
455
|
+
|
456
|
+
retstruct:
|
353
457
|
noretval:
|
354
458
|
jal t9
|
355
459
|
|
@@ -361,7 +465,7 @@ epilogue:
|
|
361
465
|
ADDU $sp, SIZEOF_FRAME # Fix stack pointer
|
362
466
|
j ra
|
363
467
|
|
364
|
-
.
|
468
|
+
.LFE0:
|
365
469
|
.end ffi_call_N32
|
366
470
|
|
367
471
|
/* ffi_closure_N32. Expects address of the passed-in ffi_closure in t0
|
@@ -395,7 +499,7 @@ epilogue:
|
|
395
499
|
*/
|
396
500
|
|
397
501
|
#define SIZEOF_FRAME2 (20 * FFI_SIZEOF_ARG)
|
398
|
-
|
502
|
+
|
399
503
|
#define A7_OFF2 (19 * FFI_SIZEOF_ARG)
|
400
504
|
#define A6_OFF2 (18 * FFI_SIZEOF_ARG)
|
401
505
|
#define A5_OFF2 (17 * FFI_SIZEOF_ARG)
|
@@ -420,6 +524,46 @@ epilogue:
|
|
420
524
|
#define RA_OFF2 (1 * FFI_SIZEOF_ARG)
|
421
525
|
#define GP_OFF2 (0 * FFI_SIZEOF_ARG)
|
422
526
|
|
527
|
+
.align 2
|
528
|
+
.globl ffi_go_closure_N32
|
529
|
+
.ent ffi_go_closure_N32
|
530
|
+
ffi_go_closure_N32:
|
531
|
+
.LFB1:
|
532
|
+
.frame $sp, SIZEOF_FRAME2, ra
|
533
|
+
.mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
|
534
|
+
.fmask 0x00000000,0
|
535
|
+
SUBU $sp, SIZEOF_FRAME2
|
536
|
+
.LCFI10:
|
537
|
+
.cpsetup t9, GP_OFF2, ffi_go_closure_N32
|
538
|
+
REG_S ra, RA_OFF2($sp) # Save return address
|
539
|
+
.LCFI11:
|
540
|
+
|
541
|
+
REG_S a0, A0_OFF2($sp)
|
542
|
+
REG_S a1, A1_OFF2($sp)
|
543
|
+
REG_S a2, A2_OFF2($sp)
|
544
|
+
REG_S a3, A3_OFF2($sp)
|
545
|
+
REG_S a4, A4_OFF2($sp)
|
546
|
+
REG_S a5, A5_OFF2($sp)
|
547
|
+
|
548
|
+
# Call ffi_closure_mips_inner_N32 to do the real work.
|
549
|
+
LA t9, ffi_closure_mips_inner_N32
|
550
|
+
#if _MIPS_SIM==_ABIN32
|
551
|
+
lw a0, 4($15) # cif
|
552
|
+
lw a1, 8($15) # fun
|
553
|
+
#else
|
554
|
+
REG_L a0, 8($15) # cif
|
555
|
+
REG_L a1, 16($15) # fun
|
556
|
+
#endif
|
557
|
+
move a2, t7 # userdata=closure
|
558
|
+
ADDU a3, $sp, V0_OFF2 # rvalue
|
559
|
+
ADDU a4, $sp, A0_OFF2 # ar
|
560
|
+
ADDU a5, $sp, F12_OFF2 # fpr
|
561
|
+
|
562
|
+
b $do_closure
|
563
|
+
|
564
|
+
.LFE1:
|
565
|
+
.end ffi_go_closure_N32
|
566
|
+
|
423
567
|
.align 2
|
424
568
|
.globl ffi_closure_N32
|
425
569
|
.ent ffi_closure_N32
|
@@ -429,21 +573,40 @@ ffi_closure_N32:
|
|
429
573
|
.mask 0x90000000,-(SIZEOF_FRAME2 - RA_OFF2)
|
430
574
|
.fmask 0x00000000,0
|
431
575
|
SUBU $sp, SIZEOF_FRAME2
|
432
|
-
.
|
576
|
+
.LCFI20:
|
433
577
|
.cpsetup t9, GP_OFF2, ffi_closure_N32
|
434
578
|
REG_S ra, RA_OFF2($sp) # Save return address
|
435
|
-
.
|
436
|
-
# Store all possible argument registers. If there are more than
|
437
|
-
# fit in registers, then they were stored on the stack.
|
579
|
+
.LCFI21:
|
438
580
|
REG_S a0, A0_OFF2($sp)
|
439
581
|
REG_S a1, A1_OFF2($sp)
|
440
582
|
REG_S a2, A2_OFF2($sp)
|
441
583
|
REG_S a3, A3_OFF2($sp)
|
442
584
|
REG_S a4, A4_OFF2($sp)
|
443
585
|
REG_S a5, A5_OFF2($sp)
|
586
|
+
|
587
|
+
# Call ffi_closure_mips_inner_N32 to do the real work.
|
588
|
+
LA t9, ffi_closure_mips_inner_N32
|
589
|
+
#if _MIPS_SIM==_ABIN32
|
590
|
+
lw a0, 20($12) # cif
|
591
|
+
lw a1, 24($12) # fun
|
592
|
+
lw a2, 28($12) # user_data
|
593
|
+
#else
|
594
|
+
REG_L a0, 56($12) # cif
|
595
|
+
REG_L a1, 64($12) # fun
|
596
|
+
REG_L a2, 72($12) # user_data
|
597
|
+
#endif
|
598
|
+
ADDU a3, $sp, V0_OFF2
|
599
|
+
# FIXME: a4 does work, while if ret is _Complex long double, it will overwrite Fn_OFF2
|
600
|
+
ADDU a4, $sp, A0_OFF2
|
601
|
+
ADDU a5, $sp, F12_OFF2
|
602
|
+
|
603
|
+
$do_closure:
|
604
|
+
# Store all possible argument registers. If there are more than
|
605
|
+
# fit in registers, then they were stored on the stack.
|
444
606
|
REG_S a6, A6_OFF2($sp)
|
445
607
|
REG_S a7, A7_OFF2($sp)
|
446
608
|
|
609
|
+
#ifndef __mips_soft_float
|
447
610
|
# Store all possible float/double registers.
|
448
611
|
s.d $f12, F12_OFF2($sp)
|
449
612
|
s.d $f13, F13_OFF2($sp)
|
@@ -453,26 +616,43 @@ ffi_closure_N32:
|
|
453
616
|
s.d $f17, F17_OFF2($sp)
|
454
617
|
s.d $f18, F18_OFF2($sp)
|
455
618
|
s.d $f19, F19_OFF2($sp)
|
619
|
+
#endif
|
456
620
|
|
457
|
-
# Call ffi_closure_mips_inner_N32 to do the real work.
|
458
|
-
LA t9, ffi_closure_mips_inner_N32
|
459
|
-
move a0, $12 # Pointer to the ffi_closure
|
460
|
-
ADDU a1, $sp, V0_OFF2
|
461
|
-
ADDU a2, $sp, A0_OFF2
|
462
|
-
ADDU a3, $sp, F12_OFF2
|
463
621
|
jalr t9
|
464
622
|
|
623
|
+
cls_retuint64:
|
465
624
|
# Return flags are in v0
|
466
|
-
bne v0,
|
625
|
+
bne v0, FFI_TYPE_UINT64, cls_retsint32
|
626
|
+
ld v0, V0_OFF2($sp)
|
627
|
+
b cls_epilogue
|
628
|
+
|
629
|
+
cls_retsint32:
|
630
|
+
bne v0, FFI_TYPE_SINT32, cls_retsint16
|
467
631
|
lw v0, V0_OFF2($sp)
|
468
632
|
b cls_epilogue
|
469
633
|
|
470
|
-
|
471
|
-
bne v0,
|
472
|
-
|
634
|
+
cls_retsint16:
|
635
|
+
bne v0, FFI_TYPE_SINT16, cls_retuint16
|
636
|
+
lh v0, V0_OFF2($sp)
|
637
|
+
b cls_epilogue
|
638
|
+
|
639
|
+
cls_retuint16:
|
640
|
+
bne v0, FFI_TYPE_UINT16, cls_retsint8
|
641
|
+
lhu v0, V0_OFF2($sp)
|
642
|
+
b cls_epilogue
|
643
|
+
|
644
|
+
cls_retsint8:
|
645
|
+
bne v0, FFI_TYPE_SINT8, cls_retuint8
|
646
|
+
lb v0, V0_OFF2($sp)
|
647
|
+
b cls_epilogue
|
648
|
+
|
649
|
+
cls_retuint8:
|
650
|
+
bne v0, FFI_TYPE_UINT8, cls_retfloat
|
651
|
+
lbu v0, V0_OFF2($sp)
|
473
652
|
b cls_epilogue
|
474
653
|
|
475
654
|
cls_retfloat:
|
655
|
+
#ifndef __mips_soft_float
|
476
656
|
bne v0, FFI_TYPE_FLOAT, cls_retdouble
|
477
657
|
l.s $f0, V0_OFF2($sp)
|
478
658
|
b cls_epilogue
|
@@ -493,17 +673,29 @@ cls_retstruct_f:
|
|
493
673
|
b cls_epilogue
|
494
674
|
|
495
675
|
cls_retstruct_d_d:
|
496
|
-
bne v0, FFI_TYPE_STRUCT_DD,
|
676
|
+
bne v0, FFI_TYPE_STRUCT_DD, cls_retcomplex_d_d
|
677
|
+
l.d $f0, V0_OFF2($sp)
|
678
|
+
l.d $f2, V1_OFF2($sp)
|
679
|
+
b cls_epilogue
|
680
|
+
|
681
|
+
cls_retcomplex_d_d:
|
682
|
+
bne v0, FFI_TYPE_COMPLEX_DD, cls_retcomplex_f_f
|
497
683
|
l.d $f0, V0_OFF2($sp)
|
498
684
|
l.d $f2, V1_OFF2($sp)
|
499
685
|
b cls_epilogue
|
500
686
|
|
501
|
-
cls_retstruct_f_f:
|
502
|
-
bne v0, FFI_TYPE_STRUCT_FF,
|
687
|
+
cls_retstruct_f_f:
|
688
|
+
bne v0, FFI_TYPE_STRUCT_FF, cls_retcomplex_f_f
|
503
689
|
l.s $f0, V0_OFF2($sp)
|
504
690
|
l.s $f2, V1_OFF2($sp)
|
505
691
|
b cls_epilogue
|
506
692
|
|
693
|
+
cls_retcomplex_f_f:
|
694
|
+
bne v0, FFI_TYPE_COMPLEX_FF, cls_retstruct_d_f
|
695
|
+
l.s $f0, V0_OFF2($sp)
|
696
|
+
l.s $f2, (V0_OFF2+4)($sp)
|
697
|
+
b cls_epilogue
|
698
|
+
|
507
699
|
cls_retstruct_d_f:
|
508
700
|
bne v0, FFI_TYPE_STRUCT_DF, cls_retstruct_f_d
|
509
701
|
l.d $f0, V0_OFF2($sp)
|
@@ -511,11 +703,31 @@ cls_retstruct_d_f:
|
|
511
703
|
b cls_epilogue
|
512
704
|
|
513
705
|
cls_retstruct_f_d:
|
514
|
-
bne v0, FFI_TYPE_STRUCT_FD,
|
706
|
+
bne v0, FFI_TYPE_STRUCT_FD, cls_retcomplex_ld_ld
|
515
707
|
l.s $f0, V0_OFF2($sp)
|
516
708
|
l.d $f2, V1_OFF2($sp)
|
517
709
|
b cls_epilogue
|
518
|
-
|
710
|
+
#else
|
711
|
+
cls_longdouble_soft:
|
712
|
+
bne v0, FFI_TYPE_LONGDOUBLE, cls_retcomplex_ld_ld
|
713
|
+
REG_L v0, V0_OFF2($sp)
|
714
|
+
REG_L a0, V1_OFF2($sp) # not typo, it is a0, I have no idea, gcc does do it
|
715
|
+
b cls_epilogue
|
716
|
+
#endif
|
717
|
+
|
718
|
+
cls_retcomplex_ld_ld:
|
719
|
+
bne v0, FFI_TYPE_COMPLEX_LDLD, cls_retstruct_small2
|
720
|
+
REG_L t8, A0_OFF2($sp)
|
721
|
+
REG_L t9, 16($sp)
|
722
|
+
REG_S t9, 0(t8)
|
723
|
+
REG_L t9, 24($sp)
|
724
|
+
REG_S t9, 8(t8)
|
725
|
+
REG_L t9, 32($sp)
|
726
|
+
REG_S t9, 16(t8)
|
727
|
+
REG_L t9, 40($sp)
|
728
|
+
REG_S t9, 24(t8)
|
729
|
+
b cls_epilogue
|
730
|
+
|
519
731
|
cls_retstruct_small2:
|
520
732
|
REG_L v0, V0_OFF2($sp)
|
521
733
|
REG_L v1, V1_OFF2($sp)
|
@@ -529,8 +741,8 @@ cls_epilogue:
|
|
529
741
|
.LFE2:
|
530
742
|
.end ffi_closure_N32
|
531
743
|
|
532
|
-
#ifdef
|
533
|
-
.section .eh_frame,
|
744
|
+
#ifdef __GNUC__
|
745
|
+
.section .eh_frame,EH_FRAME_FLAGS,@progbits
|
534
746
|
.Lframe1:
|
535
747
|
.4byte .LECIE1-.LSCIE1 # length
|
536
748
|
.LSCIE1:
|
@@ -546,46 +758,66 @@ cls_epilogue:
|
|
546
758
|
.align EH_FRAME_ALIGN
|
547
759
|
.LECIE1:
|
548
760
|
|
549
|
-
.
|
550
|
-
.4byte .
|
551
|
-
.
|
552
|
-
.4byte .
|
553
|
-
FDE_ADDR_BYTES .
|
554
|
-
FDE_ADDR_BYTES .
|
761
|
+
.LSFDE0:
|
762
|
+
.4byte .LEFDE0-.LASFDE0 # length.
|
763
|
+
.LASFDE0:
|
764
|
+
.4byte .LASFDE0-.Lframe1 # CIE_pointer.
|
765
|
+
FDE_ADDR_BYTES .LFB0 # initial_location.
|
766
|
+
FDE_ADDR_BYTES .LFE0-.LFB0 # address_range.
|
555
767
|
.byte 0x4 # DW_CFA_advance_loc4
|
556
|
-
.4byte .
|
768
|
+
.4byte .LCFI00-.LFB0 # to .LCFI00
|
557
769
|
.byte 0xe # DW_CFA_def_cfa_offset
|
558
770
|
.uleb128 SIZEOF_FRAME # adjust stack.by SIZEOF_FRAME
|
559
771
|
.byte 0x4 # DW_CFA_advance_loc4
|
560
|
-
.4byte .
|
772
|
+
.4byte .LCFI01-.LCFI00 # to .LCFI01
|
561
773
|
.byte 0x9e # DW_CFA_offset of $fp
|
562
774
|
.uleb128 2*FFI_SIZEOF_ARG/4 #
|
563
775
|
.byte 0x9f # DW_CFA_offset of ra
|
564
776
|
.uleb128 1*FFI_SIZEOF_ARG/4 #
|
565
777
|
.byte 0x4 # DW_CFA_advance_loc4
|
566
|
-
.4byte .
|
778
|
+
.4byte .LCFI02-.LCFI01 # to .LCFI02
|
567
779
|
.byte 0xd # DW_CFA_def_cfa_register
|
568
780
|
.uleb128 0x1e # in $fp
|
569
781
|
.align EH_FRAME_ALIGN
|
782
|
+
.LEFDE0:
|
783
|
+
|
784
|
+
.LSFDE1:
|
785
|
+
.4byte .LEFDE1-.LASFDE1 # length
|
786
|
+
.LASFDE1:
|
787
|
+
.4byte .LASFDE1-.Lframe1 # CIE_pointer.
|
788
|
+
FDE_ADDR_BYTES .LFB1 # initial_location.
|
789
|
+
FDE_ADDR_BYTES .LFE1-.LFB1 # address_range.
|
790
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
791
|
+
.4byte .LCFI10-.LFB1 # to .LCFI10
|
792
|
+
.byte 0xe # DW_CFA_def_cfa_offset
|
793
|
+
.uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
|
794
|
+
.byte 0x4 # DW_CFA_advance_loc4
|
795
|
+
.4byte .LCFI11-.LCFI10 # to .LCFI11
|
796
|
+
.byte 0x9c # DW_CFA_offset of $gp ($28)
|
797
|
+
.uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
|
798
|
+
.byte 0x9f # DW_CFA_offset of ra ($31)
|
799
|
+
.uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
|
800
|
+
.align EH_FRAME_ALIGN
|
570
801
|
.LEFDE1:
|
571
|
-
|
572
|
-
|
573
|
-
.
|
574
|
-
|
802
|
+
|
803
|
+
.LSFDE2:
|
804
|
+
.4byte .LEFDE2-.LASFDE2 # length
|
805
|
+
.LASFDE2:
|
806
|
+
.4byte .LASFDE2-.Lframe1 # CIE_pointer.
|
575
807
|
FDE_ADDR_BYTES .LFB2 # initial_location.
|
576
808
|
FDE_ADDR_BYTES .LFE2-.LFB2 # address_range.
|
577
809
|
.byte 0x4 # DW_CFA_advance_loc4
|
578
|
-
.4byte .
|
810
|
+
.4byte .LCFI20-.LFB2 # to .LCFI20
|
579
811
|
.byte 0xe # DW_CFA_def_cfa_offset
|
580
812
|
.uleb128 SIZEOF_FRAME2 # adjust stack.by SIZEOF_FRAME
|
581
813
|
.byte 0x4 # DW_CFA_advance_loc4
|
582
|
-
.4byte .
|
814
|
+
.4byte .LCFI21-.LCFI20 # to .LCFI21
|
583
815
|
.byte 0x9c # DW_CFA_offset of $gp ($28)
|
584
816
|
.uleb128 (SIZEOF_FRAME2 - GP_OFF2)/4
|
585
817
|
.byte 0x9f # DW_CFA_offset of ra ($31)
|
586
818
|
.uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4
|
587
819
|
.align EH_FRAME_ALIGN
|
588
|
-
.
|
589
|
-
#endif /*
|
820
|
+
.LEFDE2:
|
821
|
+
#endif /* __GNUC__ */
|
590
822
|
|
591
823
|
#endif
|