Move implementations of uread() and uwrite() to the illumos compat layer.
MFC after: 1 week
This commit is contained in:
parent
788f3c06f6
commit
9e579a58c3
57
sys/cddl/compat/opensolaris/kern/opensolaris_proc.c
Normal file
57
sys/cddl/compat/opensolaris/kern/opensolaris_proc.c
Normal 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);
|
||||
}
|
@ -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_ */
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user