summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/dtrace/dtrace.c
diff options
context:
space:
mode:
authorJohn Sonnenschein <johns@joyent.com>2011-11-22 23:47:54 +0000
committerJohn Sonnenschein <johns@joyent.com>2011-11-22 23:47:54 +0000
commitd640e71cae133c1dc78667f20eee2e9c86e24791 (patch)
tree8015b9e7becaa839039e06db905426ec13ebeb70 /usr/src/uts/common/dtrace/dtrace.c
parent19f689a83f5c6b6ddb604e980fb8e7b9a5e1a3eb (diff)
parentefcb7078c2d1766a6682e861629cafbc6724c14a (diff)
downloadillumos-joyent-d640e71cae133c1dc78667f20eee2e9c86e24791.tar.gz
[OS-714] illumos merge
Merge git://github.com/illumos/illumos-gate Conflicts: usr/src/cmd/lp/filter/postscript/dpost/ps_include.c usr/src/cmd/zfs/zfs_main.c usr/src/lib/libdtrace/common/dt_program.c usr/src/lib/libzfs/common/libzfs.h usr/src/lib/libzfs/common/libzfs_pool.c usr/src/man/man1m/zfs.1m usr/src/man/man1m/zpool.1m usr/src/uts/common/fs/zfs/zfs_ioctl.c usr/src/uts/common/inet/tcp/tcp_input.c
Diffstat (limited to 'usr/src/uts/common/dtrace/dtrace.c')
-rw-r--r--usr/src/uts/common/dtrace/dtrace.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/usr/src/uts/common/dtrace/dtrace.c b/usr/src/uts/common/dtrace/dtrace.c
index eb60c15c04..0f880f2458 100644
--- a/usr/src/uts/common/dtrace/dtrace.c
+++ b/usr/src/uts/common/dtrace/dtrace.c
@@ -9848,12 +9848,14 @@ dtrace_ecb_action_add(dtrace_ecb_t *ecb, dtrace_actdesc_t *desc)
case DTRACEACT_PRINTA:
case DTRACEACT_SYSTEM:
case DTRACEACT_FREOPEN:
+ case DTRACEACT_DIFEXPR:
/*
* We know that our arg is a string -- turn it into a
* format.
*/
if (arg == NULL) {
- ASSERT(desc->dtad_kind == DTRACEACT_PRINTA);
+ ASSERT(desc->dtad_kind == DTRACEACT_PRINTA ||
+ desc->dtad_kind == DTRACEACT_DIFEXPR);
format = 0;
} else {
ASSERT(arg != NULL);
@@ -9864,7 +9866,6 @@ dtrace_ecb_action_add(dtrace_ecb_t *ecb, dtrace_actdesc_t *desc)
/*FALLTHROUGH*/
case DTRACEACT_LIBACT:
- case DTRACEACT_DIFEXPR:
case DTRACEACT_TRACEMEM:
case DTRACEACT_TRACEMEM_DYNSIZE:
if (dp == NULL)
@@ -11887,15 +11888,20 @@ dtrace_dof_actdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
(uintptr_t)sec->dofs_offset + offs);
kind = (dtrace_actkind_t)desc->dofa_kind;
- if (DTRACEACT_ISPRINTFLIKE(kind) &&
+ if ((DTRACEACT_ISPRINTFLIKE(kind) &&
(kind != DTRACEACT_PRINTA ||
+ desc->dofa_strtab != DOF_SECIDX_NONE)) ||
+ (kind == DTRACEACT_DIFEXPR &&
desc->dofa_strtab != DOF_SECIDX_NONE)) {
dof_sec_t *strtab;
char *str, *fmt;
uint64_t i;
/*
- * printf()-like actions must have a format string.
+ * The argument to these actions is an index into the
+ * DOF string table. For printf()-like actions, this
+ * is the format string. For print(), this is the
+ * CTF type of the expression result.
*/
if ((strtab = dtrace_dof_sect(dof,
DOF_SECT_STRTAB, desc->dofa_strtab)) == NULL)