Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/dev/dtrace/riscv/dtrace_subr.c
Show All 23 Lines | |||||
* $FreeBSD$ | * $FreeBSD$ | ||||
* | * | ||||
*/ | */ | ||||
/* | /* | ||||
* Copyright 2005 Sun Microsystems, Inc. All rights reserved. | * Copyright 2005 Sun Microsystems, Inc. All rights reserved. | ||||
* Use is subject to license terms. | * Use is subject to license terms. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | |||||
__FBSDID("$FreeBSD$"); | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/types.h> | |||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/kmem.h> | #include <sys/kmem.h> | ||||
#include <sys/proc.h> | |||||
#include <sys/smp.h> | #include <sys/smp.h> | ||||
#include <sys/dtrace_impl.h> | #include <sys/dtrace_impl.h> | ||||
#include <sys/dtrace_bsd.h> | #include <sys/dtrace_bsd.h> | ||||
#include <cddl/dev/dtrace/dtrace_cddl.h> | |||||
#include <machine/vmparam.h> | #include <machine/vmparam.h> | ||||
#include <machine/encoding.h> | #include <machine/encoding.h> | ||||
#include <machine/riscvreg.h> | #include <machine/riscvreg.h> | ||||
#include <machine/clock.h> | #include <machine/clock.h> | ||||
#include <machine/frame.h> | #include <machine/frame.h> | ||||
#include <machine/trap.h> | #include <machine/trap.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
Show All 11 Lines | typedef struct dtrace_invop_hdlr { | ||||
struct dtrace_invop_hdlr *dtih_next; | struct dtrace_invop_hdlr *dtih_next; | ||||
} dtrace_invop_hdlr_t; | } dtrace_invop_hdlr_t; | ||||
dtrace_invop_hdlr_t *dtrace_invop_hdlr; | dtrace_invop_hdlr_t *dtrace_invop_hdlr; | ||||
int | int | ||||
dtrace_invop(uintptr_t addr, struct trapframe *frame) | dtrace_invop(uintptr_t addr, struct trapframe *frame) | ||||
{ | { | ||||
struct thread *td; | |||||
dtrace_invop_hdlr_t *hdlr; | dtrace_invop_hdlr_t *hdlr; | ||||
int rval; | int rval; | ||||
rval = 0; | |||||
td = curthread; | |||||
td->t_dtrace_trapframe = frame; | |||||
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, frame, 0)) != 0) | if ((rval = hdlr->dtih_func(addr, frame, 0)) != 0) | ||||
break; | |||||
td->t_dtrace_trapframe = NULL; | |||||
return (rval); | return (rval); | ||||
return (0); | |||||
} | } | ||||
void | void | ||||
dtrace_invop_add(int (*func)(uintptr_t, struct trapframe *, uintptr_t)) | dtrace_invop_add(int (*func)(uintptr_t, struct trapframe *, uintptr_t)) | ||||
{ | { | ||||
dtrace_invop_hdlr_t *hdlr; | dtrace_invop_hdlr_t *hdlr; | ||||
hdlr = kmem_alloc(sizeof (dtrace_invop_hdlr_t), KM_SLEEP); | hdlr = kmem_alloc(sizeof (dtrace_invop_hdlr_t), KM_SLEEP); | ||||
▲ Show 20 Lines • Show All 231 Lines • Show Last 20 Lines |