summaryrefslogtreecommitdiff
path: root/uts/common/sys/dtrace.h
diff options
context:
space:
mode:
Diffstat (limited to 'uts/common/sys/dtrace.h')
-rw-r--r--uts/common/sys/dtrace.h91
1 files changed, 76 insertions, 15 deletions
diff --git a/uts/common/sys/dtrace.h b/uts/common/sys/dtrace.h
index b6e52ec1c4da..c15799a4e4a2 100644
--- a/uts/common/sys/dtrace.h
+++ b/uts/common/sys/dtrace.h
@@ -20,15 +20,17 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2011, Joyent, Inc. All rights reserved.
+ */
+
#ifndef _SYS_DTRACE_H
#define _SYS_DTRACE_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -204,6 +206,7 @@ typedef enum dtrace_probespec {
#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_VMREGS 0x0003 /* virtual machine registers array */
#define DIF_VAR_CURTHREAD 0x0100 /* thread pointer */
#define DIF_VAR_TIMESTAMP 0x0101 /* timestamp */
#define DIF_VAR_VTIMESTAMP 0x0102 /* virtual timestamp */
@@ -282,8 +285,10 @@ typedef enum dtrace_probespec {
#define DIF_SUBR_INET_NTOP 41
#define DIF_SUBR_INET_NTOA 42
#define DIF_SUBR_INET_NTOA6 43
+#define DIF_SUBR_TOUPPER 44
+#define DIF_SUBR_TOLOWER 45
-#define DIF_SUBR_MAX 43 /* max subroutine value */
+#define DIF_SUBR_MAX 45 /* max subroutine value */
typedef uint32_t dif_instr_t;
@@ -392,6 +397,8 @@ typedef struct dtrace_difv {
#define DTRACEACT_PRINTF 3 /* printf() action */
#define DTRACEACT_PRINTA 4 /* printa() action */
#define DTRACEACT_LIBACT 5 /* library-controlled action */
+#define DTRACEACT_TRACEMEM 6 /* tracemem() action */
+#define DTRACEACT_TRACEMEM_DYNSIZE 7 /* dynamic tracemem() size */
#define DTRACEACT_PROC 0x0100
#define DTRACEACT_USTACK (DTRACEACT_PROC + 1)
@@ -457,6 +464,7 @@ typedef struct dtrace_difv {
#define DTRACEAGG_STDDEV (DTRACEACT_AGGREGATION + 6)
#define DTRACEAGG_QUANTIZE (DTRACEACT_AGGREGATION + 7)
#define DTRACEAGG_LQUANTIZE (DTRACEACT_AGGREGATION + 8)
+#define DTRACEAGG_LLQUANTIZE (DTRACEACT_AGGREGATION + 9)
#define DTRACEACT_ISAGG(x) \
(DTRACEACT_CLASS(x) == DTRACEACT_AGGREGATION)
@@ -491,6 +499,31 @@ typedef struct dtrace_difv {
(int32_t)(((x) & DTRACE_LQUANTIZE_BASEMASK) >> \
DTRACE_LQUANTIZE_BASESHIFT)
+#define DTRACE_LLQUANTIZE_FACTORSHIFT 48
+#define DTRACE_LLQUANTIZE_FACTORMASK ((uint64_t)UINT16_MAX << 48)
+#define DTRACE_LLQUANTIZE_LOWSHIFT 32
+#define DTRACE_LLQUANTIZE_LOWMASK ((uint64_t)UINT16_MAX << 32)
+#define DTRACE_LLQUANTIZE_HIGHSHIFT 16
+#define DTRACE_LLQUANTIZE_HIGHMASK ((uint64_t)UINT16_MAX << 16)
+#define DTRACE_LLQUANTIZE_NSTEPSHIFT 0
+#define DTRACE_LLQUANTIZE_NSTEPMASK UINT16_MAX
+
+#define DTRACE_LLQUANTIZE_FACTOR(x) \
+ (uint16_t)(((x) & DTRACE_LLQUANTIZE_FACTORMASK) >> \
+ DTRACE_LLQUANTIZE_FACTORSHIFT)
+
+#define DTRACE_LLQUANTIZE_LOW(x) \
+ (uint16_t)(((x) & DTRACE_LLQUANTIZE_LOWMASK) >> \
+ DTRACE_LLQUANTIZE_LOWSHIFT)
+
+#define DTRACE_LLQUANTIZE_HIGH(x) \
+ (uint16_t)(((x) & DTRACE_LLQUANTIZE_HIGHMASK) >> \
+ DTRACE_LLQUANTIZE_HIGHSHIFT)
+
+#define DTRACE_LLQUANTIZE_NSTEP(x) \
+ (uint16_t)(((x) & DTRACE_LLQUANTIZE_NSTEPMASK) >> \
+ DTRACE_LLQUANTIZE_NSTEPSHIFT)
+
#define DTRACE_USTACK_NFRAMES(x) (uint32_t)((x) & UINT32_MAX)
#define DTRACE_USTACK_STRSIZE(x) (uint32_t)((x) >> 32)
#define DTRACE_USTACK_ARG(x, y) \
@@ -664,6 +697,20 @@ typedef struct dof_sec {
#define DOF_SECF_LOAD 1 /* section should be loaded */
+#define DOF_SEC_ISLOADABLE(x) \
+ (((x) == DOF_SECT_ECBDESC) || ((x) == DOF_SECT_PROBEDESC) || \
+ ((x) == DOF_SECT_ACTDESC) || ((x) == DOF_SECT_DIFOHDR) || \
+ ((x) == DOF_SECT_DIF) || ((x) == DOF_SECT_STRTAB) || \
+ ((x) == DOF_SECT_VARTAB) || ((x) == DOF_SECT_RELTAB) || \
+ ((x) == DOF_SECT_TYPTAB) || ((x) == DOF_SECT_URELHDR) || \
+ ((x) == DOF_SECT_KRELHDR) || ((x) == DOF_SECT_OPTDESC) || \
+ ((x) == DOF_SECT_PROVIDER) || ((x) == DOF_SECT_PROBES) || \
+ ((x) == DOF_SECT_PRARGS) || ((x) == DOF_SECT_PROFFS) || \
+ ((x) == DOF_SECT_INTTAB) || ((x) == DOF_SECT_XLTAB) || \
+ ((x) == DOF_SECT_XLMEMBERS) || ((x) == DOF_SECT_XLIMPORT) || \
+ ((x) == DOF_SECT_XLIMPORT) || ((x) == DOF_SECT_XLEXPORT) || \
+ ((x) == DOF_SECT_PREXPORT) || ((x) == DOF_SECT_PRENOFFS))
+
typedef struct dof_ecbdesc {
dof_secidx_t dofe_probes; /* link to DOF_SECT_PROBEDESC */
dof_secidx_t dofe_pred; /* link to DOF_SECT_DIFOHDR */
@@ -1309,7 +1356,7 @@ typedef struct dof_helper {
* dtps_resume() <-- Resume specified probe
* dtps_getargdesc() <-- Get the argument description for args[X]
* dtps_getargval() <-- Get the value for an argX or args[X] variable
- * dtps_usermode() <-- Find out if the probe was fired in user mode
+ * dtps_mode() <-- Return the mode of the fired probe
* dtps_destroy() <-- Destroy all state associated with this probe
*
* 1.2 void dtps_provide(void *arg, const dtrace_probedesc_t *spec)
@@ -1382,7 +1429,7 @@ typedef struct dof_helper {
* dtps_provide_module(); see "Arguments and Notes" for dtrace_register(),
* below.
*
- * 1.4 void dtps_enable(void *arg, dtrace_id_t id, void *parg)
+ * 1.4 int dtps_enable(void *arg, dtrace_id_t id, void *parg)
*
* 1.4.1 Overview
*
@@ -1403,7 +1450,8 @@ typedef struct dof_helper {
*
* 1.4.3 Return value
*
- * None.
+ * On success, dtps_enable() should return 0. On failure, -1 should be
+ * returned.
*
* 1.4.4 Caller's context
*
@@ -1557,24 +1605,32 @@ typedef struct dof_helper {
* This is called from within dtrace_probe() meaning that interrupts
* are disabled. No locks should be taken within this entry point.
*
- * 1.10 int dtps_usermode(void *arg, dtrace_id_t id, void *parg)
+ * 1.10 int dtps_mode(void *arg, dtrace_id_t id, void *parg)
*
* 1.10.1 Overview
*
- * Called to determine if the probe was fired in a user context.
+ * Called to determine the mode of a fired probe.
*
* 1.10.2 Arguments and notes
*
* The first argument is the cookie as passed to dtrace_register(). The
- * second argument is the identifier of the current probe. The third
+ * second argument is the identifier of the current probe. The third
* argument is the probe argument as passed to dtrace_probe_create(). This
* entry point must not be left NULL for providers whose probes allow for
- * mixed mode tracing, that is to say those probes that can fire during
- * kernel- _or_ user-mode execution
+ * mixed mode tracing, that is to say those unanchored probes that can fire
+ * during kernel- or user-mode execution.
*
* 1.10.3 Return value
*
- * A boolean value.
+ * A bitwise OR that encapsulates both the mode (either DTRACE_MODE_KERNEL
+ * or DTRACE_MODE_USER) and the policy when the privilege of the enabling
+ * is insufficient for that mode (either DTRACE_MODE_NOPRIV_DROP or
+ * DTRACE_MODE_NOPRIV_RESTRICT). If the policy is DTRACE_MODE_NOPRIV_DROP,
+ * insufficient privilege will result in the probe firing being silently
+ * ignored for the enabling; if the policy is DTRACE_NODE_NOPRIV_RESTRICT,
+ * insufficient privilege will not prevent probe processing for the
+ * enabling, but restrictions will be in place that induce a UPRIV fault
+ * upon attempt to examine probe arguments or current process state.
*
* 1.10.4 Caller's context
*
@@ -1957,7 +2013,7 @@ typedef struct dof_helper {
typedef struct dtrace_pops {
void (*dtps_provide)(void *arg, const dtrace_probedesc_t *spec);
void (*dtps_provide_module)(void *arg, struct modctl *mp);
- void (*dtps_enable)(void *arg, dtrace_id_t id, void *parg);
+ int (*dtps_enable)(void *arg, dtrace_id_t id, void *parg);
void (*dtps_disable)(void *arg, dtrace_id_t id, void *parg);
void (*dtps_suspend)(void *arg, dtrace_id_t id, void *parg);
void (*dtps_resume)(void *arg, dtrace_id_t id, void *parg);
@@ -1965,10 +2021,15 @@ typedef struct dtrace_pops {
dtrace_argdesc_t *desc);
uint64_t (*dtps_getargval)(void *arg, dtrace_id_t id, void *parg,
int argno, int aframes);
- int (*dtps_usermode)(void *arg, dtrace_id_t id, void *parg);
+ int (*dtps_mode)(void *arg, dtrace_id_t id, void *parg);
void (*dtps_destroy)(void *arg, dtrace_id_t id, void *parg);
} dtrace_pops_t;
+#define DTRACE_MODE_KERNEL 0x01
+#define DTRACE_MODE_USER 0x02
+#define DTRACE_MODE_NOPRIV_DROP 0x10
+#define DTRACE_MODE_NOPRIV_RESTRICT 0x20
+
typedef uintptr_t dtrace_provider_id_t;
extern int dtrace_register(const char *, const dtrace_pattr_t *, uint32_t,