Index: sys/amd64/amd64/machdep.c =================================================================== --- sys/amd64/amd64/machdep.c +++ sys/amd64/amd64/machdep.c @@ -435,7 +435,7 @@ } regs->tf_rsp = (long)sfp; - regs->tf_rip = p->p_sysent->sv_sigcode_base; + regs->tf_rip = p->p_sigcode_base; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucodesel; regs->tf_ds = _udatasel; Index: sys/amd64/ia32/ia32_signal.c =================================================================== --- sys/amd64/ia32/ia32_signal.c +++ sys/amd64/ia32/ia32_signal.c @@ -415,7 +415,7 @@ } regs->tf_rsp = (uintptr_t)fp; - regs->tf_rip = p->p_sysent->sv_psstrings - sz_ia32_osigcode; + regs->tf_rip = p->p_psstrings - sz_ia32_osigcode; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucode32sel; regs->tf_ds = _udatasel; @@ -526,7 +526,7 @@ } regs->tf_rsp = (uintptr_t)sfp; - regs->tf_rip = p->p_sysent->sv_sigcode_base + sz_ia32_sigcode - + regs->tf_rip = p->p_sigcode_base + sz_ia32_sigcode - sz_freebsd4_ia32_sigcode; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucode32sel; @@ -670,7 +670,7 @@ } regs->tf_rsp = (uintptr_t)sfp; - regs->tf_rip = p->p_sysent->sv_sigcode_base; + regs->tf_rip = p->p_sigcode_base; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucode32sel; regs->tf_ss = _udatasel; Index: sys/amd64/ia32/ia32_syscall.c =================================================================== --- sys/amd64/ia32/ia32_syscall.c +++ sys/amd64/ia32/ia32_syscall.c @@ -230,7 +230,7 @@ bzero(&uap, sizeof(uap)); uap.start = 0; uap.num = 1; - lcall_addr = curproc->p_sysent->sv_psstrings - sz_lcall_tramp; + lcall_addr = curproc->p_psstrings - sz_lcall_tramp; bzero(&desc, sizeof(desc)); desc.sd_type = SDT_MEMERA; desc.sd_dpl = SEL_UPL; Index: sys/amd64/linux/linux_machdep.c =================================================================== --- sys/amd64/linux/linux_machdep.c +++ sys/amd64/linux/linux_machdep.c @@ -250,7 +250,7 @@ * mmap's return value. */ PROC_LOCK(p); - p->p_vmspace->vm_maxsaddr = (char *)USRSTACK - + p->p_vmspace->vm_maxsaddr = (char *)p->p_usrstack - lim_cur_proc(p, RLIMIT_STACK); PROC_UNLOCK(p); } Index: sys/amd64/linux/linux_sysvec.c =================================================================== --- sys/amd64/linux/linux_sysvec.c +++ sys/amd64/linux/linux_sysvec.c @@ -272,7 +272,7 @@ struct proc *p; p = imgp->proc; - arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; + arginfo = (struct ps_strings *)p->p_psstrings; KASSERT(curthread->td_proc == imgp->proc, ("unsafe elf_linux_fixup(), should be curproc")); @@ -281,7 +281,7 @@ pos = base + (imgp->args->argc + imgp->args->envc + 2); AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, - imgp->proc->p_sysent->sv_shared_page_base); + imgp->proc->p_shared_page_base); AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); @@ -339,7 +339,7 @@ execpath_len = 0; p = imgp->proc; - arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; + arginfo = (struct ps_strings *)p->p_psstrings; destp = (caddr_t)arginfo - SPARE_USRSPACE - roundup(sizeof(canary), sizeof(char *)) - roundup(execpath_len, sizeof(char *)) - Index: sys/amd64/linux32/linux32_machdep.c =================================================================== --- sys/amd64/linux32/linux32_machdep.c +++ sys/amd64/linux32/linux32_machdep.c @@ -613,7 +613,7 @@ * mmap's return value. */ PROC_LOCK(p); - p->p_vmspace->vm_maxsaddr = (char *)LINUX32_USRSTACK - + p->p_vmspace->vm_maxsaddr = (char *)p->p_usrstack - lim_cur_proc(p, RLIMIT_STACK); PROC_UNLOCK(p); } Index: sys/amd64/linux32/linux32_sysvec.c =================================================================== --- sys/amd64/linux32/linux32_sysvec.c +++ sys/amd64/linux32/linux32_sysvec.c @@ -231,16 +231,16 @@ Elf32_Addr *pos; struct linux32_ps_strings *arginfo; - arginfo = (struct linux32_ps_strings *)LINUX32_PS_STRINGS; - KASSERT(curthread->td_proc == imgp->proc, ("unsafe elf_linux_fixup(), should be curproc")); + + arginfo = (struct linux32_ps_strings *)imgp->proc->p_psstrings; base = (Elf32_Addr *)*stack_base; args = (Elf32_Auxargs *)imgp->auxargs; pos = base + (imgp->args->argc + imgp->args->envc + 2); AUXARGS_ENTRY_32(pos, LINUX_AT_SYSINFO_EHDR, - imgp->proc->p_sysent->sv_shared_page_base); + imgp->proc->p_shared_page_base); AUXARGS_ENTRY_32(pos, LINUX_AT_SYSINFO, linux32_vsyscall); AUXARGS_ENTRY_32(pos, LINUX_AT_HWCAP, cpu_feature); @@ -856,7 +856,7 @@ else execpath_len = 0; - arginfo = (struct linux32_ps_strings *)LINUX32_PS_STRINGS; + arginfo = (struct linux32_ps_strings *)imgp->proc->p_psstrings; destp = (caddr_t)arginfo - SPARE_USRSPACE - roundup(sizeof(canary), sizeof(char *)) - roundup(execpath_len, sizeof(char *)) - Index: sys/arm/arm/machdep.c =================================================================== --- sys/arm/arm/machdep.c +++ sys/arm/arm/machdep.c @@ -336,7 +336,8 @@ tf->tf_r5 = (register_t)&fp->sf_uc; tf->tf_pc = (register_t)catcher; tf->tf_usr_sp = (register_t)fp; - tf->tf_usr_lr = (register_t)(PS_STRINGS - *(p->p_sysent->sv_szsigcode)); + tf->tf_usr_lr = (register_t)(p->p_psstrings - + *(p->p_sysent->sv_szsigcode)); /* Set the mode to enter in the signal handler */ #if __ARM_ARCH >= 7 if ((register_t)catcher & 1) Index: sys/arm64/arm64/machdep.c =================================================================== --- sys/arm64/arm64/machdep.c +++ sys/arm64/arm64/machdep.c @@ -563,7 +563,7 @@ tf->tf_elr = (register_t)catcher; tf->tf_sp = (register_t)fp; - tf->tf_lr = (register_t)(PS_STRINGS - *(p->p_sysent->sv_szsigcode)); + tf->tf_lr = (register_t)(p->p_psstrings - *(p->p_sysent->sv_szsigcode)); CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_elr, tf->tf_sp); Index: sys/compat/freebsd32/freebsd32_misc.c =================================================================== --- sys/compat/freebsd32/freebsd32_misc.c +++ sys/compat/freebsd32/freebsd32_misc.c @@ -2805,9 +2805,9 @@ execpath_len = strlen(imgp->execpath) + 1; else execpath_len = 0; - arginfo = (struct freebsd32_ps_strings *)curproc->p_sysent-> - sv_psstrings; - if (imgp->proc->p_sysent->sv_sigcode_base == 0) + arginfo = (struct freebsd32_ps_strings *)curproc->p_psstrings; + imgp->proc->p_sigcode_base = imgp->proc->p_sysent->sv_sigcode_base; + if (imgp->proc->p_sigcode_base == 0) szsigcode = *(imgp->proc->p_sysent->sv_szsigcode); else szsigcode = 0; Index: sys/compat/linprocfs/linprocfs.c =================================================================== --- sys/compat/linprocfs/linprocfs.c +++ sys/compat/linprocfs/linprocfs.c @@ -1059,9 +1059,9 @@ ino = vat.va_fileid; vput(vp); } else if (SV_PROC_ABI(p) == SV_ABI_LINUX) { - if (e_start == p->p_sysent->sv_shared_page_base) + if (e_start == p->p_shared_page_base) name = vdso_str; - if (e_end == p->p_sysent->sv_usrstack) + if (e_end == p->p_usrstack) name = stack_str; } } else { Index: sys/i386/i386/machdep.c =================================================================== --- sys/i386/i386/machdep.c +++ sys/i386/i386/machdep.c @@ -458,11 +458,11 @@ regs->tf_esp = (int)fp; if (p->p_sysent->sv_sigcode_base != 0) { - regs->tf_eip = p->p_sysent->sv_sigcode_base + szsigcode - + regs->tf_eip = p->p_sigcode_base + szsigcode - szosigcode; } else { /* a.out sysentvec does not use shared page */ - regs->tf_eip = p->p_sysent->sv_psstrings - szosigcode; + regs->tf_eip = p->p_psstrings - szosigcode; } regs->tf_eflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucodesel; @@ -586,7 +586,7 @@ } regs->tf_esp = (int)sfp; - regs->tf_eip = p->p_sysent->sv_sigcode_base + szsigcode - + regs->tf_eip = p->p_sigcode_base + szsigcode - szfreebsd4_sigcode; regs->tf_eflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucodesel; @@ -760,9 +760,9 @@ } regs->tf_esp = (int)sfp; - regs->tf_eip = p->p_sysent->sv_sigcode_base; + regs->tf_eip = p->p_sigcode_base; if (regs->tf_eip == 0) - regs->tf_eip = p->p_sysent->sv_psstrings - szsigcode; + regs->tf_eip = p->p_psstrings - szsigcode; regs->tf_eflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucodesel; regs->tf_ds = _udatasel; Index: sys/i386/linux/linux_machdep.c =================================================================== --- sys/i386/linux/linux_machdep.c +++ sys/i386/linux/linux_machdep.c @@ -508,7 +508,7 @@ * mmap's return value. */ PROC_LOCK(p); - p->p_vmspace->vm_maxsaddr = (char *)USRSTACK - + p->p_vmspace->vm_maxsaddr = (char *)p->p_usrstack - lim_cur_proc(p, RLIMIT_STACK); PROC_UNLOCK(p); } Index: sys/i386/linux/linux_sysvec.c =================================================================== --- sys/i386/linux/linux_sysvec.c +++ sys/i386/linux/linux_sysvec.c @@ -243,13 +243,13 @@ ("unsafe elf_linux_fixup(), should be curproc")); p = imgp->proc; - arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; + arginfo = (struct ps_strings *)p->p_psstrings; uplatform = (Elf32_Addr *)((caddr_t)arginfo - linux_szplatform); args = (Elf32_Auxargs *)imgp->auxargs; pos = *stack_base + (imgp->args->argc + imgp->args->envc + 2); AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, - imgp->proc->p_sysent->sv_shared_page_base); + imgp->proc->p_shared_page_base); AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO, linux_vsyscall); AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); @@ -314,7 +314,7 @@ execpath_len = strlen(imgp->execpath) + 1; else execpath_len = 0; - arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; + arginfo = (struct ps_strings *)p->p_psstrings; destp = (caddr_t)arginfo - SPARE_USRSPACE - linux_szplatform - roundup(sizeof(canary), sizeof(char *)) - roundup(execpath_len, sizeof(char *)) - Index: sys/i386/svr4/svr4_machdep.c =================================================================== --- sys/i386/svr4/svr4_machdep.c +++ sys/i386/svr4/svr4_machdep.c @@ -492,7 +492,7 @@ */ tf->tf_es = GSEL(GUSERLDT_SEL, SEL_UPL); tf->tf_ds = GSEL(GUSERLDT_SEL, SEL_UPL); - tf->tf_eip = (int)(((char *)PS_STRINGS) - + tf->tf_eip = (int)(((char *)p->ps_strings) - svr4_szsigcode); tf->tf_cs = GSEL(GUSERLDT_SEL, SEL_UPL); @@ -501,7 +501,7 @@ tf->tf_ss = GSEL(GUSERLDT_SEL, SEL_UPL); #else tf->tf_esp = (int)fp; - tf->tf_eip = (int)(((char *)PS_STRINGS) - *(p->p_sysent->sv_szsigcode)); + tf->tf_eip = (int)(((char *)p->ps_strings) - *(p->p_sysent->sv_szsigcode)); tf->tf_eflags &= ~(PSL_T | PSL_D); tf->tf_cs = _ucodesel; tf->tf_ds = _udatasel; Index: sys/kern/imgact_elf.c =================================================================== --- sys/kern/imgact_elf.c +++ sys/kern/imgact_elf.c @@ -1068,7 +1068,8 @@ } if (imgp->sysent->sv_timekeep_base != 0) { AUXARGS_ENTRY(pos, AT_TIMEKEEP, - imgp->sysent->sv_timekeep_base); + imgp->proc->p_shared_page_base + + imgp->sysent->sv_timekeep_off); } AUXARGS_ENTRY(pos, AT_STACKPROT, imgp->sysent->sv_shared_page_obj != NULL && imgp->stack_prot != 0 ? imgp->stack_prot : @@ -2111,9 +2112,9 @@ KASSERT(*sizep == size, ("invalid size")); structsize = sizeof(ps_strings); #if defined(COMPAT_FREEBSD32) && __ELF_WORD_SIZE == 32 - ps_strings = PTROUT(p->p_sysent->sv_psstrings); + ps_strings = PTROUT(p->p_psstrings); #else - ps_strings = p->p_sysent->sv_psstrings; + ps_strings = p->p_psstrings; #endif sbuf_bcat(sb, &structsize, sizeof(structsize)); sbuf_bcat(sb, &ps_strings, sizeof(ps_strings)); Index: sys/kern/init_main.c =================================================================== --- sys/kern/init_main.c +++ sys/kern/init_main.c @@ -484,6 +484,8 @@ p->p_flag = P_SYSTEM | P_INMEM; p->p_flag2 = 0; p->p_state = PRS_NORMAL; + p->p_usrstack = USRSTACK; + p->p_psstrings = PS_STRINGS; knlist_init_mtx(&p->p_klist, &p->p_mtx); STAILQ_INIT(&p->p_ktr); p->p_nice = NZERO; @@ -728,7 +730,7 @@ /* * Need just enough stack to hold the faked-up "execve()" arguments. */ - addr = p->p_sysent->sv_usrstack - PAGE_SIZE; + addr = p->p_usrstack - PAGE_SIZE; if (vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &addr, PAGE_SIZE, 0, VMFS_NO_SPACE, VM_PROT_ALL, VM_PROT_ALL, 0) != 0) panic("init: couldn't allocate argument space"); @@ -755,7 +757,7 @@ * Move out the boot flag argument. */ options = 0; - ucp = (char *)p->p_sysent->sv_usrstack; + ucp = (char *)p->p_usrstack; (void)subyte(--ucp, 0); /* trailing zero */ if (boothowto & RB_SINGLE) { (void)subyte(--ucp, 's'); Index: sys/kern/kern_exec.c =================================================================== --- sys/kern/kern_exec.c +++ sys/kern/kern_exec.c @@ -150,12 +150,12 @@ #ifdef SCTL_MASK32 if (req->flags & SCTL_MASK32) { unsigned int val; - val = (unsigned int)p->p_sysent->sv_psstrings; + val = (unsigned int)p->p_psstrings; error = SYSCTL_OUT(req, &val, sizeof(val)); } else #endif - error = SYSCTL_OUT(req, &p->p_sysent->sv_psstrings, - sizeof(p->p_sysent->sv_psstrings)); + error = SYSCTL_OUT(req, &p->p_psstrings, + sizeof(p->p_psstrings)); return error; } @@ -169,12 +169,12 @@ #ifdef SCTL_MASK32 if (req->flags & SCTL_MASK32) { unsigned int val; - val = (unsigned int)p->p_sysent->sv_usrstack; + val = (unsigned int)p->p_usrstack; error = SYSCTL_OUT(req, &val, sizeof(val)); } else #endif - error = SYSCTL_OUT(req, &p->p_sysent->sv_usrstack, - sizeof(p->p_sysent->sv_usrstack)); + error = SYSCTL_OUT(req, &p->p_usrstack, + sizeof(p->p_usrstack)); return error; } @@ -572,6 +572,8 @@ goto exec_fail_dealloc; } + p->p_psstrings = p->p_sysent->sv_psstrings; + /* ABI enforces the use of Capsicum. Switch into capabilities mode. */ if (SV_PROC_FLAG(p, SV_CAPSICUM)) sys_cap_enter(td, NULL); @@ -1073,9 +1075,10 @@ /* Map a shared page */ obj = sv->sv_shared_page_obj; if (obj != NULL) { + p->p_shared_page_base = sv->sv_shared_page_base; vm_object_reference(obj); error = vm_map_fixed(map, obj, 0, - sv->sv_shared_page_base, sv->sv_shared_page_len, + p->p_shared_page_base, sv->sv_shared_page_len, VM_PROT_READ | VM_PROT_EXECUTE, VM_PROT_READ | VM_PROT_EXECUTE, MAP_INHERIT_SHARE | MAP_ACC_NO_CHARGE); @@ -1102,7 +1105,9 @@ } else { ssiz = maxssiz; } - stack_addr = sv->sv_usrstack - ssiz; + stack_addr = sv->sv_usrstack; + p->p_usrstack = stack_addr; + stack_addr -= ssiz; error = vm_map_stack(map, stack_addr, (vm_size_t)ssiz, obj != NULL && imgp->stack_prot != 0 ? imgp->stack_prot : sv->sv_stackprot, @@ -1344,8 +1349,9 @@ execpath_len = 0; p = imgp->proc; szsigcode = 0; - arginfo = (struct ps_strings *)p->p_sysent->sv_psstrings; - if (p->p_sysent->sv_sigcode_base == 0) { + p->p_sigcode_base = p->p_sysent->sv_sigcode_base; + arginfo = (struct ps_strings *)p->p_psstrings; + if (p->p_sigcode_base == 0) { if (p->p_sysent->sv_szsigcode != NULL) szsigcode = *(p->p_sysent->sv_szsigcode); } Index: sys/kern/kern_proc.c =================================================================== --- sys/kern/kern_proc.c +++ sys/kern/kern_proc.c @@ -1578,7 +1578,7 @@ size_t vsize, size; int i, error; - error = proc_read_mem(td, p, (vm_offset_t)(p->p_sysent->sv_psstrings), + error = proc_read_mem(td, p, (vm_offset_t)(p->p_psstrings), &pss, sizeof(pss)); if (error != 0) return (error); @@ -1654,7 +1654,7 @@ if (SV_PROC_FLAG(p, SV_ILP32) != 0) return (get_proc_vector32(td, p, proc_vectorp, vsizep, type)); #endif - error = proc_read_mem(td, p, (vm_offset_t)(p->p_sysent->sv_psstrings), + error = proc_read_mem(td, p, (vm_offset_t)(p->p_psstrings), &pss, sizeof(pss)); if (error != 0) return (error); @@ -2682,13 +2682,13 @@ * process. */ ps_strings32 = SV_PROC_FLAG(p, SV_ILP32) != 0 ? - PTROUT(p->p_sysent->sv_psstrings) : 0; + PTROUT(p->p_psstrings) : 0; PROC_UNLOCK(p); error = SYSCTL_OUT(req, &ps_strings32, sizeof(ps_strings32)); return (error); } #endif - ps_strings = p->p_sysent->sv_psstrings; + ps_strings = p->p_psstrings; PROC_UNLOCK(p); error = SYSCTL_OUT(req, &ps_strings, sizeof(ps_strings)); return (error); @@ -2792,13 +2792,13 @@ bzero(&kst32, sizeof(kst32)); if (SV_PROC_FLAG(p, SV_ILP32)) { if (sv->sv_sigcode_base != 0) { - kst32.ksigtramp_start = sv->sv_sigcode_base; - kst32.ksigtramp_end = sv->sv_sigcode_base + + kst32.ksigtramp_start = p->p_sigcode_base; + kst32.ksigtramp_end = p->p_sigcode_base + *sv->sv_szsigcode; } else { - kst32.ksigtramp_start = sv->sv_psstrings - + kst32.ksigtramp_start = p->p_psstrings - *sv->sv_szsigcode; - kst32.ksigtramp_end = sv->sv_psstrings; + kst32.ksigtramp_end = p->p_psstrings; } } PROC_UNLOCK(p); @@ -2808,13 +2808,13 @@ #endif bzero(&kst, sizeof(kst)); if (sv->sv_sigcode_base != 0) { - kst.ksigtramp_start = (char *)sv->sv_sigcode_base; - kst.ksigtramp_end = (char *)sv->sv_sigcode_base + + kst.ksigtramp_start = (char *)p->p_sigcode_base; + kst.ksigtramp_end = (char *)p->p_sigcode_base + *sv->sv_szsigcode; } else { - kst.ksigtramp_start = (char *)sv->sv_psstrings - + kst.ksigtramp_start = (char *)p->p_psstrings - *sv->sv_szsigcode; - kst.ksigtramp_end = (char *)sv->sv_psstrings; + kst.ksigtramp_end = (char *)p->p_psstrings; } PROC_UNLOCK(p); error = SYSCTL_OUT(req, &kst, sizeof(kst)); Index: sys/kern/kern_resource.c =================================================================== --- sys/kern/kern_resource.c +++ sys/kern/kern_resource.c @@ -751,12 +751,12 @@ if (limp->rlim_cur > oldssiz.rlim_cur) { prot = p->p_sysent->sv_stackprot; size = limp->rlim_cur - oldssiz.rlim_cur; - addr = p->p_sysent->sv_usrstack - + addr = p->p_usrstack - limp->rlim_cur; } else { prot = VM_PROT_NONE; size = oldssiz.rlim_cur - limp->rlim_cur; - addr = p->p_sysent->sv_usrstack - + addr = p->p_usrstack - oldssiz.rlim_cur; } addr = trunc_page(addr); Index: sys/mips/mips/freebsd32_machdep.c =================================================================== --- sys/mips/mips/freebsd32_machdep.c +++ sys/mips/mips/freebsd32_machdep.c @@ -459,7 +459,7 @@ /* * Signal trampoline code is at base of user stack. */ - td->td_frame->ra = (register_t)(intptr_t)FREEBSD32_PS_STRINGS - *(p->p_sysent->sv_szsigcode); + td->td_frame->ra = (register_t)(intptr_t)p->p_psstrings - *(p->p_sysent->sv_szsigcode); PROC_LOCK(p); mtx_lock(&psp->ps_mtx); } Index: sys/mips/mips/pm_machdep.c =================================================================== --- sys/mips/mips/pm_machdep.c +++ sys/mips/mips/pm_machdep.c @@ -173,7 +173,7 @@ /* * Signal trampoline code is at base of user stack. */ - regs->ra = (register_t)(intptr_t)PS_STRINGS - *(p->p_sysent->sv_szsigcode); + regs->ra = (register_t)(intptr_t)p->p_psstrings - *(p->p_sysent->sv_szsigcode); PROC_LOCK(p); mtx_lock(&psp->ps_mtx); } Index: sys/powerpc/powerpc/exec_machdep.c =================================================================== --- sys/powerpc/powerpc/exec_machdep.c +++ sys/powerpc/powerpc/exec_machdep.c @@ -279,7 +279,7 @@ mtx_unlock(&psp->ps_mtx); PROC_UNLOCK(p); - tf->srr0 = (register_t)p->p_sysent->sv_sigcode_base; + tf->srr0 = (register_t)p->p_sigcode_base; /* * copy the frame out to userland. Index: sys/sparc64/sparc64/machdep.c =================================================================== --- sys/sparc64/sparc64/machdep.c +++ sys/sparc64/sparc64/machdep.c @@ -995,7 +995,7 @@ bzero(pcb, sizeof(*pcb)); bzero(tf, sizeof(*tf)); tf->tf_out[0] = stack; - tf->tf_out[3] = p->p_sysent->sv_psstrings; + tf->tf_out[3] = p->p_psstrings; tf->tf_out[6] = sp - SPOFF - sizeof(struct frame); tf->tf_tnpc = imgp->entry_addr + 4; tf->tf_tpc = imgp->entry_addr; Index: sys/sys/proc.h =================================================================== --- sys/sys/proc.h +++ sys/sys/proc.h @@ -595,6 +595,10 @@ pid_t p_reapsubtree; /* (e) Pid of the direct child of the reaper which spawned our subtree. */ + vm_offset_t p_usrstack; /* (b) Process stack top. */ + vm_offset_t p_psstrings; /* (b) Process psstrings address. */ + vm_offset_t p_shared_page_base; /* (c) Address of shared page. */ + vm_offset_t p_sigcode_base; /* (c) Address of sigcode. */ u_int p_xexit; /* (c) Exit code. */ u_int p_xsig; /* (c) Stop/kill sig. */ /* End area that is copied on creation. */ Index: sys/vm/vm_map.c =================================================================== --- sys/vm/vm_map.c +++ sys/vm/vm_map.c @@ -3641,7 +3641,7 @@ } is_procstack = (addr >= (vm_offset_t)vm->vm_maxsaddr && - addr < (vm_offset_t)p->p_sysent->sv_usrstack) ? 1 : 0; + addr < (vm_offset_t)p->p_usrstack) ? 1 : 0; /* * If this is the main process stack, see if we're over the stack