PERFORCE change 132682 for review
John Birrell
jb at FreeBSD.org
Sun Jan 6 23:31:38 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132682
Change 132682 by jb at jb_freebsd1 on 2008/01/07 07:31:22
Remove debugging code from the invop handler.
We don't need the ipl function either.
Affected files ...
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/amd64/dtrace_subr.c#5 edit
Differences ...
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/amd64/dtrace_subr.c#5 (text+ko) ====
@@ -49,44 +49,15 @@
struct dtrace_invop_hdlr *dtih_next;
} dtrace_invop_hdlr_t;
-dtrace_invop_hdlr_t *dtrace_invop_hdlr;
-uintptr_t dtrace_invop_addr;
-
int
dtrace_invop(uintptr_t addr, uintptr_t *stack, uintptr_t eax)
{
dtrace_invop_hdlr_t *hdlr;
int rval;
- /*
- * Save the address in a global variable which can be
- * read via the kernel debugger in the event that a
- * double fault occurs.
- *
- * From kdb: p *dtrace_invop_addr
- *
- * Then look up the value in an objdump of the kernel.
- */
- dtrace_invop_addr = addr;
-
- /*
- * An invalid opcode fault should not occur while executing
- * a probe because only dtrace_ functions are supposed to
- * be called by design. Check here if dtrace_probe() is
- * in-progress. If so, that's very bad. Very, very bad. We
- * can't call any non-dtrace functions to report this, so
- * just save the invalid opcode address and hope that the
- * dtrace_ioctl will report it. If the DTrace port is
- * working according to Sun's design, this should never
- * occur.
- */
- if (dtrace_in_probe)
- dtrace_in_probe_addr = addr;
-
- for (hdlr = dtrace_invop_hdlr; hdlr != NULL; hdlr = hdlr->dtih_next) {
+ for (hdlr = dtrace_invop_hdlr; hdlr != NULL; hdlr = hdlr->dtih_next)
if ((rval = hdlr->dtih_func(addr, stack, eax)) != 0)
return (rval);
- }
return (0);
}
@@ -100,10 +71,6 @@
hdlr->dtih_func = func;
hdlr->dtih_next = dtrace_invop_hdlr;
dtrace_invop_hdlr = hdlr;
-
-#ifdef DOODAD
- dtrace_invop_func = dtrace_invop;
-#endif
}
void
@@ -131,21 +98,6 @@
}
kmem_free(hdlr, 0);
-
-#ifdef DOODAD
- if (dtrace_invop_hdlr == NULL)
- dtrace_invop_func = NULL;
-#endif
-}
-
-int
-dtrace_getipl(void)
-{
-#ifdef DOODAD
- return (CPU->cpu_pri);
-#else
- return (0);
-#endif
}
/*ARGSUSED*/
@@ -449,6 +401,9 @@
* All the rest will be handled in the usual way.
*/
switch (type) {
+ /* Privilieged instruction fault. */
+ case T_PRIVINFLT:
+ break;
/* General protection fault. */
case T_PROTFLT:
/* Flag an illegal operation. */
@@ -476,6 +431,14 @@
/* Handle all other traps in the usual way. */
break;
}
+
+ /*
+ * Outside the DTrace probe context, a breakpoint fault could be caused by a
+ * Function Boundary Trace (fbt) or Statically Defined Trace (sdt) provider.
+ */
+ } else if (type == T_BPTFLT) {
+printf("T_BPTFLT! tf_rip 0x%lx\n", frame->tf_rip);
+ dtrace_invop(frame->tf_rip - 1, (uintptr_t *) frame->tf_rsp, frame->tf_rax);
}
/* Handle the trap in the usual way. */
More information about the p4-projects
mailing list