One Level Up
Top Level
include/ktap_ffi.h - ktap
Data types defined
Macros defined
Source code
- #ifndef __KTAP_FFI_H__
- #define __KTAP_FFI_H__
- #ifdef CONFIG_KTAP_FFI
- #include "../include/ktap_types.h"
- typedef enum {
-
- FFI_VOID,
- FFI_UINT8,
- FFI_INT8,
- FFI_UINT16,
- FFI_INT16,
-
- FFI_UINT32,
- FFI_INT32,
- FFI_UINT64,
- FFI_INT64,
- FFI_PTR,
-
- FFI_FUNC,
- FFI_STRUCT,
- FFI_UNION,
- FFI_UNKNOWN,
- } ffi_type;
- #define NUM_FFI_TYPE ((int)FFI_UNKNOWN)
- typedef struct {
- size_t size;
- size_t align;
- const char *name;
- } ffi_mode;
- extern const ffi_mode const ffi_type_modes[];
- #define ffi_type_size(t) (ffi_type_modes[t].size)
- #define ffi_type_align(t) (ffi_type_modes[t].align)
- #define ffi_type_name(t) (ffi_type_modes[t].name)
- #define CSYM_NAME_MAX_LEN 64
- typedef struct csymbol_func {
- void *addr;
- csymbol_id ret_id;
- int arg_nr;
- csymbol_id *arg_ids;
- unsigned has_var_arg;
- } csymbol_func;
- typedef struct struct_member {
- char name[CSYM_NAME_MAX_LEN];
- csymbol_id id;
- int len;
- } struct_member;
- typedef struct csymbol_struct {
- int memb_nr;
- struct_member *members;
- size_t size;
-
- size_t align;
- } csymbol_struct;
- typedef struct csymbol {
- char name[CSYM_NAME_MAX_LEN];
- ffi_type type;
-
- union {
- csymbol_id p;
- csymbol_func f;
- csymbol_struct st;
- csymbol_id td;
- } u;
- } csymbol;
- #define max_csym_id(ks) (G(ks)->ffis.csym_nr)
- inline csymbol *ffi_get_csym_by_id(ktap_state_t *ks, csymbol_id id);
- #define id_to_csym(ks, id) (ffi_get_csym_by_id(ks, id))
- #define csym_type(cs) ((cs)->type)
- #define csym_name(cs) ((cs)->name)
- #define csym_ptr_deref_id(cs) ((cs)->u.p)
- #define csym_set_ptr_deref_id(cs, id) ((cs)->u.p = (id))
- #define csym_ptr_deref(ks, cs) (id_to_csym(ks, csym_ptr_deref_id(cs)))
- #define csymf_addr(csf) ((csf)->addr)
- #define csymf_ret_id(csf) ((csf)->ret_id)
- #define csymf_arg_nr(csf) ((csf)->arg_nr)
- #define csymf_arg_ids(csf) ((csf)->arg_ids)
- #define csymf_arg_id(csf, n) ((csf)->arg_ids[n])
- #define csym_func(cs) (&((cs)->u.f))
- #define csym_func_addr(cs) (csymf_addr(csym_func(cs)))
- #define csym_func_arg_ids(cs) (csymf_arg_ids(csym_func(cs)))
- #define csymf_ret(ks, csf) (id_to_csym(ks, csymf_ret_id(csf)))
- #define csymf_arg(ks, csf, n) (id_to_csym(ks, csymf_arg_id(csf, n)))
- #define csym_func_arg(ks, cs, n) (csymf_arg(ks, csym_func(cs), n))
- #define csymst_mb_nr(csst) ((csst)->memb_nr)
- #define csym_struct(cs) (&(cs)->u.st)
- #define csym_struct_mb(cs, n) (csymst_mb(csym_struct(cs), n))
- #define csym_struct_mb_nr(cs) (csymst_mb_nr(csym_struct(cs)))
- #define csymst_mb(csst, n) (&(csst)->members[n])
- #define csymst_mb_name(csst, n) ((csst)->members[n].name)
- #define csymst_mb_id(csst, n) ((csst)->members[n].id)
- #define csymst_mb_len(csst, n) ((csst)->members[n].len)
- #define csymst_mb_csym(ks, csst, n) (id_to_csym(ks, (csst)->members[n].id))
- #define cd_csym_id(cd) ((cd)->id)
- #define cd_set_csym_id(cd, id) (cd_csym_id(cd) = (id))
- #define cd_csym(ks, cd) (id_to_csym(ks, cd_csym_id(cd)))
- #define cd_type(ks, cd) (csym_type(cd_csym(ks, cd)))
- #define cd_int(cd) ((cd)->u.i)
- #define cd_ptr(cd) ((cd)->u.p.addr)
- #define cd_ptr_nmemb(cd) ((cd)->u.p.nmemb)
- #define cd_record(cd) ((cd)->u.rec)
- #define cd_struct(cd) cd_record(cd)
- #define cd_union(cd) cd_record(cd)
- #ifdef __KERNEL__
- size_t csym_size(ktap_state_t *ks, csymbol *sym);
- size_t csym_align(ktap_state_t *ks, csymbol *sym);
- size_t csym_record_mb_offset_by_name(ktap_state_t *ks,
- csymbol *cs, const char *name);
- struct_member *csymst_mb_by_name(ktap_state_t *ks,
- csymbol_struct *csst, const char *name);
- void ffi_free_symbols(ktap_state_t *ks);
- csymbol_id ffi_get_csym_id(ktap_state_t *ks, char *name);
- ktap_cdata_t *kp_cdata_new(ktap_state_t *ks, csymbol_id id);
- ktap_cdata_t *kp_cdata_new_ptr(ktap_state_t *ks, void *addr,
- int nmemb, csymbol_id id, int to_allocate);
- ktap_cdata_t *kp_cdata_new_record(ktap_state_t *ks, void *val, csymbol_id id);
- void kp_cdata_dump(ktap_state_t *ks, ktap_cdata_t *cd);
- int kp_cdata_type_match(ktap_state_t *ks, csymbol *cs, ktap_val_t *val);
- void kp_cdata_unpack(ktap_state_t *ks, char *dst, csymbol *cs, ktap_val_t *val);
- void kp_cdata_ptr_set(ktap_state_t *ks, ktap_cdata_t *cd,
- ktap_val_t *key, ktap_val_t *val);
- void kp_cdata_ptr_get(ktap_state_t *ks, ktap_cdata_t *cd,
- ktap_val_t *key, ktap_val_t *val);
- void kp_cdata_record_set(ktap_state_t *ks, ktap_cdata_t *cd,
- ktap_val_t *key, ktap_val_t *val);
- void kp_cdata_record_get(ktap_state_t *ks, ktap_cdata_t *cd,
- ktap_val_t *key, ktap_val_t *val);
- int ffi_call(ktap_state_t *ks, csymbol_func *cf);
- #endif
- #endif
- #endif
One Level Up
Top Level