aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2001-10-21 23:57:24 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2001-10-21 23:57:24 +0000
commit7c62990641c51801d90b157f004074e24d92bbea (patch)
tree4d88290415ec9c8c1cff416415c846591f275a37 /sys/kern/sys_process.c
parent1f04261973098dea878b9967efb3dc19a527efb3 (diff)
Notes
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 7408c6cbd77c..a1ef385ad0d1 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -53,6 +53,36 @@
#include <vm/vm_object.h>
#include <vm/vm_page.h>
+#define PROC_REG_ACTION(name, action, type) \
+int \
+proc_##name##_##type##s(struct thread *td, struct type *regs) \
+{ \
+ int error; \
+ \
+ mtx_lock_spin(&sched_lock); \
+ error = (action##_##type##s(td, regs)); \
+ mtx_unlock_spin(&sched_lock); \
+ return (error); \
+}
+
+PROC_REG_ACTION(read, fill, reg);
+PROC_REG_ACTION(write, set, reg);
+PROC_REG_ACTION(read, fill, dbreg);
+PROC_REG_ACTION(write, set, dbreg);
+PROC_REG_ACTION(read, fill, fpreg);
+PROC_REG_ACTION(write, set, fpreg);
+
+int
+proc_sstep(struct thread *td)
+{
+ int error;
+
+ mtx_lock_spin(&sched_lock);
+ error = ptrace_single_step(td);
+ mtx_unlock_spin(&sched_lock);
+ return (error);
+}
+
int
proc_rwmem(struct proc *p, struct uio *uio)
{
@@ -495,7 +525,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
error = copyin(uap->addr, &r.reg, sizeof r.reg);
if (error == 0) {
PHOLD(p);
- error = procfs_write_regs(&p->p_thread, &r.reg);
+ error = proc_write_regs(&p->p_thread, &r.reg);
PRELE(p);
}
return (error);
@@ -504,7 +534,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
#ifdef PT_GETREGS
case PT_GETREGS:
PHOLD(p);
- error = procfs_read_regs(&p->p_thread, &r.reg);
+ error = proc_read_regs(&p->p_thread, &r.reg);
PRELE(p);
if (error == 0)
error = copyout(&r.reg, uap->addr, sizeof r.reg);
@@ -516,7 +546,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
error = copyin(uap->addr, &r.fpreg, sizeof r.fpreg);
if (error == 0) {
PHOLD(p);
- error = procfs_write_fpregs(&p->p_thread, &r.fpreg);
+ error = proc_write_fpregs(&p->p_thread, &r.fpreg);
PRELE(p);
}
return (error);
@@ -525,7 +555,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
#ifdef PT_GETFPREGS
case PT_GETFPREGS:
PHOLD(p);
- error = procfs_read_fpregs(&p->p_thread, &r.fpreg);
+ error = proc_read_fpregs(&p->p_thread, &r.fpreg);
PRELE(p);
if (error == 0)
error = copyout(&r.fpreg, uap->addr, sizeof r.fpreg);
@@ -537,7 +567,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
error = copyin(uap->addr, &r.dbreg, sizeof r.dbreg);
if (error == 0) {
PHOLD(p);
- error = procfs_write_dbregs(&p->p_thread, &r.dbreg);
+ error = proc_write_dbregs(&p->p_thread, &r.dbreg);
PRELE(p);
}
return (error);
@@ -546,7 +576,7 @@ ptrace(struct thread *td, struct ptrace_args *uap)
#ifdef PT_GETDBREGS
case PT_GETDBREGS:
PHOLD(p);
- error = procfs_read_dbregs(&p->p_thread, &r.dbreg);
+ error = proc_read_dbregs(&p->p_thread, &r.dbreg);
PRELE(p);
if (error == 0)
error = copyout(&r.dbreg, uap->addr, sizeof r.dbreg);