📄 dtrace.h
字号:
typedef enum { DTRACEDROP_PRINCIPAL, /* drop to principal buffer */ DTRACEDROP_AGGREGATION, /* drop to aggregation buffer */ DTRACEDROP_DYNAMIC, /* dynamic drop */ DTRACEDROP_DYNRINSE, /* dyn drop due to rinsing */ DTRACEDROP_DYNDIRTY, /* dyn drop due to dirty */ DTRACEDROP_SPEC, /* speculative drop */ DTRACEDROP_SPECBUSY, /* spec drop due to busy */ DTRACEDROP_SPECUNAVAIL /* spec drop due to unavail */} dtrace_dropkind_t;typedef struct dtrace_dropdata { dtrace_hdl_t *dtdda_handle; /* handle to DTrace library */ processorid_t dtdda_cpu; /* CPU, if any */ dtrace_dropkind_t dtdda_kind; /* kind of drop */ uint64_t dtdda_drops; /* number of drops */ uint64_t dtdda_total; /* total drops */ const char *dtdda_msg; /* preconstructed message */} dtrace_dropdata_t;typedef int dtrace_handle_drop_f(dtrace_dropdata_t *, void *);extern int dtrace_handle_drop(dtrace_hdl_t *, dtrace_handle_drop_f *, void *);typedef void dtrace_handle_proc_f(struct ps_prochandle *, void *);extern int dtrace_handle_proc(dtrace_hdl_t *, dtrace_handle_proc_f *, void *);typedef struct dtrace_bufdata { dtrace_hdl_t *dtbda_handle; /* handle to DTrace library */ const char *dtbda_buffered; /* buffered output */ dtrace_probedata_t *dtbda_probe; /* probe data */ dtrace_recdesc_t *dtbda_recdesc; /* record description */ dtrace_aggdata_t *dtbda_aggdata; /* aggregation data, if agg. */} dtrace_bufdata_t;typedef int dtrace_handle_buffered_f(dtrace_bufdata_t *, void *);extern int dtrace_handle_buffered(dtrace_hdl_t *, dtrace_handle_buffered_f *, void *);/* * DTrace Aggregate Interface */#define DTRACE_A_PERCPU 0x0001#define DTRACE_A_KEEPDELTA 0x0002#define DTRACE_A_ANONYMOUS 0x0004#define DTRACE_AGGWALK_ERROR -1 /* error while processing */#define DTRACE_AGGWALK_NEXT 0 /* proceed to next element */#define DTRACE_AGGWALK_ABORT 1 /* abort aggregation walk */#define DTRACE_AGGWALK_CLEAR 2 /* clear this element */#define DTRACE_AGGWALK_NORMALIZE 3 /* normalize this element */#define DTRACE_AGGWALK_DENORMALIZE 4 /* denormalize this element */#define DTRACE_AGGWALK_REMOVE 5 /* remove this element */struct dtrace_aggdata { dtrace_hdl_t *dtada_handle; /* handle to DTrace library */ dtrace_aggdesc_t *dtada_desc; /* aggregation description */ dtrace_eprobedesc_t *dtada_edesc; /* enabled probe description */ dtrace_probedesc_t *dtada_pdesc; /* probe description */ caddr_t dtada_data; /* pointer to raw data */ uint64_t dtada_normal; /* the normal -- 1 for denorm */ size_t dtada_size; /* total size of the data */ caddr_t dtada_delta; /* delta data, if available */ caddr_t *dtada_percpu; /* per CPU data, if avail */ caddr_t *dtada_percpu_delta; /* per CPU delta, if avail */};typedef int dtrace_aggregate_f(dtrace_aggdata_t *, void *);typedef int dtrace_aggregate_walk_f(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern void dtrace_aggregate_clear(dtrace_hdl_t *);extern int dtrace_aggregate_snap(dtrace_hdl_t *);extern int dtrace_aggregate_print(dtrace_hdl_t *, FILE *, dtrace_aggregate_walk_f *);extern int dtrace_aggregate_walk(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_keysorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_valsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_keyvarsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_valvarsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_keyrevsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_valrevsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_keyvarrevsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);extern int dtrace_aggregate_walk_valvarrevsorted(dtrace_hdl_t *, dtrace_aggregate_f *, void *);#define DTRACE_AGD_PRINTED 0x1 /* aggregation printed in program *//* * DTrace Process Control Interface * * Library clients who wish to have libdtrace create or grab processes for * monitoring of their symbol table changes may use these interfaces to * request that libdtrace obtain control of the process using libproc. */extern struct ps_prochandle *dtrace_proc_create(dtrace_hdl_t *, const char *, char *const *);extern struct ps_prochandle *dtrace_proc_grab(dtrace_hdl_t *, pid_t, int);extern void dtrace_proc_release(dtrace_hdl_t *, struct ps_prochandle *);extern void dtrace_proc_continue(dtrace_hdl_t *, struct ps_prochandle *);/* * DTrace DIF Object (DIFO) Interface * * Library clients who wish to create their own custom DIF programs can use * the functions below to create a DIFO from a C string containing a D * expression statement. Clients may also create raw DIF on-the-fly without * invoking the D compiler by simply constructing the dtrace_difo_t by hand. */extern dtrace_difo_t *dtrace_difo_create(dtrace_hdl_t *, const char *, dtrace_probedesc_t *);extern void dtrace_difo_print(const dtrace_difo_t *, FILE *);extern void dtrace_difo_hold(dtrace_difo_t *);extern void dtrace_difo_release(dtrace_difo_t *);/* * DTrace Object, Symbol, and Type Interfaces * * Library clients can use libdtrace to perform symbol and C type information * lookups by symbol name, symbol address, or C type name, or to lookup meta- * information cached for each of the program objects in use by DTrace. The * resulting struct contain pointers to arbitrary-length strings, including * object, symbol, and type names, that are persistent until the next call to * dtrace_update(). Once dtrace_update() is called, any cached values must * be flushed and not used subsequently by the client program. */#define DTRACE_OBJ_EXEC ((const char *)0L) /* primary executable file */#define DTRACE_OBJ_RTLD ((const char *)1L) /* run-time link-editor */#define DTRACE_OBJ_CDEFS ((const char *)2L) /* C include definitions */#define DTRACE_OBJ_DDEFS ((const char *)3L) /* D program definitions */#define DTRACE_OBJ_EVERY ((const char *)-1L) /* all known objects */#define DTRACE_OBJ_KMODS ((const char *)-2L) /* all kernel objects */#define DTRACE_OBJ_UMODS ((const char *)-3L) /* all user objects */typedef struct dtrace_objinfo { const char *dto_name; /* object file scope name */ const char *dto_file; /* object file path (if any) */ int dto_id; /* object file id (if any) */ uint_t dto_flags; /* object flags (see below) */ GElf_Addr dto_text_va; /* address of text section */ GElf_Xword dto_text_size; /* size of text section */ GElf_Addr dto_data_va; /* address of data section */ GElf_Xword dto_data_size; /* size of data section */ GElf_Addr dto_bss_va; /* address of BSS */ GElf_Xword dto_bss_size; /* size of BSS */} dtrace_objinfo_t;#define DTRACE_OBJ_F_KERNEL 0x1 /* object is a kernel module */#define DTRACE_OBJ_F_PRIMARY 0x2 /* object is a primary module */typedef int dtrace_obj_f(dtrace_hdl_t *, const dtrace_objinfo_t *, void *);extern int dtrace_object_iter(dtrace_hdl_t *, dtrace_obj_f *, void *);extern int dtrace_object_info(dtrace_hdl_t *, const char *, dtrace_objinfo_t *);typedef struct dtrace_syminfo { const char *dts_object; /* object name */ const char *dts_name; /* symbol name */ ulong_t dts_id; /* symbol id */} dtrace_syminfo_t;extern int dtrace_lookup_by_name(dtrace_hdl_t *, const char *, const char *, GElf_Sym *, dtrace_syminfo_t *);extern int dtrace_lookup_by_addr(dtrace_hdl_t *, GElf_Addr addr, GElf_Sym *, dtrace_syminfo_t *);typedef struct dtrace_typeinfo { const char *dtt_object; /* object containing type */ ctf_file_t *dtt_ctfp; /* CTF container handle */ ctf_id_t dtt_type; /* CTF type identifier */} dtrace_typeinfo_t;extern int dtrace_lookup_by_type(dtrace_hdl_t *, const char *, const char *, dtrace_typeinfo_t *);extern int dtrace_symbol_type(dtrace_hdl_t *, const GElf_Sym *, const dtrace_syminfo_t *, dtrace_typeinfo_t *);extern int dtrace_provider_modules(dtrace_hdl_t *, const char **provmods, int nmods);/* * DTrace Vector Interface * * The DTrace library normally speaks directly to dtrace(7D). However, * this communication may be vectored elsewhere. Consumers who wish to * perform a vectored open must fill in the vector, and use the dtrace_vopen() * entry point to obtain a library handle. */struct dtrace_vector { int (*dtv_ioctl)(void *, int, void *); int (*dtv_lookup_by_addr)(void *, GElf_Addr, GElf_Sym *, dtrace_syminfo_t *); int (*dtv_status)(void *, processorid_t); long (*dtv_sysconf)(void *, int);};/* * DTrace Utility Functions * * Library clients can use these functions to convert between string and * integer probe descriptions and the dtrace_probedesc_t representation * and to perform similar conversions on stability attributes. */extern int dtrace_xstr2desc(dtrace_hdl_t *, dtrace_probespec_t, const char *, int, char *const [], dtrace_probedesc_t *);extern int dtrace_str2desc(dtrace_hdl_t *, dtrace_probespec_t, const char *, dtrace_probedesc_t *);extern int dtrace_id2desc(dtrace_hdl_t *, dtrace_id_t, dtrace_probedesc_t *);#define DTRACE_DESC2STR_MAX 1024 /* min buf size for dtrace_desc2str() */extern char *dtrace_desc2str(const dtrace_probedesc_t *, char *, size_t);#define DTRACE_ATTR2STR_MAX 64 /* min buf size for dtrace_attr2str() */extern char *dtrace_attr2str(dtrace_attribute_t, char *, size_t);extern int dtrace_str2attr(const char *, dtrace_attribute_t *);extern const char *dtrace_stability_name(dtrace_stability_t);extern const char *dtrace_class_name(dtrace_class_t);extern const char *const _dtrace_version;extern int _dtrace_debug;#ifdef __cplusplus}#endif#endif /* _DTRACE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -