| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef LIBFFI_H | 
					
					
						
						| 
							 | 
						#define LIBFFI_H | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef __cplusplus | 
					
					
						
						| 
							 | 
						extern "C" { | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#ifndef AARCH64 | 
					
					
						
						| 
							 | 
						#define AARCH64 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_VOID       0 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_INT        1 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_FLOAT      2 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_DOUBLE     3 | 
					
					
						
						| 
							 | 
						#if 0 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_LONGDOUBLE 4 | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_UINT8      5 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_SINT8      6 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_UINT16     7 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_SINT16     8 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_UINT32     9 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_SINT32     10 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_UINT64     11 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_SINT64     12 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_STRUCT     13 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_POINTER    14 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_COMPLEX    15 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#define FFI_TYPE_LAST       FFI_TYPE_COMPLEX | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#include <ffitarget.h> | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef LIBFFI_ASM | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if defined(_MSC_VER) && !defined(__clang__) | 
					
					
						
						| 
							 | 
						#define __attribute__(X) | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#include <stddef.h> | 
					
					
						
						| 
							 | 
						#include <limits.h> | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#define FFI_64_BIT_MAX 9223372036854775807 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef LONG_LONG_MAX | 
					
					
						
						| 
							 | 
						# define FFI_LONG_LONG_MAX LONG_LONG_MAX | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						# ifdef LLONG_MAX | 
					
					
						
						| 
							 | 
						#  define FFI_LONG_LONG_MAX LLONG_MAX | 
					
					
						
						| 
							 | 
						#  ifdef _AIX52  | 
					
					
						
						| 
							 | 
						#   undef FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						#   define FFI_64_BIT_MAX 9223372036854775807LL | 
					
					
						
						| 
							 | 
						#  endif  | 
					
					
						
						| 
							 | 
						# else | 
					
					
						
						| 
							 | 
						#  ifdef __GNUC__ | 
					
					
						
						| 
							 | 
						#   define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ | 
					
					
						
						| 
							 | 
						#  endif | 
					
					
						
						| 
							 | 
						#  ifdef _AIX  | 
					
					
						
						| 
							 | 
						#   ifndef __PPC64__ | 
					
					
						
						| 
							 | 
						#    if defined (__IBMC__) || defined (__IBMCPP__) | 
					
					
						
						| 
							 | 
						#     define FFI_LONG_LONG_MAX LONGLONG_MAX | 
					
					
						
						| 
							 | 
						#    endif | 
					
					
						
						| 
							 | 
						#   endif  | 
					
					
						
						| 
							 | 
						#   undef  FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						#   define FFI_64_BIT_MAX 9223372036854775807LL | 
					
					
						
						| 
							 | 
						#  endif | 
					
					
						
						| 
							 | 
						# endif | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef struct _ffi_type | 
					
					
						
						| 
							 | 
						{ | 
					
					
						
						| 
							 | 
						  size_t size; | 
					
					
						
						| 
							 | 
						  unsigned short alignment; | 
					
					
						
						| 
							 | 
						  unsigned short type; | 
					
					
						
						| 
							 | 
						  struct _ffi_type **elements; | 
					
					
						
						| 
							 | 
						} ffi_type; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#if defined _MSC_VER | 
					
					
						
						| 
							 | 
						# if defined FFI_BUILDING_DLL  | 
					
					
						
						| 
							 | 
						#  define FFI_API __declspec(dllexport) | 
					
					
						
						| 
							 | 
						# elif !defined FFI_BUILDING   | 
					
					
						
						| 
							 | 
						#  define FFI_API __declspec(dllimport) | 
					
					
						
						| 
							 | 
						# else                         | 
					
					
						
						| 
							 | 
						#  define FFI_API | 
					
					
						
						| 
							 | 
						# endif | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						# define FFI_API | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#if defined LIBFFI_HIDE_BASIC_TYPES | 
					
					
						
						| 
							 | 
						# define FFI_EXTERN FFI_API | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						# define FFI_EXTERN extern FFI_API | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef LIBFFI_HIDE_BASIC_TYPES | 
					
					
						
						| 
							 | 
						#if SCHAR_MAX == 127 | 
					
					
						
						| 
							 | 
						# define ffi_type_uchar                ffi_type_uint8 | 
					
					
						
						| 
							 | 
						# define ffi_type_schar                ffi_type_sint8 | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						 #error "char size not supported" | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if SHRT_MAX == 32767 | 
					
					
						
						| 
							 | 
						# define ffi_type_ushort       ffi_type_uint16 | 
					
					
						
						| 
							 | 
						# define ffi_type_sshort       ffi_type_sint16 | 
					
					
						
						| 
							 | 
						#elif SHRT_MAX == 2147483647 | 
					
					
						
						| 
							 | 
						# define ffi_type_ushort       ffi_type_uint32 | 
					
					
						
						| 
							 | 
						# define ffi_type_sshort       ffi_type_sint32 | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						 #error "short size not supported" | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if INT_MAX == 32767 | 
					
					
						
						| 
							 | 
						# define ffi_type_uint         ffi_type_uint16 | 
					
					
						
						| 
							 | 
						# define ffi_type_sint         ffi_type_sint16 | 
					
					
						
						| 
							 | 
						#elif INT_MAX == 2147483647 | 
					
					
						
						| 
							 | 
						# define ffi_type_uint         ffi_type_uint32 | 
					
					
						
						| 
							 | 
						# define ffi_type_sint         ffi_type_sint32 | 
					
					
						
						| 
							 | 
						#elif INT_MAX == 9223372036854775807 | 
					
					
						
						| 
							 | 
						# define ffi_type_uint         ffi_type_uint64 | 
					
					
						
						| 
							 | 
						# define ffi_type_sint         ffi_type_sint64 | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						 #error "int size not supported" | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if LONG_MAX == 2147483647 | 
					
					
						
						| 
							 | 
						# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						 #error "no 64-bit data type supported" | 
					
					
						
						| 
							 | 
						# endif | 
					
					
						
						| 
							 | 
						#elif LONG_MAX != FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						 #error "long size not supported" | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if LONG_MAX == 2147483647 | 
					
					
						
						| 
							 | 
						# define ffi_type_ulong        ffi_type_uint32 | 
					
					
						
						| 
							 | 
						# define ffi_type_slong        ffi_type_sint32 | 
					
					
						
						| 
							 | 
						#elif LONG_MAX == FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						# define ffi_type_ulong        ffi_type_uint64 | 
					
					
						
						| 
							 | 
						# define ffi_type_slong        ffi_type_sint64 | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						 #error "long size not supported" | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_void; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_uint8; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_sint8; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_uint16; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_sint16; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_uint32; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_sint32; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_uint64; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_sint64; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_float; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_double; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_pointer; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if 0 | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_longdouble; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						#define ffi_type_longdouble ffi_type_double | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef FFI_TARGET_HAS_COMPLEX_TYPE | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_complex_float; | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_complex_double; | 
					
					
						
						| 
							 | 
						#if 0 | 
					
					
						
						| 
							 | 
						FFI_EXTERN ffi_type ffi_type_complex_longdouble; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						#define ffi_type_complex_longdouble ffi_type_complex_double | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						#endif  | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef enum { | 
					
					
						
						| 
							 | 
						  FFI_OK = 0, | 
					
					
						
						| 
							 | 
						  FFI_BAD_TYPEDEF, | 
					
					
						
						| 
							 | 
						  FFI_BAD_ABI, | 
					
					
						
						| 
							 | 
						  FFI_BAD_ARGTYPE | 
					
					
						
						| 
							 | 
						} ffi_status; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef struct { | 
					
					
						
						| 
							 | 
						  ffi_abi abi; | 
					
					
						
						| 
							 | 
						  unsigned nargs; | 
					
					
						
						| 
							 | 
						  ffi_type **arg_types; | 
					
					
						
						| 
							 | 
						  ffi_type *rtype; | 
					
					
						
						| 
							 | 
						  unsigned bytes; | 
					
					
						
						| 
							 | 
						  unsigned flags; | 
					
					
						
						| 
							 | 
						#ifdef FFI_EXTRA_CIF_FIELDS | 
					
					
						
						| 
							 | 
						  FFI_EXTRA_CIF_FIELDS; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						} ffi_cif; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef FFI_SIZEOF_ARG | 
					
					
						
						| 
							 | 
						# if LONG_MAX == 2147483647 | 
					
					
						
						| 
							 | 
						#  define FFI_SIZEOF_ARG        4 | 
					
					
						
						| 
							 | 
						# elif LONG_MAX == FFI_64_BIT_MAX | 
					
					
						
						| 
							 | 
						#  define FFI_SIZEOF_ARG        8 | 
					
					
						
						| 
							 | 
						# endif | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef FFI_SIZEOF_JAVA_RAW | 
					
					
						
						| 
							 | 
						#  define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef union { | 
					
					
						
						| 
							 | 
						  ffi_sarg  sint; | 
					
					
						
						| 
							 | 
						  ffi_arg   uint; | 
					
					
						
						| 
							 | 
						  float	    flt; | 
					
					
						
						| 
							 | 
						  char      data[FFI_SIZEOF_ARG]; | 
					
					
						
						| 
							 | 
						  void*     ptr; | 
					
					
						
						| 
							 | 
						} ffi_raw; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						typedef union { | 
					
					
						
						| 
							 | 
						  signed int	sint; | 
					
					
						
						| 
							 | 
						  unsigned int	uint; | 
					
					
						
						| 
							 | 
						  float		flt; | 
					
					
						
						| 
							 | 
						  char		data[FFI_SIZEOF_JAVA_RAW]; | 
					
					
						
						| 
							 | 
						  void*		ptr; | 
					
					
						
						| 
							 | 
						} ffi_java_raw; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						typedef ffi_raw ffi_java_raw; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						void ffi_raw_call (ffi_cif *cif, | 
					
					
						
						| 
							 | 
								   void (*fn)(void), | 
					
					
						
						| 
							 | 
								   void *rvalue, | 
					
					
						
						| 
							 | 
								   ffi_raw *avalue); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); | 
					
					
						
						| 
							 | 
						FFI_API void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); | 
					
					
						
						| 
							 | 
						FFI_API size_t ffi_raw_size (ffi_cif *cif); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if !FFI_NATIVE_RAW_API | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						void ffi_java_raw_call (ffi_cif *cif, | 
					
					
						
						| 
							 | 
									void (*fn)(void), | 
					
					
						
						| 
							 | 
									void *rvalue, | 
					
					
						
						| 
							 | 
									ffi_java_raw *avalue) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						size_t ffi_java_raw_size (ffi_cif *cif) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if FFI_CLOSURES | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef _MSC_VER | 
					
					
						
						| 
							 | 
						__declspec(align(8)) | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						typedef struct { | 
					
					
						
						| 
							 | 
						#if 1 | 
					
					
						
						| 
							 | 
						  void *trampoline_table; | 
					
					
						
						| 
							 | 
						  void *trampoline_table_entry; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						  union { | 
					
					
						
						| 
							 | 
						    char tramp[FFI_TRAMPOLINE_SIZE]; | 
					
					
						
						| 
							 | 
						    void *ftramp; | 
					
					
						
						| 
							 | 
						  }; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						  ffi_cif   *cif; | 
					
					
						
						| 
							 | 
						  void     (*fun)(ffi_cif*,void*,void**,void*); | 
					
					
						
						| 
							 | 
						  void      *user_data; | 
					
					
						
						| 
							 | 
						#if defined(_MSC_VER) && defined(_M_IX86) | 
					
					
						
						| 
							 | 
						  void      *padding; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						} ffi_closure | 
					
					
						
						| 
							 | 
						#ifdef __GNUC__ | 
					
					
						
						| 
							 | 
						    __attribute__((aligned (8))) | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						    ; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifndef __GNUC__ | 
					
					
						
						| 
							 | 
						# ifdef __sgi | 
					
					
						
						| 
							 | 
						#  pragma pack 0 | 
					
					
						
						| 
							 | 
						# endif | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API void *ffi_closure_alloc (size_t size, void **code); | 
					
					
						
						| 
							 | 
						FFI_API void ffi_closure_free (void *); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if defined(PA_LINUX) || defined(PA_HPUX) | 
					
					
						
						| 
							 | 
						#define FFI_CLOSURE_PTR(X) ((void *)((unsigned int)(X) | 2)) | 
					
					
						
						| 
							 | 
						#define FFI_RESTORE_PTR(X) ((void *)((unsigned int)(X) & ~3)) | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						#define FFI_CLOSURE_PTR(X) (X) | 
					
					
						
						| 
							 | 
						#define FFI_RESTORE_PTR(X) (X) | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_closure (ffi_closure*, | 
					
					
						
						| 
							 | 
								  ffi_cif *, | 
					
					
						
						| 
							 | 
								  void (*fun)(ffi_cif*,void*,void**,void*), | 
					
					
						
						| 
							 | 
								  void *user_data) | 
					
					
						
						| 
							 | 
						#if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 405) | 
					
					
						
						| 
							 | 
						  __attribute__((deprecated ("use ffi_prep_closure_loc instead"))) | 
					
					
						
						| 
							 | 
						#elif defined(__GNUC__) && __GNUC__ >= 3 | 
					
					
						
						| 
							 | 
						  __attribute__((deprecated)) | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						  ; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_closure_loc (ffi_closure*, | 
					
					
						
						| 
							 | 
								      ffi_cif *, | 
					
					
						
						| 
							 | 
								      void (*fun)(ffi_cif*,void*,void**,void*), | 
					
					
						
						| 
							 | 
								      void *user_data, | 
					
					
						
						| 
							 | 
								      void *codeloc); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef __sgi | 
					
					
						
						| 
							 | 
						# pragma pack 8 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						typedef struct { | 
					
					
						
						| 
							 | 
						#if 1 | 
					
					
						
						| 
							 | 
						  void *trampoline_table; | 
					
					
						
						| 
							 | 
						  void *trampoline_table_entry; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						  char tramp[FFI_TRAMPOLINE_SIZE]; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						  ffi_cif   *cif; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if !FFI_NATIVE_RAW_API | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						   | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						  void     (*translate_args)(ffi_cif*,void*,void**,void*); | 
					
					
						
						| 
							 | 
						  void      *this_closure; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						  void     (*fun)(ffi_cif*,void*,ffi_raw*,void*); | 
					
					
						
						| 
							 | 
						  void      *user_data; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						} ffi_raw_closure; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef struct { | 
					
					
						
						| 
							 | 
						#if 1 | 
					
					
						
						| 
							 | 
						  void *trampoline_table; | 
					
					
						
						| 
							 | 
						  void *trampoline_table_entry; | 
					
					
						
						| 
							 | 
						#else | 
					
					
						
						| 
							 | 
						  char tramp[FFI_TRAMPOLINE_SIZE]; | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						  ffi_cif   *cif; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if !FFI_NATIVE_RAW_API | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						   | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						  void     (*translate_args)(ffi_cif*,void*,void**,void*); | 
					
					
						
						| 
							 | 
						  void      *this_closure; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						  void     (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); | 
					
					
						
						| 
							 | 
						  void      *user_data; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						} ffi_java_raw_closure; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_raw_closure (ffi_raw_closure*, | 
					
					
						
						| 
							 | 
								      ffi_cif *cif, | 
					
					
						
						| 
							 | 
								      void (*fun)(ffi_cif*,void*,ffi_raw*,void*), | 
					
					
						
						| 
							 | 
								      void *user_data); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_raw_closure_loc (ffi_raw_closure*, | 
					
					
						
						| 
							 | 
									  ffi_cif *cif, | 
					
					
						
						| 
							 | 
									  void (*fun)(ffi_cif*,void*,ffi_raw*,void*), | 
					
					
						
						| 
							 | 
									  void *user_data, | 
					
					
						
						| 
							 | 
									  void *codeloc); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if !FFI_NATIVE_RAW_API | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_java_raw_closure (ffi_java_raw_closure*, | 
					
					
						
						| 
							 | 
								           ffi_cif *cif, | 
					
					
						
						| 
							 | 
								           void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), | 
					
					
						
						| 
							 | 
								           void *user_data) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status | 
					
					
						
						| 
							 | 
						ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, | 
					
					
						
						| 
							 | 
									       ffi_cif *cif, | 
					
					
						
						| 
							 | 
									       void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), | 
					
					
						
						| 
							 | 
									       void *user_data, | 
					
					
						
						| 
							 | 
									       void *codeloc) __attribute__((deprecated)); | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif  | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#if FFI_GO_CLOSURES | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						typedef struct { | 
					
					
						
						| 
							 | 
						  void      *tramp; | 
					
					
						
						| 
							 | 
						  ffi_cif   *cif; | 
					
					
						
						| 
							 | 
						  void     (*fun)(ffi_cif*,void*,void**,void*); | 
					
					
						
						| 
							 | 
						} ffi_go_closure; | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, | 
					
					
						
						| 
							 | 
										void (*fun)(ffi_cif*,void*,void**,void*)); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, | 
					
					
						
						| 
							 | 
								  void **avalue, void *closure); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif  | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						ffi_status ffi_prep_cif(ffi_cif *cif, | 
					
					
						
						| 
							 | 
									ffi_abi abi, | 
					
					
						
						| 
							 | 
									unsigned int nargs, | 
					
					
						
						| 
							 | 
									ffi_type *rtype, | 
					
					
						
						| 
							 | 
									ffi_type **atypes); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						ffi_status ffi_prep_cif_var(ffi_cif *cif, | 
					
					
						
						| 
							 | 
									    ffi_abi abi, | 
					
					
						
						| 
							 | 
									    unsigned int nfixedargs, | 
					
					
						
						| 
							 | 
									    unsigned int ntotalargs, | 
					
					
						
						| 
							 | 
									    ffi_type *rtype, | 
					
					
						
						| 
							 | 
									    ffi_type **atypes); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						void ffi_call(ffi_cif *cif, | 
					
					
						
						| 
							 | 
							      void (*fn)(void), | 
					
					
						
						| 
							 | 
							      void *rvalue, | 
					
					
						
						| 
							 | 
							      void **avalue); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						FFI_API | 
					
					
						
						| 
							 | 
						ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type, | 
					
					
						
						| 
							 | 
										   size_t *offsets); | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						#define FFI_FN(f) ((void (*)(void))f) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#ifdef __cplusplus | 
					
					
						
						| 
							 | 
						} | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						#endif | 
					
					
						
						| 
							 | 
						
 |