aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cddl/dev/dtrace/aarch64/dtrace_subr.c')
-rw-r--r--sys/cddl/dev/dtrace/aarch64/dtrace_subr.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
index 74b3bf7ed7d1..b4dae1cba539 100644
--- a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
@@ -19,26 +19,22 @@
*
* CDDL HEADER END
*
- * $FreeBSD$
- *
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/types.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/kmem.h>
+#include <sys/proc.h>
#include <sys/smp.h>
#include <sys/dtrace_impl.h>
#include <sys/dtrace_bsd.h>
+#include <cddl/dev/dtrace/dtrace_cddl.h>
#include <machine/armreg.h>
#include <machine/clock.h>
#include <machine/frame.h>
@@ -65,17 +61,20 @@ dtrace_invop_hdlr_t *dtrace_invop_hdlr;
int
dtrace_invop(uintptr_t addr, struct trapframe *frame, uintptr_t eax)
{
+ struct thread *td;
dtrace_invop_hdlr_t *hdlr;
int rval;
+ rval = 0;
+ td = curthread;
+ td->t_dtrace_trapframe = frame;
for (hdlr = dtrace_invop_hdlr; hdlr != NULL; hdlr = hdlr->dtih_next)
if ((rval = hdlr->dtih_func(addr, frame, eax)) != 0)
- return (rval);
-
- return (0);
+ break;
+ td->t_dtrace_trapframe = NULL;
+ return (rval);
}
-
void
dtrace_invop_add(int (*func)(uintptr_t, struct trapframe *, uintptr_t))
{
@@ -207,7 +206,7 @@ dtrace_trap(struct trapframe *frame, u_int type)
case EXCP_DATA_ABORT:
/* Flag a bad address. */
cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_BADADDR;
- cpu_core[curcpu].cpuc_dtrace_illval = 0;
+ cpu_core[curcpu].cpuc_dtrace_illval = frame->tf_far;
/*
* Offset the instruction pointer to the instruction