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) { ! (void) 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. */ ! (void) 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: ! (void) 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,4133 ---- npages = ((uintptr_t)(naddr - saddr)) >> PAGESHIFT; parr = kmem_zalloc(npages, KM_SLEEP); ! (void) 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) --- 4238,4262 ---- 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); --- 4275,4285 ---- * 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) --- 4308,4319 ---- npages = ((uintptr_t)(naddr - saddr)) >> PAGESHIFT; parr = kmem_zalloc(npages, KM_SLEEP); ! (void) 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)