--- //depot/vendor/freebsd/src/sys/alpha/osf1/imgact_osf1.c 2002/08/13 00:00:36 +++ //depot/user/jake/sparc64/src/sys/alpha/osf1/imgact_osf1.c 2002/08/27 10:03:14 @@ -177,7 +177,7 @@ /* * Destroy old process VM and create a new one (with a new stack). */ - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &osf1_sysvec); /* * The vm space can now be changed. --- //depot/vendor/freebsd/src/sys/compat/linprocfs/linprocfs.c 2002/06/29 10:30:38 +++ //depot/user/jake/sparc64/src/sys/compat/linprocfs/linprocfs.c 2002/08/27 10:04:48 @@ -706,7 +706,8 @@ sbuf_printf(sb, "%.*s", MAXCOMLEN, p->p_comm); } else { PROC_UNLOCK(p); - error = copyin((void*)PS_STRINGS, &pstr, sizeof(pstr)); + error = copyin((void *)p->p_sysent->sv_psstrings, &pstr, + sizeof(pstr)); if (error) return (error); for (i = 0; i < pstr.ps_nargvstr; i++) { --- //depot/vendor/freebsd/src/sys/compat/pecoff/imgact_pecoff.c 2002/09/01 14:47:48 +++ //depot/user/jake/sparc64/src/sys/compat/pecoff/imgact_pecoff.c 2002/09/01 15:30:54 @@ -473,7 +473,7 @@ peofs + PECOFF_HDR_SIZE, (caddr_t) sh, scnsiz); if ((error = exec_extract_strings(imgp)) != 0) goto fail; - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &pecoff_sysvec); vmspace = imgp->proc->p_vmspace; for (i = 0; i < fp->f_nscns; i++) { prot = VM_PROT_WRITE; /* XXX for relocation? */ --- //depot/vendor/freebsd/src/sys/compat/svr4/imgact_svr4.c 2002/08/13 13:35:17 +++ //depot/user/jake/sparc64/src/sys/compat/svr4/imgact_svr4.c 2002/08/27 10:03:14 @@ -122,7 +122,7 @@ /* * Destroy old process VM and create a new one (with a new stack) */ - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &svr4_sysvec); vmspace = imgp->proc->p_vmspace; /* --- //depot/vendor/freebsd/src/sys/fs/procfs/procfs_status.c 2002/05/18 17:15:21 +++ //depot/user/jake/sparc64/src/sys/fs/procfs/procfs_status.c 2002/08/27 10:04:48 @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -191,7 +192,8 @@ if (p != td->td_proc) { sbuf_printf(sb, "%.*s", MAXCOMLEN, p->p_comm); } else { - error = copyin((void*)PS_STRINGS, &pstr, sizeof(pstr)); + error = copyin((void *)p->p_sysent->sv_psstrings, &pstr, + sizeof(pstr)); if (error) return (error); for (i = 0; i < pstr.ps_nargvstr; i++) { --- //depot/vendor/freebsd/src/sys/i386/ibcs2/imgact_coff.c 2002/08/12 23:56:20 +++ //depot/user/jake/sparc64/src/sys/i386/ibcs2/imgact_coff.c 2002/08/27 10:03:14 @@ -336,7 +336,7 @@ goto fail; } - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &ibcs2_svr3_sysvec); vmspace = imgp->proc->p_vmspace; for (i = 0; i < nscns; i++) { --- //depot/vendor/freebsd/src/sys/i386/linux/imgact_linux.c 2002/08/12 23:56:20 +++ //depot/user/jake/sparc64/src/sys/i386/linux/imgact_linux.c 2002/08/27 10:03:14 @@ -121,7 +121,7 @@ /* * Destroy old process VM and create a new one (with a new stack) */ - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &linux_sysvec); vmspace = imgp->proc->p_vmspace; /* --- //depot/vendor/freebsd/src/sys/kern/imgact_aout.c 2002/09/01 14:47:48 +++ //depot/user/jake/sparc64/src/sys/kern/imgact_aout.c 2002/09/01 15:30:54 @@ -144,7 +144,7 @@ file_offset = 0; /* Pass PS_STRINGS for BSD/OS binaries only. */ if (N_GETMID(*a_out) == MID_ZERO) - imgp->ps_strings = PS_STRINGS; + imgp->ps_strings = aout_sysvec.sv_psstrings; break; default: /* NetBSD compatibility */ @@ -196,7 +196,7 @@ /* * Destroy old process VM and create a new one (with a new stack) */ - exec_new_vmspace(imgp, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(imgp, &aout_sysvec); /* * The vm space can be changed by exec_new_vmspace @@ -289,8 +289,8 @@ IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td); if (error == 0) error = vn_rdwr_inchunks(UIO_WRITE, vp, - (caddr_t) trunc_page(USRSTACK - ctob(vm->vm_ssize)), - round_page(ctob(vm->vm_ssize)), + (caddr_t)trunc_page(p->p_sysent->sv_usrstack - + ctob(vm->vm_ssize)), round_page(ctob(vm->vm_ssize)), (off_t)ctob(UAREA_PAGES + KSTACK_PAGES) + ctob(vm->vm_dsize), UIO_USERSPACE, IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td); --- //depot/vendor/freebsd/src/sys/kern/imgact_elf.c 2002/09/01 21:51:10 +++ //depot/user/jake/sparc64/src/sys/kern/imgact_elf.c 2002/09/01 22:25:51 @@ -697,8 +698,7 @@ if ((error = exec_extract_strings(imgp)) != 0) goto fail; - exec_new_vmspace(imgp, sv->sv_minuser, sv->sv_maxuser, - sv->sv_usrstack); + exec_new_vmspace(imgp, sv); vmspace = imgp->proc->p_vmspace; --- //depot/vendor/freebsd/src/sys/kern/imgact_gzip.c 2002/07/19 20:00:42 +++ //depot/user/jake/sparc64/src/sys/kern/imgact_gzip.c 2002/08/27 10:03:14 @@ -229,7 +229,7 @@ /* * Destroy old process VM and create a new one (with a new stack) */ - exec_new_vmspace(gz->ip, VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, USRSTACK); + exec_new_vmspace(gz->ip, &aout_sysvec); vmspace = gz->ip->proc->p_vmspace; --- //depot/vendor/freebsd/src/sys/kern/init_main.c 2002/09/01 14:47:48 +++ //depot/user/jake/sparc64/src/sys/kern/init_main.c 2002/09/01 15:30:54 @@ -433,8 +433,8 @@ pmap_pinit0(vmspace_pmap(&vmspace0)); p->p_vmspace = &vmspace0; vmspace0.vm_refcnt = 1; - vm_map_init(&vmspace0.vm_map, round_page(VM_MIN_ADDRESS), - trunc_page(VM_MAXUSER_ADDRESS)); + vm_map_init(&vmspace0.vm_map, p->p_sysent->sv_minuser, + p->p_sysent->sv_maxuser); vmspace0.vm_map.pmap = vmspace_pmap(&vmspace0); /* @@ -569,9 +569,9 @@ /* * Need just enough stack to hold the faked-up "execve()" arguments. */ - addr = trunc_page(USRSTACK - PAGE_SIZE); + addr = p->p_sysent->sv_usrstack - PAGE_SIZE; if (vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &addr, PAGE_SIZE, - FALSE, VM_PROT_ALL, VM_PROT_ALL, 0) != 0) + FALSE, VM_PROT_READ | VM_PROT_WRITE, VM_PROT_ALL, 0) != 0) panic("init: couldn't allocate argument space"); p->p_vmspace->vm_maxsaddr = (caddr_t)addr; p->p_vmspace->vm_ssize = 1; @@ -601,7 +601,7 @@ * Move out the boot flag argument. */ options = 0; - ucp = (char *)USRSTACK; + ucp = (char *)p->p_sysent->sv_usrstack; (void)subyte(--ucp, 0); /* trailing zero */ if (boothowto & RB_SINGLE) { (void)subyte(--ucp, 's'); --- //depot/vendor/freebsd/src/sys/kern/kern_exec.c 2002/09/01 14:47:48 +++ //depot/user/jake/sparc64/src/sys/kern/kern_exec.c 2002/09/01 15:30:54 @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/kern/kern_exec.c,v 1.188 2002/09/01 21:41:23 jake Exp $ + * $FreeBSD: src/sys/kern/kern_exec.c,v 1.185 2002/08/25 22:36:52 jake Exp $ */ #include "opt_ktrace.h" @@ -74,6 +74,9 @@ static MALLOC_DEFINE(M_ATEXEC, "atexec", "atexec callback"); +static int sysctl_kern_ps_strings(SYSCTL_HANDLER_ARGS); +static int sysctl_kern_usrstack(SYSCTL_HANDLER_ARGS); + /* * callout list for things to do at exec time */ @@ -86,13 +89,12 @@ static struct exec_list_head exec_list = TAILQ_HEAD_INITIALIZER(exec_list); /* XXX This should be vm_size_t. */ -static u_long ps_strings = PS_STRINGS; -SYSCTL_ULONG(_kern, KERN_PS_STRINGS, ps_strings, CTLFLAG_RD, &ps_strings, - 0, ""); +SYSCTL_PROC(_kern, KERN_PS_STRINGS, ps_strings, CTLTYPE_ULONG|CTLFLAG_RD, + NULL, 0, sysctl_kern_ps_strings, "LU", ""); /* XXX This should be vm_size_t. */ -static u_long usrstack = USRSTACK; -SYSCTL_ULONG(_kern, KERN_USRSTACK, usrstack, CTLFLAG_RD, &usrstack, 0, ""); +SYSCTL_PROC(_kern, KERN_USRSTACK, usrstack, CTLTYPE_ULONG|CTLFLAG_RD, + NULL, 0, sysctl_kern_usrstack, "LU", ""); u_long ps_arg_cache_limit = PAGE_SIZE / 16; SYSCTL_ULONG(_kern, OID_AUTO, ps_arg_cache_limit, CTLFLAG_RW, @@ -107,6 +109,26 @@ SYSCTL_INT(_machdep, OID_AUTO, regstkpages, CTLFLAG_RW, ®stkpages, 0, ""); #endif +static int +sysctl_kern_ps_strings(SYSCTL_HANDLER_ARGS) +{ + struct proc *p; + + p = curproc; + return (SYSCTL_OUT(req, &p->p_sysent->sv_psstrings, + sizeof(p->p_sysent->sv_psstrings))); +} + +static int +sysctl_kern_usrstack(SYSCTL_HANDLER_ARGS) +{ + struct proc *p; + + p = curproc; + return (SYSCTL_OUT(req, &p->p_sysent->sv_usrstack, + sizeof(p->p_sysent->sv_usrstack))); +} + /* * Each of the items is a pointer to a `const struct execsw', hence the * double pointer here. @@ -679,18 +689,20 @@ * automatically in trap.c. */ int -exec_new_vmspace(imgp, minuser, maxuser, stack_addr) +exec_new_vmspace(imgp, sv) struct image_params *imgp; - vm_offset_t minuser, maxuser, stack_addr; + struct sysentvec *sv; { int error; struct execlist *ep; struct proc *p = imgp->proc; struct vmspace *vmspace = p->p_vmspace; + vm_offset_t stack_addr; + vm_map_t map; GIANT_REQUIRED; - stack_addr = stack_addr - maxssiz; + stack_addr = sv->sv_usrstack - maxssiz; imgp->vmspace_destroyed = 1; @@ -705,21 +717,23 @@ * otherwise, create a new VM space so that other threads are * not disrupted */ - if (vmspace->vm_refcnt == 1 && - vm_map_min(&vmspace->vm_map) == minuser && - vm_map_max(&vmspace->vm_map) == maxuser) { + map = &vmspace->vm_map; + if (vmspace->vm_refcnt == 1 && vm_map_min(map) == sv->sv_minuser && + vm_map_max(map) == sv->sv_maxuser) { if (vmspace->vm_shm) shmexit(p); - pmap_remove_pages(vmspace_pmap(vmspace), minuser, maxuser); - vm_map_remove(&vmspace->vm_map, minuser, maxuser); + pmap_remove_pages(vmspace_pmap(vmspace), vm_map_min(map), + vm_map_max(map)); + vm_map_remove(map, vm_map_min(map), vm_map_max(map)); } else { - vmspace_exec(p, minuser, maxuser); + vmspace_exec(p, sv->sv_minuser, sv->sv_maxuser); vmspace = p->p_vmspace; + map = &vmspace->vm_map; } /* Allocate a new stack */ - error = vm_map_stack(&vmspace->vm_map, stack_addr, (vm_size_t)maxssiz, - VM_PROT_ALL, VM_PROT_ALL, 0); + error = vm_map_stack(map, stack_addr, (vm_size_t)maxssiz, + sv->sv_stackprot, VM_PROT_ALL, 0); if (error) return (error); @@ -731,8 +745,8 @@ * store to grow upwards. This will do for now. */ vm_offset_t bsaddr; - bsaddr = USRSTACK - 2 * maxssiz; - error = vm_map_find(&vmspace->vm_map, 0, 0, &bsaddr, + bsaddr = p->p_sysent->sv_usrstack - 2 * maxssiz; + error = vm_map_find(map, 0, 0, &bsaddr, regstkpages * PAGE_SIZE, 0, VM_PROT_ALL, VM_PROT_ALL, 0); FIRST_THREAD_IN_PROC(p)->td_md.md_bspstore = bsaddr; } @@ -743,7 +757,7 @@ * process stack so we can check the stack rlimit. */ vmspace->vm_ssize = sgrowsiz >> PAGE_SHIFT; - vmspace->vm_maxsaddr = (char *)USRSTACK - maxssiz; + vmspace->vm_maxsaddr = (char *)sv->sv_usrstack - maxssiz; return (0); } @@ -842,7 +856,7 @@ */ p = imgp->proc; szsigcode = 0; - arginfo = (struct ps_strings *)PS_STRINGS; + arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; if (p->p_sysent->sv_szsigcode != NULL) szsigcode = *(p->p_sysent->sv_szsigcode); destp = (caddr_t)arginfo - szsigcode - SPARE_USRSPACE - --- //depot/vendor/freebsd/src/sys/kern/kern_exit.c 2002/08/01 06:50:38 +++ //depot/user/jake/sparc64/src/sys/kern/kern_exit.c 2002/08/27 10:03:14 @@ -289,10 +289,10 @@ if (--vm->vm_refcnt == 0) { if (vm->vm_shm) shmexit(p); - pmap_remove_pages(vmspace_pmap(vm), VM_MIN_ADDRESS, - VM_MAXUSER_ADDRESS); - (void) vm_map_remove(&vm->vm_map, VM_MIN_ADDRESS, - VM_MAXUSER_ADDRESS); + pmap_remove_pages(vmspace_pmap(vm), vm_map_min(&vm->vm_map), + vm_map_max(&vm->vm_map)); + (void) vm_map_remove(&vm->vm_map, vm_map_min(&vm->vm_map), + vm_map_max(&vm->vm_map)); vm->vm_freer = p; } --- //depot/vendor/freebsd/src/sys/kern/kern_resource.c 2002/07/23 20:05:28 +++ //depot/user/jake/sparc64/src/sys/kern/kern_resource.c 2002/08/27 13:38:43 @@ -52,6 +52,7 @@ #include #include #include +#include #include #include @@ -565,13 +566,15 @@ vm_prot_t prot; if (limp->rlim_cur > alimp->rlim_cur) { - prot = VM_PROT_ALL; + prot = p->p_sysent->sv_stackprot; size = limp->rlim_cur - alimp->rlim_cur; - addr = USRSTACK - limp->rlim_cur; + addr = p->p_sysent->sv_usrstack - + limp->rlim_cur; } else { prot = VM_PROT_NONE; size = alimp->rlim_cur - limp->rlim_cur; - addr = USRSTACK - alimp->rlim_cur; + addr = p->p_sysent->sv_usrstack - + alimp->rlim_cur; } addr = trunc_page(addr); size = round_page(size); --- //depot/vendor/freebsd/src/sys/security/lomac/kernel_mmap.c 2002/05/30 00:35:40 +++ //depot/user/jake/sparc64/src/sys/security/lomac/kernel_mmap.c 2002/08/27 10:04:48 @@ -205,12 +205,9 @@ if (addr & PAGE_MASK) return (EINVAL); /* Address range must be all in user VM space. */ - if (VM_MAXUSER_ADDRESS > 0 && addr + size > VM_MAXUSER_ADDRESS) + if (addr < vm_map_min(&vms->vm_map) || + addr + size > vm_map_max(&vms->vm_map)) return (EINVAL); -#ifndef __i386__ - if (VM_MIN_ADDRESS > 0 && addr < VM_MIN_ADDRESS) - return (EINVAL); -#endif if (addr + size < addr) return (EINVAL); } --- //depot/vendor/freebsd/src/sys/sparc64/sparc64/machdep.c 2002/08/29 21:05:32 +++ //depot/user/jake/sparc64/src/sys/sparc64/sparc64/machdep.c 2002/09/01 15:30:54 @@ -625,7 +625,7 @@ bzero(pcb, sizeof(*pcb)); bzero(tf, sizeof(*tf)); tf->tf_out[0] = stack; - tf->tf_out[3] = PS_STRINGS; + tf->tf_out[3] = p->p_sysent->sv_psstrings; tf->tf_out[6] = sp - SPOFF - sizeof(struct frame); tf->tf_tnpc = entry + 4; tf->tf_tpc = entry; --- //depot/vendor/freebsd/src/sys/sys/imgact.h 2002/09/01 14:47:48 +++ //depot/user/jake/sparc64/src/sys/sys/imgact.h 2002/09/01 15:30:54 @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/sys/imgact.h,v 1.30 2002/09/01 21:41:24 jake Exp $ + * $FreeBSD: src/sys/sys/imgact.h,v 1.28 2002/07/20 02:56:11 peter Exp $ */ #ifndef _SYS_IMGACT_H_ @@ -38,6 +38,7 @@ #define MAXSHELLCMDLEN 128 +struct sysentvec; struct thread; struct vm_object; @@ -69,8 +70,7 @@ int exec_check_permissions(struct image_params *); register_t *exec_copyout_strings(struct image_params *); int exec_extract_strings(struct image_params *); -int exec_new_vmspace(struct image_params *, vm_offset_t, vm_offset_t, - vm_offset_t); +int exec_new_vmspace(struct image_params *, struct sysentvec *); void exec_setregs(struct thread *, u_long, u_long, u_long); int exec_shell_imgact(struct image_params *); #endif --- //depot/vendor/freebsd/src/sys/vm/vm_glue.c 2002/07/31 11:47:04 +++ //depot/user/jake/sparc64/src/sys/vm/vm_glue.c 2002/08/27 09:56:07 @@ -149,26 +149,18 @@ { boolean_t rv; vm_prot_t prot; + vm_map_t map; KASSERT((rw & ~VM_PROT_ALL) == 0, ("illegal ``rw'' argument to useracc (%x)\n", rw)); prot = rw; - /* - * XXX - check separately to disallow access to user area and user - * page tables - they are in the map. - * - * XXX - VM_MAXUSER_ADDRESS is an end address, not a max. It was once - * only used (as an end address) in trap.c. Use it as an end address - * here too. This bogusness has spread. I just fixed where it was - * used as a max in vm_mmap.c. - */ - if ((vm_offset_t) addr + len > /* XXX */ VM_MAXUSER_ADDRESS - || (vm_offset_t) addr + len < (vm_offset_t) addr) { + map = &curproc->p_vmspace->vm_map; + if ((vm_offset_t)addr + len > vm_map_max(map) || + (vm_offset_t)addr + len < (vm_offset_t)addr) { return (FALSE); } - rv = vm_map_check_protection(&curproc->p_vmspace->vm_map, - trunc_page((vm_offset_t)addr), round_page((vm_offset_t)addr + len), - prot); + rv = vm_map_check_protection(map, trunc_page((vm_offset_t)addr), + round_page((vm_offset_t)addr + len), prot); return (rv == TRUE); } --- //depot/vendor/freebsd/src/sys/vm/vm_map.c 2002/08/24 10:55:31 +++ //depot/user/jake/sparc64/src/sys/vm/vm_map.c 2002/08/27 13:38:43 @@ -78,6 +78,7 @@ #include #include #include +#include #include #include @@ -2364,7 +2365,7 @@ vm_size_t init_ssize; int rv; - if (VM_MIN_ADDRESS > 0 && addrbos < VM_MIN_ADDRESS) + if (addrbos < vm_map_min(map)) return (KERN_NO_SPACE); if (max_ssize < sgrowsiz) @@ -2552,9 +2553,7 @@ } rv = vm_map_insert(map, NULL, 0, addr, stack_entry->start, - VM_PROT_ALL, - VM_PROT_ALL, - 0); + p->p_sysent->sv_stackprot, VM_PROT_ALL, 0); /* Adjust the available stack space by the amount we grew. */ if (rv == KERN_SUCCESS) { --- //depot/vendor/freebsd/src/sys/vm/vm_mmap.c 2002/07/06 15:15:16 +++ //depot/user/jake/sparc64/src/sys/vm/vm_mmap.c 2002/08/27 09:56:07 @@ -257,12 +257,9 @@ if (addr & PAGE_MASK) return (EINVAL); /* Address range must be all in user VM space. */ - if (VM_MAXUSER_ADDRESS > 0 && addr + size > VM_MAXUSER_ADDRESS) - return (EINVAL); -#ifndef __i386__ - if (VM_MIN_ADDRESS > 0 && addr < VM_MIN_ADDRESS) + if (addr < vm_map_min(&vms->vm_map) || + addr + size > vm_map_max(&vms->vm_map)) return (EINVAL); -#endif if (addr + size < addr) return (EINVAL); } @@ -611,16 +608,11 @@ return (0); /* - * Check for illegal addresses. Watch out for address wrap... Note - * that VM_*_ADDRESS are not constants due to casts (argh). + * Check for illegal addresses. Watch out for address wrap... */ - if (VM_MAXUSER_ADDRESS > 0 && addr + size > VM_MAXUSER_ADDRESS) + map = &td->td_proc->p_vmspace->vm_map; + if (addr < vm_map_min(map) || addr + size > vm_map_max(map)) return (EINVAL); -#ifndef __i386__ - if (VM_MIN_ADDRESS > 0 && addr < VM_MIN_ADDRESS) - return (EINVAL); -#endif - map = &td->td_proc->p_vmspace->vm_map; /* * Make sure entire range is allocated. */ @@ -749,6 +741,7 @@ struct madvise_args *uap; { vm_offset_t start, end; + vm_map_t map; /* * Check for illegal behavior @@ -759,13 +752,10 @@ * Check for illegal addresses. Watch out for address wrap... Note * that VM_*_ADDRESS are not constants due to casts (argh). */ - if (VM_MAXUSER_ADDRESS > 0 && - ((vm_offset_t) uap->addr + uap->len) > VM_MAXUSER_ADDRESS) + map = &td->td_proc->p_vmspace->vm_map; + if ((vm_offset_t)uap->addr < vm_map_min(map) || + (vm_offset_t)uap->addr + uap->len > vm_map_max(map)) return (EINVAL); -#ifndef __i386__ - if (VM_MIN_ADDRESS > 0 && uap->addr < VM_MIN_ADDRESS) - return (EINVAL); -#endif if (((vm_offset_t) uap->addr + uap->len) < (vm_offset_t) uap->addr) return (EINVAL); @@ -776,8 +766,7 @@ start = trunc_page((vm_offset_t) uap->addr); end = round_page((vm_offset_t) uap->addr + uap->len); - if (vm_map_madvise(&td->td_proc->p_vmspace->vm_map, start, end, - uap->behav)) + if (vm_map_madvise(map, start, end, uap->behav)) return (EINVAL); return (0); } @@ -817,9 +806,8 @@ */ first_addr = addr = trunc_page((vm_offset_t) uap->addr); end = addr + (vm_size_t)round_page(uap->len); - if (VM_MAXUSER_ADDRESS > 0 && end > VM_MAXUSER_ADDRESS) - return (EINVAL); - if (end < addr) + map = &td->td_proc->p_vmspace->vm_map; + if (end > vm_map_max(map) || end < addr) return (EINVAL); /* @@ -828,7 +816,6 @@ vec = uap->vec; mtx_lock(&Giant); - map = &td->td_proc->p_vmspace->vm_map; pmap = vmspace_pmap(td->td_proc->p_vmspace); vm_map_lock_read(map); --- //depot/vendor/freebsd/src/sys/vm/vm_pageout.c 2002/08/10 16:55:17 +++ //depot/user/jake/sparc64/src/sys/vm/vm_pageout.c 2002/08/27 09:56:07 @@ -596,8 +596,8 @@ * table pages. */ if (desired == 0 && nothingwired) - pmap_remove(vm_map_pmap(map), - VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS); + pmap_remove(vm_map_pmap(map), vm_map_min(map), + vm_map_max(map)); vm_map_unlock(map); return; } --- //depot/vendor/freebsd/src/sys/vm/vm_unix.c 2002/06/25 17:30:18 +++ //depot/user/jake/sparc64/src/sys/vm/vm_unix.c 2002/08/27 09:56:07 @@ -93,7 +101,7 @@ error = ENOMEM; goto done; } - if (new > VM_MAXUSER_ADDRESS) { + if (new > vm_map_max(&vm->vm_map)) { error = ENOMEM; goto done; }