Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F141690262
D3565.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
20 KB
Referenced Files
None
Subscribers
None
D3565.diff
View Options
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
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 9, 9:29 PM (23 m, 10 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27595665
Default Alt Text
D3565.diff (20 KB)
Attached To
Mode
D3565: Per-Process PS_STRINGS, USRSTACK, shared_object_base, and sigcode_base
Attached
Detach File
Event Timeline
Log In to Comment