📄 dt_impl.h
字号:
};/* * Values for the user arg of the ECB. */#define DT_ECB_DEFAULT 0#define DT_ECB_ERROR 1/* * Values for the dt_linkmode property, which is used by the assembler when * processing external symbol references. User can set using -xlink=<mode>. */#define DT_LINK_KERNEL 0 /* kernel syms static, user syms dynamic */#define DT_LINK_PRIMARY 1 /* primary kernel syms static, others dynamic */#define DT_LINK_DYNAMIC 2 /* all symbols dynamic */#define DT_LINK_STATIC 3 /* all symbols static *//* * Values for the dt_stdcmode property, which is used by the compiler when * running cpp to determine the presence and setting of the __STDC__ macro. */#define DT_STDC_XA 0 /* ISO C + K&R C compat w/o ISO: __STDC__=0 */#define DT_STDC_XC 1 /* Strict ISO C: __STDC__=1 */#define DT_STDC_XS 2 /* K&R C: __STDC__ not defined */#define DT_STDC_XT 3 /* ISO C + K&R C compat with ISO: __STDC__=0 *//* * Macro to test whether a given pass bit is set in the dt_treedump bit-vector. * If the bit for pass 'p' is set, the D compiler displays the parse tree for * the program by printing it to stderr at the end of compiler pass 'p'. */#define DT_TREEDUMP_PASS(dtp, p) ((dtp)->dt_treedump & (1 << ((p) - 1)))/* * Macros for accessing the cached CTF container and type ID for the common * types "int", "string", and <DYN>, which we need to use frequently in the D * compiler. The DT_INT_* macro relies upon "int" being at index 0 in the * _dtrace_ints_* tables in dt_open.c; the others are also set up there. */#define DT_INT_CTFP(dtp) ((dtp)->dt_ints[0].did_ctfp)#define DT_INT_TYPE(dtp) ((dtp)->dt_ints[0].did_type)#define DT_FUNC_CTFP(dtp) ((dtp)->dt_ddefs->dm_ctfp)#define DT_FUNC_TYPE(dtp) ((dtp)->dt_type_func)#define DT_FPTR_CTFP(dtp) ((dtp)->dt_ddefs->dm_ctfp)#define DT_FPTR_TYPE(dtp) ((dtp)->dt_type_fptr)#define DT_STR_CTFP(dtp) ((dtp)->dt_ddefs->dm_ctfp)#define DT_STR_TYPE(dtp) ((dtp)->dt_type_str)#define DT_DYN_CTFP(dtp) ((dtp)->dt_ddefs->dm_ctfp)#define DT_DYN_TYPE(dtp) ((dtp)->dt_type_dyn)#define DT_STACK_CTFP(dtp) ((dtp)->dt_ddefs->dm_ctfp)#define DT_STACK_TYPE(dtp) ((dtp)->dt_type_stack)typedef struct dt_stmt { dt_list_t ds_list; /* list forward/back pointers */ dtrace_stmtdesc_t *ds_desc; /* pointer to statement description */} dt_stmt_t;struct dtrace_prog { dt_list_t dp_list; /* list forward/back pointers */ dt_list_t dp_stmts; /* linked list of dt_stmt_t's */};#define DT_ACT_PRINTF 0 /* printf() action */#define DT_ACT_TRACE 1 /* trace() action */#define DT_ACT_TRACEMEM 2 /* tracemem() action */#define DT_ACT_STACK 3 /* stack() action */#define DT_ACT_STOP 4 /* stop() action */#define DT_ACT_BREAKPOINT 5 /* breakpoint() action */#define DT_ACT_PANIC 6 /* panic() action */#define DT_ACT_SPECULATE 7 /* speculate() action */#define DT_ACT_COMMIT 8 /* commit() action */#define DT_ACT_DISCARD 9 /* discard() action */#define DT_ACT_CHILL 10 /* chill() action */#define DT_ACT_EXIT 11 /* exit() action */#define DT_ACT_USTACK 12 /* ustack() action */#define DT_ACT_PRINTA 13 /* printa() action */#define DT_ACT_RAISE 14 /* raise() action */#define DT_ACT_CLEAR 15 /* clear() action */#define DT_ACT_NORMALIZE 16 /* normalize() action */#define DT_ACT_DENORMALIZE 17 /* denormalize() action */#define DT_ACT_TRUNC 18 /* trunc() action */#define DT_ACT_SYSTEM 19 /* system() action */#define DT_ACT_JSTACK 20 /* jstack() action */#define DT_ACT_FTRUNCATE 21 /* ftruncate() action */#define EDT_BASE 1000 /* base value for libdtrace errnos */enum { EDT_VERSION = EDT_BASE, /* client is requesting unsupported version */ EDT_VERSINVAL, /* version string is invalid or overflows */ EDT_VERSUNDEF, /* requested API version is not defined */ EDT_VERSREDUCED, /* requested API version has been reduced */ EDT_CTF, /* libctf called failed (dt_ctferr has more) */ EDT_COMPILER, /* error in D program compilation */ EDT_NOREG, /* register allocation failure */ EDT_NOTUPREG, /* tuple register allocation failure */ EDT_NOMEM, /* memory allocation failure */ EDT_INT2BIG, /* integer limit exceeded */ EDT_STR2BIG, /* string limit exceeded */ EDT_NOMOD, /* unknown module name */ EDT_NOPROV, /* unknown provider name */ EDT_NOSYM, /* unknown symbol name */ EDT_NOSYMADDR, /* no symbol corresponds to address */ EDT_NOTYPE, /* unknown type name */ EDT_NOVAR, /* unknown variable name */ EDT_NOAGG, /* unknown aggregation name */ EDT_BADSCOPE, /* improper use of type name scoping operator */ EDT_BADSPEC, /* overspecified probe description */ EDT_BADSPCV, /* bad macro variable in probe description */ EDT_BADID, /* invalid probe identifier */ EDT_NOTLOADED, /* module is not currently loaded */ EDT_NOCTF, /* module does not contain any CTF data */ EDT_DATAMODEL, /* module and program data models don't match */ EDT_DIFVERS, /* library has newer DIF version than driver */ EDT_BADAGG, /* unrecognized aggregating action */ EDT_FIO, /* file i/o error */ EDT_DIFINVAL, /* invalid DIF program */ EDT_DIFSIZE, /* invalid DIF size */ EDT_DIFFAULT, /* failed to copyin DIF program */ EDT_BADPROBE, /* bad probe description */ EDT_NOSCOPE, /* declaration scope stack underflow */ EDT_NODECL, /* declaration stack underflow */ EDT_DMISMATCH, /* record list does not match statement */ EDT_DOFFSET, /* record data offset error */ EDT_DALIGN, /* record data alignment error */ EDT_BADOPTNAME, /* invalid dtrace_setopt option name */ EDT_BADOPTVAL, /* invalid dtrace_setopt option value */ EDT_BADOPTCTX, /* invalid dtrace_setopt option context */ EDT_CPPFORK, /* failed to fork preprocessor */ EDT_CPPEXEC, /* failed to exec preprocessor */ EDT_CPPENT, /* preprocessor not found */ EDT_CPPERR, /* unknown preprocessor error */ EDT_SYMOFLOW, /* external symbol table overflow */ EDT_ACTIVE, /* operation illegal when tracing is active */ EDT_DESTRUCTIVE, /* destructive actions not allowed */ EDT_NOANON, /* no anonymous tracing state */ EDT_ISANON, /* can't claim anon state and enable probes */ EDT_ENDTOOBIG, /* END enablings exceed size of prncpl buffer */ EDT_NOCONV, /* failed to load type for printf conversion */ EDT_BADCONV, /* incomplete printf conversion */ EDT_BADERROR, /* invalid library ERROR action */ EDT_ERRABORT, /* abort due to error */ EDT_DROPABORT, /* abort due to drop */ EDT_DIRABORT, /* abort explicitly directed */ EDT_BADRVAL, /* invalid return value from callback */ EDT_BADNORMAL, /* invalid normalization */ EDT_BUFTOOSMALL, /* enabling exceeds size of buffer */ EDT_BADTRUNC, /* invalid truncation */ EDT_BUSY, /* device busy (active kernel debugger) */ EDT_ACCESS, /* insufficient privileges to use DTrace */ EDT_GNOENT, /* dtrace device not available in global zone */ EDT_ZNOENT, /* dtrace device not available in local zone */ EDT_BRICKED, /* abort due to systemic unresponsiveness */ EDT_HARDWIRE, /* failed to load hard-wired definitions */ EDT_ELFVERSION, /* libelf is out-of-date w.r.t libdtrace */ EDT_NOBUFFERED /* attempt to buffer output without handler */};/* * Interfaces for parsing and comparing DTrace attribute tuples, which describe * stability and architectural binding information. The dtrace_attribute_t * structure and associated constant definitions are found in <sys/dtrace.h>. */extern dtrace_attribute_t dt_attr_min(dtrace_attribute_t, dtrace_attribute_t);extern dtrace_attribute_t dt_attr_max(dtrace_attribute_t, dtrace_attribute_t);extern char *dt_attr_str(dtrace_attribute_t, char *, size_t);extern int dt_attr_cmp(dtrace_attribute_t, dtrace_attribute_t);/* * Interfaces for parsing and handling DTrace version strings. Version binding * is a feature of the D compiler that is handled completely independently of * the DTrace kernel infrastructure, so the definitions are here in libdtrace. * Version strings are compiled into an encoded uint32_t which can be compared * using C comparison operators. Version definitions are found in dt_open.c. */#define DT_VERSION_STRMAX 16 /* enough for "255.4095.4095\0" */#define DT_VERSION_MAJMAX 0xFF /* maximum major version number */#define DT_VERSION_MINMAX 0xFFF /* maximum minor version number */#define DT_VERSION_MICMAX 0xFFF /* maximum micro version number */#define DT_VERSION_NUMBER(M, m, u) \ ((((M) & 0xFF) << 24) | (((m) & 0xFFF) << 12) | ((u) & 0xFFF))#define DT_VERSION_MAJOR(v) (((v) & 0xFF000000) >> 24)#define DT_VERSION_MINOR(v) (((v) & 0x00FFF000) >> 12)#define DT_VERSION_MICRO(v) ((v) & 0x00000FFF)extern char *dt_version_num2str(dt_version_t, char *, size_t);extern int dt_version_str2num(const char *, dt_version_t *);extern int dt_version_defined(dt_version_t);/* * Miscellaneous internal libdtrace interfaces. The definitions below are for * libdtrace routines that do not yet merit their own separate header file. */extern char *dt_cpp_add_arg(dtrace_hdl_t *, const char *);extern char *dt_cpp_pop_arg(dtrace_hdl_t *);extern int dt_set_errno(dtrace_hdl_t *, int);extern void dt_set_errmsg(dtrace_hdl_t *, const char *, const char *, const char *, int, const char *, va_list);extern int dt_ioctl(dtrace_hdl_t *, int, void *);extern int dt_status(dtrace_hdl_t *, processorid_t);extern long dt_sysconf(dtrace_hdl_t *, int);extern ssize_t dt_write(dtrace_hdl_t *, int, const void *, size_t);extern int dt_printf(dtrace_hdl_t *, FILE *, const char *, ...);extern void *dt_zalloc(dtrace_hdl_t *, size_t);extern void *dt_alloc(dtrace_hdl_t *, size_t);extern void dt_free(dtrace_hdl_t *, void *);extern char *dt_basename(char *);extern int dt_buffered_enable(dtrace_hdl_t *);extern int dt_buffered_flush(dtrace_hdl_t *, dtrace_probedata_t *, dtrace_recdesc_t *, dtrace_aggdata_t *);extern void dt_buffered_disable(dtrace_hdl_t *);extern void dt_buffered_destroy(dtrace_hdl_t *);extern int dt_rw_read_held(pthread_rwlock_t *);extern int dt_rw_write_held(pthread_rwlock_t *);extern int dt_mutex_held(pthread_mutex_t *);#define DT_RW_READ_HELD(x) dt_rw_read_held(x)#define DT_RW_WRITE_HELD(x) dt_rw_write_held(x)#define DT_RW_LOCK_HELD(x) (DT_RW_READ_HELD(x) || DT_RW_WRITE_HELD(x))#define DT_MUTEX_HELD(x) dt_mutex_held(x)extern int dt_options_load(dtrace_hdl_t *);extern void dt_dprintf(const char *, ...);extern void dt_setcontext(dtrace_hdl_t *, dtrace_probedesc_t *);extern void dt_endcontext(dtrace_hdl_t *);extern void dt_pragma(dt_node_t *);extern int dt_reduce(dtrace_hdl_t *, dt_version_t);extern void dt_cg(dt_pcb_t *, dt_node_t *);extern dtrace_difo_t *dt_as(dt_pcb_t *);extern int dt_aggregate_go(dtrace_hdl_t *);extern int dt_aggregate_init(dtrace_hdl_t *);extern void dt_aggregate_destroy(dtrace_hdl_t *);extern int dt_epid_lookup(dtrace_hdl_t *, dtrace_epid_t, dtrace_eprobedesc_t **, dtrace_probedesc_t **);extern void dt_epid_destroy(dtrace_hdl_t *);extern int dt_aggid_lookup(dtrace_hdl_t *, dtrace_aggid_t, dtrace_aggdesc_t **);extern void dt_aggid_destroy(dtrace_hdl_t *);extern void *dt_format_lookup(dtrace_hdl_t *, int);extern void dt_format_destroy(dtrace_hdl_t *);extern int dt_print_quantize(dtrace_hdl_t *, FILE *, const void *, size_t, uint64_t);extern int dt_print_lquantize(dtrace_hdl_t *, FILE *, const void *, size_t, uint64_t);extern int dt_print_agg(dtrace_aggdata_t *, void *);extern int dt_handle(dtrace_hdl_t *, dtrace_probedata_t *);extern int dt_handle_cpudrop(dtrace_hdl_t *, processorid_t, dtrace_dropkind_t, uint64_t);extern int dt_handle_status(dtrace_hdl_t *, dtrace_status_t *, dtrace_status_t *);extern dt_pcb_t *yypcb; /* pointer to current parser control block */extern char yyintprefix; /* int token prefix for macros (+/-) */extern char yyintsuffix[4]; /* int token suffix ([uUlL]*) */extern int yyintdecimal; /* int token is decimal (1) or octal/hex (0) */extern char yytext[]; /* lex input buffer */extern int yylineno; /* lex line number */extern int yydebug; /* lex debugging */extern dt_node_t *yypragma; /* lex token list for control lines */extern const dtrace_attribute_t _dtrace_maxattr; /* maximum attributes */extern const dtrace_attribute_t _dtrace_defattr; /* default attributes */extern const dtrace_attribute_t _dtrace_symattr; /* symbol ref attributes */extern const dtrace_attribute_t _dtrace_typattr; /* type ref attributes */extern const dtrace_attribute_t _dtrace_prvattr; /* provider attributes */extern const dt_version_t _dtrace_versions[]; /* array of valid versions */extern const char *const _dtrace_version; /* current version string */extern int _dtrace_strbuckets; /* number of hash buckets for strings */extern int _dtrace_intbuckets; /* number of hash buckets for ints */extern uint_t _dtrace_stkindent; /* default indent for stack/ustack */extern uint_t _dtrace_pidbuckets; /* number of hash buckets for pids */extern uint_t _dtrace_pidlrulim; /* number of proc handles to cache */extern int _dtrace_debug; /* debugging messages enabled */extern const char *_dtrace_libdir; /* default library directory */extern const char *_dtrace_moddir; /* default kernel module directory */#ifdef __cplusplus}#endif#endif /* _DT_IMPL_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -