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
@@ -0,0 +1,371 @@
|
|
1
|
+
/* -----------------------------------------------------------------------
|
2
|
+
sysv.S
|
3
|
+
|
4
|
+
CSKY Foreign Function Interface
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
7
|
+
a copy of this software and associated documentation files (the
|
8
|
+
``Software''), to deal in the Software without restriction, including
|
9
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
10
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
11
|
+
permit persons to whom the Software is furnished to do so, subject to
|
12
|
+
the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be included
|
15
|
+
in all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
24
|
+
DEALINGS IN THE SOFTWARE.
|
25
|
+
----------------------------------------------------------------------- */
|
26
|
+
|
27
|
+
#define LIBFFI_ASM
|
28
|
+
#include <fficonfig.h>
|
29
|
+
#include <ffi.h>
|
30
|
+
|
31
|
+
.macro CSKY_FUNC_START name
|
32
|
+
.text
|
33
|
+
.align 2
|
34
|
+
.globl \name
|
35
|
+
.type \name, @function
|
36
|
+
\name:
|
37
|
+
.endm
|
38
|
+
|
39
|
+
#ifdef __CSKYABIV2__
|
40
|
+
|
41
|
+
/*
|
42
|
+
* a0: fn
|
43
|
+
* a1: &ecif
|
44
|
+
* a2: cif->bytes
|
45
|
+
* a3: fig->flags
|
46
|
+
* sp+0: ecif.rvalue
|
47
|
+
*/
|
48
|
+
CSKY_FUNC_START ffi_call_SYSV
|
49
|
+
/* Save registers */
|
50
|
+
.cfi_startproc
|
51
|
+
subi sp, 28
|
52
|
+
.cfi_def_cfa_offset 28
|
53
|
+
stw a0, (sp, 0x0)
|
54
|
+
.cfi_offset 0, -28
|
55
|
+
stw a1, (sp, 0x4)
|
56
|
+
.cfi_offset 1, -24
|
57
|
+
stw a2, (sp, 0x8)
|
58
|
+
.cfi_offset 2, -20
|
59
|
+
stw a3, (sp, 0xC)
|
60
|
+
.cfi_offset 3, -16
|
61
|
+
stw l0, (sp, 0x10)
|
62
|
+
.cfi_offset 4, -12
|
63
|
+
stw l1, (sp, 0x14)
|
64
|
+
.cfi_offset 5, -8
|
65
|
+
stw lr, (sp, 0x18)
|
66
|
+
.cfi_offset 15, -4
|
67
|
+
|
68
|
+
mov l0, sp
|
69
|
+
.cfi_def_cfa_register 4
|
70
|
+
|
71
|
+
/* Make room for all of the new args. */
|
72
|
+
subu sp, sp, a2
|
73
|
+
|
74
|
+
/* Place all of the ffi_prep_args in position */
|
75
|
+
mov a0, sp
|
76
|
+
/* a1 already set */
|
77
|
+
|
78
|
+
/* Call ffi_prep_args(stack, &ecif) */
|
79
|
+
jsri ffi_prep_args
|
80
|
+
|
81
|
+
/* move first 4 parameters in registers */
|
82
|
+
ldw a0, (sp, 0x0)
|
83
|
+
ldw a1, (sp, 0x4)
|
84
|
+
ldw a2, (sp, 0x8)
|
85
|
+
ldw a3, (sp, 0xC)
|
86
|
+
|
87
|
+
/* and adjust stack */
|
88
|
+
subu lr, l0, sp /* cif->bytes == l0 - sp */
|
89
|
+
cmphsi lr, 16
|
90
|
+
movi l1, 16
|
91
|
+
movt lr, l1
|
92
|
+
addu sp, sp, lr
|
93
|
+
|
94
|
+
ldw l1, (l0, 0) /* load fn() in advance */
|
95
|
+
|
96
|
+
/* call (fn) (...) */
|
97
|
+
jsr l1
|
98
|
+
|
99
|
+
/* Remove the space we pushed for the args */
|
100
|
+
mov sp, l0
|
101
|
+
|
102
|
+
/* Load r2 with the pointer to storage for the return value */
|
103
|
+
ldw a2, (sp, 0x1C)
|
104
|
+
|
105
|
+
/* Load r3 with the return type code */
|
106
|
+
ldw a3, (sp, 0xC)
|
107
|
+
|
108
|
+
/* If the return value pointer is NULL, assume no return value. */
|
109
|
+
cmpnei a2, 0
|
110
|
+
bf .Lepilogue
|
111
|
+
|
112
|
+
cmpnei a3, FFI_TYPE_STRUCT
|
113
|
+
bf .Lepilogue
|
114
|
+
|
115
|
+
/* return INT64 */
|
116
|
+
cmpnei a3, FFI_TYPE_SINT64
|
117
|
+
bt .Lretint
|
118
|
+
/* stw a0, (a2, 0x0) at .Lretint */
|
119
|
+
stw a1, (a2, 0x4)
|
120
|
+
|
121
|
+
.Lretint:
|
122
|
+
/* return INT */
|
123
|
+
stw a0, (a2, 0x0)
|
124
|
+
|
125
|
+
.Lepilogue:
|
126
|
+
ldw a0, (sp, 0x0)
|
127
|
+
ldw a1, (sp, 0x4)
|
128
|
+
ldw a2, (sp, 0x8)
|
129
|
+
ldw a3, (sp, 0xC)
|
130
|
+
ldw l0, (sp, 0x10)
|
131
|
+
ldw l1, (sp, 0x14)
|
132
|
+
ldw lr, (sp, 0x18)
|
133
|
+
addi sp, sp, 28
|
134
|
+
rts
|
135
|
+
.cfi_endproc
|
136
|
+
.size ffi_call_SYSV, .-ffi_call_SYSV
|
137
|
+
|
138
|
+
|
139
|
+
/*
|
140
|
+
* unsigned int FFI_HIDDEN
|
141
|
+
* ffi_closure_SYSV_inner (closure, respp, args)
|
142
|
+
* ffi_closure *closure;
|
143
|
+
* void **respp;
|
144
|
+
* void *args;
|
145
|
+
*/
|
146
|
+
CSKY_FUNC_START ffi_closure_SYSV
|
147
|
+
.cfi_startproc
|
148
|
+
mov a2, sp
|
149
|
+
addi a1, sp, 16
|
150
|
+
subi sp, sp, 24
|
151
|
+
.cfi_def_cfa_offset 40
|
152
|
+
stw a1, (sp, 0x10)
|
153
|
+
.cfi_offset 1, -24
|
154
|
+
stw lr, (sp, 0x14)
|
155
|
+
.cfi_offset 15, -20
|
156
|
+
stw sp, (sp, 0x8)
|
157
|
+
addi a1, sp, 8
|
158
|
+
jsri ffi_closure_SYSV_inner
|
159
|
+
ldw a0, (sp, 0x0)
|
160
|
+
/*
|
161
|
+
* if FFI_TYPE_SINT64, need a1.
|
162
|
+
* if FFI_TYPE_INT, ignore a1.
|
163
|
+
*/
|
164
|
+
ldw a1, (sp, 0x4)
|
165
|
+
|
166
|
+
ldw lr, (sp, 0x14)
|
167
|
+
addi sp, sp, 40
|
168
|
+
rts
|
169
|
+
.cfi_endproc
|
170
|
+
.size ffi_closure_SYSV, .-ffi_closure_SYSV
|
171
|
+
|
172
|
+
CSKY_FUNC_START ffi_csky_trampoline
|
173
|
+
subi sp, sp, 16
|
174
|
+
stw a0, (sp, 0x0)
|
175
|
+
stw a1, (sp, 0x4)
|
176
|
+
stw a2, (sp, 0x8)
|
177
|
+
stw a3, (sp, 0xC)
|
178
|
+
lrw a0, [.Lctx]
|
179
|
+
lrw a1, [.Lfun]
|
180
|
+
jmp a1
|
181
|
+
.Lctx:
|
182
|
+
mov a0, a0
|
183
|
+
mov a0, a0
|
184
|
+
.Lfun:
|
185
|
+
|
186
|
+
.size ffi_csky_trampoline, .-ffi_csky_trampoline
|
187
|
+
|
188
|
+
CSKY_FUNC_START ffi_csky_cacheflush
|
189
|
+
mov t0, r7
|
190
|
+
movi r7, 123
|
191
|
+
trap 0
|
192
|
+
mov r7, t0
|
193
|
+
rts
|
194
|
+
|
195
|
+
.size ffi_csky_cacheflush, .-ffi_csky_cacheflush
|
196
|
+
|
197
|
+
#else /* !__CSKYABIV2__ */
|
198
|
+
|
199
|
+
/*
|
200
|
+
* a0: fn
|
201
|
+
* a1: &ecif
|
202
|
+
* a2: cif->bytes
|
203
|
+
* a3: fig->flags
|
204
|
+
* a4: ecif.rvalue
|
205
|
+
*/
|
206
|
+
CSKY_FUNC_START ffi_call_SYSV
|
207
|
+
/* Save registers */
|
208
|
+
.cfi_startproc
|
209
|
+
subi sp, 32
|
210
|
+
subi sp, 8
|
211
|
+
.cfi_def_cfa_offset 40
|
212
|
+
stw a0, (sp, 0x0)
|
213
|
+
.cfi_offset 2, -40
|
214
|
+
stw a1, (sp, 0x4)
|
215
|
+
.cfi_offset 3, -36
|
216
|
+
stw a2, (sp, 0x8)
|
217
|
+
.cfi_offset 4, -32
|
218
|
+
stw a3, (sp, 0xC)
|
219
|
+
.cfi_offset 5, -28
|
220
|
+
stw a4, (sp, 0x10)
|
221
|
+
.cfi_offset 6, -24
|
222
|
+
stw a5, (sp, 0x14)
|
223
|
+
.cfi_offset 7, -20
|
224
|
+
stw l0, (sp, 0x18)
|
225
|
+
.cfi_offset 8, -16
|
226
|
+
stw l1, (sp, 0x1C)
|
227
|
+
.cfi_offset 9, -12
|
228
|
+
stw lr, (sp, 0x20)
|
229
|
+
.cfi_offset 15, -8
|
230
|
+
|
231
|
+
mov l0, sp
|
232
|
+
.cfi_def_cfa_register 8
|
233
|
+
|
234
|
+
/* Make room for all of the new args. */
|
235
|
+
subu sp, sp, a2
|
236
|
+
|
237
|
+
/* Place all of the ffi_prep_args in position */
|
238
|
+
mov a0, sp
|
239
|
+
/* a1 already set */
|
240
|
+
|
241
|
+
/* Call ffi_prep_args(stack, &ecif) */
|
242
|
+
jsri ffi_prep_args
|
243
|
+
|
244
|
+
/* move first 4 parameters in registers */
|
245
|
+
ldw a0, (sp, 0x0)
|
246
|
+
ldw a1, (sp, 0x4)
|
247
|
+
ldw a2, (sp, 0x8)
|
248
|
+
ldw a3, (sp, 0xC)
|
249
|
+
ldw a4, (sp, 0x10)
|
250
|
+
ldw a5, (sp, 0x14)
|
251
|
+
|
252
|
+
/* and adjust stack */
|
253
|
+
mov lr, l0
|
254
|
+
subu lr, sp /* cif->bytes == l0 - sp */
|
255
|
+
movi l1, 24
|
256
|
+
cmphs lr, l1
|
257
|
+
movt lr, l1
|
258
|
+
addu sp, sp, lr
|
259
|
+
|
260
|
+
ldw l1, (l0, 0) /* load fn() in advance */
|
261
|
+
|
262
|
+
/* call (fn) (...) */
|
263
|
+
jsr l1
|
264
|
+
|
265
|
+
/* Remove the space we pushed for the args */
|
266
|
+
mov sp, l0
|
267
|
+
|
268
|
+
/* Load r2 with the pointer to storage for the return value */
|
269
|
+
ldw a2, (sp, 0x10)
|
270
|
+
|
271
|
+
/* Load r3 with the return type code */
|
272
|
+
ldw a3, (sp, 0xC)
|
273
|
+
|
274
|
+
/* If the return value pointer is NULL, assume no return value. */
|
275
|
+
cmpnei a2, 0
|
276
|
+
bf .Lepilogue
|
277
|
+
|
278
|
+
cmpnei a3, FFI_TYPE_STRUCT
|
279
|
+
bf .Lepilogue
|
280
|
+
|
281
|
+
/* return INT64 */
|
282
|
+
cmpnei a3, FFI_TYPE_SINT64
|
283
|
+
bt .Lretint
|
284
|
+
/* stw a0, (a2, 0x0) at .Lretint */
|
285
|
+
stw a1, (a2, 0x4)
|
286
|
+
|
287
|
+
.Lretint:
|
288
|
+
/* return INT */
|
289
|
+
stw a0, (a2, 0x0)
|
290
|
+
|
291
|
+
.Lepilogue:
|
292
|
+
ldw a0, (sp, 0x0)
|
293
|
+
ldw a1, (sp, 0x4)
|
294
|
+
ldw a2, (sp, 0x8)
|
295
|
+
ldw a3, (sp, 0xC)
|
296
|
+
ldw a4, (sp, 0x10)
|
297
|
+
ldw a5, (sp, 0x14)
|
298
|
+
ldw l0, (sp, 0x18)
|
299
|
+
ldw l1, (sp, 0x1C)
|
300
|
+
ldw lr, (sp, 0x20)
|
301
|
+
addi sp, sp, 32
|
302
|
+
addi sp, sp, 8
|
303
|
+
rts
|
304
|
+
.cfi_endproc
|
305
|
+
|
306
|
+
.size ffi_call_SYSV, .-ffi_call_SYSV
|
307
|
+
|
308
|
+
|
309
|
+
/*
|
310
|
+
* unsigned int FFI_HIDDEN
|
311
|
+
* ffi_closure_SYSV_inner (closure, respp, args)
|
312
|
+
* ffi_closure *closure;
|
313
|
+
* void **respp;
|
314
|
+
* void *args;
|
315
|
+
*/
|
316
|
+
CSKY_FUNC_START ffi_closure_SYSV
|
317
|
+
.cfi_startproc
|
318
|
+
mov a2, sp
|
319
|
+
mov a1, sp
|
320
|
+
addi a1, 24
|
321
|
+
subi sp, sp, 24
|
322
|
+
.cfi_def_cfa_offset 48
|
323
|
+
stw a1, (sp, 0x10)
|
324
|
+
.cfi_offset 3, -32
|
325
|
+
stw lr, (sp, 0x14)
|
326
|
+
.cfi_offset 15, -28
|
327
|
+
stw sp, (sp, 0x8)
|
328
|
+
mov a1, sp
|
329
|
+
addi a1, 8
|
330
|
+
jsri ffi_closure_SYSV_inner
|
331
|
+
ldw a0, (sp, 0x0)
|
332
|
+
/*
|
333
|
+
* if FFI_TYPE_SINT64, need a1.
|
334
|
+
* if FFI_TYPE_INT, ignore a1.
|
335
|
+
*/
|
336
|
+
ldw a1, (sp, 0x4)
|
337
|
+
|
338
|
+
ldw lr, (sp, 0x14)
|
339
|
+
addi sp, sp, 24
|
340
|
+
addi sp, sp, 24
|
341
|
+
rts
|
342
|
+
.cfi_endproc
|
343
|
+
|
344
|
+
.size ffi_closure_SYSV, .-ffi_closure_SYSV
|
345
|
+
|
346
|
+
CSKY_FUNC_START ffi_csky_trampoline
|
347
|
+
subi sp, 24
|
348
|
+
stw a0, (sp, 0x0)
|
349
|
+
stw a1, (sp, 0x4)
|
350
|
+
stw a2, (sp, 0x8)
|
351
|
+
stw a3, (sp, 0xC)
|
352
|
+
stw a4, (sp, 0x10)
|
353
|
+
stw a5, (sp, 0x14)
|
354
|
+
lrw a0, [.Lctx]
|
355
|
+
lrw a1, [.Lfun]
|
356
|
+
jmp a1
|
357
|
+
.Lctx:
|
358
|
+
mov a0, a0
|
359
|
+
mov a0, a0
|
360
|
+
.Lfun:
|
361
|
+
|
362
|
+
.size ffi_csky_trampoline, .-ffi_csky_trampoline
|
363
|
+
|
364
|
+
CSKY_FUNC_START ffi_csky_cacheflush
|
365
|
+
lrw r1, 123
|
366
|
+
trap 0
|
367
|
+
rts
|
368
|
+
|
369
|
+
.size ffi_csky_cacheflush, .-ffi_csky_cacheflush
|
370
|
+
|
371
|
+
#endif /* __CSKYABIV2__ */
|
@@ -38,7 +38,7 @@ void ffi_stop_here(void)
|
|
38
38
|
|
39
39
|
/* This function should only be called via the FFI_ASSERT() macro */
|
40
40
|
|
41
|
-
void ffi_assert(char *expr, char *file, int line)
|
41
|
+
NORETURN void ffi_assert(const char *expr, const char *file, int line)
|
42
42
|
{
|
43
43
|
fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line);
|
44
44
|
ffi_stop_here();
|
@@ -47,13 +47,18 @@ void ffi_assert(char *expr, char *file, int line)
|
|
47
47
|
|
48
48
|
/* Perform a sanity check on an ffi_type structure */
|
49
49
|
|
50
|
-
void ffi_type_test(ffi_type *a, char *file, int line)
|
50
|
+
void ffi_type_test(ffi_type *a, const char *file, int line)
|
51
51
|
{
|
52
52
|
FFI_ASSERT_AT(a != NULL, file, line);
|
53
53
|
|
54
54
|
FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line);
|
55
55
|
FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line);
|
56
56
|
FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line);
|
57
|
-
FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT
|
57
|
+
FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX)
|
58
|
+
|| a->elements != NULL, file, line);
|
59
|
+
FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX
|
60
|
+
|| (a->elements != NULL
|
61
|
+
&& a->elements[0] != NULL && a->elements[1] == NULL),
|
62
|
+
file, line);
|
58
63
|
|
59
64
|
}
|
@@ -438,6 +438,11 @@ DEFAULT_MMAP_THRESHOLD default: 256K
|
|
438
438
|
|
439
439
|
*/
|
440
440
|
|
441
|
+
#if defined __linux__ && !defined _GNU_SOURCE
|
442
|
+
/* mremap() on Linux requires this via sys/mman.h */
|
443
|
+
#define _GNU_SOURCE 1
|
444
|
+
#endif
|
445
|
+
|
441
446
|
#ifndef WIN32
|
442
447
|
#ifdef _WIN32
|
443
448
|
#define WIN32 1
|
@@ -459,6 +464,14 @@ DEFAULT_MMAP_THRESHOLD default: 256K
|
|
459
464
|
#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */
|
460
465
|
#endif /* WIN32 */
|
461
466
|
|
467
|
+
#ifdef __OS2__
|
468
|
+
#define INCL_DOS
|
469
|
+
#include <os2.h>
|
470
|
+
#define HAVE_MMAP 1
|
471
|
+
#define HAVE_MORECORE 0
|
472
|
+
#define LACKS_SYS_MMAN_H
|
473
|
+
#endif /* __OS2__ */
|
474
|
+
|
462
475
|
#if defined(DARWIN) || defined(_DARWIN)
|
463
476
|
/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */
|
464
477
|
#ifndef HAVE_MORECORE
|
@@ -579,6 +592,11 @@ DEFAULT_MMAP_THRESHOLD default: 256K
|
|
579
592
|
malloc does support the following options.
|
580
593
|
*/
|
581
594
|
|
595
|
+
/* The system's malloc.h may have conflicting defines. */
|
596
|
+
#undef M_TRIM_THRESHOLD
|
597
|
+
#undef M_GRANULARITY
|
598
|
+
#undef M_MMAP_THRESHOLD
|
599
|
+
|
582
600
|
#define M_TRIM_THRESHOLD (-1)
|
583
601
|
#define M_GRANULARITY (-2)
|
584
602
|
#define M_MMAP_THRESHOLD (-3)
|
@@ -614,6 +632,9 @@ DEFAULT_MMAP_THRESHOLD default: 256K
|
|
614
632
|
#include "/usr/include/malloc.h"
|
615
633
|
#else /* HAVE_USR_INCLUDE_MALLOC_H */
|
616
634
|
|
635
|
+
/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */
|
636
|
+
#define _STRUCT_MALLINFO
|
637
|
+
|
617
638
|
struct mallinfo {
|
618
639
|
MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */
|
619
640
|
MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */
|
@@ -1244,7 +1265,7 @@ extern void* sbrk(ptrdiff_t);
|
|
1244
1265
|
#define SIZE_T_BITSIZE (sizeof(size_t) << 3)
|
1245
1266
|
|
1246
1267
|
/* Some constants coerced to size_t */
|
1247
|
-
/* Annoying but necessary to avoid errors on some
|
1268
|
+
/* Annoying but necessary to avoid errors on some platforms */
|
1248
1269
|
#define SIZE_T_ZERO ((size_t)0)
|
1249
1270
|
#define SIZE_T_ONE ((size_t)1)
|
1250
1271
|
#define SIZE_T_TWO ((size_t)2)
|
@@ -1288,7 +1309,7 @@ extern void* sbrk(ptrdiff_t);
|
|
1288
1309
|
#define IS_MMAPPED_BIT (SIZE_T_ONE)
|
1289
1310
|
#define USE_MMAP_BIT (SIZE_T_ONE)
|
1290
1311
|
|
1291
|
-
#
|
1312
|
+
#if !defined(WIN32) && !defined (__OS2__)
|
1292
1313
|
#define CALL_MUNMAP(a, s) munmap((a), (s))
|
1293
1314
|
#define MMAP_PROT (PROT_READ|PROT_WRITE)
|
1294
1315
|
#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
|
@@ -1311,6 +1332,42 @@ static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
|
|
1311
1332
|
#endif /* MAP_ANONYMOUS */
|
1312
1333
|
|
1313
1334
|
#define DIRECT_MMAP(s) CALL_MMAP(s)
|
1335
|
+
|
1336
|
+
#elif defined(__OS2__)
|
1337
|
+
|
1338
|
+
/* OS/2 MMAP via DosAllocMem */
|
1339
|
+
static void* os2mmap(size_t size) {
|
1340
|
+
void* ptr;
|
1341
|
+
if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) &&
|
1342
|
+
DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE))
|
1343
|
+
return MFAIL;
|
1344
|
+
return ptr;
|
1345
|
+
}
|
1346
|
+
|
1347
|
+
#define os2direct_mmap(n) os2mmap(n)
|
1348
|
+
|
1349
|
+
/* This function supports releasing coalesed segments */
|
1350
|
+
static int os2munmap(void* ptr, size_t size) {
|
1351
|
+
while (size) {
|
1352
|
+
ULONG ulSize = size;
|
1353
|
+
ULONG ulFlags = 0;
|
1354
|
+
if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0)
|
1355
|
+
return -1;
|
1356
|
+
if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 ||
|
1357
|
+
ulSize > size)
|
1358
|
+
return -1;
|
1359
|
+
if (DosFreeMem(ptr) != 0)
|
1360
|
+
return -1;
|
1361
|
+
ptr = ( void * ) ( ( char * ) ptr + ulSize );
|
1362
|
+
size -= ulSize;
|
1363
|
+
}
|
1364
|
+
return 0;
|
1365
|
+
}
|
1366
|
+
|
1367
|
+
#define CALL_MMAP(s) os2mmap(s)
|
1368
|
+
#define CALL_MUNMAP(a, s) os2munmap((a), (s))
|
1369
|
+
#define DIRECT_MMAP(s) os2direct_mmap(s)
|
1370
|
+
|
1314
1371
|
#else /* WIN32 */
|
1315
1372
|
|
1316
1373
|
/* Win32 MMAP via VirtualAlloc */
|
@@ -1362,7 +1419,7 @@ static int win32munmap(void* ptr, size_t size) {
|
|
1362
1419
|
#define CALL_MORECORE(S) MFAIL
|
1363
1420
|
#endif /* HAVE_MORECORE */
|
1364
1421
|
|
1365
|
-
/* mstate bit set if
|
1422
|
+
/* mstate bit set if contiguous morecore disabled or failed */
|
1366
1423
|
#define USE_NONCONTIGUOUS_BIT (4U)
|
1367
1424
|
|
1368
1425
|
/* segment bit set in create_mspace_with_base */
|
@@ -1387,7 +1444,7 @@ static int win32munmap(void* ptr, size_t size) {
|
|
1387
1444
|
unique mparams values are initialized only once.
|
1388
1445
|
*/
|
1389
1446
|
|
1390
|
-
#
|
1447
|
+
#if !defined(WIN32) && !defined(__OS2__)
|
1391
1448
|
/* By default use posix locks */
|
1392
1449
|
#include <pthread.h>
|
1393
1450
|
#define MLOCK_T pthread_mutex_t
|
@@ -1401,6 +1458,16 @@ static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
1401
1458
|
|
1402
1459
|
static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER;
|
1403
1460
|
|
1461
|
+
#elif defined(__OS2__)
|
1462
|
+
#define MLOCK_T HMTX
|
1463
|
+
#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE)
|
1464
|
+
#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT)
|
1465
|
+
#define RELEASE_LOCK(l) DosReleaseMutexSem(*l)
|
1466
|
+
#if HAVE_MORECORE
|
1467
|
+
static MLOCK_T morecore_mutex;
|
1468
|
+
#endif /* HAVE_MORECORE */
|
1469
|
+
static MLOCK_T magic_init_mutex;
|
1470
|
+
|
1404
1471
|
#else /* WIN32 */
|
1405
1472
|
/*
|
1406
1473
|
Because lock-protected regions have bounded times, and there
|
@@ -1604,7 +1671,7 @@ struct malloc_chunk {
|
|
1604
1671
|
typedef struct malloc_chunk mchunk;
|
1605
1672
|
typedef struct malloc_chunk* mchunkptr;
|
1606
1673
|
typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
|
1607
|
-
typedef
|
1674
|
+
typedef size_t bindex_t; /* Described below */
|
1608
1675
|
typedef unsigned int binmap_t; /* Described below */
|
1609
1676
|
typedef unsigned int flag_t; /* The type of various bit flag sets */
|
1610
1677
|
|
@@ -2234,7 +2301,7 @@ static size_t traverse_and_check(mstate m);
|
|
2234
2301
|
#define treebin_at(M,i) (&((M)->treebins[i]))
|
2235
2302
|
|
2236
2303
|
/* assign tree index for size S to variable I */
|
2237
|
-
#if defined(__GNUC__) && defined(
|
2304
|
+
#if defined(__GNUC__) && defined(__i386__)
|
2238
2305
|
#define compute_tree_index(S, I)\
|
2239
2306
|
{\
|
2240
2307
|
size_t X = S >> TREEBIN_SHIFT;\
|
@@ -2299,7 +2366,7 @@ static size_t traverse_and_check(mstate m);
|
|
2299
2366
|
|
2300
2367
|
/* index corresponding to given bit */
|
2301
2368
|
|
2302
|
-
#if defined(__GNUC__) && defined(
|
2369
|
+
#if defined(__GNUC__) && defined(__i386__)
|
2303
2370
|
#define compute_bit2idx(X, I)\
|
2304
2371
|
{\
|
2305
2372
|
unsigned int J;\
|
@@ -2309,7 +2376,7 @@ static size_t traverse_and_check(mstate m);
|
|
2309
2376
|
|
2310
2377
|
#else /* GNUC */
|
2311
2378
|
#if USE_BUILTIN_FFS
|
2312
|
-
#define compute_bit2idx(X, I) I =
|
2379
|
+
#define compute_bit2idx(X, I) I = __builtin_ffs(X)-1
|
2313
2380
|
|
2314
2381
|
#else /* USE_BUILTIN_FFS */
|
2315
2382
|
#define compute_bit2idx(X, I)\
|
@@ -2492,10 +2559,15 @@ static int init_mparams(void) {
|
|
2492
2559
|
}
|
2493
2560
|
RELEASE_MAGIC_INIT_LOCK();
|
2494
2561
|
|
2495
|
-
#
|
2562
|
+
#if !defined(WIN32) && !defined(__OS2__)
|
2496
2563
|
mparams.page_size = malloc_getpagesize;
|
2497
2564
|
mparams.granularity = ((DEFAULT_GRANULARITY != 0)?
|
2498
2565
|
DEFAULT_GRANULARITY : mparams.page_size);
|
2566
|
+
#elif defined (__OS2__)
|
2567
|
+
/* if low-memory is used, os2munmap() would break
|
2568
|
+
if it were anything other than 64k */
|
2569
|
+
mparams.page_size = 4096u;
|
2570
|
+
mparams.granularity = 65536u;
|
2499
2571
|
#else /* WIN32 */
|
2500
2572
|
{
|
2501
2573
|
SYSTEM_INFO system_info;
|
@@ -3028,8 +3100,8 @@ static void internal_malloc_stats(mstate m) {
|
|
3028
3100
|
and choose its bk node as its replacement.
|
3029
3101
|
2. If x was the last node of its size, but not a leaf node, it must
|
3030
3102
|
be replaced with a leaf node (not merely one with an open left or
|
3031
|
-
right), to make sure that lefts and rights of
|
3032
|
-
correspond properly to bit masks. We use the rightmost
|
3103
|
+
right), to make sure that lefts and rights of descendants
|
3104
|
+
correspond properly to bit masks. We use the rightmost descendant
|
3033
3105
|
of x. We could use any other leaf, but this is easy to locate and
|
3034
3106
|
tends to counteract removal of leftmosts elsewhere, and so keeps
|
3035
3107
|
paths shorter than minimally guaranteed. This doesn't loop much
|
@@ -3326,7 +3398,7 @@ static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
|
|
3326
3398
|
*ss = m->seg; /* Push current record */
|
3327
3399
|
m->seg.base = tbase;
|
3328
3400
|
m->seg.size = tsize;
|
3329
|
-
set_segment_flags(&m->seg, mmapped);
|
3401
|
+
(void)set_segment_flags(&m->seg, mmapped);
|
3330
3402
|
m->seg.next = ss;
|
3331
3403
|
|
3332
3404
|
/* Insert trailing fenceposts */
|
@@ -3486,7 +3558,7 @@ static void* sys_alloc(mstate m, size_t nb) {
|
|
3486
3558
|
if (!is_initialized(m)) { /* first-time initialization */
|
3487
3559
|
m->seg.base = m->least_addr = tbase;
|
3488
3560
|
m->seg.size = tsize;
|
3489
|
-
set_segment_flags(&m->seg, mmap_flag);
|
3561
|
+
(void)set_segment_flags(&m->seg, mmap_flag);
|
3490
3562
|
m->magic = mparams.magic;
|
3491
3563
|
init_bins(m);
|
3492
3564
|
if (is_global(m))
|
@@ -4192,7 +4264,7 @@ void* dlmalloc(size_t bytes) {
|
|
4192
4264
|
|
4193
4265
|
void dlfree(void* mem) {
|
4194
4266
|
/*
|
4195
|
-
Consolidate freed chunks with
|
4267
|
+
Consolidate freed chunks with preceding or succeeding bordering
|
4196
4268
|
free chunks, if they exist, and then place in a bin. Intermixed
|
4197
4269
|
with special cases for top, dv, mmapped chunks, and usage errors.
|
4198
4270
|
*/
|
@@ -4380,7 +4452,7 @@ struct mallinfo dlmallinfo(void) {
|
|
4380
4452
|
}
|
4381
4453
|
#endif /* NO_MALLINFO */
|
4382
4454
|
|
4383
|
-
void dlmalloc_stats() {
|
4455
|
+
void dlmalloc_stats(void) {
|
4384
4456
|
internal_malloc_stats(gm);
|
4385
4457
|
}
|
4386
4458
|
|
@@ -5029,10 +5101,10 @@ History:
|
|
5029
5101
|
Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
|
5030
5102
|
* Use last_remainder in more cases.
|
5031
5103
|
* Pack bins using idea from colin@nyx10.cs.du.edu
|
5032
|
-
* Use ordered bins instead of best-fit
|
5104
|
+
* Use ordered bins instead of best-fit threshold
|
5033
5105
|
* Eliminate block-local decls to simplify tracing and debugging.
|
5034
5106
|
* Support another case of realloc via move into top
|
5035
|
-
* Fix error
|
5107
|
+
* Fix error occurring when initial sbrk_base not word-aligned.
|
5036
5108
|
* Rely on page size for units instead of SBRK_UNIT to
|
5037
5109
|
avoid surprises about sbrk alignment conventions.
|
5038
5110
|
* Add mallinfo, mallopt. Thanks to Raymond Nijssen
|
@@ -107,7 +107,7 @@ void *ffi_prep_args(char *stack, extended_cif *ecif)
|
|
107
107
|
count += z;
|
108
108
|
}
|
109
109
|
|
110
|
-
return (stack + ((count > 24) ? 24 :
|
110
|
+
return (stack + ((count > 24) ? 24 : FFI_ALIGN_DOWN(count, 8)));
|
111
111
|
}
|
112
112
|
|
113
113
|
/* Perform machine dependent cif processing */
|
@@ -118,7 +118,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
|
118
118
|
else
|
119
119
|
cif->flags = cif->rtype->size;
|
120
120
|
|
121
|
-
cif->bytes =
|
121
|
+
cif->bytes = FFI_ALIGN (cif->bytes, 8);
|
122
122
|
|
123
123
|
return FFI_OK;
|
124
124
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c)
|
2
|
+
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
+
Copyright (c) 1996-2004 Red Hat, Inc.
|
3
4
|
Target configuration macros for FR-V
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
@@ -27,6 +28,10 @@
|
|
27
28
|
#ifndef LIBFFI_TARGET_H
|
28
29
|
#define LIBFFI_TARGET_H
|
29
30
|
|
31
|
+
#ifndef LIBFFI_H
|
32
|
+
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
+
#endif
|
34
|
+
|
30
35
|
/* ---- System specific configurations ----------------------------------- */
|
31
36
|
|
32
37
|
#ifndef LIBFFI_ASM
|
@@ -35,13 +40,9 @@ typedef signed long ffi_sarg;
|
|
35
40
|
|
36
41
|
typedef enum ffi_abi {
|
37
42
|
FFI_FIRST_ABI = 0,
|
38
|
-
|
39
|
-
#ifdef FRV
|
40
43
|
FFI_EABI,
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
|
44
|
+
FFI_LAST_ABI,
|
45
|
+
FFI_DEFAULT_ABI = FFI_EABI
|
45
46
|
} ffi_abi;
|
46
47
|
#endif
|
47
48
|
|