Print this page
patch lower-case-segops
*** 1481,1491 ****
if (p->p_brksize != 0)
addr += p->p_brksize - 1;
seg = as_segat(p->p_as, addr);
if (seg != NULL && seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, seg->s_base, &vp) != 0 || vp == NULL))
return (seg);
return (NULL);
}
/*
--- 1481,1491 ----
if (p->p_brksize != 0)
addr += p->p_brksize - 1;
seg = as_segat(p->p_as, addr);
if (seg != NULL && seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, seg->s_base, &vp) != 0 || vp == NULL))
return (seg);
return (NULL);
}
/*
*** 1646,1670 ****
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
! mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
--- 1646,1670 ----
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
! mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
*** 1686,1696 ****
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
--- 1686,1696 ----
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
*** 1757,1781 ****
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
! mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
--- 1757,1781 ----
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
! mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
*** 1798,1808 ****
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
--- 1798,1808 ----
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
*** 1951,1961 ****
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
! * pr_getprot() by a SEGOP_INCORE() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
--- 1951,1961 ----
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
! * pr_getprot() by a segop_incore() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
*** 1977,2011 ****
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (uintptr_t)saddr;
pmp->pr_npage = npage;
! pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
--- 1977,2011 ----
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (uintptr_t)saddr;
pmp->pr_npage = npage;
! pmp->pr_offset = segop_getoffset(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
*** 2098,2108 ****
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
! * pr_getprot() by a SEGOP_INCORE() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
--- 2098,2108 ----
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
! * pr_getprot() by a segop_incore() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
*** 2124,2158 ****
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
pmp->pr_npage = (size32_t)npage;
! pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
--- 2124,2158 ----
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
pmp->pr_npage = (size32_t)npage;
! pmp->pr_offset = segop_getoffset(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
*** 3326,3336 ****
retry:
if ((pwp->wp_prot != prot ||
(pwp->wp_flags & WP_NOWATCH)) &&
(seg = as_segat(as, addr)) != NULL) {
! err = SEGOP_SETPROT(seg, addr, PAGESIZE, prot);
if (err == IE_RETRY) {
ASSERT(retrycnt == 0);
retrycnt++;
goto retry;
}
--- 3326,3336 ----
retry:
if ((pwp->wp_prot != prot ||
(pwp->wp_flags & WP_NOWATCH)) &&
(seg = as_segat(as, addr)) != NULL) {
! err = segop_setprot(seg, addr, PAGESIZE, prot);
if (err == IE_RETRY) {
ASSERT(retrycnt == 0);
retrycnt++;
goto retry;
}
*** 3432,3442 ****
if (!(p->p_flag & SVFWAIT)) {
vaddr = pwp->wp_vaddr;
if (pwp->wp_oprot == 0 &&
(seg = as_segat(as, vaddr)) != NULL) {
! SEGOP_GETPROT(seg, vaddr, 0, &prot);
pwp->wp_oprot = (uchar_t)prot;
pwp->wp_prot = (uchar_t)prot;
}
if (pwp->wp_oprot != 0) {
prot = pwp->wp_oprot;
--- 3432,3442 ----
if (!(p->p_flag & SVFWAIT)) {
vaddr = pwp->wp_vaddr;
if (pwp->wp_oprot == 0 &&
(seg = as_segat(as, vaddr)) != NULL) {
! segop_getprot(seg, vaddr, 0, &prot);
pwp->wp_oprot = (uchar_t)prot;
pwp->wp_prot = (uchar_t)prot;
}
if (pwp->wp_oprot != 0) {
prot = pwp->wp_oprot;
*** 3638,3648 ****
if (pagev->pg_incore != NULL) {
/*
* INCORE cleverly has different semantics than GETPROT:
* it returns info on pages up to but NOT including addr + len.
*/
! SEGOP_INCORE(seg, addr, len, pagev->pg_incore);
pn = pagev->pg_pnbase;
do {
/*
* Guilty knowledge here: We know that segvn_incore
--- 3638,3648 ----
if (pagev->pg_incore != NULL) {
/*
* INCORE cleverly has different semantics than GETPROT:
* it returns info on pages up to but NOT including addr + len.
*/
! segop_incore(seg, addr, len, pagev->pg_incore);
pn = pagev->pg_pnbase;
do {
/*
* Guilty knowledge here: We know that segvn_incore
*** 3666,3676 ****
/*
* Need to take len - 1 because addr + len is the address of the
* first byte of the page just past the end of what we want.
*/
out:
! SEGOP_GETPROT(seg, saddr, len - 1, pagev->pg_protv);
return (addr);
}
static caddr_t
pr_pagev_nextprot(prpagev_t *pagev, struct seg *seg,
--- 3666,3676 ----
/*
* Need to take len - 1 because addr + len is the address of the
* first byte of the page just past the end of what we want.
*/
out:
! segop_getprot(seg, saddr, len - 1, pagev->pg_protv);
return (addr);
}
static caddr_t
pr_pagev_nextprot(prpagev_t *pagev, struct seg *seg,
*** 3787,3802 ****
vattr_t vattr;
vnode_t *vp;
vattr.va_mask = AT_SIZE;
! if (SEGOP_GETVP(seg, seg->s_base, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
u_offset_t fsize = vattr.va_size;
! u_offset_t offset = SEGOP_GETOFFSET(seg, seg->s_base);
if (fsize < offset)
fsize = 0;
else
fsize -= offset;
--- 3787,3802 ----
vattr_t vattr;
vnode_t *vp;
vattr.va_mask = AT_SIZE;
! if (segop_getvp(seg, seg->s_base, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
u_offset_t fsize = vattr.va_size;
! u_offset_t offset = segop_getoffset(seg, seg->s_base);
if (fsize < offset)
fsize = 0;
else
fsize -= offset;
*** 3822,3832 ****
* reservation of virtual address space and has no actual size.
* Such segments are backed by segdev and have type set to neither
* MAP_SHARED nor MAP_PRIVATE.
*/
if (seg->s_ops == &segdev_ops &&
! ((SEGOP_GETTYPE(seg, seg->s_base) &
(MAP_SHARED | MAP_PRIVATE)) == 0))
return (0);
/*
* If this segment doesn't match one of the special types we handle,
--- 3822,3832 ----
* reservation of virtual address space and has no actual size.
* Such segments are backed by segdev and have type set to neither
* MAP_SHARED nor MAP_PRIVATE.
*/
if (seg->s_ops == &segdev_ops &&
! ((segop_gettype(seg, seg->s_base) &
(MAP_SHARED | MAP_PRIVATE)) == 0))
return (0);
/*
* If this segment doesn't match one of the special types we handle,
*** 4053,4077 ****
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
! mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
--- 4053,4077 ----
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
! mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
*** 4090,4100 ****
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
mp->pr_dev = vattr.va_fsid;
mp->pr_ino = vattr.va_nodeid;
--- 4090,4100 ----
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
mp->pr_dev = vattr.va_fsid;
mp->pr_ino = vattr.va_nodeid;
*** 4122,4132 ****
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
! SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)
--- 4122,4132 ----
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
! segop_incore(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)
*** 4237,4261 ****
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
! mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
--- 4237,4261 ----
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
! mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
! if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
! if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
! (segop_getvp(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
*** 4274,4284 ****
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV32;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! SEGOP_GETVP(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
(void) cmpldev(&mp->pr_dev,
vattr.va_fsid);
--- 4274,4284 ----
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV32;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
! segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
(void) cmpldev(&mp->pr_dev,
vattr.va_fsid);
*** 4307,4317 ****
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
! SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)
--- 4307,4317 ----
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
! segop_incore(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)