ffi 0.5.0-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.
- data/LICENSE +51 -0
- data/README.rdoc +69 -0
- data/Rakefile +191 -0
- data/ext/ffi_c/AbstractMemory.c +489 -0
- data/ext/ffi_c/AbstractMemory.h +160 -0
- data/ext/ffi_c/ArrayType.c +129 -0
- data/ext/ffi_c/ArrayType.h +58 -0
- data/ext/ffi_c/AutoPointer.c +61 -0
- data/ext/ffi_c/AutoPointer.h +18 -0
- data/ext/ffi_c/Buffer.c +187 -0
- data/ext/ffi_c/Call.c +853 -0
- data/ext/ffi_c/Call.h +86 -0
- data/ext/ffi_c/ClosurePool.c +302 -0
- data/ext/ffi_c/ClosurePool.h +29 -0
- data/ext/ffi_c/DynamicLibrary.c +216 -0
- data/ext/ffi_c/DynamicLibrary.h +22 -0
- data/ext/ffi_c/Function.c +478 -0
- data/ext/ffi_c/Function.h +80 -0
- data/ext/ffi_c/FunctionInfo.c +221 -0
- data/ext/ffi_c/LastError.c +159 -0
- data/ext/ffi_c/LastError.h +18 -0
- data/ext/ffi_c/MemoryPointer.c +178 -0
- data/ext/ffi_c/MemoryPointer.h +20 -0
- data/ext/ffi_c/MethodHandle.c +346 -0
- data/ext/ffi_c/MethodHandle.h +53 -0
- data/ext/ffi_c/Platform.c +59 -0
- data/ext/ffi_c/Platform.h +16 -0
- data/ext/ffi_c/Pointer.c +224 -0
- data/ext/ffi_c/Pointer.h +49 -0
- data/ext/ffi_c/Struct.c +770 -0
- data/ext/ffi_c/Struct.h +80 -0
- data/ext/ffi_c/StructByValue.c +140 -0
- data/ext/ffi_c/StructByValue.h +53 -0
- data/ext/ffi_c/StructLayout.c +450 -0
- data/ext/ffi_c/Type.c +329 -0
- data/ext/ffi_c/Type.h +57 -0
- data/ext/ffi_c/Types.c +103 -0
- data/ext/ffi_c/Types.h +85 -0
- data/ext/ffi_c/Variadic.c +260 -0
- data/ext/ffi_c/compat.h +72 -0
- data/ext/ffi_c/endian.h +40 -0
- data/ext/ffi_c/extconf.rb +30 -0
- data/ext/ffi_c/ffi.c +82 -0
- data/ext/ffi_c/libffi.bsd.mk +34 -0
- data/ext/ffi_c/libffi.darwin.mk +75 -0
- data/ext/ffi_c/libffi.gnu.mk +29 -0
- data/ext/ffi_c/libffi.mk +13 -0
- data/ext/ffi_c/libffi/ChangeLog +3243 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
- data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
- data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
- data/ext/ffi_c/libffi/LICENSE +21 -0
- data/ext/ffi_c/libffi/Makefile.am +177 -0
- data/ext/ffi_c/libffi/Makefile.in +1640 -0
- data/ext/ffi_c/libffi/README +328 -0
- data/ext/ffi_c/libffi/TODO +1 -0
- data/ext/ffi_c/libffi/acinclude.m4 +92 -0
- data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
- data/ext/ffi_c/libffi/compile +142 -0
- data/ext/ffi_c/libffi/config.guess +1516 -0
- data/ext/ffi_c/libffi/config.sub +1626 -0
- data/ext/ffi_c/libffi/configure +24414 -0
- data/ext/ffi_c/libffi/configure.ac +365 -0
- data/ext/ffi_c/libffi/configure.host +11 -0
- data/ext/ffi_c/libffi/depcomp +584 -0
- data/ext/ffi_c/libffi/doc/libffi.info +533 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
- data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
- data/ext/ffi_c/libffi/doc/version.texi +4 -0
- data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
- data/ext/ffi_c/libffi/include/Makefile.am +9 -0
- data/ext/ffi_c/libffi/include/Makefile.in +422 -0
- data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
- data/ext/ffi_c/libffi/install-sh +323 -0
- data/ext/ffi_c/libffi/libffi.pc.in +10 -0
- data/ext/ffi_c/libffi/libtool-version +29 -0
- data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
- data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
- data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
- data/ext/ffi_c/libffi/ltconfig +2862 -0
- data/ext/ffi_c/libffi/ltmain.sh +6930 -0
- data/ext/ffi_c/libffi/man/Makefile.am +8 -0
- data/ext/ffi_c/libffi/man/Makefile.in +395 -0
- data/ext/ffi_c/libffi/man/ffi.3 +31 -0
- data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
- data/ext/ffi_c/libffi/mdate-sh +201 -0
- data/ext/ffi_c/libffi/missing +353 -0
- data/ext/ffi_c/libffi/mkinstalldirs +158 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
- data/ext/ffi_c/libffi/src/closures.c +596 -0
- data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
- data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
- data/ext/ffi_c/libffi/src/debug.c +59 -0
- data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
- data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
- data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
- data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
- data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
- data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
- data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
- data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
- data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
- data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
- data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
- data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
- data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
- data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
- data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
- data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
- data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
- data/ext/ffi_c/libffi/src/raw_api.c +254 -0
- data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
- data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
- data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
- data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
- data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
- data/ext/ffi_c/libffi/src/types.c +77 -0
- data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
- data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
- data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
- data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
- data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
- data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
- data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
- data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
- data/ext/ffi_c/libffi/texinfo.tex +7482 -0
- data/ext/ffi_c/rbffi.h +26 -0
- data/gen/Rakefile +12 -0
- data/lib/1.8/ffi_c.so +0 -0
- data/lib/1.9/ffi_c.so +0 -0
- data/lib/ffi.rb +11 -0
- data/lib/ffi/autopointer.rb +61 -0
- data/lib/ffi/buffer.rb +0 -0
- data/lib/ffi/callback.rb +10 -0
- data/lib/ffi/enum.rb +78 -0
- data/lib/ffi/errno.rb +8 -0
- data/lib/ffi/ffi.rb +99 -0
- data/lib/ffi/io.rb +21 -0
- data/lib/ffi/library.rb +218 -0
- data/lib/ffi/managedstruct.rb +55 -0
- data/lib/ffi/memorypointer.rb +73 -0
- data/lib/ffi/platform.rb +88 -0
- data/lib/ffi/pointer.rb +119 -0
- data/lib/ffi/struct.rb +183 -0
- data/lib/ffi/tools/const_generator.rb +177 -0
- data/lib/ffi/tools/generator.rb +58 -0
- data/lib/ffi/tools/generator_task.rb +35 -0
- data/lib/ffi/tools/struct_generator.rb +194 -0
- data/lib/ffi/tools/types_generator.rb +123 -0
- data/lib/ffi/types.rb +153 -0
- data/lib/ffi/union.rb +12 -0
- data/lib/ffi/variadic.rb +25 -0
- data/spec/ffi/bool_spec.rb +24 -0
- data/spec/ffi/buffer_spec.rb +202 -0
- data/spec/ffi/callback_spec.rb +591 -0
- data/spec/ffi/enum_spec.rb +164 -0
- data/spec/ffi/errno_spec.rb +13 -0
- data/spec/ffi/function_spec.rb +73 -0
- data/spec/ffi/library_spec.rb +148 -0
- data/spec/ffi/managed_struct_spec.rb +56 -0
- data/spec/ffi/number_spec.rb +231 -0
- data/spec/ffi/pointer_spec.rb +195 -0
- data/spec/ffi/rbx/attach_function_spec.rb +27 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
- data/spec/ffi/rbx/spec_helper.rb +1 -0
- data/spec/ffi/rbx/struct_spec.rb +13 -0
- data/spec/ffi/spec_helper.rb +17 -0
- data/spec/ffi/string_spec.rb +103 -0
- data/spec/ffi/struct_callback_spec.rb +64 -0
- data/spec/ffi/struct_initialize_spec.rb +30 -0
- data/spec/ffi/struct_spec.rb +529 -0
- data/spec/ffi/typedef_spec.rb +48 -0
- data/spec/ffi/union_spec.rb +60 -0
- data/spec/ffi/variadic_spec.rb +84 -0
- data/spec/spec.opts +4 -0
- metadata +396 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
/* -----------------------------------------------------------------*-C-*-
|
2
|
+
ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
|
3
|
+
Target configuration macros for SuperH.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
``Software''), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included
|
14
|
+
in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
23
|
+
DEALINGS IN THE SOFTWARE.
|
24
|
+
|
25
|
+
----------------------------------------------------------------------- */
|
26
|
+
|
27
|
+
#ifndef LIBFFI_TARGET_H
|
28
|
+
#define LIBFFI_TARGET_H
|
29
|
+
|
30
|
+
/* ---- Generic type definitions ----------------------------------------- */
|
31
|
+
|
32
|
+
#ifndef LIBFFI_ASM
|
33
|
+
typedef unsigned long ffi_arg;
|
34
|
+
typedef signed long ffi_sarg;
|
35
|
+
|
36
|
+
typedef enum ffi_abi {
|
37
|
+
FFI_FIRST_ABI = 0,
|
38
|
+
FFI_SYSV,
|
39
|
+
FFI_DEFAULT_ABI = FFI_SYSV,
|
40
|
+
FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
|
41
|
+
} ffi_abi;
|
42
|
+
#endif
|
43
|
+
|
44
|
+
#define FFI_CLOSURES 1
|
45
|
+
#define FFI_TRAMPOLINE_SIZE 16
|
46
|
+
#define FFI_NATIVE_RAW_API 0
|
47
|
+
|
48
|
+
#endif
|
49
|
+
|
@@ -0,0 +1,850 @@
|
|
1
|
+
/* -----------------------------------------------------------------------
|
2
|
+
sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima
|
3
|
+
|
4
|
+
SuperH 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, EXPRESS
|
18
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
20
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
21
|
+
ANY CLAIM, DAMAGES OR
|
22
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
23
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
24
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
----------------------------------------------------------------------- */
|
26
|
+
|
27
|
+
#define LIBFFI_ASM
|
28
|
+
#include <fficonfig.h>
|
29
|
+
#include <ffi.h>
|
30
|
+
#ifdef HAVE_MACHINE_ASM_H
|
31
|
+
#include <machine/asm.h>
|
32
|
+
#else
|
33
|
+
/* XXX these lose for some platforms, I'm sure. */
|
34
|
+
#define CNAME(x) x
|
35
|
+
#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#if defined(__HITACHI__)
|
39
|
+
#define STRUCT_VALUE_ADDRESS_WITH_ARG 1
|
40
|
+
#else
|
41
|
+
#define STRUCT_VALUE_ADDRESS_WITH_ARG 0
|
42
|
+
#endif
|
43
|
+
|
44
|
+
.text
|
45
|
+
|
46
|
+
# r4: ffi_prep_args
|
47
|
+
# r5: &ecif
|
48
|
+
# r6: bytes
|
49
|
+
# r7: flags
|
50
|
+
# sp+0: rvalue
|
51
|
+
# sp+4: fn
|
52
|
+
|
53
|
+
# This assumes we are using gas.
|
54
|
+
ENTRY(ffi_call_SYSV)
|
55
|
+
# Save registers
|
56
|
+
.LFB1:
|
57
|
+
mov.l r8,@-r15
|
58
|
+
.LCFI0:
|
59
|
+
mov.l r9,@-r15
|
60
|
+
.LCFI1:
|
61
|
+
mov.l r10,@-r15
|
62
|
+
.LCFI2:
|
63
|
+
mov.l r12,@-r15
|
64
|
+
.LCFI3:
|
65
|
+
mov.l r14,@-r15
|
66
|
+
.LCFI4:
|
67
|
+
sts.l pr,@-r15
|
68
|
+
.LCFI5:
|
69
|
+
mov r15,r14
|
70
|
+
.LCFI6:
|
71
|
+
#if defined(__SH4__)
|
72
|
+
mov r6,r8
|
73
|
+
mov r7,r9
|
74
|
+
|
75
|
+
sub r6,r15
|
76
|
+
add #-16,r15
|
77
|
+
mov #~7,r0
|
78
|
+
and r0,r15
|
79
|
+
|
80
|
+
mov r4,r0
|
81
|
+
jsr @r0
|
82
|
+
mov r15,r4
|
83
|
+
|
84
|
+
mov r9,r1
|
85
|
+
shlr8 r9
|
86
|
+
shlr8 r9
|
87
|
+
shlr8 r9
|
88
|
+
|
89
|
+
mov #FFI_TYPE_STRUCT,r2
|
90
|
+
cmp/eq r2,r9
|
91
|
+
bf 1f
|
92
|
+
#if STRUCT_VALUE_ADDRESS_WITH_ARG
|
93
|
+
mov.l @r15+,r4
|
94
|
+
bra 2f
|
95
|
+
mov #5,r2
|
96
|
+
#else
|
97
|
+
mov.l @r15+,r10
|
98
|
+
#endif
|
99
|
+
1:
|
100
|
+
mov #4,r2
|
101
|
+
2:
|
102
|
+
mov #4,r3
|
103
|
+
|
104
|
+
L_pass:
|
105
|
+
cmp/pl r8
|
106
|
+
bf L_call_it
|
107
|
+
|
108
|
+
mov r1,r0
|
109
|
+
and #3,r0
|
110
|
+
|
111
|
+
L_pass_d:
|
112
|
+
cmp/eq #FFI_TYPE_DOUBLE,r0
|
113
|
+
bf L_pass_f
|
114
|
+
|
115
|
+
mov r3,r0
|
116
|
+
and #1,r0
|
117
|
+
tst r0,r0
|
118
|
+
bt 1f
|
119
|
+
add #1,r3
|
120
|
+
1:
|
121
|
+
mov #12,r0
|
122
|
+
cmp/hs r0,r3
|
123
|
+
bt/s 3f
|
124
|
+
shlr2 r1
|
125
|
+
bsr L_pop_d
|
126
|
+
nop
|
127
|
+
3:
|
128
|
+
add #2,r3
|
129
|
+
bra L_pass
|
130
|
+
add #-8,r8
|
131
|
+
|
132
|
+
L_pop_d:
|
133
|
+
mov r3,r0
|
134
|
+
add r0,r0
|
135
|
+
add r3,r0
|
136
|
+
add #-12,r0
|
137
|
+
braf r0
|
138
|
+
nop
|
139
|
+
#ifdef __LITTLE_ENDIAN__
|
140
|
+
fmov.s @r15+,fr5
|
141
|
+
rts
|
142
|
+
fmov.s @r15+,fr4
|
143
|
+
fmov.s @r15+,fr7
|
144
|
+
rts
|
145
|
+
fmov.s @r15+,fr6
|
146
|
+
fmov.s @r15+,fr9
|
147
|
+
rts
|
148
|
+
fmov.s @r15+,fr8
|
149
|
+
fmov.s @r15+,fr11
|
150
|
+
rts
|
151
|
+
fmov.s @r15+,fr10
|
152
|
+
#else
|
153
|
+
fmov.s @r15+,fr4
|
154
|
+
rts
|
155
|
+
fmov.s @r15+,fr5
|
156
|
+
fmov.s @r15+,fr6
|
157
|
+
rts
|
158
|
+
fmov.s @r15+,fr7
|
159
|
+
fmov.s @r15+,fr8
|
160
|
+
rts
|
161
|
+
fmov.s @r15+,fr9
|
162
|
+
fmov.s @r15+,fr10
|
163
|
+
rts
|
164
|
+
fmov.s @r15+,fr11
|
165
|
+
#endif
|
166
|
+
|
167
|
+
L_pass_f:
|
168
|
+
cmp/eq #FFI_TYPE_FLOAT,r0
|
169
|
+
bf L_pass_i
|
170
|
+
|
171
|
+
mov #12,r0
|
172
|
+
cmp/hs r0,r3
|
173
|
+
bt/s 2f
|
174
|
+
shlr2 r1
|
175
|
+
bsr L_pop_f
|
176
|
+
nop
|
177
|
+
2:
|
178
|
+
add #1,r3
|
179
|
+
bra L_pass
|
180
|
+
add #-4,r8
|
181
|
+
|
182
|
+
L_pop_f:
|
183
|
+
mov r3,r0
|
184
|
+
shll2 r0
|
185
|
+
add #-16,r0
|
186
|
+
braf r0
|
187
|
+
nop
|
188
|
+
#ifdef __LITTLE_ENDIAN__
|
189
|
+
rts
|
190
|
+
fmov.s @r15+,fr5
|
191
|
+
rts
|
192
|
+
fmov.s @r15+,fr4
|
193
|
+
rts
|
194
|
+
fmov.s @r15+,fr7
|
195
|
+
rts
|
196
|
+
fmov.s @r15+,fr6
|
197
|
+
rts
|
198
|
+
fmov.s @r15+,fr9
|
199
|
+
rts
|
200
|
+
fmov.s @r15+,fr8
|
201
|
+
rts
|
202
|
+
fmov.s @r15+,fr11
|
203
|
+
rts
|
204
|
+
fmov.s @r15+,fr10
|
205
|
+
#else
|
206
|
+
rts
|
207
|
+
fmov.s @r15+,fr4
|
208
|
+
rts
|
209
|
+
fmov.s @r15+,fr5
|
210
|
+
rts
|
211
|
+
fmov.s @r15+,fr6
|
212
|
+
rts
|
213
|
+
fmov.s @r15+,fr7
|
214
|
+
rts
|
215
|
+
fmov.s @r15+,fr8
|
216
|
+
rts
|
217
|
+
fmov.s @r15+,fr9
|
218
|
+
rts
|
219
|
+
fmov.s @r15+,fr10
|
220
|
+
rts
|
221
|
+
fmov.s @r15+,fr11
|
222
|
+
#endif
|
223
|
+
|
224
|
+
L_pass_i:
|
225
|
+
cmp/eq #FFI_TYPE_INT,r0
|
226
|
+
bf L_call_it
|
227
|
+
|
228
|
+
mov #8,r0
|
229
|
+
cmp/hs r0,r2
|
230
|
+
bt/s 2f
|
231
|
+
shlr2 r1
|
232
|
+
bsr L_pop_i
|
233
|
+
nop
|
234
|
+
2:
|
235
|
+
add #1,r2
|
236
|
+
bra L_pass
|
237
|
+
add #-4,r8
|
238
|
+
|
239
|
+
L_pop_i:
|
240
|
+
mov r2,r0
|
241
|
+
shll2 r0
|
242
|
+
add #-16,r0
|
243
|
+
braf r0
|
244
|
+
nop
|
245
|
+
rts
|
246
|
+
mov.l @r15+,r4
|
247
|
+
rts
|
248
|
+
mov.l @r15+,r5
|
249
|
+
rts
|
250
|
+
mov.l @r15+,r6
|
251
|
+
rts
|
252
|
+
mov.l @r15+,r7
|
253
|
+
|
254
|
+
L_call_it:
|
255
|
+
# call function
|
256
|
+
#if (! STRUCT_VALUE_ADDRESS_WITH_ARG)
|
257
|
+
mov r10, r2
|
258
|
+
#endif
|
259
|
+
mov.l @(28,r14),r1
|
260
|
+
jsr @r1
|
261
|
+
nop
|
262
|
+
|
263
|
+
L_ret_d:
|
264
|
+
mov #FFI_TYPE_DOUBLE,r2
|
265
|
+
cmp/eq r2,r9
|
266
|
+
bf L_ret_ll
|
267
|
+
|
268
|
+
mov.l @(24,r14),r1
|
269
|
+
#ifdef __LITTLE_ENDIAN__
|
270
|
+
fmov.s fr1,@r1
|
271
|
+
add #4,r1
|
272
|
+
bra L_epilogue
|
273
|
+
fmov.s fr0,@r1
|
274
|
+
#else
|
275
|
+
fmov.s fr0,@r1
|
276
|
+
add #4,r1
|
277
|
+
bra L_epilogue
|
278
|
+
fmov.s fr1,@r1
|
279
|
+
#endif
|
280
|
+
|
281
|
+
L_ret_ll:
|
282
|
+
mov #FFI_TYPE_SINT64,r2
|
283
|
+
cmp/eq r2,r9
|
284
|
+
bt/s 1f
|
285
|
+
mov #FFI_TYPE_UINT64,r2
|
286
|
+
cmp/eq r2,r9
|
287
|
+
bf L_ret_f
|
288
|
+
|
289
|
+
1:
|
290
|
+
mov.l @(24,r14),r2
|
291
|
+
mov.l r0,@r2
|
292
|
+
bra L_epilogue
|
293
|
+
mov.l r1,@(4,r2)
|
294
|
+
|
295
|
+
L_ret_f:
|
296
|
+
mov #FFI_TYPE_FLOAT,r2
|
297
|
+
cmp/eq r2,r9
|
298
|
+
bf L_ret_i
|
299
|
+
|
300
|
+
mov.l @(24,r14),r1
|
301
|
+
bra L_epilogue
|
302
|
+
fmov.s fr0,@r1
|
303
|
+
|
304
|
+
L_ret_i:
|
305
|
+
mov #FFI_TYPE_INT,r2
|
306
|
+
cmp/eq r2,r9
|
307
|
+
bf L_epilogue
|
308
|
+
|
309
|
+
mov.l @(24,r14),r1
|
310
|
+
bra L_epilogue
|
311
|
+
mov.l r0,@r1
|
312
|
+
|
313
|
+
L_epilogue:
|
314
|
+
# Remove the space we pushed for the args
|
315
|
+
mov r14,r15
|
316
|
+
|
317
|
+
lds.l @r15+,pr
|
318
|
+
mov.l @r15+,r14
|
319
|
+
mov.l @r15+,r12
|
320
|
+
mov.l @r15+,r10
|
321
|
+
mov.l @r15+,r9
|
322
|
+
rts
|
323
|
+
mov.l @r15+,r8
|
324
|
+
#else
|
325
|
+
mov r6,r8
|
326
|
+
mov r7,r9
|
327
|
+
|
328
|
+
sub r6,r15
|
329
|
+
add #-16,r15
|
330
|
+
mov #~7,r0
|
331
|
+
and r0,r15
|
332
|
+
|
333
|
+
mov r4,r0
|
334
|
+
jsr @r0
|
335
|
+
mov r15,r4
|
336
|
+
|
337
|
+
mov r9,r3
|
338
|
+
shlr8 r9
|
339
|
+
shlr8 r9
|
340
|
+
shlr8 r9
|
341
|
+
|
342
|
+
mov #FFI_TYPE_STRUCT,r2
|
343
|
+
cmp/eq r2,r9
|
344
|
+
bf 1f
|
345
|
+
#if STRUCT_VALUE_ADDRESS_WITH_ARG
|
346
|
+
mov.l @r15+,r4
|
347
|
+
bra 2f
|
348
|
+
mov #5,r2
|
349
|
+
#else
|
350
|
+
mov.l @r15+,r10
|
351
|
+
#endif
|
352
|
+
1:
|
353
|
+
mov #4,r2
|
354
|
+
2:
|
355
|
+
|
356
|
+
L_pass:
|
357
|
+
cmp/pl r8
|
358
|
+
bf L_call_it
|
359
|
+
|
360
|
+
mov r3,r0
|
361
|
+
and #3,r0
|
362
|
+
|
363
|
+
L_pass_d:
|
364
|
+
cmp/eq #FFI_TYPE_DOUBLE,r0
|
365
|
+
bf L_pass_i
|
366
|
+
|
367
|
+
mov r15,r0
|
368
|
+
and #7,r0
|
369
|
+
tst r0,r0
|
370
|
+
bt 1f
|
371
|
+
add #4,r15
|
372
|
+
1:
|
373
|
+
mov #8,r0
|
374
|
+
cmp/hs r0,r2
|
375
|
+
bt/s 2f
|
376
|
+
shlr2 r3
|
377
|
+
bsr L_pop_d
|
378
|
+
nop
|
379
|
+
2:
|
380
|
+
add #2,r2
|
381
|
+
bra L_pass
|
382
|
+
add #-8,r8
|
383
|
+
|
384
|
+
L_pop_d:
|
385
|
+
mov r2,r0
|
386
|
+
add r0,r0
|
387
|
+
add r2,r0
|
388
|
+
add #-12,r0
|
389
|
+
add r0,r0
|
390
|
+
braf r0
|
391
|
+
nop
|
392
|
+
mov.l @r15+,r4
|
393
|
+
rts
|
394
|
+
mov.l @r15+,r5
|
395
|
+
mov.l @r15+,r5
|
396
|
+
rts
|
397
|
+
mov.l @r15+,r6
|
398
|
+
mov.l @r15+,r6
|
399
|
+
rts
|
400
|
+
mov.l @r15+,r7
|
401
|
+
rts
|
402
|
+
mov.l @r15+,r7
|
403
|
+
|
404
|
+
L_pass_i:
|
405
|
+
cmp/eq #FFI_TYPE_INT,r0
|
406
|
+
bf L_call_it
|
407
|
+
|
408
|
+
mov #8,r0
|
409
|
+
cmp/hs r0,r2
|
410
|
+
bt/s 2f
|
411
|
+
shlr2 r3
|
412
|
+
bsr L_pop_i
|
413
|
+
nop
|
414
|
+
2:
|
415
|
+
add #1,r2
|
416
|
+
bra L_pass
|
417
|
+
add #-4,r8
|
418
|
+
|
419
|
+
L_pop_i:
|
420
|
+
mov r2,r0
|
421
|
+
shll2 r0
|
422
|
+
add #-16,r0
|
423
|
+
braf r0
|
424
|
+
nop
|
425
|
+
rts
|
426
|
+
mov.l @r15+,r4
|
427
|
+
rts
|
428
|
+
mov.l @r15+,r5
|
429
|
+
rts
|
430
|
+
mov.l @r15+,r6
|
431
|
+
rts
|
432
|
+
mov.l @r15+,r7
|
433
|
+
|
434
|
+
L_call_it:
|
435
|
+
# call function
|
436
|
+
#if (! STRUCT_VALUE_ADDRESS_WITH_ARG)
|
437
|
+
mov r10, r2
|
438
|
+
#endif
|
439
|
+
mov.l @(28,r14),r1
|
440
|
+
jsr @r1
|
441
|
+
nop
|
442
|
+
|
443
|
+
L_ret_d:
|
444
|
+
mov #FFI_TYPE_DOUBLE,r2
|
445
|
+
cmp/eq r2,r9
|
446
|
+
bf L_ret_ll
|
447
|
+
|
448
|
+
mov.l @(24,r14),r2
|
449
|
+
mov.l r0,@r2
|
450
|
+
bra L_epilogue
|
451
|
+
mov.l r1,@(4,r2)
|
452
|
+
|
453
|
+
L_ret_ll:
|
454
|
+
mov #FFI_TYPE_SINT64,r2
|
455
|
+
cmp/eq r2,r9
|
456
|
+
bt/s 1f
|
457
|
+
mov #FFI_TYPE_UINT64,r2
|
458
|
+
cmp/eq r2,r9
|
459
|
+
bf L_ret_i
|
460
|
+
|
461
|
+
1:
|
462
|
+
mov.l @(24,r14),r2
|
463
|
+
mov.l r0,@r2
|
464
|
+
bra L_epilogue
|
465
|
+
mov.l r1,@(4,r2)
|
466
|
+
|
467
|
+
L_ret_i:
|
468
|
+
mov #FFI_TYPE_FLOAT,r2
|
469
|
+
cmp/eq r2,r9
|
470
|
+
bt 1f
|
471
|
+
mov #FFI_TYPE_INT,r2
|
472
|
+
cmp/eq r2,r9
|
473
|
+
bf L_epilogue
|
474
|
+
1:
|
475
|
+
mov.l @(24,r14),r1
|
476
|
+
bra L_epilogue
|
477
|
+
mov.l r0,@r1
|
478
|
+
|
479
|
+
L_epilogue:
|
480
|
+
# Remove the space we pushed for the args
|
481
|
+
mov r14,r15
|
482
|
+
|
483
|
+
lds.l @r15+,pr
|
484
|
+
mov.l @r15+,r14
|
485
|
+
mov.l @r15+,r12
|
486
|
+
mov.l @r15+,r10
|
487
|
+
mov.l @r15+,r9
|
488
|
+
rts
|
489
|
+
mov.l @r15+,r8
|
490
|
+
#endif
|
491
|
+
.LFE1:
|
492
|
+
.ffi_call_SYSV_end:
|
493
|
+
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
|
494
|
+
|
495
|
+
.globl ffi_closure_helper_SYSV
|
496
|
+
|
497
|
+
ENTRY(ffi_closure_SYSV)
|
498
|
+
.LFB2:
|
499
|
+
mov.l r7,@-r15
|
500
|
+
.LCFI7:
|
501
|
+
mov.l r6,@-r15
|
502
|
+
.LCFI8:
|
503
|
+
mov.l r5,@-r15
|
504
|
+
.LCFI9:
|
505
|
+
mov.l r4,@-r15
|
506
|
+
.LCFIA:
|
507
|
+
mov.l r14,@-r15
|
508
|
+
.LCFIB:
|
509
|
+
sts.l pr,@-r15
|
510
|
+
|
511
|
+
/* Stack layout:
|
512
|
+
xx bytes (on stack parameters)
|
513
|
+
16 bytes (register parameters)
|
514
|
+
4 bytes (saved frame pointer)
|
515
|
+
4 bytes (saved return address)
|
516
|
+
32 bytes (floating register parameters, SH-4 only)
|
517
|
+
8 bytes (result)
|
518
|
+
4 bytes (pad)
|
519
|
+
4 bytes (5th arg)
|
520
|
+
<- new stack pointer
|
521
|
+
*/
|
522
|
+
.LCFIC:
|
523
|
+
#if defined(__SH4__)
|
524
|
+
add #-48,r15
|
525
|
+
#else
|
526
|
+
add #-16,r15
|
527
|
+
#endif
|
528
|
+
.LCFID:
|
529
|
+
mov r15,r14
|
530
|
+
.LCFIE:
|
531
|
+
|
532
|
+
#if defined(__SH4__)
|
533
|
+
mov r14,r1
|
534
|
+
add #48,r1
|
535
|
+
#ifdef __LITTLE_ENDIAN__
|
536
|
+
fmov.s fr10,@-r1
|
537
|
+
fmov.s fr11,@-r1
|
538
|
+
fmov.s fr8,@-r1
|
539
|
+
fmov.s fr9,@-r1
|
540
|
+
fmov.s fr6,@-r1
|
541
|
+
fmov.s fr7,@-r1
|
542
|
+
fmov.s fr4,@-r1
|
543
|
+
fmov.s fr5,@-r1
|
544
|
+
#else
|
545
|
+
fmov.s fr11,@-r1
|
546
|
+
fmov.s fr10,@-r1
|
547
|
+
fmov.s fr9,@-r1
|
548
|
+
fmov.s fr8,@-r1
|
549
|
+
fmov.s fr7,@-r1
|
550
|
+
fmov.s fr6,@-r1
|
551
|
+
fmov.s fr5,@-r1
|
552
|
+
fmov.s fr4,@-r1
|
553
|
+
#endif
|
554
|
+
mov r1,r7
|
555
|
+
mov r14,r6
|
556
|
+
add #56,r6
|
557
|
+
#else
|
558
|
+
mov r14,r6
|
559
|
+
add #24,r6
|
560
|
+
#endif
|
561
|
+
|
562
|
+
bt/s 10f
|
563
|
+
mov r2, r5
|
564
|
+
mov r14,r1
|
565
|
+
add #8,r1
|
566
|
+
mov r1,r5
|
567
|
+
10:
|
568
|
+
|
569
|
+
mov r14,r1
|
570
|
+
#if defined(__SH4__)
|
571
|
+
add #72,r1
|
572
|
+
#else
|
573
|
+
add #40,r1
|
574
|
+
#endif
|
575
|
+
mov.l r1,@r14
|
576
|
+
|
577
|
+
#ifdef PIC
|
578
|
+
mov.l L_got,r1
|
579
|
+
mova L_got,r0
|
580
|
+
add r0,r1
|
581
|
+
mov.l L_helper,r0
|
582
|
+
add r1,r0
|
583
|
+
#else
|
584
|
+
mov.l L_helper,r0
|
585
|
+
#endif
|
586
|
+
jsr @r0
|
587
|
+
mov r3,r4
|
588
|
+
|
589
|
+
shll r0
|
590
|
+
mov r0,r1
|
591
|
+
mova L_table,r0
|
592
|
+
add r1,r0
|
593
|
+
mov.w @r0,r0
|
594
|
+
mov r14,r2
|
595
|
+
braf r0
|
596
|
+
add #8,r2
|
597
|
+
0:
|
598
|
+
.align 2
|
599
|
+
#ifdef PIC
|
600
|
+
L_got:
|
601
|
+
.long _GLOBAL_OFFSET_TABLE_
|
602
|
+
L_helper:
|
603
|
+
.long ffi_closure_helper_SYSV@GOTOFF
|
604
|
+
#else
|
605
|
+
L_helper:
|
606
|
+
.long ffi_closure_helper_SYSV
|
607
|
+
#endif
|
608
|
+
L_table:
|
609
|
+
.short L_case_v - 0b /* FFI_TYPE_VOID */
|
610
|
+
.short L_case_i - 0b /* FFI_TYPE_INT */
|
611
|
+
#if defined(__SH4__)
|
612
|
+
.short L_case_f - 0b /* FFI_TYPE_FLOAT */
|
613
|
+
.short L_case_d - 0b /* FFI_TYPE_DOUBLE */
|
614
|
+
.short L_case_d - 0b /* FFI_TYPE_LONGDOUBLE */
|
615
|
+
#else
|
616
|
+
.short L_case_i - 0b /* FFI_TYPE_FLOAT */
|
617
|
+
.short L_case_ll - 0b /* FFI_TYPE_DOUBLE */
|
618
|
+
.short L_case_ll - 0b /* FFI_TYPE_LONGDOUBLE */
|
619
|
+
#endif
|
620
|
+
.short L_case_uq - 0b /* FFI_TYPE_UINT8 */
|
621
|
+
.short L_case_q - 0b /* FFI_TYPE_SINT8 */
|
622
|
+
.short L_case_uh - 0b /* FFI_TYPE_UINT16 */
|
623
|
+
.short L_case_h - 0b /* FFI_TYPE_SINT16 */
|
624
|
+
.short L_case_i - 0b /* FFI_TYPE_UINT32 */
|
625
|
+
.short L_case_i - 0b /* FFI_TYPE_SINT32 */
|
626
|
+
.short L_case_ll - 0b /* FFI_TYPE_UINT64 */
|
627
|
+
.short L_case_ll - 0b /* FFI_TYPE_SINT64 */
|
628
|
+
.short L_case_v - 0b /* FFI_TYPE_STRUCT */
|
629
|
+
.short L_case_i - 0b /* FFI_TYPE_POINTER */
|
630
|
+
|
631
|
+
#if defined(__SH4__)
|
632
|
+
L_case_d:
|
633
|
+
#ifdef __LITTLE_ENDIAN__
|
634
|
+
fmov.s @r2+,fr1
|
635
|
+
bra L_case_v
|
636
|
+
fmov.s @r2,fr0
|
637
|
+
#else
|
638
|
+
fmov.s @r2+,fr0
|
639
|
+
bra L_case_v
|
640
|
+
fmov.s @r2,fr1
|
641
|
+
#endif
|
642
|
+
|
643
|
+
L_case_f:
|
644
|
+
bra L_case_v
|
645
|
+
fmov.s @r2,fr0
|
646
|
+
#endif
|
647
|
+
|
648
|
+
L_case_ll:
|
649
|
+
mov.l @r2+,r0
|
650
|
+
bra L_case_v
|
651
|
+
mov.l @r2,r1
|
652
|
+
|
653
|
+
L_case_i:
|
654
|
+
bra L_case_v
|
655
|
+
mov.l @r2,r0
|
656
|
+
|
657
|
+
L_case_q:
|
658
|
+
#ifdef __LITTLE_ENDIAN__
|
659
|
+
#else
|
660
|
+
add #3,r2
|
661
|
+
#endif
|
662
|
+
bra L_case_v
|
663
|
+
mov.b @r2,r0
|
664
|
+
|
665
|
+
L_case_uq:
|
666
|
+
#ifdef __LITTLE_ENDIAN__
|
667
|
+
#else
|
668
|
+
add #3,r2
|
669
|
+
#endif
|
670
|
+
mov.b @r2,r0
|
671
|
+
bra L_case_v
|
672
|
+
extu.b r0,r0
|
673
|
+
|
674
|
+
L_case_h:
|
675
|
+
#ifdef __LITTLE_ENDIAN__
|
676
|
+
#else
|
677
|
+
add #2,r2
|
678
|
+
#endif
|
679
|
+
bra L_case_v
|
680
|
+
mov.w @r2,r0
|
681
|
+
|
682
|
+
L_case_uh:
|
683
|
+
#ifdef __LITTLE_ENDIAN__
|
684
|
+
#else
|
685
|
+
add #2,r2
|
686
|
+
#endif
|
687
|
+
mov.w @r2,r0
|
688
|
+
extu.w r0,r0
|
689
|
+
/* fall through */
|
690
|
+
|
691
|
+
L_case_v:
|
692
|
+
#if defined(__SH4__)
|
693
|
+
add #48,r15
|
694
|
+
#else
|
695
|
+
add #16,r15
|
696
|
+
#endif
|
697
|
+
lds.l @r15+,pr
|
698
|
+
mov.l @r15+,r14
|
699
|
+
rts
|
700
|
+
add #16,r15
|
701
|
+
.LFE2:
|
702
|
+
.ffi_closure_SYSV_end:
|
703
|
+
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
|
704
|
+
|
705
|
+
#if defined __ELF__ && defined __linux__
|
706
|
+
.section .note.GNU-stack,"",@progbits
|
707
|
+
#endif
|
708
|
+
|
709
|
+
.section ".eh_frame","aw",@progbits
|
710
|
+
__FRAME_BEGIN__:
|
711
|
+
.4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */
|
712
|
+
.LSCIE1:
|
713
|
+
.4byte 0x0 /* CIE Identifier Tag */
|
714
|
+
.byte 0x1 /* CIE Version */
|
715
|
+
#ifdef PIC
|
716
|
+
.ascii "zR\0" /* CIE Augmentation */
|
717
|
+
#else
|
718
|
+
.byte 0x0 /* CIE Augmentation */
|
719
|
+
#endif
|
720
|
+
.byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */
|
721
|
+
.byte 0x7c /* sleb128 -4; CIE Data Alignment Factor */
|
722
|
+
.byte 0x11 /* CIE RA Column */
|
723
|
+
#ifdef PIC
|
724
|
+
.uleb128 0x1 /* Augmentation size */
|
725
|
+
.byte 0x10 /* FDE Encoding (pcrel) */
|
726
|
+
#endif
|
727
|
+
.byte 0xc /* DW_CFA_def_cfa */
|
728
|
+
.byte 0xf /* uleb128 0xf */
|
729
|
+
.byte 0x0 /* uleb128 0x0 */
|
730
|
+
.align 2
|
731
|
+
.LECIE1:
|
732
|
+
.LSFDE1:
|
733
|
+
.4byte .LEFDE1-.LASFDE1 /* FDE Length */
|
734
|
+
.LASFDE1:
|
735
|
+
.4byte .LASFDE1-__FRAME_BEGIN__ /* FDE CIE offset */
|
736
|
+
#ifdef PIC
|
737
|
+
.4byte .LFB1-. /* FDE initial location */
|
738
|
+
#else
|
739
|
+
.4byte .LFB1 /* FDE initial location */
|
740
|
+
#endif
|
741
|
+
.4byte .LFE1-.LFB1 /* FDE address range */
|
742
|
+
#ifdef PIC
|
743
|
+
.uleb128 0x0 /* Augmentation size */
|
744
|
+
#endif
|
745
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
746
|
+
.4byte .LCFI0-.LFB1
|
747
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
748
|
+
.byte 0x4 /* uleb128 0x4 */
|
749
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
750
|
+
.4byte .LCFI1-.LCFI0
|
751
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
752
|
+
.byte 0x8 /* uleb128 0x4 */
|
753
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
754
|
+
.4byte .LCFI2-.LCFI1
|
755
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
756
|
+
.byte 0xc /* uleb128 0x4 */
|
757
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
758
|
+
.4byte .LCFI3-.LCFI2
|
759
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
760
|
+
.byte 0x10 /* uleb128 0x4 */
|
761
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
762
|
+
.4byte .LCFI4-.LCFI3
|
763
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
764
|
+
.byte 0x14 /* uleb128 0x4 */
|
765
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
766
|
+
.4byte .LCFI5-.LCFI4
|
767
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
768
|
+
.byte 0x18 /* uleb128 0x4 */
|
769
|
+
.byte 0x91 /* DW_CFA_offset, column 0x11 */
|
770
|
+
.byte 0x6 /* uleb128 0x6 */
|
771
|
+
.byte 0x8e /* DW_CFA_offset, column 0xe */
|
772
|
+
.byte 0x5 /* uleb128 0x5 */
|
773
|
+
.byte 0x8c /* DW_CFA_offset, column 0xc */
|
774
|
+
.byte 0x4 /* uleb128 0x4 */
|
775
|
+
.byte 0x8a /* DW_CFA_offset, column 0xa */
|
776
|
+
.byte 0x3 /* uleb128 0x3 */
|
777
|
+
.byte 0x89 /* DW_CFA_offset, column 0x9 */
|
778
|
+
.byte 0x2 /* uleb128 0x2 */
|
779
|
+
.byte 0x88 /* DW_CFA_offset, column 0x8 */
|
780
|
+
.byte 0x1 /* uleb128 0x1 */
|
781
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
782
|
+
.4byte .LCFI6-.LCFI5
|
783
|
+
.byte 0xd /* DW_CFA_def_cfa_register */
|
784
|
+
.byte 0xe /* uleb128 0xe */
|
785
|
+
.align 2
|
786
|
+
.LEFDE1:
|
787
|
+
|
788
|
+
.LSFDE3:
|
789
|
+
.4byte .LEFDE3-.LASFDE3 /* FDE Length */
|
790
|
+
.LASFDE3:
|
791
|
+
.4byte .LASFDE3-__FRAME_BEGIN__ /* FDE CIE offset */
|
792
|
+
#ifdef PIC
|
793
|
+
.4byte .LFB2-. /* FDE initial location */
|
794
|
+
#else
|
795
|
+
.4byte .LFB2 /* FDE initial location */
|
796
|
+
#endif
|
797
|
+
.4byte .LFE2-.LFB2 /* FDE address range */
|
798
|
+
#ifdef PIC
|
799
|
+
.uleb128 0x0 /* Augmentation size */
|
800
|
+
#endif
|
801
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
802
|
+
.4byte .LCFI7-.LFB2
|
803
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
804
|
+
.byte 0x4 /* uleb128 0x4 */
|
805
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
806
|
+
.4byte .LCFI8-.LCFI7
|
807
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
808
|
+
.byte 0x8 /* uleb128 0x4 */
|
809
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
810
|
+
.4byte .LCFI9-.LCFI8
|
811
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
812
|
+
.byte 0xc /* uleb128 0x4 */
|
813
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
814
|
+
.4byte .LCFIA-.LCFI9
|
815
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
816
|
+
.byte 0x10 /* uleb128 0x4 */
|
817
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
818
|
+
.4byte .LCFIB-.LCFIA
|
819
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
820
|
+
.byte 0x14 /* uleb128 0x4 */
|
821
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
822
|
+
.4byte .LCFIC-.LCFIB
|
823
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
824
|
+
.byte 0x18 /* uleb128 0x4 */
|
825
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
826
|
+
.4byte .LCFID-.LCFIC
|
827
|
+
.byte 0xe /* DW_CFA_def_cfa_offset */
|
828
|
+
#if defined(__SH4__)
|
829
|
+
.byte 24+48 /* uleb128 24+48 */
|
830
|
+
#else
|
831
|
+
.byte 24+16 /* uleb128 24+16 */
|
832
|
+
#endif
|
833
|
+
.byte 0x91 /* DW_CFA_offset, column 0x11 */
|
834
|
+
.byte 0x6 /* uleb128 0x6 */
|
835
|
+
.byte 0x8e /* DW_CFA_offset, column 0xe */
|
836
|
+
.byte 0x5 /* uleb128 0x5 */
|
837
|
+
.byte 0x84 /* DW_CFA_offset, column 0x4 */
|
838
|
+
.byte 0x4 /* uleb128 0x4 */
|
839
|
+
.byte 0x85 /* DW_CFA_offset, column 0x5 */
|
840
|
+
.byte 0x3 /* uleb128 0x3 */
|
841
|
+
.byte 0x86 /* DW_CFA_offset, column 0x6 */
|
842
|
+
.byte 0x2 /* uleb128 0x2 */
|
843
|
+
.byte 0x87 /* DW_CFA_offset, column 0x7 */
|
844
|
+
.byte 0x1 /* uleb128 0x1 */
|
845
|
+
.byte 0x4 /* DW_CFA_advance_loc4 */
|
846
|
+
.4byte .LCFIE-.LCFID
|
847
|
+
.byte 0xd /* DW_CFA_def_cfa_register */
|
848
|
+
.byte 0xe /* uleb128 0xe */
|
849
|
+
.align 2
|
850
|
+
.LEFDE3:
|