diff options
author | Robert Drehmel <robert@FreeBSD.org> | 2003-10-09 10:17:16 +0000 |
---|---|---|
committer | Robert Drehmel <robert@FreeBSD.org> | 2003-10-09 10:17:16 +0000 |
commit | ea924c4cd376401390120ecad69135ea69d16ed8 (patch) | |
tree | d286b80736e6c9743f984bcdfc12b33ff7eff197 /sys/kern/sys_process.c | |
parent | a14c6176811521acc9c4503e172ae329b749c953 (diff) | |
download | src-ea924c4cd376401390120ecad69135ea69d16ed8.tar.gz src-ea924c4cd376401390120ecad69135ea69d16ed8.zip |
Implement preliminary support for the PT_SYSCALL command to ptrace(2).
Notes
Notes:
svn path=/head/; revision=120937
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r-- | sys/kern/sys_process.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 51bbdcd7e013..9e49d9da8bad 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -382,6 +382,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) case PT_ATTACH: case PT_STEP: case PT_CONTINUE: + case PT_TO_SCE: + case PT_TO_SCX: case PT_DETACH: sx_xlock(&proctree_lock); proctree_locked = 1; @@ -507,6 +509,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) case PT_STEP: case PT_CONTINUE: + case PT_TO_SCE: + case PT_TO_SCX: case PT_DETACH: /* Zero means do not send any signal */ if (data < 0 || data > _SIG_MAXSIG) { @@ -516,12 +520,23 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) _PHOLD(p); - if (req == PT_STEP) { + switch (req) { + case PT_STEP: error = ptrace_single_step(td2); if (error) { _PRELE(p); goto fail; } + break; + case PT_TO_SCE: + p->p_stops |= S_PT_SCE; + break; + case PT_TO_SCX: + p->p_stops |= S_PT_SCX; + break; + case PT_SYSCALL: + p->p_stops |= S_PT_SCE | S_PT_SCX; + break; } if (addr != (void *)1) { |