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

📄 dtrace.h

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 H
📖 第 1 页 / 共 5 页
字号:
/* * 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 _SYS_DTRACE_H#define	_SYS_DTRACE_H#pragma ident	"@(#)dtrace.h	1.18	04/11/22 SMI"#ifdef	__cplusplusextern "C" {#endif/* * DTrace Dynamic Tracing Software: Kernel Interfaces * * Note: The contents of this file are private to the implementation of the * Solaris system and DTrace subsystem and are subject to change at any time * without notice.  Applications and drivers using these interfaces will fail * to run on future releases.  These interfaces should not be used for any * purpose except those expressly outlined in dtrace(7D) and libdtrace(3LIB). * Please refer to the "Solaris Dynamic Tracing Guide" for more information. */#ifndef _ASM#include <sys/types.h>#include <sys/modctl.h>#include <sys/processor.h>#include <sys/systm.h>#include <sys/ctf_api.h>#include <sys/cyclic.h>#include <sys/int_limits.h>/* * DTrace Universal Constants and Typedefs */#define	DTRACE_CPUALL		-1	/* all CPUs */#define	DTRACE_IDNONE		0	/* invalid probe identifier */#define	DTRACE_EPIDNONE		0	/* invalid enabled probe identifier */#define	DTRACE_AGGIDNONE	0	/* invalid aggregation identifier */#define	DTRACE_CACHEIDNONE	0	/* invalid predicate cache */#define	DTRACE_PROVNONE		0	/* invalid provider identifier */#define	DTRACE_METAPROVNONE	0	/* invalid meta-provider identifier */#define	DTRACE_ARGNONE		-1	/* invalid argument index */#define	DTRACE_PROVNAMELEN	64#define	DTRACE_MODNAMELEN	64#define	DTRACE_FUNCNAMELEN	128#define	DTRACE_NAMELEN		64#define	DTRACE_FULLNAMELEN	(DTRACE_PROVNAMELEN + DTRACE_MODNAMELEN + \				DTRACE_FUNCNAMELEN + DTRACE_NAMELEN + 4)#define	DTRACE_ARGTYPELEN	128typedef uint32_t dtrace_id_t;		/* probe identifier */typedef uint32_t dtrace_epid_t;		/* enabled probe identifier */typedef uint32_t dtrace_aggid_t;	/* aggregation identifier */typedef uint16_t dtrace_actkind_t;	/* action kind */typedef int64_t dtrace_optval_t;	/* option value */typedef uint32_t dtrace_cacheid_t;	/* predicate cache identifier */typedef enum dtrace_probespec {	DTRACE_PROBESPEC_NONE = -1,	DTRACE_PROBESPEC_PROVIDER = 0,	DTRACE_PROBESPEC_MOD,	DTRACE_PROBESPEC_FUNC,	DTRACE_PROBESPEC_NAME} dtrace_probespec_t;/* * DTrace Intermediate Format (DIF) * * The following definitions describe the DTrace Intermediate Format (DIF), a * a RISC-like instruction set and program encoding used to represent * predicates and actions that can be bound to DTrace probes.  The constants * below defining the number of available registers are suggested minimums; the * compiler should use DTRACEIOC_CONF to dynamically obtain the number of * registers provided by the current DTrace implementation. */#define	DIF_VERSION_1	1		/* DIF version 1: Solaris 10 Beta */#define	DIF_VERSION_2	2		/* DIF version 2: Solaris 10 FCS */#define	DIF_VERSION	DIF_VERSION_2	/* latest DIF instruction set version */#define	DIF_DIR_NREGS	8		/* number of DIF integer registers */#define	DIF_DTR_NREGS	8		/* number of DIF tuple registers */#define	DIF_OP_OR	1		/* or	r1, r2, rd */#define	DIF_OP_XOR	2		/* xor	r1, r2, rd */#define	DIF_OP_AND	3		/* and	r1, r2, rd */#define	DIF_OP_SLL	4		/* sll	r1, r2, rd */#define	DIF_OP_SRL	5		/* srl	r1, r2, rd */#define	DIF_OP_SUB	6		/* sub	r1, r2, rd */#define	DIF_OP_ADD	7		/* add	r1, r2, rd */#define	DIF_OP_MUL	8		/* mul	r1, r2, rd */#define	DIF_OP_SDIV	9		/* sdiv	r1, r2, rd */#define	DIF_OP_UDIV	10		/* udiv r1, r2, rd */#define	DIF_OP_SREM	11		/* srem r1, r2, rd */#define	DIF_OP_UREM	12		/* urem r1, r2, rd */#define	DIF_OP_NOT	13		/* not	r1, rd */#define	DIF_OP_MOV	14		/* mov	r1, rd */#define	DIF_OP_CMP	15		/* cmp	r1, r2 */#define	DIF_OP_TST	16		/* tst  r1 */#define	DIF_OP_BA	17		/* ba	label */#define	DIF_OP_BE	18		/* be	label */#define	DIF_OP_BNE	19		/* bne	label */#define	DIF_OP_BG	20		/* bg	label */#define	DIF_OP_BGU	21		/* bgu	label */#define	DIF_OP_BGE	22		/* bge	label */#define	DIF_OP_BGEU	23		/* bgeu	label */#define	DIF_OP_BL	24		/* bl	label */#define	DIF_OP_BLU	25		/* blu	label */#define	DIF_OP_BLE	26		/* ble	label */#define	DIF_OP_BLEU	27		/* bleu	label */#define	DIF_OP_LDSB	28		/* ldsb	[r1], rd */#define	DIF_OP_LDSH	29		/* ldsh	[r1], rd */#define	DIF_OP_LDSW	30		/* ldsw [r1], rd */#define	DIF_OP_LDUB	31		/* ldub	[r1], rd */#define	DIF_OP_LDUH	32		/* lduh	[r1], rd */#define	DIF_OP_LDUW	33		/* lduw	[r1], rd */#define	DIF_OP_LDX	34		/* ldx	[r1], rd */#define	DIF_OP_RET	35		/* ret	rd */#define	DIF_OP_NOP	36		/* nop */#define	DIF_OP_SETX	37		/* setx	intindex, rd */#define	DIF_OP_SETS	38		/* sets strindex, rd */#define	DIF_OP_SCMP	39		/* scmp	r1, r2 */#define	DIF_OP_LDGA	40		/* ldga	var, ri, rd */#define	DIF_OP_LDGS	41		/* ldgs var, rd */#define	DIF_OP_STGS	42		/* stgs var, rs */#define	DIF_OP_LDTA	43		/* ldta var, ri, rd */#define	DIF_OP_LDTS	44		/* ldts var, rd */#define	DIF_OP_STTS	45		/* stts var, rs */#define	DIF_OP_SRA	46		/* sra	r1, r2, rd */#define	DIF_OP_CALL	47		/* call	subr, rd */#define	DIF_OP_PUSHTR	48		/* pushtr type, rs, rr */#define	DIF_OP_PUSHTV	49		/* pushtv type, rs, rv */#define	DIF_OP_POPTS	50		/* popts */#define	DIF_OP_FLUSHTS	51		/* flushts */#define	DIF_OP_LDGAA	52		/* ldgaa var, rd */#define	DIF_OP_LDTAA	53		/* ldtaa var, rd */#define	DIF_OP_STGAA	54		/* stgaa var, rs */#define	DIF_OP_STTAA	55		/* sttaa var, rs */#define	DIF_OP_LDLS	56		/* ldls	var, rd */#define	DIF_OP_STLS	57		/* stls	var, rs */#define	DIF_OP_ALLOCS	58		/* allocs r1, rd */#define	DIF_OP_COPYS	59		/* copys  r1, r2, rd */#define	DIF_OP_STB	60		/* stb	r1, [rd] */#define	DIF_OP_STH	61		/* sth	r1, [rd] */#define	DIF_OP_STW	62		/* stw	r1, [rd] */#define	DIF_OP_STX	63		/* stx	r1, [rd] */#define	DIF_OP_ULDSB	64		/* uldsb [r1], rd */#define	DIF_OP_ULDSH	65		/* uldsh [r1], rd */#define	DIF_OP_ULDSW	66		/* uldsw [r1], rd */#define	DIF_OP_ULDUB	67		/* uldub [r1], rd */#define	DIF_OP_ULDUH	68		/* ulduh [r1], rd */#define	DIF_OP_ULDUW	69		/* ulduw [r1], rd */#define	DIF_OP_ULDX	70		/* uldx  [r1], rd */#define	DIF_OP_RLDSB	71		/* rldsb [r1], rd */#define	DIF_OP_RLDSH	72		/* rldsh [r1], rd */#define	DIF_OP_RLDSW	73		/* rldsw [r1], rd */#define	DIF_OP_RLDUB	74		/* rldub [r1], rd */#define	DIF_OP_RLDUH	75		/* rlduh [r1], rd */#define	DIF_OP_RLDUW	76		/* rlduw [r1], rd */#define	DIF_OP_RLDX	77		/* rldx  [r1], rd */#define	DIF_INTOFF_MAX		0xffff	/* highest integer table offset */#define	DIF_STROFF_MAX		0xffff	/* highest string table offset */#define	DIF_REGISTER_MAX	0xff	/* highest register number */#define	DIF_VARIABLE_MAX	0xffff	/* highest variable identifier */#define	DIF_SUBROUTINE_MAX	0xffff	/* highest subroutine code */#define	DIF_VAR_ARRAY_MIN	0x0000	/* lowest numbered array variable */#define	DIF_VAR_ARRAY_UBASE	0x0080	/* lowest user-defined array */#define	DIF_VAR_ARRAY_MAX	0x00ff	/* highest numbered array variable */#define	DIF_VAR_OTHER_MIN	0x0100	/* lowest numbered scalar or assc */#define	DIF_VAR_OTHER_UBASE	0x0500	/* lowest user-defined scalar or assc */#define	DIF_VAR_OTHER_MAX	0xffff	/* highest numbered scalar or assc */#define	DIF_VAR_ARGS		0x0000	/* arguments array */#define	DIF_VAR_REGS		0x0001	/* registers array */#define	DIF_VAR_UREGS		0x0002	/* user registers array */#define	DIF_VAR_CURTHREAD	0x0100	/* thread pointer */#define	DIF_VAR_TIMESTAMP	0x0101	/* timestamp */#define	DIF_VAR_VTIMESTAMP	0x0102	/* virtual timestamp */#define	DIF_VAR_IPL		0x0103	/* interrupt priority level */#define	DIF_VAR_EPID		0x0104	/* enabled probe ID */#define	DIF_VAR_ID		0x0105	/* probe ID */#define	DIF_VAR_ARG0		0x0106	/* first argument */#define	DIF_VAR_ARG1		0x0107	/* second argument */#define	DIF_VAR_ARG2		0x0108	/* third argument */#define	DIF_VAR_ARG3		0x0109	/* fourth argument */#define	DIF_VAR_ARG4		0x010a	/* fifth argument */#define	DIF_VAR_ARG5		0x010b	/* sixth argument */#define	DIF_VAR_ARG6		0x010c	/* seventh argument */#define	DIF_VAR_ARG7		0x010d	/* eighth argument */#define	DIF_VAR_ARG8		0x010e	/* ninth argument */#define	DIF_VAR_ARG9		0x010f	/* tenth argument */#define	DIF_VAR_STACKDEPTH	0x0110	/* stack depth */#define	DIF_VAR_CALLER		0x0111	/* caller */#define	DIF_VAR_PROBEPROV	0x0112	/* probe provider */#define	DIF_VAR_PROBEMOD	0x0113	/* probe module */#define	DIF_VAR_PROBEFUNC	0x0114	/* probe function */#define	DIF_VAR_PROBENAME	0x0115	/* probe name */#define	DIF_VAR_PID		0x0116	/* process ID */#define	DIF_VAR_TID		0x0117	/* (per-process) thread ID */#define	DIF_VAR_EXECNAME	0x0118	/* name of executable */#define	DIF_VAR_ZONENAME	0x0119	/* zone name associated with process */#define	DIF_VAR_WALLTIMESTAMP	0x011a	/* wall-clock timestamp */#define	DIF_SUBR_RAND			0#define	DIF_SUBR_MUTEX_OWNED		1#define	DIF_SUBR_MUTEX_OWNER		2#define	DIF_SUBR_MUTEX_TYPE_ADAPTIVE	3#define	DIF_SUBR_MUTEX_TYPE_SPIN	4#define	DIF_SUBR_RW_READ_HELD		5#define	DIF_SUBR_RW_WRITE_HELD		6#define	DIF_SUBR_RW_ISWRITER		7#define	DIF_SUBR_COPYIN			8#define	DIF_SUBR_COPYINSTR		9#define	DIF_SUBR_SPECULATION		10#define	DIF_SUBR_PROGENYOF		11#define	DIF_SUBR_STRLEN			12#define	DIF_SUBR_COPYOUT		13#define	DIF_SUBR_COPYOUTSTR		14#define	DIF_SUBR_ALLOCA			15#define	DIF_SUBR_BCOPY			16#define	DIF_SUBR_COPYINTO		17#define	DIF_SUBR_MSGDSIZE		18#define	DIF_SUBR_MSGSIZE		19#define	DIF_SUBR_GETMAJOR		20#define	DIF_SUBR_GETMINOR		21#define	DIF_SUBR_DDI_PATHNAME		22#define	DIF_SUBR_STRJOIN		23#define	DIF_SUBR_LLTOSTR		24#define	DIF_SUBR_BASENAME		25#define	DIF_SUBR_DIRNAME		26#define	DIF_SUBR_CLEANPATH		27#define	DIF_SUBR_MAX			27	/* max subroutine value */typedef uint32_t dif_instr_t;#define	DIF_INSTR_OP(i)			(((i) >> 24) & 0xff)#define	DIF_INSTR_R1(i)			(((i) >> 16) & 0xff)#define	DIF_INSTR_R2(i)			(((i) >>  8) & 0xff)#define	DIF_INSTR_RD(i)			((i) & 0xff)#define	DIF_INSTR_RS(i)			((i) & 0xff)#define	DIF_INSTR_LABEL(i)		((i) & 0xffffff)#define	DIF_INSTR_VAR(i)		(((i) >>  8) & 0xffff)#define	DIF_INSTR_INTEGER(i)		(((i) >>  8) & 0xffff)#define	DIF_INSTR_STRING(i)		(((i) >>  8) & 0xffff)#define	DIF_INSTR_SUBR(i)		(((i) >>  8) & 0xffff)#define	DIF_INSTR_TYPE(i)		(((i) >> 16) & 0xff)#define	DIF_INSTR_FMT(op, r1, r2, d) \	(((op) << 24) | ((r1) << 16) | ((r2) << 8) | (d))#define	DIF_INSTR_NOT(r1, d)		(DIF_INSTR_FMT(DIF_OP_NOT, r1, 0, d))#define	DIF_INSTR_MOV(r1, d)		(DIF_INSTR_FMT(DIF_OP_MOV, r1, 0, d))#define	DIF_INSTR_CMP(op, r1, r2)	(DIF_INSTR_FMT(op, r1, r2, 0))#define	DIF_INSTR_TST(r1)		(DIF_INSTR_FMT(DIF_OP_TST, r1, 0, 0))#define	DIF_INSTR_BRANCH(op, label)	(((op) << 24) | (label))#define	DIF_INSTR_LOAD(op, r1, d)	(DIF_INSTR_FMT(op, r1, 0, d))#define	DIF_INSTR_STORE(op, r1, d)	(DIF_INSTR_FMT(op, r1, 0, d))#define	DIF_INSTR_SETX(i, d)		((DIF_OP_SETX << 24) | ((i) << 8) | (d))#define	DIF_INSTR_SETS(s, d)		((DIF_OP_SETS << 24) | ((s) << 8) | (d))#define	DIF_INSTR_RET(d)		(DIF_INSTR_FMT(DIF_OP_RET, 0, 0, d))#define	DIF_INSTR_NOP			(DIF_OP_NOP << 24)#define	DIF_INSTR_LDA(op, v, r, d)	(DIF_INSTR_FMT(op, v, r, d))#define	DIF_INSTR_LDV(op, v, d)		(((op) << 24) | ((v) << 8) | (d))#define	DIF_INSTR_STV(op, v, rs)	(((op) << 24) | ((v) << 8) | (rs))#define	DIF_INSTR_CALL(s, d)		((DIF_OP_CALL << 24) | ((s) << 8) | (d))#define	DIF_INSTR_PUSHTS(op, t, r2, rs)	(DIF_INSTR_FMT(op, t, r2, rs))#define	DIF_INSTR_POPTS			(DIF_OP_POPTS << 24)#define	DIF_INSTR_FLUSHTS		(DIF_OP_FLUSHTS << 24)#define	DIF_INSTR_ALLOCS(r1, d)		(DIF_INSTR_FMT(DIF_OP_ALLOCS, r1, 0, d))#define	DIF_INSTR_COPYS(r1, r2, d)	(DIF_INSTR_FMT(DIF_OP_COPYS, r1, r2, d))#define	DIF_REG_R0	0		/* %r0 is always set to zero *//* * A DTrace Intermediate Format Type (DIF Type) is used to represent the types * of variables, function and associative array arguments, and the return type * for each DIF object (shown below).  It contains a description of the type, * its size in bytes, and a module identifier. */typedef struct dtrace_diftype {	uint8_t dtdt_kind;		/* type kind (see below) */	uint8_t dtdt_ckind;		/* type kind in CTF */	uint8_t dtdt_flags;		/* type flags (see below) */	uint8_t dtdt_pad;		/* reserved for future use */	uint32_t dtdt_size;		/* type size in bytes (unless string) */} dtrace_diftype_t;

⌨️ 快捷键说明

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