ffi 1.9.21-x86-mingw32 → 1.9.22-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +22 -0
- data/.gitmodules +3 -0
- data/.travis.yml +52 -0
- data/.yardopts +5 -0
- data/Gemfile +15 -0
- data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
- data/README.md +1 -1
- data/Rakefile +28 -3
- data/appveyor.yml +22 -0
- data/ffi.gemspec +14 -1
- data/lib/2.0/ffi_c.so +0 -0
- data/lib/2.1/ffi_c.so +0 -0
- data/lib/2.2/ffi_c.so +0 -0
- data/lib/2.3/ffi_c.so +0 -0
- data/lib/2.4/ffi_c.so +0 -0
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/ffi/library.rb +1 -1
- data/lib/ffi/version.rb +1 -1
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +7 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +76 -0
- data/samples/qsort.rb +21 -0
- data/samples/sample_helper.rb +6 -0
- metadata +17 -526
- data/ext/ffi_c/AbstractMemory.c +0 -1109
- data/ext/ffi_c/AbstractMemory.h +0 -175
- data/ext/ffi_c/ArrayType.c +0 -162
- data/ext/ffi_c/ArrayType.h +0 -59
- data/ext/ffi_c/Buffer.c +0 -365
- data/ext/ffi_c/Call.c +0 -517
- data/ext/ffi_c/Call.h +0 -110
- data/ext/ffi_c/ClosurePool.c +0 -283
- data/ext/ffi_c/ClosurePool.h +0 -57
- data/ext/ffi_c/DataConverter.c +0 -91
- data/ext/ffi_c/DynamicLibrary.c +0 -339
- data/ext/ffi_c/DynamicLibrary.h +0 -98
- data/ext/ffi_c/Function.c +0 -998
- data/ext/ffi_c/Function.h +0 -87
- data/ext/ffi_c/FunctionInfo.c +0 -271
- data/ext/ffi_c/LastError.c +0 -184
- data/ext/ffi_c/LastError.h +0 -47
- data/ext/ffi_c/LongDouble.c +0 -63
- data/ext/ffi_c/LongDouble.h +0 -51
- data/ext/ffi_c/MappedType.c +0 -168
- data/ext/ffi_c/MappedType.h +0 -59
- data/ext/ffi_c/MemoryPointer.c +0 -197
- data/ext/ffi_c/MemoryPointer.h +0 -53
- data/ext/ffi_c/MethodHandle.c +0 -358
- data/ext/ffi_c/MethodHandle.h +0 -55
- data/ext/ffi_c/Platform.c +0 -129
- data/ext/ffi_c/Platform.h +0 -45
- data/ext/ffi_c/Pointer.c +0 -508
- data/ext/ffi_c/Pointer.h +0 -63
- data/ext/ffi_c/Struct.c +0 -829
- data/ext/ffi_c/Struct.h +0 -106
- data/ext/ffi_c/StructByReference.c +0 -190
- data/ext/ffi_c/StructByReference.h +0 -50
- data/ext/ffi_c/StructByValue.c +0 -150
- data/ext/ffi_c/StructByValue.h +0 -55
- data/ext/ffi_c/StructLayout.c +0 -698
- data/ext/ffi_c/Thread.c +0 -352
- data/ext/ffi_c/Thread.h +0 -95
- data/ext/ffi_c/Type.c +0 -397
- data/ext/ffi_c/Type.h +0 -62
- data/ext/ffi_c/Types.c +0 -139
- data/ext/ffi_c/Types.h +0 -89
- data/ext/ffi_c/Variadic.c +0 -304
- data/ext/ffi_c/compat.h +0 -78
- data/ext/ffi_c/extconf.rb +0 -71
- data/ext/ffi_c/ffi.c +0 -98
- data/ext/ffi_c/libffi.bsd.mk +0 -40
- data/ext/ffi_c/libffi.darwin.mk +0 -105
- data/ext/ffi_c/libffi.gnu.mk +0 -32
- data/ext/ffi_c/libffi.mk +0 -18
- data/ext/ffi_c/libffi.vc.mk +0 -26
- data/ext/ffi_c/libffi.vc64.mk +0 -26
- data/ext/ffi_c/libffi/ChangeLog.libffi +0 -584
- data/ext/ffi_c/libffi/ChangeLog.libffi-3.1 +0 -6000
- data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
- data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
- data/ext/ffi_c/libffi/LICENSE +0 -21
- data/ext/ffi_c/libffi/Makefile.am +0 -205
- data/ext/ffi_c/libffi/Makefile.in +0 -1805
- data/ext/ffi_c/libffi/README +0 -454
- data/ext/ffi_c/libffi/acinclude.m4 +0 -473
- data/ext/ffi_c/libffi/aclocal.m4 +0 -2134
- data/ext/ffi_c/libffi/autogen.sh +0 -2
- data/ext/ffi_c/libffi/autom4te.cache/output.0 +0 -21972
- data/ext/ffi_c/libffi/autom4te.cache/output.1 +0 -21972
- data/ext/ffi_c/libffi/autom4te.cache/output.2 +0 -21972
- data/ext/ffi_c/libffi/autom4te.cache/output.3 +0 -21972
- data/ext/ffi_c/libffi/autom4te.cache/requests +0 -331
- data/ext/ffi_c/libffi/autom4te.cache/traces.0 +0 -4010
- data/ext/ffi_c/libffi/autom4te.cache/traces.1 +0 -1005
- data/ext/ffi_c/libffi/autom4te.cache/traces.2 +0 -4010
- data/ext/ffi_c/libffi/autom4te.cache/traces.3 +0 -4010
- data/ext/ffi_c/libffi/compile +0 -347
- data/ext/ffi_c/libffi/config.guess +0 -1462
- data/ext/ffi_c/libffi/config.sub +0 -1825
- data/ext/ffi_c/libffi/configure +0 -21972
- data/ext/ffi_c/libffi/configure.ac +0 -388
- data/ext/ffi_c/libffi/configure.host +0 -272
- data/ext/ffi_c/libffi/depcomp +0 -791
- data/ext/ffi_c/libffi/doc/Makefile.am +0 -3
- data/ext/ffi_c/libffi/doc/Makefile.in +0 -811
- data/ext/ffi_c/libffi/doc/libffi.texi +0 -985
- data/ext/ffi_c/libffi/doc/mdate-sh +0 -228
- data/ext/ffi_c/libffi/doc/texinfo.tex +0 -10079
- data/ext/ffi_c/libffi/doc/version.texi +0 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +0 -210
- data/ext/ffi_c/libffi/fficonfig.h.in~ +0 -210
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +0 -207
- data/ext/ffi_c/libffi/include/Makefile.am +0 -9
- data/ext/ffi_c/libffi/include/Makefile.in +0 -604
- data/ext/ffi_c/libffi/include/ffi.h.in +0 -484
- data/ext/ffi_c/libffi/include/ffi_cfi.h +0 -55
- data/ext/ffi_c/libffi/include/ffi_common.h +0 -147
- data/ext/ffi_c/libffi/install-sh +0 -508
- data/ext/ffi_c/libffi/libffi.map.in +0 -80
- data/ext/ffi_c/libffi/libffi.pc.in +0 -11
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +0 -637
- data/ext/ffi_c/libffi/libtool-ldflags +0 -106
- data/ext/ffi_c/libffi/libtool-version +0 -29
- data/ext/ffi_c/libffi/ltmain.sh +0 -11156
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +0 -13
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +0 -69
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +0 -181
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +0 -122
- data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +0 -72
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +0 -84
- data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +0 -70
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +0 -301
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +0 -225
- data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +0 -79
- data/ext/ffi_c/libffi/m4/libtool.m4 +0 -8387
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -437
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -124
- data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -99
- data/ext/ffi_c/libffi/man/Makefile.am +0 -8
- data/ext/ffi_c/libffi/man/Makefile.in +0 -558
- data/ext/ffi_c/libffi/man/ffi.3 +0 -41
- data/ext/ffi_c/libffi/man/ffi_call.3 +0 -103
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +0 -68
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +0 -73
- data/ext/ffi_c/libffi/missing +0 -215
- data/ext/ffi_c/libffi/msvcc.sh +0 -260
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +0 -941
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +0 -81
- data/ext/ffi_c/libffi/src/aarch64/internal.h +0 -67
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +0 -438
- data/ext/ffi_c/libffi/src/alpha/ffi.c +0 -521
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +0 -57
- data/ext/ffi_c/libffi/src/alpha/internal.h +0 -23
- data/ext/ffi_c/libffi/src/alpha/osf.S +0 -282
- data/ext/ffi_c/libffi/src/arc/arcompact.S +0 -135
- data/ext/ffi_c/libffi/src/arc/ffi.c +0 -266
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/arm/ffi.c +0 -808
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +0 -82
- data/ext/ffi_c/libffi/src/arm/internal.h +0 -7
- data/ext/ffi_c/libffi/src/arm/sysv.S +0 -383
- data/ext/ffi_c/libffi/src/avr32/ffi.c +0 -423
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +0 -55
- data/ext/ffi_c/libffi/src/avr32/sysv.S +0 -208
- data/ext/ffi_c/libffi/src/bfin/ffi.c +0 -196
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +0 -43
- data/ext/ffi_c/libffi/src/bfin/sysv.S +0 -179
- data/ext/ffi_c/libffi/src/closures.c +0 -890
- data/ext/ffi_c/libffi/src/cris/ffi.c +0 -386
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +0 -56
- data/ext/ffi_c/libffi/src/cris/sysv.S +0 -215
- data/ext/ffi_c/libffi/src/debug.c +0 -64
- data/ext/ffi_c/libffi/src/dlmalloc.c +0 -5166
- data/ext/ffi_c/libffi/src/frv/eabi.S +0 -128
- data/ext/ffi_c/libffi/src/frv/ffi.c +0 -292
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +0 -62
- data/ext/ffi_c/libffi/src/ia64/ffi.c +0 -586
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +0 -55
- data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +0 -40
- data/ext/ffi_c/libffi/src/ia64/unix.S +0 -560
- data/ext/ffi_c/libffi/src/java_raw_api.c +0 -374
- data/ext/ffi_c/libffi/src/m32r/ffi.c +0 -232
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/m32r/sysv.S +0 -121
- data/ext/ffi_c/libffi/src/m68k/ffi.c +0 -362
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +0 -54
- data/ext/ffi_c/libffi/src/m68k/sysv.S +0 -357
- data/ext/ffi_c/libffi/src/m88k/ffi.c +0 -400
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +0 -49
- data/ext/ffi_c/libffi/src/m88k/obsd.S +0 -209
- data/ext/ffi_c/libffi/src/metag/ffi.c +0 -330
- data/ext/ffi_c/libffi/src/metag/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/metag/sysv.S +0 -311
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +0 -321
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +0 -302
- data/ext/ffi_c/libffi/src/mips/ffi.c +0 -1105
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +0 -249
- data/ext/ffi_c/libffi/src/mips/n32.S +0 -661
- data/ext/ffi_c/libffi/src/mips/o32.S +0 -502
- data/ext/ffi_c/libffi/src/moxie/eabi.S +0 -101
- data/ext/ffi_c/libffi/src/moxie/ffi.c +0 -272
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +0 -52
- data/ext/ffi_c/libffi/src/nios2/ffi.c +0 -304
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +0 -52
- data/ext/ffi_c/libffi/src/nios2/sysv.S +0 -136
- data/ext/ffi_c/libffi/src/or1k/ffi.c +0 -328
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +0 -58
- data/ext/ffi_c/libffi/src/or1k/sysv.S +0 -107
- data/ext/ffi_c/libffi/src/pa/ffi.c +0 -719
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +0 -85
- data/ext/ffi_c/libffi/src/pa/hpux32.S +0 -368
- data/ext/ffi_c/libffi/src/pa/linux.S +0 -357
- data/ext/ffi_c/libffi/src/powerpc/aix.S +0 -328
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +0 -447
- data/ext/ffi_c/libffi/src/powerpc/asm.h +0 -125
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +0 -378
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +0 -571
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +0 -173
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +0 -1359
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +0 -945
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +0 -94
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +0 -923
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +0 -195
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +0 -228
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +0 -488
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +0 -397
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +0 -175
- data/ext/ffi_c/libffi/src/prep_cif.c +0 -261
- data/ext/ffi_c/libffi/src/raw_api.c +0 -267
- data/ext/ffi_c/libffi/src/s390/ffi.c +0 -756
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +0 -70
- data/ext/ffi_c/libffi/src/s390/internal.h +0 -11
- data/ext/ffi_c/libffi/src/s390/sysv.S +0 -325
- data/ext/ffi_c/libffi/src/sh/ffi.c +0 -717
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +0 -54
- data/ext/ffi_c/libffi/src/sh/sysv.S +0 -850
- data/ext/ffi_c/libffi/src/sh64/ffi.c +0 -469
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +0 -58
- data/ext/ffi_c/libffi/src/sh64/sysv.S +0 -539
- data/ext/ffi_c/libffi/src/sparc/ffi.c +0 -468
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +0 -608
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +0 -81
- data/ext/ffi_c/libffi/src/sparc/internal.h +0 -26
- data/ext/ffi_c/libffi/src/sparc/v8.S +0 -443
- data/ext/ffi_c/libffi/src/sparc/v9.S +0 -440
- data/ext/ffi_c/libffi/src/tile/ffi.c +0 -355
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +0 -65
- data/ext/ffi_c/libffi/src/tile/tile.S +0 -360
- data/ext/ffi_c/libffi/src/types.c +0 -106
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +0 -195
- data/ext/ffi_c/libffi/src/vax/ffi.c +0 -276
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +0 -49
- data/ext/ffi_c/libffi/src/x86/asmnames.h +0 -30
- data/ext/ffi_c/libffi/src/x86/ffi.c +0 -733
- data/ext/ffi_c/libffi/src/x86/ffi64.c +0 -857
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -141
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +0 -287
- data/ext/ffi_c/libffi/src/x86/internal.h +0 -29
- data/ext/ffi_c/libffi/src/x86/internal64.h +0 -22
- data/ext/ffi_c/libffi/src/x86/sysv.S +0 -1043
- data/ext/ffi_c/libffi/src/x86/unix64.S +0 -525
- data/ext/ffi_c/libffi/src/x86/win64.S +0 -232
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +0 -237
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +0 -298
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +0 -253
- data/ext/ffi_c/libffi/stamp-h.in +0 -1
- data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -85
- data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -607
- data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -445
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
- data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -30
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +0 -89
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +0 -81
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +0 -81
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +0 -82
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +0 -89
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +0 -92
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +0 -95
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_simple.c +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +0 -94
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +0 -95
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +0 -96
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +0 -102
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +0 -89
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +0 -93
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +0 -113
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +0 -95
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +0 -98
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +0 -109
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +0 -98
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +0 -124
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +0 -113
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +0 -99
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +0 -117
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +0 -97
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +0 -88
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +0 -93
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +0 -92
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +0 -132
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +0 -115
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +0 -95
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +0 -92
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +0 -93
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +0 -66
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +0 -105
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +0 -70
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +0 -142
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +0 -114
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +0 -47
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -136
- data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -107
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +0 -341
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +0 -152
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +0 -161
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +0 -133
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +0 -121
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +0 -110
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +0 -112
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +0 -131
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +0 -131
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +0 -131
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
- data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +0 -114
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -38
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -38
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +0 -145
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +0 -148
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +0 -124
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +0 -125
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +0 -70
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest.cc +0 -117
- data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc +0 -54
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -196
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -121
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -123
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -125
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
- data/ext/ffi_c/rbffi.h +0 -57
- data/ext/ffi_c/rbffi_endian.h +0 -59
- data/ext/ffi_c/win32/stdbool.h +0 -8
- data/ext/ffi_c/win32/stdint.h +0 -201
- data/gen/Rakefile +0 -30
- data/libtest/Benchmark.c +0 -52
- data/libtest/BoolTest.c +0 -34
- data/libtest/BufferTest.c +0 -31
- data/libtest/ClosureTest.c +0 -205
- data/libtest/EnumTest.c +0 -51
- data/libtest/FunctionTest.c +0 -70
- data/libtest/GNUmakefile +0 -149
- data/libtest/GlobalVariable.c +0 -62
- data/libtest/LastErrorTest.c +0 -21
- data/libtest/NumberTest.c +0 -132
- data/libtest/PointerTest.c +0 -63
- data/libtest/ReferenceTest.c +0 -23
- data/libtest/StringTest.c +0 -34
- data/libtest/StructTest.c +0 -243
- data/libtest/UnionTest.c +0 -43
- data/libtest/VariadicTest.c +0 -99
- data/spec/ffi/async_callback_spec.rb +0 -35
- data/spec/ffi/bitmask_spec.rb +0 -575
- data/spec/ffi/bool_spec.rb +0 -32
- data/spec/ffi/buffer_spec.rb +0 -279
- data/spec/ffi/callback_spec.rb +0 -773
- data/spec/ffi/custom_param_type.rb +0 -37
- data/spec/ffi/custom_type_spec.rb +0 -74
- data/spec/ffi/dup_spec.rb +0 -52
- data/spec/ffi/embed-test/ext/Makefile +0 -242
- data/spec/ffi/enum_spec.rb +0 -423
- data/spec/ffi/errno_spec.rb +0 -20
- data/spec/ffi/ffi_spec.rb +0 -28
- data/spec/ffi/fixtures/Benchmark.c +0 -52
- data/spec/ffi/fixtures/BitmaskTest.c +0 -51
- data/spec/ffi/fixtures/BoolTest.c +0 -34
- data/spec/ffi/fixtures/BufferTest.c +0 -31
- data/spec/ffi/fixtures/ClosureTest.c +0 -205
- data/spec/ffi/fixtures/EnumTest.c +0 -51
- data/spec/ffi/fixtures/FunctionTest.c +0 -142
- data/spec/ffi/fixtures/GNUmakefile +0 -149
- data/spec/ffi/fixtures/GlobalVariable.c +0 -62
- data/spec/ffi/fixtures/LastErrorTest.c +0 -21
- data/spec/ffi/fixtures/NumberTest.c +0 -132
- data/spec/ffi/fixtures/PipeHelper.h +0 -21
- data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
- data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
- data/spec/ffi/fixtures/PointerTest.c +0 -63
- data/spec/ffi/fixtures/ReferenceTest.c +0 -23
- data/spec/ffi/fixtures/StringTest.c +0 -34
- data/spec/ffi/fixtures/StructTest.c +0 -243
- data/spec/ffi/fixtures/UnionTest.c +0 -43
- data/spec/ffi/fixtures/VariadicTest.c +0 -99
- data/spec/ffi/fixtures/classes.rb +0 -438
- data/spec/ffi/function_spec.rb +0 -97
- data/spec/ffi/io_spec.rb +0 -16
- data/spec/ffi/library_spec.rb +0 -286
- data/spec/ffi/long_double.rb +0 -30
- data/spec/ffi/managed_struct_spec.rb +0 -68
- data/spec/ffi/memorypointer_spec.rb +0 -78
- data/spec/ffi/number_spec.rb +0 -247
- data/spec/ffi/platform_spec.rb +0 -114
- data/spec/ffi/pointer_spec.rb +0 -285
- data/spec/ffi/rbx/attach_function_spec.rb +0 -34
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -198
- data/spec/ffi/rbx/spec_helper.rb +0 -6
- data/spec/ffi/rbx/struct_spec.rb +0 -18
- data/spec/ffi/spec_helper.rb +0 -93
- data/spec/ffi/string_spec.rb +0 -118
- data/spec/ffi/strptr_spec.rb +0 -50
- data/spec/ffi/struct_by_ref_spec.rb +0 -43
- data/spec/ffi/struct_callback_spec.rb +0 -69
- data/spec/ffi/struct_initialize_spec.rb +0 -35
- data/spec/ffi/struct_packed_spec.rb +0 -50
- data/spec/ffi/struct_spec.rb +0 -882
- data/spec/ffi/typedef_spec.rb +0 -91
- data/spec/ffi/union_spec.rb +0 -67
- data/spec/ffi/variadic_spec.rb +0 -132
- data/spec/spec.opts +0 -4
@@ -1,54 +0,0 @@
|
|
1
|
-
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
ffitarget.h - Copyright (c) 2012 Anthony Green
|
3
|
-
Copyright (c) 1996-2003 Red Hat, Inc.
|
4
|
-
Target configuration macros for Motorola 68K.
|
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
|
-
|
28
|
-
#ifndef LIBFFI_TARGET_H
|
29
|
-
#define LIBFFI_TARGET_H
|
30
|
-
|
31
|
-
#ifndef LIBFFI_H
|
32
|
-
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
33
|
-
#endif
|
34
|
-
|
35
|
-
#ifndef LIBFFI_ASM
|
36
|
-
typedef unsigned long ffi_arg;
|
37
|
-
typedef signed long ffi_sarg;
|
38
|
-
|
39
|
-
typedef enum ffi_abi {
|
40
|
-
FFI_FIRST_ABI = 0,
|
41
|
-
FFI_SYSV,
|
42
|
-
FFI_LAST_ABI,
|
43
|
-
FFI_DEFAULT_ABI = FFI_SYSV
|
44
|
-
} ffi_abi;
|
45
|
-
#endif
|
46
|
-
|
47
|
-
/* ---- Definitions for closures ----------------------------------------- */
|
48
|
-
|
49
|
-
#define FFI_CLOSURES 1
|
50
|
-
#define FFI_TRAMPOLINE_SIZE 16
|
51
|
-
#define FFI_NATIVE_RAW_API 0
|
52
|
-
|
53
|
-
#endif
|
54
|
-
|
@@ -1,357 +0,0 @@
|
|
1
|
-
/* -----------------------------------------------------------------------
|
2
|
-
|
3
|
-
sysv.S - Copyright (c) 2012 Alan Hourihane
|
4
|
-
Copyright (c) 1998, 2012 Andreas Schwab
|
5
|
-
Copyright (c) 2008 Red Hat, Inc.
|
6
|
-
Copyright (c) 2012, 2016 Thorsten Glaser
|
7
|
-
|
8
|
-
m68k Foreign Function Interface
|
9
|
-
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
11
|
-
a copy of this software and associated documentation files (the
|
12
|
-
``Software''), to deal in the Software without restriction, including
|
13
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
14
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
15
|
-
permit persons to whom the Software is furnished to do so, subject to
|
16
|
-
the following conditions:
|
17
|
-
|
18
|
-
The above copyright notice and this permission notice shall be included
|
19
|
-
in all copies or substantial portions of the Software.
|
20
|
-
|
21
|
-
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
22
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
23
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
24
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
25
|
-
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
26
|
-
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
27
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
28
|
-
DEALINGS IN THE SOFTWARE.
|
29
|
-
----------------------------------------------------------------------- */
|
30
|
-
|
31
|
-
#define LIBFFI_ASM
|
32
|
-
#include <fficonfig.h>
|
33
|
-
#include <ffi.h>
|
34
|
-
|
35
|
-
#ifdef HAVE_AS_CFI_PSEUDO_OP
|
36
|
-
#define CFI_STARTPROC() .cfi_startproc
|
37
|
-
#define CFI_OFFSET(reg,off) .cfi_offset reg,off
|
38
|
-
#define CFI_DEF_CFA(reg,off) .cfi_def_cfa reg,off
|
39
|
-
#define CFI_ENDPROC() .cfi_endproc
|
40
|
-
#else
|
41
|
-
#define CFI_STARTPROC()
|
42
|
-
#define CFI_OFFSET(reg,off)
|
43
|
-
#define CFI_DEF_CFA(reg,off)
|
44
|
-
#define CFI_ENDPROC()
|
45
|
-
#endif
|
46
|
-
|
47
|
-
#ifdef __MINT__
|
48
|
-
#define CALLFUNC(funcname) _ ## funcname
|
49
|
-
#else
|
50
|
-
#define CALLFUNC(funcname) funcname
|
51
|
-
#endif
|
52
|
-
|
53
|
-
.text
|
54
|
-
|
55
|
-
.globl CALLFUNC(ffi_call_SYSV)
|
56
|
-
.type CALLFUNC(ffi_call_SYSV),@function
|
57
|
-
.align 4
|
58
|
-
|
59
|
-
CALLFUNC(ffi_call_SYSV):
|
60
|
-
CFI_STARTPROC()
|
61
|
-
link %fp,#0
|
62
|
-
CFI_OFFSET(14,-8)
|
63
|
-
CFI_DEF_CFA(14,8)
|
64
|
-
move.l %d2,-(%sp)
|
65
|
-
CFI_OFFSET(2,-12)
|
66
|
-
|
67
|
-
| Make room for all of the new args.
|
68
|
-
sub.l 12(%fp),%sp
|
69
|
-
|
70
|
-
| Call ffi_prep_args
|
71
|
-
move.l 8(%fp),-(%sp)
|
72
|
-
pea 4(%sp)
|
73
|
-
#if !defined __PIC__
|
74
|
-
jsr CALLFUNC(ffi_prep_args)
|
75
|
-
#elif defined(__uClinux__) && defined(__ID_SHARED_LIBRARY__)
|
76
|
-
move.l _current_shared_library_a5_offset_(%a5),%a0
|
77
|
-
move.l CALLFUNC(ffi_prep_args@GOT)(%a0),%a0
|
78
|
-
jsr (%a0)
|
79
|
-
#elif defined(__mcoldfire__) && !defined(__mcfisab__) && !defined(__mcfisac__)
|
80
|
-
move.l #_GLOBAL_OFFSET_TABLE_@GOTPC,%a0
|
81
|
-
lea (-6,%pc,%a0),%a0
|
82
|
-
move.l CALLFUNC(ffi_prep_args@GOT)(%a0),%a0
|
83
|
-
jsr (%a0)
|
84
|
-
#else
|
85
|
-
bsr.l CALLFUNC(ffi_prep_args@PLTPC)
|
86
|
-
#endif
|
87
|
-
addq.l #8,%sp
|
88
|
-
|
89
|
-
| Pass pointer to struct value, if any
|
90
|
-
#ifdef __MINT__
|
91
|
-
move.l %d0,%a1
|
92
|
-
#else
|
93
|
-
move.l %a0,%a1
|
94
|
-
#endif
|
95
|
-
|
96
|
-
| Call the function
|
97
|
-
move.l 24(%fp),%a0
|
98
|
-
jsr (%a0)
|
99
|
-
|
100
|
-
| Remove the space we pushed for the args
|
101
|
-
add.l 12(%fp),%sp
|
102
|
-
|
103
|
-
| Load the pointer to storage for the return value
|
104
|
-
move.l 20(%fp),%a1
|
105
|
-
|
106
|
-
| Load the return type code
|
107
|
-
move.l 16(%fp),%d2
|
108
|
-
|
109
|
-
| If the return value pointer is NULL, assume no return value.
|
110
|
-
| NOTE: On the mc68000, tst on an address register is not supported.
|
111
|
-
#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
|
112
|
-
cmp.w #0, %a1
|
113
|
-
#else
|
114
|
-
tst.l %a1
|
115
|
-
#endif
|
116
|
-
jbeq noretval
|
117
|
-
|
118
|
-
btst #0,%d2
|
119
|
-
jbeq retlongint
|
120
|
-
move.l %d0,(%a1)
|
121
|
-
jbra epilogue
|
122
|
-
|
123
|
-
retlongint:
|
124
|
-
btst #1,%d2
|
125
|
-
jbeq retfloat
|
126
|
-
move.l %d0,(%a1)
|
127
|
-
move.l %d1,4(%a1)
|
128
|
-
jbra epilogue
|
129
|
-
|
130
|
-
retfloat:
|
131
|
-
btst #2,%d2
|
132
|
-
jbeq retdouble
|
133
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
134
|
-
fmove.s %fp0,(%a1)
|
135
|
-
#else
|
136
|
-
move.l %d0,(%a1)
|
137
|
-
#endif
|
138
|
-
jbra epilogue
|
139
|
-
|
140
|
-
retdouble:
|
141
|
-
btst #3,%d2
|
142
|
-
jbeq retlongdouble
|
143
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
144
|
-
fmove.d %fp0,(%a1)
|
145
|
-
#else
|
146
|
-
move.l %d0,(%a1)+
|
147
|
-
move.l %d1,(%a1)
|
148
|
-
#endif
|
149
|
-
jbra epilogue
|
150
|
-
|
151
|
-
retlongdouble:
|
152
|
-
btst #4,%d2
|
153
|
-
jbeq retpointer
|
154
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
155
|
-
fmove.x %fp0,(%a1)
|
156
|
-
#else
|
157
|
-
move.l %d0,(%a1)+
|
158
|
-
move.l %d1,(%a1)+
|
159
|
-
move.l %d2,(%a1)
|
160
|
-
#endif
|
161
|
-
jbra epilogue
|
162
|
-
|
163
|
-
retpointer:
|
164
|
-
btst #5,%d2
|
165
|
-
jbeq retstruct1
|
166
|
-
#ifdef __MINT__
|
167
|
-
move.l %d0,(%a1)
|
168
|
-
#else
|
169
|
-
move.l %a0,(%a1)
|
170
|
-
#endif
|
171
|
-
jbra epilogue
|
172
|
-
|
173
|
-
retstruct1:
|
174
|
-
btst #6,%d2
|
175
|
-
jbeq retstruct2
|
176
|
-
move.b %d0,(%a1)
|
177
|
-
jbra epilogue
|
178
|
-
|
179
|
-
retstruct2:
|
180
|
-
btst #7,%d2
|
181
|
-
jbeq retsint8
|
182
|
-
move.w %d0,(%a1)
|
183
|
-
jbra epilogue
|
184
|
-
|
185
|
-
retsint8:
|
186
|
-
btst #8,%d2
|
187
|
-
jbeq retsint16
|
188
|
-
| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
|
189
|
-
#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
|
190
|
-
ext.w %d0
|
191
|
-
ext.l %d0
|
192
|
-
#else
|
193
|
-
extb.l %d0
|
194
|
-
#endif
|
195
|
-
move.l %d0,(%a1)
|
196
|
-
jbra epilogue
|
197
|
-
|
198
|
-
retsint16:
|
199
|
-
btst #9,%d2
|
200
|
-
jbeq noretval
|
201
|
-
ext.l %d0
|
202
|
-
move.l %d0,(%a1)
|
203
|
-
|
204
|
-
noretval:
|
205
|
-
epilogue:
|
206
|
-
move.l (%sp)+,%d2
|
207
|
-
unlk %fp
|
208
|
-
rts
|
209
|
-
CFI_ENDPROC()
|
210
|
-
.size CALLFUNC(ffi_call_SYSV),.-CALLFUNC(ffi_call_SYSV)
|
211
|
-
|
212
|
-
.globl CALLFUNC(ffi_closure_SYSV)
|
213
|
-
.type CALLFUNC(ffi_closure_SYSV), @function
|
214
|
-
.align 4
|
215
|
-
|
216
|
-
CALLFUNC(ffi_closure_SYSV):
|
217
|
-
CFI_STARTPROC()
|
218
|
-
link %fp,#-12
|
219
|
-
CFI_OFFSET(14,-8)
|
220
|
-
CFI_DEF_CFA(14,8)
|
221
|
-
move.l %sp,-12(%fp)
|
222
|
-
pea 8(%fp)
|
223
|
-
pea -12(%fp)
|
224
|
-
move.l %a0,-(%sp)
|
225
|
-
#if !defined __PIC__
|
226
|
-
jsr CALLFUNC(ffi_closure_SYSV_inner)
|
227
|
-
#elif defined(__uClinux__) && defined(__ID_SHARED_LIBRARY__)
|
228
|
-
move.l _current_shared_library_a5_offset_(%a5),%a0
|
229
|
-
move.l CALLFUNC(ffi_closure_SYSV_inner@GOT)(%a0),%a0
|
230
|
-
jsr (%a0)
|
231
|
-
#elif defined(__mcoldfire__) && !defined(__mcfisab__) && !defined(__mcfisac__)
|
232
|
-
move.l #_GLOBAL_OFFSET_TABLE_@GOTPC,%a0
|
233
|
-
lea (-6,%pc,%a0),%a0
|
234
|
-
move.l CALLFUNC(ffi_closure_SYSV_inner@GOT)(%a0),%a0
|
235
|
-
jsr (%a0)
|
236
|
-
#else
|
237
|
-
bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
|
238
|
-
#endif
|
239
|
-
|
240
|
-
lsr.l #1,%d0
|
241
|
-
jne 1f
|
242
|
-
jcc .Lcls_epilogue
|
243
|
-
| CIF_FLAGS_INT
|
244
|
-
move.l -12(%fp),%d0
|
245
|
-
.Lcls_epilogue:
|
246
|
-
| no CIF_FLAGS_*
|
247
|
-
unlk %fp
|
248
|
-
rts
|
249
|
-
1:
|
250
|
-
lea -12(%fp),%a0
|
251
|
-
lsr.l #2,%d0
|
252
|
-
jne 1f
|
253
|
-
jcs .Lcls_ret_float
|
254
|
-
| CIF_FLAGS_DINT
|
255
|
-
move.l (%a0)+,%d0
|
256
|
-
move.l (%a0),%d1
|
257
|
-
jra .Lcls_epilogue
|
258
|
-
.Lcls_ret_float:
|
259
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
260
|
-
fmove.s (%a0),%fp0
|
261
|
-
#else
|
262
|
-
move.l (%a0),%d0
|
263
|
-
#endif
|
264
|
-
jra .Lcls_epilogue
|
265
|
-
1:
|
266
|
-
lsr.l #2,%d0
|
267
|
-
jne 1f
|
268
|
-
jcs .Lcls_ret_ldouble
|
269
|
-
| CIF_FLAGS_DOUBLE
|
270
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
271
|
-
fmove.d (%a0),%fp0
|
272
|
-
#else
|
273
|
-
move.l (%a0)+,%d0
|
274
|
-
move.l (%a0),%d1
|
275
|
-
#endif
|
276
|
-
jra .Lcls_epilogue
|
277
|
-
.Lcls_ret_ldouble:
|
278
|
-
#if defined(__MC68881__) || defined(__HAVE_68881__)
|
279
|
-
fmove.x (%a0),%fp0
|
280
|
-
#else
|
281
|
-
move.l (%a0)+,%d0
|
282
|
-
move.l (%a0)+,%d1
|
283
|
-
move.l (%a0),%d2
|
284
|
-
#endif
|
285
|
-
jra .Lcls_epilogue
|
286
|
-
1:
|
287
|
-
lsr.l #2,%d0
|
288
|
-
jne 1f
|
289
|
-
jcs .Lcls_ret_struct1
|
290
|
-
| CIF_FLAGS_POINTER
|
291
|
-
move.l (%a0),%a0
|
292
|
-
move.l %a0,%d0
|
293
|
-
jra .Lcls_epilogue
|
294
|
-
.Lcls_ret_struct1:
|
295
|
-
move.b (%a0),%d0
|
296
|
-
jra .Lcls_epilogue
|
297
|
-
1:
|
298
|
-
lsr.l #2,%d0
|
299
|
-
jne 1f
|
300
|
-
jcs .Lcls_ret_sint8
|
301
|
-
| CIF_FLAGS_STRUCT2
|
302
|
-
move.w (%a0),%d0
|
303
|
-
jra .Lcls_epilogue
|
304
|
-
.Lcls_ret_sint8:
|
305
|
-
move.l (%a0),%d0
|
306
|
-
| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
|
307
|
-
#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
|
308
|
-
ext.w %d0
|
309
|
-
ext.l %d0
|
310
|
-
#else
|
311
|
-
extb.l %d0
|
312
|
-
#endif
|
313
|
-
jra .Lcls_epilogue
|
314
|
-
1:
|
315
|
-
| CIF_FLAGS_SINT16
|
316
|
-
move.l (%a0),%d0
|
317
|
-
ext.l %d0
|
318
|
-
jra .Lcls_epilogue
|
319
|
-
CFI_ENDPROC()
|
320
|
-
|
321
|
-
.size CALLFUNC(ffi_closure_SYSV),.-CALLFUNC(ffi_closure_SYSV)
|
322
|
-
|
323
|
-
.globl CALLFUNC(ffi_closure_struct_SYSV)
|
324
|
-
.type CALLFUNC(ffi_closure_struct_SYSV), @function
|
325
|
-
.align 4
|
326
|
-
|
327
|
-
CALLFUNC(ffi_closure_struct_SYSV):
|
328
|
-
CFI_STARTPROC()
|
329
|
-
link %fp,#0
|
330
|
-
CFI_OFFSET(14,-8)
|
331
|
-
CFI_DEF_CFA(14,8)
|
332
|
-
move.l %sp,-12(%fp)
|
333
|
-
pea 8(%fp)
|
334
|
-
move.l %a1,-(%sp)
|
335
|
-
move.l %a0,-(%sp)
|
336
|
-
#if !defined __PIC__
|
337
|
-
jsr CALLFUNC(ffi_closure_SYSV_inner)
|
338
|
-
#elif defined(__uClinux__) && defined(__ID_SHARED_LIBRARY__)
|
339
|
-
move.l _current_shared_library_a5_offset_(%a5),%a0
|
340
|
-
move.l CALLFUNC(ffi_closure_SYSV_inner@GOT)(%a0),%a0
|
341
|
-
jsr (%a0)
|
342
|
-
#elif defined(__mcoldfire__) && !defined(__mcfisab__) && !defined(__mcfisac__)
|
343
|
-
move.l #_GLOBAL_OFFSET_TABLE_@GOTPC,%a0
|
344
|
-
lea (-6,%pc,%a0),%a0
|
345
|
-
move.l CALLFUNC(ffi_closure_SYSV_inner@GOT)(%a0),%a0
|
346
|
-
jsr (%a0)
|
347
|
-
#else
|
348
|
-
bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
|
349
|
-
#endif
|
350
|
-
unlk %fp
|
351
|
-
rts
|
352
|
-
CFI_ENDPROC()
|
353
|
-
.size CALLFUNC(ffi_closure_struct_SYSV),.-CALLFUNC(ffi_closure_struct_SYSV)
|
354
|
-
|
355
|
-
#if defined __ELF__ && defined __linux__
|
356
|
-
.section .note.GNU-stack,"",@progbits
|
357
|
-
#endif
|
@@ -1,400 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (c) 2013 Miodrag Vallat. <miod@openbsd.org>
|
3
|
-
*
|
4
|
-
* Permission is hereby granted, free of charge, to any person obtaining
|
5
|
-
* a copy of this software and associated documentation files (the
|
6
|
-
* ``Software''), to deal in the Software without restriction, including
|
7
|
-
* without limitation the rights to use, copy, modify, merge, publish,
|
8
|
-
* distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
-
* permit persons to whom the Software is furnished to do so, subject to
|
10
|
-
* the following conditions:
|
11
|
-
*
|
12
|
-
* The above copyright notice and this permission notice shall be included
|
13
|
-
* in all copies or substantial portions of the Software.
|
14
|
-
*
|
15
|
-
* THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
16
|
-
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
-
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
18
|
-
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
19
|
-
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
20
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
21
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
-
*/
|
23
|
-
|
24
|
-
/*
|
25
|
-
* m88k Foreign Function Interface
|
26
|
-
*
|
27
|
-
* This file attempts to provide all the FFI entry points which can reliably
|
28
|
-
* be implemented in C.
|
29
|
-
*
|
30
|
-
* Only OpenBSD/m88k is currently supported; other platforms (such as
|
31
|
-
* Motorola's SysV/m88k) could be supported with the following tweaks:
|
32
|
-
*
|
33
|
-
* - non-OpenBSD systems use an `outgoing parameter area' as part of the
|
34
|
-
* 88BCS calling convention, which is not supported under OpenBSD from
|
35
|
-
* release 3.6 onwards. Supporting it should be as easy as taking it
|
36
|
-
* into account when adjusting the stack, in the assembly code.
|
37
|
-
*
|
38
|
-
* - the logic deciding whether a function argument gets passed through
|
39
|
-
* registers, or on the stack, has changed several times in OpenBSD in
|
40
|
-
* edge cases (especially for structs larger than 32 bytes being passed
|
41
|
-
* by value). The code below attemps to match the logic used by the
|
42
|
-
* system compiler of OpenBSD 5.3, i.e. gcc 3.3.6 with many m88k backend
|
43
|
-
* fixes.
|
44
|
-
*/
|
45
|
-
|
46
|
-
#include <ffi.h>
|
47
|
-
#include <ffi_common.h>
|
48
|
-
|
49
|
-
#include <stdlib.h>
|
50
|
-
#include <unistd.h>
|
51
|
-
|
52
|
-
void ffi_call_OBSD (unsigned int, extended_cif *, unsigned int, void *,
|
53
|
-
void (*fn) ());
|
54
|
-
void *ffi_prep_args (void *, extended_cif *);
|
55
|
-
void ffi_closure_OBSD (ffi_closure *);
|
56
|
-
void ffi_closure_struct_OBSD (ffi_closure *);
|
57
|
-
unsigned int ffi_closure_OBSD_inner (ffi_closure *, void *, unsigned int *,
|
58
|
-
char *);
|
59
|
-
void ffi_cacheflush_OBSD (unsigned int, unsigned int);
|
60
|
-
|
61
|
-
#define CIF_FLAGS_INT (1 << 0)
|
62
|
-
#define CIF_FLAGS_DINT (1 << 1)
|
63
|
-
|
64
|
-
/*
|
65
|
-
* Foreign Function Interface API
|
66
|
-
*/
|
67
|
-
|
68
|
-
/* ffi_prep_args is called by the assembly routine once stack space has
|
69
|
-
been allocated for the function's arguments. */
|
70
|
-
|
71
|
-
void *
|
72
|
-
ffi_prep_args (void *stack, extended_cif *ecif)
|
73
|
-
{
|
74
|
-
unsigned int i;
|
75
|
-
void **p_argv;
|
76
|
-
char *argp, *stackp;
|
77
|
-
unsigned int *regp;
|
78
|
-
unsigned int regused;
|
79
|
-
ffi_type **p_arg;
|
80
|
-
void *struct_value_ptr;
|
81
|
-
|
82
|
-
regp = (unsigned int *)stack;
|
83
|
-
stackp = (char *)(regp + 8);
|
84
|
-
regused = 0;
|
85
|
-
|
86
|
-
if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
|
87
|
-
&& !ecif->cif->flags)
|
88
|
-
struct_value_ptr = ecif->rvalue;
|
89
|
-
else
|
90
|
-
struct_value_ptr = NULL;
|
91
|
-
|
92
|
-
p_argv = ecif->avalue;
|
93
|
-
|
94
|
-
for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i != 0; i--, p_arg++)
|
95
|
-
{
|
96
|
-
size_t z;
|
97
|
-
unsigned short t, a;
|
98
|
-
|
99
|
-
z = (*p_arg)->size;
|
100
|
-
t = (*p_arg)->type;
|
101
|
-
a = (*p_arg)->alignment;
|
102
|
-
|
103
|
-
/*
|
104
|
-
* Figure out whether the argument can be passed through registers
|
105
|
-
* or on the stack.
|
106
|
-
* The rule is that registers can only receive simple types not larger
|
107
|
-
* than 64 bits, or structs the exact size of a register and aligned to
|
108
|
-
* the size of a register.
|
109
|
-
*/
|
110
|
-
if (t == FFI_TYPE_STRUCT)
|
111
|
-
{
|
112
|
-
if (z == sizeof (int) && a == sizeof (int) && regused < 8)
|
113
|
-
argp = (char *)regp;
|
114
|
-
else
|
115
|
-
argp = stackp;
|
116
|
-
}
|
117
|
-
else
|
118
|
-
{
|
119
|
-
if (z > sizeof (int) && regused < 8 - 1)
|
120
|
-
{
|
121
|
-
/* align to an even register pair */
|
122
|
-
if (regused & 1)
|
123
|
-
{
|
124
|
-
regp++;
|
125
|
-
regused++;
|
126
|
-
}
|
127
|
-
}
|
128
|
-
if (regused < 8)
|
129
|
-
argp = (char *)regp;
|
130
|
-
else
|
131
|
-
argp = stackp;
|
132
|
-
}
|
133
|
-
|
134
|
-
/* Enforce proper stack alignment of 64-bit types */
|
135
|
-
if (argp == stackp && a > sizeof (int))
|
136
|
-
{
|
137
|
-
stackp = (char *) FFI_ALIGN(stackp, a);
|
138
|
-
argp = stackp;
|
139
|
-
}
|
140
|
-
|
141
|
-
switch (t)
|
142
|
-
{
|
143
|
-
case FFI_TYPE_SINT8:
|
144
|
-
*(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
|
145
|
-
break;
|
146
|
-
|
147
|
-
case FFI_TYPE_UINT8:
|
148
|
-
*(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
|
149
|
-
break;
|
150
|
-
|
151
|
-
case FFI_TYPE_SINT16:
|
152
|
-
*(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
|
153
|
-
break;
|
154
|
-
|
155
|
-
case FFI_TYPE_UINT16:
|
156
|
-
*(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
|
157
|
-
break;
|
158
|
-
|
159
|
-
case FFI_TYPE_INT:
|
160
|
-
case FFI_TYPE_FLOAT:
|
161
|
-
case FFI_TYPE_UINT32:
|
162
|
-
case FFI_TYPE_SINT32:
|
163
|
-
case FFI_TYPE_POINTER:
|
164
|
-
*(unsigned int *) argp = *(unsigned int *) *p_argv;
|
165
|
-
break;
|
166
|
-
|
167
|
-
case FFI_TYPE_DOUBLE:
|
168
|
-
case FFI_TYPE_UINT64:
|
169
|
-
case FFI_TYPE_SINT64:
|
170
|
-
case FFI_TYPE_STRUCT:
|
171
|
-
memcpy (argp, *p_argv, z);
|
172
|
-
break;
|
173
|
-
|
174
|
-
default:
|
175
|
-
FFI_ASSERT (0);
|
176
|
-
}
|
177
|
-
|
178
|
-
/* Align if necessary. */
|
179
|
-
if ((sizeof (int) - 1) & z)
|
180
|
-
z = FFI_ALIGN(z, sizeof (int));
|
181
|
-
|
182
|
-
p_argv++;
|
183
|
-
|
184
|
-
/* Be careful, once all registers are filled, and about to continue
|
185
|
-
on stack, regp == stackp. Therefore the check for regused as well. */
|
186
|
-
if (argp == (char *)regp && regused < 8)
|
187
|
-
{
|
188
|
-
regp += z / sizeof (int);
|
189
|
-
regused += z / sizeof (int);
|
190
|
-
}
|
191
|
-
else
|
192
|
-
stackp += z;
|
193
|
-
}
|
194
|
-
|
195
|
-
return struct_value_ptr;
|
196
|
-
}
|
197
|
-
|
198
|
-
/* Perform machine dependent cif processing */
|
199
|
-
ffi_status
|
200
|
-
ffi_prep_cif_machdep (ffi_cif *cif)
|
201
|
-
{
|
202
|
-
/* Set the return type flag */
|
203
|
-
switch (cif->rtype->type)
|
204
|
-
{
|
205
|
-
case FFI_TYPE_VOID:
|
206
|
-
cif->flags = 0;
|
207
|
-
break;
|
208
|
-
|
209
|
-
case FFI_TYPE_STRUCT:
|
210
|
-
if (cif->rtype->size == sizeof (int) &&
|
211
|
-
cif->rtype->alignment == sizeof (int))
|
212
|
-
cif->flags = CIF_FLAGS_INT;
|
213
|
-
else
|
214
|
-
cif->flags = 0;
|
215
|
-
break;
|
216
|
-
|
217
|
-
case FFI_TYPE_DOUBLE:
|
218
|
-
case FFI_TYPE_SINT64:
|
219
|
-
case FFI_TYPE_UINT64:
|
220
|
-
cif->flags = CIF_FLAGS_DINT;
|
221
|
-
break;
|
222
|
-
|
223
|
-
default:
|
224
|
-
cif->flags = CIF_FLAGS_INT;
|
225
|
-
break;
|
226
|
-
}
|
227
|
-
|
228
|
-
return FFI_OK;
|
229
|
-
}
|
230
|
-
|
231
|
-
void
|
232
|
-
ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
|
233
|
-
{
|
234
|
-
extended_cif ecif;
|
235
|
-
|
236
|
-
ecif.cif = cif;
|
237
|
-
ecif.avalue = avalue;
|
238
|
-
|
239
|
-
/* If the return value is a struct and we don't have a return value
|
240
|
-
address then we need to make one. */
|
241
|
-
|
242
|
-
if (rvalue == NULL
|
243
|
-
&& cif->rtype->type == FFI_TYPE_STRUCT
|
244
|
-
&& (cif->rtype->size != sizeof (int)
|
245
|
-
|| cif->rtype->alignment != sizeof (int)))
|
246
|
-
ecif.rvalue = alloca (cif->rtype->size);
|
247
|
-
else
|
248
|
-
ecif.rvalue = rvalue;
|
249
|
-
|
250
|
-
switch (cif->abi)
|
251
|
-
{
|
252
|
-
case FFI_OBSD:
|
253
|
-
ffi_call_OBSD (cif->bytes, &ecif, cif->flags, ecif.rvalue, fn);
|
254
|
-
break;
|
255
|
-
|
256
|
-
default:
|
257
|
-
FFI_ASSERT (0);
|
258
|
-
break;
|
259
|
-
}
|
260
|
-
}
|
261
|
-
|
262
|
-
/*
|
263
|
-
* Closure API
|
264
|
-
*/
|
265
|
-
|
266
|
-
static void
|
267
|
-
ffi_prep_closure_args_OBSD (ffi_cif *cif, void **avalue, unsigned int *regp,
|
268
|
-
char *stackp)
|
269
|
-
{
|
270
|
-
unsigned int i;
|
271
|
-
void **p_argv;
|
272
|
-
char *argp;
|
273
|
-
unsigned int regused;
|
274
|
-
ffi_type **p_arg;
|
275
|
-
|
276
|
-
regused = 0;
|
277
|
-
|
278
|
-
p_argv = avalue;
|
279
|
-
|
280
|
-
for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
|
281
|
-
{
|
282
|
-
size_t z;
|
283
|
-
unsigned short t, a;
|
284
|
-
|
285
|
-
z = (*p_arg)->size;
|
286
|
-
t = (*p_arg)->type;
|
287
|
-
a = (*p_arg)->alignment;
|
288
|
-
|
289
|
-
/*
|
290
|
-
* Figure out whether the argument has been passed through registers
|
291
|
-
* or on the stack.
|
292
|
-
* The rule is that registers can only receive simple types not larger
|
293
|
-
* than 64 bits, or structs the exact size of a register and aligned to
|
294
|
-
* the size of a register.
|
295
|
-
*/
|
296
|
-
if (t == FFI_TYPE_STRUCT)
|
297
|
-
{
|
298
|
-
if (z == sizeof (int) && a == sizeof (int) && regused < 8)
|
299
|
-
argp = (char *)regp;
|
300
|
-
else
|
301
|
-
argp = stackp;
|
302
|
-
}
|
303
|
-
else
|
304
|
-
{
|
305
|
-
if (z > sizeof (int) && regused < 8 - 1)
|
306
|
-
{
|
307
|
-
/* align to an even register pair */
|
308
|
-
if (regused & 1)
|
309
|
-
{
|
310
|
-
regp++;
|
311
|
-
regused++;
|
312
|
-
}
|
313
|
-
}
|
314
|
-
if (regused < 8)
|
315
|
-
argp = (char *)regp;
|
316
|
-
else
|
317
|
-
argp = stackp;
|
318
|
-
}
|
319
|
-
|
320
|
-
/* Enforce proper stack alignment of 64-bit types */
|
321
|
-
if (argp == stackp && a > sizeof (int))
|
322
|
-
{
|
323
|
-
stackp = (char *) FFI_ALIGN(stackp, a);
|
324
|
-
argp = stackp;
|
325
|
-
}
|
326
|
-
|
327
|
-
if (z < sizeof (int) && t != FFI_TYPE_STRUCT)
|
328
|
-
*p_argv = (void *) (argp + sizeof (int) - z);
|
329
|
-
else
|
330
|
-
*p_argv = (void *) argp;
|
331
|
-
|
332
|
-
/* Align if necessary */
|
333
|
-
if ((sizeof (int) - 1) & z)
|
334
|
-
z = FFI_ALIGN(z, sizeof (int));
|
335
|
-
|
336
|
-
p_argv++;
|
337
|
-
|
338
|
-
/* Be careful, once all registers are exhausted, and about to fetch from
|
339
|
-
stack, regp == stackp. Therefore the check for regused as well. */
|
340
|
-
if (argp == (char *)regp && regused < 8)
|
341
|
-
{
|
342
|
-
regp += z / sizeof (int);
|
343
|
-
regused += z / sizeof (int);
|
344
|
-
}
|
345
|
-
else
|
346
|
-
stackp += z;
|
347
|
-
}
|
348
|
-
}
|
349
|
-
|
350
|
-
unsigned int
|
351
|
-
ffi_closure_OBSD_inner (ffi_closure *closure, void *resp, unsigned int *regp,
|
352
|
-
char *stackp)
|
353
|
-
{
|
354
|
-
ffi_cif *cif;
|
355
|
-
void **arg_area;
|
356
|
-
|
357
|
-
cif = closure->cif;
|
358
|
-
arg_area = (void**) alloca (cif->nargs * sizeof (void *));
|
359
|
-
|
360
|
-
ffi_prep_closure_args_OBSD(cif, arg_area, regp, stackp);
|
361
|
-
|
362
|
-
(closure->fun) (cif, resp, arg_area, closure->user_data);
|
363
|
-
|
364
|
-
return cif->flags;
|
365
|
-
}
|
366
|
-
|
367
|
-
ffi_status
|
368
|
-
ffi_prep_closure_loc (ffi_closure* closure, ffi_cif* cif,
|
369
|
-
void (*fun)(ffi_cif*,void*,void**,void*),
|
370
|
-
void *user_data, void *codeloc)
|
371
|
-
{
|
372
|
-
unsigned int *tramp = (unsigned int *) codeloc;
|
373
|
-
void *fn;
|
374
|
-
|
375
|
-
FFI_ASSERT (cif->abi == FFI_OBSD);
|
376
|
-
|
377
|
-
if (cif->rtype->type == FFI_TYPE_STRUCT && !cif->flags)
|
378
|
-
fn = &ffi_closure_struct_OBSD;
|
379
|
-
else
|
380
|
-
fn = &ffi_closure_OBSD;
|
381
|
-
|
382
|
-
/* or.u %r10, %r0, %hi16(fn) */
|
383
|
-
tramp[0] = 0x5d400000 | (((unsigned int)fn) >> 16);
|
384
|
-
/* or.u %r13, %r0, %hi16(closure) */
|
385
|
-
tramp[1] = 0x5da00000 | ((unsigned int)closure >> 16);
|
386
|
-
/* or %r10, %r10, %lo16(fn) */
|
387
|
-
tramp[2] = 0x594a0000 | (((unsigned int)fn) & 0xffff);
|
388
|
-
/* jmp.n %r10 */
|
389
|
-
tramp[3] = 0xf400c40a;
|
390
|
-
/* or %r13, %r13, %lo16(closure) */
|
391
|
-
tramp[4] = 0x59ad0000 | ((unsigned int)closure & 0xffff);
|
392
|
-
|
393
|
-
ffi_cacheflush_OBSD((unsigned int)codeloc, FFI_TRAMPOLINE_SIZE);
|
394
|
-
|
395
|
-
closure->cif = cif;
|
396
|
-
closure->user_data = user_data;
|
397
|
-
closure->fun = fun;
|
398
|
-
|
399
|
-
return FFI_OK;
|
400
|
-
}
|