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

📄 dtrace.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	_DTRACE_H#define	_DTRACE_H#pragma ident	"@(#)dtrace.h	1.9	04/12/18 SMI"#include <sys/dtrace.h>#include <stdarg.h>#include <stdio.h>#include <gelf.h>#ifdef	__cplusplusextern "C" {#endif/* * DTrace Dynamic Tracing Software: Library 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. */#define	DTRACE_VERSION	1		/* library ABI interface version */struct ps_prochandle;typedef struct dtrace_hdl dtrace_hdl_t;typedef struct dtrace_prog dtrace_prog_t;typedef struct dtrace_vector dtrace_vector_t;typedef struct dtrace_aggdata dtrace_aggdata_t;typedef int64_t dtrace_aggvarid_t;#define	DTRACE_O_NODEV		0x01	/* do not open dtrace(7D) device */#define	DTRACE_O_NOSYS		0x02	/* do not load /system/object modules */#define	DTRACE_O_LP64		0x04	/* force D compiler to be LP64 */#define	DTRACE_O_ILP32		0x08	/* force D compiler to be ILP32 */#define	DTRACE_O_MASK		0x0f	/* mask of valid flags to dtrace_open */extern dtrace_hdl_t *dtrace_open(int, int, int *);extern dtrace_hdl_t *dtrace_vopen(int, int, int *,    const dtrace_vector_t *, void *);extern int dtrace_go(dtrace_hdl_t *);extern int dtrace_stop(dtrace_hdl_t *);extern void dtrace_sleep(dtrace_hdl_t *);extern void dtrace_close(dtrace_hdl_t *);extern int dtrace_errno(dtrace_hdl_t *);extern const char *dtrace_errmsg(dtrace_hdl_t *, int);extern const char *dtrace_faultstr(dtrace_hdl_t *, int);extern int dtrace_setopt(dtrace_hdl_t *, const char *, const char *);extern int dtrace_getopt(dtrace_hdl_t *, const char *, dtrace_optval_t *);extern void dtrace_update(dtrace_hdl_t *);extern int dtrace_ctlfd(dtrace_hdl_t *);/* * DTrace Program Interface * * DTrace programs can be created by compiling ASCII text files containing * D programs, by compiling C strings that specify a D program, or by * manually constructing statements and adding them to an existing program. * The dtrace_program_create() function can be used to create an empty program. * Once created, callers can examine the list of program statements and * enable the probes and actions described by these statements. */typedef struct dtrace_proginfo {	dtrace_attribute_t dpi_descattr; /* minimum probedesc attributes */	dtrace_attribute_t dpi_stmtattr; /* minimum statement attributes */	uint_t dpi_aggregates;	/* number of aggregates specified in program */	uint_t dpi_recgens;	/* number of record generating probes in prog */	uint_t dpi_matches;	/* number of probes matched by program */	uint_t dpi_speculations; /* number of speculations specified in prog */} dtrace_proginfo_t;#define	DTRACE_C_DIFV	0x0001	/* DIF verbose mode: show each compiled DIFO */#define	DTRACE_C_EMPTY	0x0002	/* Permit compilation of empty D source files */#define	DTRACE_C_ZDEFS	0x0004	/* Permit probe defs that match zero probes */#define	DTRACE_C_EATTR	0x0008	/* Error if program attributes less than min */#define	DTRACE_C_CPP	0x0010	/* Preprocess input file with cpp(1) utility */#define	DTRACE_C_KNODEF	0x0020	/* Permit unresolved kernel symbols in DIFO */#define	DTRACE_C_UNODEF	0x0040	/* Permit unresolved user symbols in DIFO */#define	DTRACE_C_PSPEC	0x0080	/* Intepret ambiguous specifiers as probes */#define	DTRACE_C_ETAGS	0x0100	/* Prefix error messages with error tags */#define	DTRACE_C_ARGREF	0x0200	/* Do not require all macro args to be used */#define	DTRACE_C_PRDEFS	0x0400	/* Permit provider definitions in programs */#define	DTRACE_C_DEFARG	0x0800	/* Use 0/"" as value for unspecified args */#define	DTRACE_C_NOLIBS	0x1000	/* Do not process D system libraries */#define	DTRACE_C_MASK	0x1fff	/* mask of all valid flags to dtrace_*compile */extern dtrace_prog_t *dtrace_program_strcompile(dtrace_hdl_t *,    const char *, dtrace_probespec_t, uint_t, int, char *const []);extern dtrace_prog_t *dtrace_program_fcompile(dtrace_hdl_t *,    FILE *, uint_t, int, char *const []);extern int dtrace_program_exec(dtrace_hdl_t *, dtrace_prog_t *,    dtrace_proginfo_t *);extern void dtrace_program_info(dtrace_hdl_t *, dtrace_prog_t *,    dtrace_proginfo_t *);#define	DTRACE_D_STRIP	0x01	/* strip non-loadable sections from program */#define	DTRACE_D_PROBES	0x02	/* include provider and probe definitions */#define	DTRACE_D_MASK	0x03	/* mask of valid flags to dtrace_dof_create */extern int dtrace_program_link(dtrace_hdl_t *, dtrace_prog_t *,    uint_t, const char *, int, char *const []);extern void *dtrace_dof_create(dtrace_hdl_t *, dtrace_prog_t *, uint_t);extern void dtrace_dof_destroy(void *);extern void *dtrace_getopt_dof(dtrace_hdl_t *);extern void *dtrace_geterr_dof(dtrace_hdl_t *);extern dtrace_prog_t *dtrace_program_create(dtrace_hdl_t *);extern void dtrace_program_destroy(dtrace_hdl_t *, dtrace_prog_t *);typedef struct dtrace_stmtdesc {	dtrace_ecbdesc_t *dtsd_ecbdesc;		/* ECB description */	dtrace_actdesc_t *dtsd_action;		/* action list */	dtrace_actdesc_t *dtsd_action_last;	/* last action in action list */	void *dtsd_aggdata;			/* aggregation data */	void *dtsd_fmtdata;			/* type-specific output data */	void (*dtsd_callback)();		/* callback function for EPID */	void *dtsd_data;			/* callback data pointer */	dtrace_attribute_t dtsd_descattr;	/* probedesc attributes */	dtrace_attribute_t dtsd_stmtattr;	/* statement attributes */} dtrace_stmtdesc_t;typedef int dtrace_stmt_f(dtrace_hdl_t *, dtrace_prog_t *,    dtrace_stmtdesc_t *, void *);extern dtrace_stmtdesc_t *dtrace_stmt_create(dtrace_hdl_t *,    dtrace_ecbdesc_t *);extern dtrace_actdesc_t *dtrace_stmt_action(dtrace_hdl_t *,    dtrace_stmtdesc_t *);extern int dtrace_stmt_add(dtrace_hdl_t *, dtrace_prog_t *,    dtrace_stmtdesc_t *);extern int dtrace_stmt_iter(dtrace_hdl_t *, dtrace_prog_t *,    dtrace_stmt_f *, void *);extern void dtrace_stmt_destroy(dtrace_stmtdesc_t *);extern dtrace_ecbdesc_t *dtrace_ecbdesc_create(dtrace_hdl_t *,    const dtrace_probedesc_t *);extern void dtrace_ecbdesc_hold(dtrace_ecbdesc_t *);extern void dtrace_ecbdesc_release(dtrace_ecbdesc_t *);/* * DTrace Formatted Output Interfaces * * To format output associated with a given dtrace_stmtdesc, the caller can * invoke one of the following functions, passing the opaque dtsd_fmtdata and a * list of record descriptions.  These functions return either -1 to indicate * an error, or a positive integer indicating the number of records consumed. * For anonymous enablings, the consumer can use the dtrd_format member of * the record description to obtain a format description.  The dtfd_string * member of the format description may be passed to dtrace_print{fa}_create() * to create the opaque format data. */extern void *dtrace_printf_create(dtrace_hdl_t *, const char *);extern void *dtrace_printa_create(dtrace_hdl_t *, const char *);extern size_t dtrace_printf_format(dtrace_hdl_t *, void *, char *, size_t);extern int dtrace_fprintf(dtrace_hdl_t *, FILE *, void *,    const dtrace_recdesc_t *, uint_t, const void *, size_t);extern int dtrace_fprinta(dtrace_hdl_t *, FILE *, void *,    const dtrace_recdesc_t *, uint_t, const void *, size_t);extern int dtrace_system(dtrace_hdl_t *, FILE *, void *,    const dtrace_recdesc_t *, uint_t, const void *, size_t);/* * DTrace Data Consumption Interface */typedef enum {	DTRACEFLOW_ENTRY,	DTRACEFLOW_RETURN,	DTRACEFLOW_NONE} dtrace_flowkind_t;#define	DTRACE_CONSUME_ERROR		-1	/* error while processing */#define	DTRACE_CONSUME_THIS		0	/* consume this probe/record */#define	DTRACE_CONSUME_NEXT		1	/* advance to next probe/rec */#define	DTRACE_CONSUME_ABORT		2	/* abort consumption */typedef struct dtrace_probedata {	dtrace_hdl_t *dtpda_handle;		/* handle to DTrace library */	dtrace_eprobedesc_t *dtpda_edesc;	/* enabled probe description */	dtrace_probedesc_t *dtpda_pdesc;	/* probe description */	processorid_t dtpda_cpu;		/* CPU for data */	caddr_t dtpda_data;			/* pointer to raw data */	dtrace_flowkind_t dtpda_flow;		/* flow kind */	const char *dtpda_prefix;		/* recommended flow prefix */	int dtpda_indent;			/* recommended flow indent */} dtrace_probedata_t;typedef int dtrace_consume_probe_f(const dtrace_probedata_t *, void *);typedef int dtrace_consume_rec_f(const dtrace_probedata_t *,    const dtrace_recdesc_t *, void *);extern int dtrace_consume(dtrace_hdl_t *, FILE *,    dtrace_consume_probe_f *, dtrace_consume_rec_f *, void *);#define	DTRACE_STATUS_NONE	0	/* no status; not yet time */#define	DTRACE_STATUS_OKAY	1	/* status okay */#define	DTRACE_STATUS_EXITED	2	/* exit() was called; tracing stopped */#define	DTRACE_STATUS_FILLED	3	/* fill buffer filled; tracing stoped */#define	DTRACE_STATUS_STOPPED	4	/* tracing already stopped */extern int dtrace_status(dtrace_hdl_t *);/* * DTrace Work Interface */typedef enum {	DTRACE_WORKSTATUS_ERROR = -1,	DTRACE_WORKSTATUS_OKAY,	DTRACE_WORKSTATUS_DONE} dtrace_workstatus_t;extern dtrace_workstatus_t dtrace_work(dtrace_hdl_t *, FILE *,    dtrace_consume_probe_f *, dtrace_consume_rec_f *, void *);/* * DTrace Handler Interface */#define	DTRACE_HANDLE_ABORT		-1	/* abort current operation */#define	DTRACE_HANDLE_OK		0	/* handled okay; continue */typedef struct dtrace_errdata {	dtrace_hdl_t *dteda_handle;		/* handle to DTrace library */	dtrace_eprobedesc_t *dteda_edesc;	/* enabled probe inducing err */	dtrace_probedesc_t *dteda_pdesc;	/* probe inducing error */	processorid_t dteda_cpu;		/* CPU of error */	int dteda_action;			/* action inducing error */	int dteda_offset;			/* offset in DIFO of error */	int dteda_fault;			/* specific fault */	uint64_t dteda_addr;			/* address of fault, if any */	const char *dteda_msg;			/* preconstructed message */} dtrace_errdata_t;typedef int dtrace_handle_err_f(dtrace_errdata_t *, void *);extern int dtrace_handle_err(dtrace_hdl_t *, dtrace_handle_err_f *, void *);

⌨️ 快捷键说明

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