Move implementations of uread() and uwrite() to the illumos compat layer.

MFC after:	1 week
This commit is contained in:
Mark Johnston 2016-09-24 21:40:14 +00:00
parent 788f3c06f6
commit 9e579a58c3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=306304
6 changed files with 63 additions and 53 deletions

View File

@ -0,0 +1,57 @@
/*-
* Copyright 2016 Mark Johnston <markj@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/proc.h>
#include <sys/ptrace.h>
int
uread(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_readmem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n != len)
return (ENOMEM);
return (0);
}
int
uwrite(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_writemem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n != len)
return (ENOMEM);
return (0);
}

View File

@ -92,6 +92,9 @@ do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
do_thread_create(stk, stksize, proc, arg, len, pp, state, pri)
#define thread_exit() kthread_exit()
int uread(proc_t *, void *, size_t, uintptr_t);
int uwrite(proc_t *, void *, size_t, uintptr_t);
#endif /* _KERNEL */
#endif /* _OPENSOLARIS_SYS_PROC_H_ */

View File

@ -59,34 +59,8 @@
#include <sys/archsystm.h>
#else
#include <sys/ptrace.h>
static int
uread(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_readmem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n != len)
return (ENOMEM);
return (0);
}
static int
uwrite(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_writemem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n != len)
return (ENOMEM);
return (0);
}
#endif /* illumos */
#ifdef __i386__
#define r_rax r_eax
#define r_rbx r_ebx

View File

@ -44,32 +44,6 @@
#define OP_RA(x) (((x) & 0x001F0000) >> 16)
#define OP_RB(x) (((x) & 0x0000F100) >> 11)
static int
uread(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_readmem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n <= 0 || n < len)
return (ENOMEM);
return (0);
}
static int
uwrite(proc_t *p, void *kaddr, size_t len, uintptr_t uaddr)
{
ssize_t n;
PHOLD(p);
n = proc_writemem(curthread, p, uaddr, kaddr, len);
PRELE(p);
if (n <= 0 || n < len)
return (ENOMEM);
return (0);
}
int
fasttrap_tracepoint_install(proc_t *p, fasttrap_tracepoint_t *tp)
{

View File

@ -127,6 +127,7 @@ cddl/compat/opensolaris/kern/opensolaris.c optional zfs | dtrace compile-with "
cddl/compat/opensolaris/kern/opensolaris_cmn_err.c optional zfs | dtrace compile-with "${CDDL_C}"
cddl/compat/opensolaris/kern/opensolaris_kmem.c optional zfs | dtrace compile-with "${CDDL_C}"
cddl/compat/opensolaris/kern/opensolaris_misc.c optional zfs | dtrace compile-with "${CDDL_C}"
cddl/compat/opensolaris/kern/opensolaris_proc.c optional zfs | dtrace compile-with "${CDDL_C}"
cddl/compat/opensolaris/kern/opensolaris_sunddi.c optional zfs | dtrace compile-with "${CDDL_C}"
cddl/compat/opensolaris/kern/opensolaris_taskq.c optional zfs | dtrace compile-with "${CDDL_C}"
# zfs specific

View File

@ -9,6 +9,7 @@ SRCS= opensolaris.c \
opensolaris_cmn_err.c \
opensolaris_kmem.c \
opensolaris_misc.c \
opensolaris_proc.c \
opensolaris_sunddi.c
_A=${SYSDIR}/cddl/contrib/opensolaris/common/atomic