Page MenuHomeFreeBSD

D36799.diff
No OneTemporary

D36799.diff

diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
@@ -416,6 +416,8 @@
&dt_idops_func, "void(int)" },
{ "rand", DT_IDENT_FUNC, 0, DIF_SUBR_RAND, DT_ATTR_STABCMN, DT_VERS_1_0,
&dt_idops_func, "int()" },
+{ "regs", DT_IDENT_ARRAY, 0, DIF_VAR_REGS, DT_ATTR_STABCMN, DT_VERS_1_13,
+ &dt_idops_regs, NULL },
{ "rindex", DT_IDENT_FUNC, 0, DIF_SUBR_RINDEX, DT_ATTR_STABCMN, DT_VERS_1_1,
&dt_idops_func, "int(const char *, const char *, [int])" },
#ifdef illumos
diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
--- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
@@ -3360,30 +3360,19 @@
return (mstate->dtms_arg[ndx]);
-#ifdef illumos
- case DIF_VAR_UREGS: {
- klwp_t *lwp;
-
- if (!dtrace_priv_proc(state))
- return (0);
-
- if ((lwp = curthread->t_lwp) == NULL) {
- DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
- cpu_core[curcpu].cpuc_dtrace_illval = NULL;
- return (0);
- }
-
- return (dtrace_getreg(lwp->lwp_regs, ndx));
- return (0);
- }
-#else
+ case DIF_VAR_REGS:
case DIF_VAR_UREGS: {
struct trapframe *tframe;
if (!dtrace_priv_proc(state))
return (0);
- if ((tframe = curthread->td_frame) == NULL) {
+ if (v == DIF_VAR_REGS)
+ tframe = curthread->t_dtrace_trapframe;
+ else
+ tframe = curthread->td_frame;
+
+ if (tframe == NULL) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
cpu_core[curcpu].cpuc_dtrace_illval = 0;
return (0);
@@ -3391,7 +3380,6 @@
return (dtrace_getreg(tframe, ndx));
}
-#endif
case DIF_VAR_CURTHREAD:
if (!dtrace_priv_proc(state))
diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
@@ -27,18 +27,16 @@
* 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 +63,20 @@
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))
{
diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
@@ -33,12 +33,13 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/types.h>
#include <sys/kernel.h>
#include <sys/malloc.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/clock.h>
#include <machine/cpufunc.h>
#include <machine/frame.h>
@@ -65,15 +66,20 @@
int
dtrace_invop(uintptr_t addr, struct trapframe *frame, void **scratch)
{
+ struct thread *td;
dtrace_invop_hdlr_t *hdlr;
int rval;
+ td = curthread;
+ td->t_dtrace_trapframe = frame;
+ rval = 0;
for (hdlr = dtrace_invop_hdlr; hdlr != NULL; hdlr = hdlr->dtih_next) {
rval = hdlr->dtih_func(addr, frame, (uintptr_t)scratch);
if (rval != 0)
- return (rval);
+ break;
}
- return (0);
+ td->t_dtrace_trapframe = NULL;
+ return (rval);
}
void
diff --git a/sys/cddl/dev/dtrace/arm/dtrace_subr.c b/sys/cddl/dev/dtrace/arm/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/arm/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/arm/dtrace_subr.c
@@ -27,18 +27,16 @@
* 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>
@@ -70,14 +68,18 @@
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);
}
diff --git a/sys/cddl/dev/dtrace/dtrace_cddl.h b/sys/cddl/dev/dtrace/dtrace_cddl.h
--- a/sys/cddl/dev/dtrace/dtrace_cddl.h
+++ b/sys/cddl/dev/dtrace/dtrace_cddl.h
@@ -87,6 +87,7 @@
void *td_dtrace_sscr; /* Saved scratch space location. */
void *td_systrace_args; /* syscall probe arguments. */
uint64_t td_fasttrap_tp_gen; /* Tracepoint hash table gen. */
+ struct trapframe *td_dtrace_trapframe; /* Trap frame from invop. */
} kdtrace_thread_t;
/*
@@ -115,6 +116,7 @@
#define t_dtrace_sscr td_dtrace->td_dtrace_sscr
#define t_dtrace_systrace_args td_dtrace->td_systrace_args
#define t_fasttrap_tp_gen td_dtrace->td_fasttrap_tp_gen
+#define t_dtrace_trapframe td_dtrace->td_dtrace_trapframe
#define p_dtrace_helpers p_dtrace->p_dtrace_helpers
#define p_dtrace_count p_dtrace->p_dtrace_count
#define p_dtrace_probes p_dtrace->p_dtrace_probes
diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
@@ -33,14 +33,15 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/types.h>
#include <sys/cpuset.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/clock.h>
#include <machine/cpufunc.h>
#include <machine/frame.h>
@@ -68,14 +69,18 @@
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
diff --git a/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c b/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c
@@ -27,18 +27,16 @@
* 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/clock.h>
#include <machine/frame.h>
#include <machine/trap.h>
@@ -65,14 +63,18 @@
int
dtrace_invop(uintptr_t addr, struct trapframe *frame, uintptr_t arg0)
{
+ 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, arg0)) != 0)
- return (rval);
-
- return (0);
+ break;
+ td->t_dtrace_trapframe = NULL;
+ return (rval);
}
void
diff --git a/sys/cddl/dev/dtrace/riscv/dtrace_subr.c b/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
--- a/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
@@ -29,18 +29,16 @@
* 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/vmparam.h>
#include <machine/encoding.h>
#include <machine/riscvreg.h>
@@ -68,14 +66,18 @@
int
dtrace_invop(uintptr_t addr, struct trapframe *frame)
{
+ 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, 0)) != 0)
- return (rval);
-
- return (0);
+ break;
+ td->t_dtrace_trapframe = NULL;
+ return (rval);
}
void

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 19, 5:48 PM (18 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16725168
Default Alt Text
D36799.diff (9 KB)

Event Timeline