summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 5b0d44f..4dfb9a1 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -835,8 +835,6 @@ exec_new_vmspace(imgp, sv)
GIANT_REQUIRED;
- stack_addr = sv->sv_usrstack - maxssiz;
-
imgp->vmspace_destroyed = 1;
EVENTHANDLER_INVOKE(process_exec, p);
@@ -871,24 +869,20 @@ exec_new_vmspace(imgp, sv)
}
/* Allocate a new stack */
+ stack_addr = sv->sv_usrstack - maxssiz;
error = vm_map_stack(map, stack_addr, (vm_size_t)maxssiz,
- sv->sv_stackprot, VM_PROT_ALL, 0);
+ sv->sv_stackprot, VM_PROT_ALL, MAP_STACK_GROWS_DOWN);
if (error)
return (error);
#ifdef __ia64__
- {
- /*
- * Allocate backing store. We really need something
- * similar to vm_map_stack which can allow the backing
- * store to grow upwards. This will do for now.
- */
- vm_offset_t 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;
- }
+ /* Allocate a new register stack */
+ stack_addr = sv->sv_usrstack - 2 * maxssiz;
+ error = vm_map_stack(map, stack_addr, (vm_size_t)maxssiz,
+ sv->sv_stackprot, VM_PROT_ALL, MAP_STACK_GROWS_UP);
+ if (error)
+ return (error);
+ FIRST_THREAD_IN_PROC(p)->td_md.md_bspstore = stack_addr;
#endif
/* vm_ssize and vm_maxsaddr are somewhat antiquated concepts in the
OpenPOWER on IntegriCloud