⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dt_impl.h

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only. * See the file usr/src/LICENSING.NOTICE in this distribution or * http://www.opensolaris.org/license/ for details. */#ifndef	_DT_IMPL_H#define	_DT_IMPL_H#pragma ident	"@(#)dt_impl.h	1.12	04/12/18 SMI"#include <sys/param.h>#include <sys/objfs.h>#include <setjmp.h>#include <libctf.h>#include <dtrace.h>#include <gelf.h>#ifdef	__cplusplusextern "C" {#endif#include <dt_parser.h>#include <dt_regset.h>#include <dt_inttab.h>#include <dt_strtab.h>#include <dt_ident.h>#include <dt_list.h>#include <dt_decl.h>#include <dt_as.h>#include <dt_proc.h>struct dt_module;		/* see below */struct dt_pfdict;		/* see <dt_printf.h> */struct dt_arg;			/* see below */struct dt_provider;		/* see <dt_provider.h> */typedef struct dt_pcb {	dtrace_hdl_t *pcb_hdl;	/* pointer to library handle */	FILE *pcb_fileptr;	/* pointer to input file (or NULL) */	char *pcb_filetag;	/* optional file name string (or NULL) */	const char *pcb_string;	/* pointer to input string (or NULL) */	const char *pcb_strptr;	/* pointer to input position */	size_t pcb_strlen;	/* length of pcb_string */	int pcb_sargc;		/* number of script arguments (if any) */	char *const *pcb_sargv;	/* script argument strings (if any) */	ushort_t *pcb_sflagv;	/* script argument flags (DT_IDFLG_* bits) */	dt_scope_t pcb_dstack;	/* declaration processing stack */	dt_node_t *pcb_list;	/* list of allocated parse tree nodes */	dt_node_t *pcb_hold;	/* parse tree nodes on hold until end of defn */	dt_node_t *pcb_root;	/* root of current parse tree */	dt_idhash_t *pcb_globals; /* current hash table of interposed globals */	dt_idhash_t *pcb_locals; /* current hash table of local identifiers */	dt_idhash_t *pcb_idents; /* current hash table of ambiguous idents */	dt_idhash_t *pcb_pragmas; /* current hash table of pending pragmas */	dt_inttab_t *pcb_inttab; /* integer table for constant references */	dt_strtab_t *pcb_strtab; /* string table for string references */	dt_regset_t *pcb_regs;	/* register set for code generation */	dt_irlist_t pcb_ir;	/* list of unrelocated IR instructions */	uint_t pcb_asvidx;	/* vartab index (used by assembler) */	const dtrace_probedesc_t *pcb_pdesc; /* probedesc for current context */	struct dt_arg *pcb_pargs; /* probe arguments (if any) */	dtrace_attribute_t pcb_attr; /* stability for current context */	dtrace_attribute_t pcb_amin; /* stability minimum for compilation */	dt_node_t *pcb_dret;	/* node containing return type for assembler */	dtrace_difo_t *pcb_difo; /* intermediate DIF object made by assembler */	dtrace_difo_t *pcb_pred; /* intermediate predicate made by compiler */	dtrace_prog_t *pcb_prog; /* intermediate program made by compiler */	dtrace_stmtdesc_t *pcb_stmt; /* intermediate stmt made by compiler */	dtrace_ecbdesc_t *pcb_ecbdesc; /* intermediate ecbdesc made by cmplr */	jmp_buf pcb_jmpbuf;	/* setjmp(3C) buffer for error return */	const char *pcb_region;	/* optional region name for yyerror() suffix */	dtrace_probespec_t pcb_pspec; /* probe description evaluation context */	uint_t pcb_cflags;	/* optional compilation flags (see dtrace.h) */	uint_t pcb_nprobes;	/* number of probes matched by description */	uint_t pcb_idepth;	/* preprocessor #include nesting depth */	yystate_t pcb_yystate;	/* lex/yacc parsing state (see yybegin()) */	int pcb_context;	/* yyparse() rules context (DT_CTX_* value) */	int pcb_token;		/* token to be returned by yylex() (if != 0) */	int pcb_cstate;		/* state to be restored by lexer at state end */	int pcb_braces;		/* number of open curly braces in lexer */	int pcb_brackets;	/* number of open square brackets in lexer */	int pcb_parens;		/* number of open parentheses in lexer */} dt_pcb_t;typedef struct dt_intrinsic {	const char *din_name;	/* string name of the intrinsic type */	ctf_encoding_t din_data; /* integer or floating-point CTF encoding */	uint_t din_kind;	/* CTF type kind to instantiate */} dt_intrinsic_t;typedef struct dt_typedef {	const char *dty_src;	/* string name of typedef source type */	const char *dty_dst;	/* string name of typedef destination type */} dt_typedef_t;typedef struct dt_intdesc {	const char *did_name;	/* string name of the integer type */	ctf_file_t *did_ctfp;	/* CTF container for this type reference */	ctf_id_t did_type;	/* CTF type reference for this type */	uintmax_t did_limit;	/* maximum positive value held by type */} dt_intdesc_t;typedef struct dt_modops {	uint_t (*do_syminit)(struct dt_module *);	void (*do_symsort)(struct dt_module *);	GElf_Sym *(*do_symname)(struct dt_module *,	    const char *, GElf_Sym *, uint_t *);	GElf_Sym *(*do_symaddr)(struct dt_module *,	    GElf_Addr, GElf_Sym *, uint_t *);} dt_modops_t;typedef struct dt_arg {	int da_ndx;		/* index of this argument */	int da_mapping;		/* mapping of argument indices to arguments */	ctf_id_t da_type;	/* type of argument */	ctf_file_t *da_ctfp;	/* CTF container for type */	dt_ident_t *da_xlator;	/* translator, if any */	struct dt_arg *da_next;	/* next argument */} dt_arg_t;typedef struct dt_sym {	uint_t ds_symid;	/* id of corresponding symbol */	uint_t ds_next;		/* index of next element in hash chain */} dt_sym_t;typedef struct dt_module {	dt_list_t dm_list;	/* list forward/back pointers */	char dm_name[DTRACE_MODNAMELEN]; /* string name of module */	char dm_file[MAXPATHLEN]; /* file path of module (if any) */	struct dt_module *dm_next; /* pointer to next module in hash chain */	const dt_modops_t *dm_ops; /* pointer to data model's ops vector */	Elf *dm_elf;		/* libelf handle for module object */	objfs_info_t dm_info;	/* object filesystem private info */	ctf_sect_t dm_symtab;	/* symbol table for module */	ctf_sect_t dm_strtab;	/* string table for module */	ctf_sect_t dm_ctdata;	/* CTF data for module */	ctf_file_t *dm_ctfp;	/* CTF container handle */	uint_t *dm_symbuckets;	/* symbol table hash buckets (chain indices) */	dt_sym_t *dm_symchains;	/* symbol table hash chains buffer */	void *dm_asmap;		/* symbol pointers sorted by value */	uint_t dm_symfree;	/* index of next free hash element */	uint_t dm_nsymbuckets;	/* number of elements in bucket array */	uint_t dm_nsymelems;	/* number of elements in hash table */	uint_t dm_asrsv;	/* actual reserved size of dm_asmap */	uint_t dm_aslen;	/* number of entries in dm_asmap */	uint_t dm_flags;	/* module flags (see below) */	int dm_modid;		/* modinfo(1M) module identifier */	GElf_Addr dm_text_va;	/* virtual address of text section */	GElf_Xword dm_text_size; /* size in bytes of text section */	GElf_Addr dm_data_va;	/* virtual address of data section */	GElf_Xword dm_data_size; /* size in bytes of data section */	GElf_Addr dm_bss_va;	/* virtual address of BSS */	GElf_Xword dm_bss_size;	/* size in bytes of BSS */	dt_idhash_t *dm_extern;	/* external symbol definitions */} dt_module_t;#define	DT_DM_LOADED	0x1	/* module symbol and type data is loaded */#define	DT_DM_KERNEL	0x2	/* module is associated with a kernel object */#define	DT_DM_PRIMARY	0x4	/* module is a krtld primary kernel object */typedef struct dt_provmod {	char *dp_name;				/* name of provider module */	struct dt_provmod *dp_next;		/* next module */} dt_provmod_t;typedef struct dt_ahashent {	struct dt_ahashent *dtahe_prev;		/* prev on hash chain */	struct dt_ahashent *dtahe_next;		/* next on hash chain */	struct dt_ahashent *dtahe_prevall;	/* prev on list of all */	struct dt_ahashent *dtahe_nextall;	/* next on list of all */	uint64_t dtahe_hashval;			/* hash value */	size_t dtahe_size;			/* size of data */	dtrace_aggdata_t dtahe_data;		/* data */	void (*dtahe_aggregate)(uint64_t *, uint64_t *, size_t); /* function */} dt_ahashent_t;typedef struct dt_ahash {	dt_ahashent_t	**dtah_hash;		/* hash table */	dt_ahashent_t	*dtah_all;		/* list of all elements */	size_t		dtah_size;		/* size of hash table */} dt_ahash_t;typedef struct dt_aggregate {	dtrace_bufdesc_t dtat_buf; 	/* buf aggregation snapshot */	int dtat_flags;			/* aggregate flags */	processorid_t dtat_ncpus;	/* number of CPUs in aggregate */	processorid_t *dtat_cpus;	/* CPUs in aggregate */	processorid_t dtat_ncpu;	/* size of dtat_cpus array */	processorid_t dtat_maxcpu;	/* maximum number of CPUs */	dt_ahash_t dtat_hash;		/* aggregate hash table */} dt_aggregate_t;typedef struct dt_print_aggdata {	dtrace_hdl_t *dtpa_dtp;		/* pointer to libdtrace handle */	dtrace_aggvarid_t dtpa_id;	/* aggregation variable of interest */	FILE *dtpa_fp;			/* file pointer */	int dtpa_allunprint;		/* print only unprinted aggregations */} dt_print_aggdata_t;typedef struct dt_dirpath {	dt_list_t dir_list;		/* linked-list forward/back pointers */	char *dir_path;			/* directory pathname */} dt_dirpath_t;typedef uint32_t dt_version_t;		/* encoded version (see below) */struct dtrace_hdl {	const dtrace_vector_t *dt_vector; /* library vector, if vectored open */	void *dt_varg;	/* vector argument, if vectored open */	dtrace_conf_t dt_conf;	/* DTrace driver configuration profile */	char dt_errmsg[BUFSIZ];	/* buffer for formatted syntax error msgs */	const char *dt_errtag;	/* tag used with last call to dt_set_errmsg() */	dt_pcb_t *dt_pcb;	/* pointer to current parsing control block */	ulong_t dt_gen;		/* compiler generation number */	dt_list_t dt_programs;	/* linked list of dtrace_prog_t's */	dt_list_t dt_xlators;	/* linked list of dt_xlator_t's */	dt_ident_t *dt_externs;	/* linked list of external symbol identifiers */	dt_idhash_t *dt_macros;	/* hash table of macro variable identifiers */	dt_idhash_t *dt_aggs;	/* hash table of aggregation identifiers */	dt_idhash_t *dt_globals; /* hash table of global identifiers */	dt_idhash_t *dt_tls;	/* hash table of thread-local identifiers */	dt_list_t dt_modlist;	/* linked list of dt_module_t's */	dt_module_t **dt_mods;	/* hash table of dt_module_t's */	uint_t dt_modbuckets;	/* number of module hash buckets */	uint_t dt_nmods;	/* number of modules in hash and list */	dt_provmod_t *dt_provmod; /* linked list of provider modules */	dt_module_t *dt_exec;	/* pointer to executable module */	dt_module_t *dt_rtld;	/* pointer to run-time linker module */	dt_module_t *dt_cdefs;	/* pointer to C dynamic type module */	dt_module_t *dt_ddefs;	/* pointer to D dynamic type module */	dt_list_t dt_provlist;	/* linked list of dt_provider_t's */	struct dt_provider **dt_provs; /* hash table of dt_provider_t's */	uint_t dt_provbuckets;	/* number of provider hash buckets */	uint_t dt_nprovs;	/* number of providers in hash and list */	dt_proc_hash_t *dt_procs; /* hash table of grabbed process handles */	dt_intdesc_t dt_ints[6]; /* cached integer type descriptions */	ctf_id_t dt_type_func;	/* cached CTF identifier for function type */	ctf_id_t dt_type_fptr;	/* cached CTF identifier for function pointer */	ctf_id_t dt_type_str;	/* cached CTF identifier for string type */	ctf_id_t dt_type_dyn;	/* cached CTF identifier for <DYN> type */	ctf_id_t dt_type_stack;	/* cached CTF identifier for stack type */	size_t dt_maxprobe;	/* max enabled probe ID */	dtrace_eprobedesc_t **dt_edesc; /* enabled probe descriptions */	dtrace_probedesc_t **dt_pdesc; /* probe descriptions for enabled prbs */	size_t dt_maxagg;	/* max aggregation ID */	dtrace_aggdesc_t **dt_aggdesc; /* aggregation descriptions */	int dt_maxformat;	/* max format ID */	void **dt_formats;	/* pointer to format array */	dt_aggregate_t dt_aggregate; /* aggregate */	dtrace_bufdesc_t dt_buf; /* staging buffer */	struct dt_pfdict *dt_pfdict; /* dictionary of printf conversions */	dt_version_t dt_vmax;	/* optional ceiling on program API binding */	dtrace_attribute_t dt_amin; /* optional floor on program attributes */	char *dt_cpp_path;	/* pathname of cpp(1) to invoke if needed */	char **dt_cpp_argv;	/* argument vector for exec'ing cpp(1) */	int dt_cpp_argc;	/* count of initialized cpp(1) arguments */	int dt_cpp_args;	/* size of dt_cpp_argv[] array */	char *dt_ld_path;	/* pathname of ld(1) to invoke if needed */	dt_list_t dt_lib_path;	/* linked-list forming library search path */	uint_t dt_lazyload;	/* boolean:  set via -xlazyload */	uint_t dt_active;	/* boolean:  set once tracing is active */	uint_t dt_stopped;	/* boolean:  set once tracing is stopped */	processorid_t dt_beganon; /* CPU that executed BEGIN probe (if any) */	processorid_t dt_endedon; /* CPU that executed END probe (if any) */	uint_t dt_oflags;	/* dtrace open-time options (see dtrace.h) */	uint_t dt_cflags;	/* dtrace compile-time options (see dtrace.h) */	uint_t dt_prcmode;	/* dtrace process create mode (see dt_proc.h) */	uint_t dt_linkmode;	/* dtrace symbol linking mode (see below) */	uint_t dt_stdcmode;	/* dtrace stdc compatibility mode (see below) */	uint_t dt_treedump;	/* dtrace tree debug bitmap (see below) */	uint64_t dt_options[DTRACEOPT_MAX]; /* dtrace run-time options */	int dt_version;		/* library version requested by client */	int dt_ctferr;		/* error resulting from last CTF failure */	int dt_errno;		/* error resulting from last failed operation */	int dt_fd;		/* file descriptor for dtrace pseudo-device */	int dt_ftfd;		/* file descriptor for fasttrap pseudo-device */	int dt_fterr;		/* saved errno from failed open of dt_ftfd */	int dt_cdefs_fd;	/* file descriptor for C CTF debugging cache */	int dt_ddefs_fd;	/* file descriptor for D CTF debugging cache */	dtrace_handle_err_f *dt_errhdlr; /* error handler, if any */	void *dt_errarg;	/* error handler argument */	dtrace_prog_t *dt_errprog; /* error handler program, if any */	dtrace_handle_drop_f *dt_drophdlr; /* drop handler, if any */	void *dt_droparg;	/* drop handler argument */	dtrace_handle_proc_f *dt_prochdlr; /* proc handler, if any */	void *dt_procarg;	/* proc handler argument */	dtrace_status_t dt_status[2]; /* status cache */	int dt_statusgen;	/* current status generation */	hrtime_t dt_laststatus;	/* last status */	hrtime_t dt_lastswitch;	/* last switch of buffer data */	hrtime_t dt_lastagg;	/* last snapshot of aggregation data */	char *dt_sprintf_buf;	/* buffer for dtrace_sprintf() */	int dt_sprintf_buflen;	/* length of dtrace_sprintf() buffer */	const char *dt_filetag;	/* default filetag for dt_set_errmsg() */	char *dt_buffered_buf;	/* buffer for buffered output */	size_t dt_buffered_offs; /* current offset into buffered buffer */	size_t dt_buffered_size; /* size of buffered buffer */	dtrace_handle_buffered_f *dt_bufhdlr; /* buffered handler, if any */	void *dt_bufarg;	/* buffered handler argument */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -