# undef DT_DBG_AGG
# undef DT_DBG_BUF
+# undef DT_DBG_DIF
# undef DT_DBG_DOF
# undef DT_DBG_ENABLE
# undef DT_DBG_IOCTL
# undef DT_DBG_AGG
# undef DT_DBG_BUF
+# undef DT_DBG_DIF
# undef DT_DBG_DOF
# undef DT_DBG_ENABLE
# undef DT_DBG_IOCTL
# define dt_dbg_buf(fmt, ...)
#endif
+#ifdef DT_DBG_DIF
+# define dt_dbg_dif(fmt, ...) pr_info(fmt, ## __VA_ARGS__)
+#else
+# define dt_dbg_dif(fmt, ...)
+#endif
+
#ifdef DT_DBG_DOF
# define dt_dbg_dof(fmt, ...) pr_info(fmt, ## __VA_ARGS__)
#else
uintptr_t rw;
} r;
+ dt_dbg_dif(" Subroutine %d\n", subr);
+
switch (subr) {
case DIF_SUBR_RAND:
regs[rd] = ktime_to_ns(dtrace_gethrtime()) * 2416 + 374441;
dif_instr_t instr;
uint_t r1, r2, rd;
+ dt_dbg_dif(" DIF %p emulation (text %p, %d instructions)...\n",
+ difo, text, textlen);
+
/*
* We stash the current DIF object into the machine state: we need it
* for subsequent access checking.
r2 = DIF_INSTR_R2(instr);
rd = DIF_INSTR_RD(instr);
+ dt_dbg_dif(" Executing opcode %d (%d, %d, %d)\n",
+ DIF_INSTR_OP(instr), r1, r2, rd);
+
switch (DIF_INSTR_OP(instr)) {
case DIF_OP_OR:
regs[rd] = regs[r1] | regs[r2];
}
}
- if (!(*flags & CPU_DTRACE_FAULT))
+
+ if (!(*flags & CPU_DTRACE_FAULT)) {
+ dt_dbg_dif(" DIF %p completed, rval = %llx (flags %x)\n",
+ difo, rval, *flags);
return rval;
+ }
+
+ dt_dbg_dif(" DIF %p emulation failed (flags %x)\n", difo, *flags);
mstate->dtms_fltoffs = opc * sizeof(dif_instr_t);
mstate->dtms_present |= DTRACE_MSTATE_FLTOFFS;
strncpy(desc->dtpd_name, (char *)(str + probe->dofp_name),
min((size_t)DTRACE_NAMELEN - 1, size - probe->dofp_name));
- dt_dbg_dof(" ECB Probe %s:%s:%s:%s\n",
+ dt_dbg_dof(" ECB Probe %s:%s:%s:%s\n",
desc->dtpd_provider, desc->dtpd_mod, desc->dtpd_func,
desc->dtpd_name);
if ((enab = *enabp) == NULL)
enab = *enabp = dtrace_enabling_create(vstate);
- if (enab == NULL)
+ if (enab == NULL) {
+ dt_dbg_dof(" DOF 0x%p Done slurping - no enablings\n", dof);
return -1;
+ }
for (i = 0; i < dof->dofh_secnum; i++) {
dof_sec_t *sec =
continue;
if ((ep = dtrace_dof_ecbdesc(dof, sec, vstate, cr)) == NULL) {
+ dt_dbg_dof(" DOF 0x%p Done slurping - ECB problem\n",
+ dof);
dtrace_enabling_destroy(enab);
*enabp = NULL;
return -1;
dtrace_enabling_add(enab, ep);
}
+ dt_dbg_dof(" DOF 0x%p Enablings processed\n", dof);
+ dt_dbg_dof(" DOF 0x%p Done slurping\n", dof);
+
return 0;
}
dtrace_difo_t *dp = pred->dtp_difo;
int rval;
+ dt_dbg_probe(" Evaluating predicate...\n");
+
rval = dtrace_dif_emulate(dp, &mstate, vstate, state);
if (!(*flags & CPU_DTRACE_ERROR) && !rval) {
current->predcache = cid;
}
- dt_dbg_probe("Probe (ID %d EPID %d) "
- "Predicate not satisfied (%d)\n",
- id, ecb->dte_epid, rval);
+ dt_dbg_probe(" Predicate not met (%d)\n",
+ rval);
continue;
}
+
+ dt_dbg_probe(" Predicate met (%d)\n", rval);
}
for (act = ecb->dte_action;
dtrace_difo_t *dp;
dtrace_recdesc_t *rec = &act->dta_rec;
- dt_dbg_probe("Probe (ID %d EPID %d) Action %d...\n",
- id, ecb->dte_epid, act->dta_kind);
+ dt_dbg_probe(" Evaluating action %p (kind %d)...\n",
+ act, act->dta_kind);
size = rec->dtrd_size;
valoffs = offs + rec->dtrd_offset;
}
if (*flags & CPU_DTRACE_DROP) {
- dt_dbg_probe("Probe (ID %d EPID %d) Dropped\n",
- id, ecb->dte_epid);
+ dt_dbg_probe(" -> Dropped\n");
continue;
}
int ndx;
dtrace_action_t *err;
+ dt_dbg_probe(" -> Failed (%x)\n", *flags);
+
buf->dtb_errors++;
if (probe->dtpr_id == dtrace_probeid_error) {
dt_dbg_buf(" Consume: %p[%ld .. %lld]\n",
buf, offs, buf->dtb_offset);
}
+
+ dt_dbg_probe("Probe (ID %d EPID %d) Done\n",
+ id, ecb->dte_epid);
}
if (vtime)