Ruby  2.4.2p198(2017-09-14revision59899)
Macros | Functions | Variables
ffi.c File Reference
#include <ffi.h>
#include <ffi_common.h>
#include <stdlib.h>
Include dependency graph for ffi.c:

Go to the source code of this file.

Macros

#define FFI_INIT_TRAMPOLINE(TRAMP, FUN, CTX)
 

Functions

static int vfp_type_p (ffi_type *)
 
static void layout_vfp_args (ffi_cif *)
 
int ffi_prep_args_SYSV (char *stack, extended_cif *ecif, float *vfp_space)
 
int ffi_prep_args_VFP (char *stack, extended_cif *ecif, float *vfp_space)
 
static char * ffi_align (ffi_type **p_arg, char *argp)
 
static size_t ffi_put_arg (ffi_type **arg_type, void **arg, char *stack)
 
ffi_status ffi_prep_cif_machdep (ffi_cif *cif)
 
ffi_status ffi_prep_cif_machdep_var (ffi_cif *cif, unsigned int nfixedargs, unsigned int ntotalargs)
 
void ffi_call_SYSV (void(*fn)(void), extended_cif *, unsigned, unsigned, unsigned *)
 
void ffi_call_VFP (void(*fn)(void), extended_cif *, unsigned, unsigned, unsigned *)
 
void ffi_call (ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue)
 
static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, void **args, ffi_cif *cif, float *vfp_stack)
 private members More...
 
static void ffi_prep_incoming_args_VFP (char *stack, void **ret, void **args, ffi_cif *cif, float *vfp_stack)
 
void ffi_closure_SYSV (ffi_closure *)
 
void ffi_closure_VFP (ffi_closure *)
 
unsigned int FFI_HIDDEN ffi_closure_inner (ffi_closure *closure, void **respp, void *args, void *vfp_args)
 
ffi_status ffi_prep_closure_loc (ffi_closure *closure, ffi_cif *cif, void(*fun)(ffi_cif *, void *, void **, void *), void *user_data, void *codeloc)
 
static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum)
 
static int place_vfp_arg (ffi_cif *cif, ffi_type *t)
 

Variables

unsigned int ffi_arm_trampoline [3]
 

Macro Definition Documentation

◆ FFI_INIT_TRAMPOLINE

#define FFI_INIT_TRAMPOLINE (   TRAMP,
  FUN,
  CTX 
)
Value:
({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
unsigned int __fun = (unsigned int)(FUN); \
unsigned int __ctx = (unsigned int)(CTX); \
unsigned char *insns = (unsigned char *)(CTX); \
memcpy (__tramp, ffi_arm_trampoline, sizeof ffi_arm_trampoline); \
*(unsigned int*) &__tramp[12] = __ctx; \
*(unsigned int*) &__tramp[16] = __fun; \
__clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping. */ \
__clear_cache(insns, insns + 3 * sizeof (unsigned int)); \
/* Clear instruction \
mapping. */ \
})
unsigned int ffi_arm_trampoline[3]

Definition at line 754 of file ffi.c.

Referenced by ffi_prep_closure_loc().

Function Documentation

◆ ffi_align()

static char* ffi_align ( ffi_type **  p_arg,
char *  argp 
)
static

◆ ffi_call()

void ffi_call ( ffi_cif *  cif,
void(*)(void)  fn,
void *  rvalue,
void **  avalue 
)

◆ ffi_call_SYSV()

void ffi_call_SYSV ( void(*)(void)  fn,
extended_cif ,
unsigned  ,
unsigned  ,
unsigned *   
)

◆ ffi_call_VFP()

void ffi_call_VFP ( void(*)(void)  fn,
extended_cif ,
unsigned  ,
unsigned  ,
unsigned *   
)

◆ ffi_closure_inner()

unsigned int FFI_HIDDEN ffi_closure_inner ( ffi_closure *  closure,
void **  respp,
void *  args,
void *  vfp_args 
)

