diff options
author | tmm <tmm@FreeBSD.org> | 2002-07-12 16:48:05 +0000 |
---|---|---|
committer | tmm <tmm@FreeBSD.org> | 2002-07-12 16:48:05 +0000 |
commit | 0f5d0637f1aafcf161d3768fe389821c6b30a617 (patch) | |
tree | 17dc8bc83c42f3201cc344852ff717bfe5f16afd /sys/kern/sys_process.c | |
parent | b08811be075ddb85e20355914ac1f756e3e7291d (diff) | |
download | FreeBSD-src-0f5d0637f1aafcf161d3768fe389821c6b30a617.zip FreeBSD-src-0f5d0637f1aafcf161d3768fe389821c6b30a617.tar.gz |
Fix ptrace(PT_READ_*, ...) for non-little-endian architectures where
sizeof(register_t) != sizeof(int).
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r-- | sys/kern/sys_process.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index ab6f1e8..f446406 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -334,7 +334,7 @@ ptrace(struct thread *td, struct ptrace_args *uap) } r; struct proc *curp, *p, *pp; struct thread *td2; - int error, write; + int error, write, tmp; int proctree_locked = 0; curp = td->td_proc; @@ -586,9 +586,9 @@ ptrace(struct thread *td, struct ptrace_args *uap) case PT_READ_I: case PT_READ_D: PROC_UNLOCK(p); + tmp = 0; /* write = 0 set above */ - iov.iov_base = write ? (caddr_t)&uap->data : - (caddr_t)td->td_retval; + iov.iov_base = write ? (caddr_t)&uap->data : (caddr_t)&tmp; iov.iov_len = sizeof(int); uio.uio_iov = &iov; uio.uio_iovcnt = 1; @@ -611,6 +611,8 @@ ptrace(struct thread *td, struct ptrace_args *uap) if (error == 0 || error == ENOSPC || error == EPERM) error = EINVAL; /* EOF */ } + if (!write) + td->td_retval[0] = tmp; return (error); case PT_IO: |