procfs_dbregs.c (85297) | procfs_dbregs.c (87321) |
---|---|
1/*- 2 * Copyright (c) 1999 Brian Scott Dean, brdean@unx.sas.com. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Jan-Simon Pendry under the following copyrights and conditions: 7 * 8 * Copyright (c) 1993 Jan-Simon Pendry --- 26 unchanged lines hidden (view full) --- 35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 39 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 40 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 41 * SUCH DAMAGE. 42 * | 1/*- 2 * Copyright (c) 1999 Brian Scott Dean, brdean@unx.sas.com. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Jan-Simon Pendry under the following copyrights and conditions: 7 * 8 * Copyright (c) 1993 Jan-Simon Pendry --- 26 unchanged lines hidden (view full) --- 35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 39 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 40 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 41 * SUCH DAMAGE. 42 * |
43 * $FreeBSD: head/sys/fs/procfs/procfs_dbregs.c 85297 2001-10-21 23:57:24Z des $ | 43 * $FreeBSD: head/sys/fs/procfs/procfs_dbregs.c 87321 2001-12-04 01:35:06Z des $ |
44 */ 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/lock.h> 49#include <sys/mutex.h> 50#include <sys/proc.h> 51#include <sys/ptrace.h> | 44 */ 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/lock.h> 49#include <sys/mutex.h> 50#include <sys/proc.h> 51#include <sys/ptrace.h> |
52#include <sys/vnode.h> | 52#include <sys/uio.h> |
53 54#include <machine/reg.h> 55 | 53 54#include <machine/reg.h> 55 |
56#include <fs/pseudofs/pseudofs.h> |
|
56#include <fs/procfs/procfs.h> 57 | 57#include <fs/procfs/procfs.h> 58 |
58#include <vm/vm.h> 59 | |
60int | 59int |
61procfs_dodbregs(curp, p, pfs, uio) 62 struct proc *curp; 63 struct proc *p; 64 struct pfsnode *pfs; 65 struct uio *uio; | 60procfs_doprocdbregs(PFS_FILL_ARGS) |
66{ 67 int error; 68 struct dbreg r; 69 char *kv; 70 int kl; 71 | 61{ 62 int error; 63 struct dbreg r; 64 char *kv; 65 int kl; 66 |
72 if (p_candebug(curp, p)) | 67 if (p_candebug(td->td_proc, p) != 0) |
73 return (EPERM); 74 kl = sizeof(r); 75 kv = (char *) &r; 76 77 kv += uio->uio_offset; 78 kl -= uio->uio_offset; 79 if (kl > uio->uio_resid) 80 kl = uio->uio_resid; 81 | 68 return (EPERM); 69 kl = sizeof(r); 70 kv = (char *) &r; 71 72 kv += uio->uio_offset; 73 kl -= uio->uio_offset; 74 if (kl > uio->uio_resid) 75 kl = uio->uio_resid; 76 |
82 PHOLD(p); 83 | |
84 if (kl < 0) 85 error = EINVAL; 86 else 87 error = proc_read_dbregs(&p->p_thread, &r); /* XXXKSE */ 88 if (error == 0) 89 error = uiomove(kv, kl, uio); 90 if (error == 0 && uio->uio_rw == UIO_WRITE) { 91 if (p->p_stat != SSTOP) 92 error = EBUSY; 93 else 94 error = proc_write_dbregs(&p->p_thread, &r); /* XXXKSE */ 95 } | 77 if (kl < 0) 78 error = EINVAL; 79 else 80 error = proc_read_dbregs(&p->p_thread, &r); /* XXXKSE */ 81 if (error == 0) 82 error = uiomove(kv, kl, uio); 83 if (error == 0 && uio->uio_rw == UIO_WRITE) { 84 if (p->p_stat != SSTOP) 85 error = EBUSY; 86 else 87 error = proc_write_dbregs(&p->p_thread, &r); /* XXXKSE */ 88 } |
96 PRELE(p); | |
97 98 uio->uio_offset = 0; 99 return (error); 100} | 89 90 uio->uio_offset = 0; 91 return (error); 92} |
101 102int 103procfs_validdbregs(struct thread *td) 104{ 105 106 return ((td->td_proc->p_flag & P_SYSTEM) == 0); 107} | |