Definition at line 381 of file ffi.c.

References alloca(), ffi_prep_incoming_args_SYSV(), ffi_prep_incoming_args_VFP(), and FFI_VFP.

◆ ffi_closure_SYSV()

void ffi_closure_SYSV ( ffi_closure *  )

Definition at line 420 of file ffi.c.

◆ ffi_closure_VFP()

void ffi_closure_VFP ( ffi_closure *  )

Referenced by ffi_call(), and ffi_prep_closure_loc().

◆ ffi_prep_args_SYSV()

int ffi_prep_args_SYSV ( char *  stack,
extended_cif ecif,
float *  vfp_space 
)

◆ ffi_prep_args_VFP()

int ffi_prep_args_VFP ( char *  stack,
extended_cif ecif,
float *  vfp_space 
)

◆ ffi_prep_cif_machdep()

ffi_status ffi_prep_cif_machdep ( ffi_cif *  cif)

Definition at line 234 of file ffi.c.

References FFI_VFP, layout_vfp_args(), and vfp_type_p().

◆ ffi_prep_cif_machdep_var()

ffi_status ffi_prep_cif_machdep_var ( ffi_cif *  cif,
unsigned int nfixedargs  ,
unsigned int ntotalargs   
)

Definition at line 289 of file ffi.c.

References ffi_call_SYSV(), ffi_call_VFP(), ffi_prep_cif_machdep(), FFI_SYSV, and FFI_VFP.

Referenced by ffi_prep_cif_machdep().

◆ ffi_prep_closure_loc()

ffi_status ffi_prep_closure_loc ( ffi_closure *  closure,
ffi_cif *  cif,
void(*)(ffi_cif *, void *, void **, void *)  fun,
void *  user_data,
void *  codeloc 
)

Definition at line 773 of file ffi.c.

References ffi_closure_SYSV(), ffi_closure_VFP(), FFI_INIT_TRAMPOLINE, FFI_SYSV, FFI_VFP, and NULL.

◆ ffi_prep_incoming_args_SYSV()

static void ffi_prep_incoming_args_SYSV ( char *  stack,
void **  ret,
void **  args,
ffi_cif *  cif,
float *  vfp_stack 
)
static

private members

Definition at line 408 of file ffi.c.

References ffi_align().

Referenced by ffi_call(), and ffi_closure_inner().

◆ ffi_prep_incoming_args_VFP()

static void ffi_prep_incoming_args_VFP ( char *  stack,
void **  ret,
void **  args,
ffi_cif *  cif,
float *  vfp_stack 
)
static

◆ ffi_put_arg()

static size_t ffi_put_arg ( ffi_type **  arg_type,
void **  arg,
char *  stack 
)
static

Definition at line 69 of file ffi.c.

References FFI_ASSERT, and memcpy.

Referenced by ffi_prep_args_SYSV(), and ffi_prep_args_VFP().

◆ layout_vfp_args()

static void layout_vfp_args ( ffi_cif *  cif)
static

Definition at line 914 of file ffi.c.

References place_vfp_arg(), and vfp_type_p().

Referenced by ffi_prep_cif_machdep().

◆ place_vfp_arg()

static int place_vfp_arg ( ffi_cif *  cif,
ffi_type *  t 
)
static

Definition at line 872 of file ffi.c.

References FFI_TYPE_STRUCT_VFP_FLOAT.

Referenced by layout_vfp_args().

◆ rec_vfp_type_p()

static int rec_vfp_type_p ( ffi_type *  t,
int *  elt,
int *  elnum 
)
static

Definition at line 809 of file ffi.c.

References FFI_TYPE_STRUCT_VFP_DOUBLE, and FFI_TYPE_STRUCT_VFP_FLOAT.

Referenced by vfp_type_p().

◆ vfp_type_p()

static int vfp_type_p ( ffi_type *  t)
static

Variable Documentation

◆ ffi_arm_trampoline

unsigned int ffi_arm_trampoline[3]