vm_map_stack,
vm_map_growstack — manage
process stacks
#include
<sys/param.h>
#include <vm/vm.h>
#include <vm/vm_map.h>
int
vm_map_stack(vm_map_t map,
vm_offset_t addrbos, vm_size_t
max_ssize, vm_prot_t prot,
vm_prot_t max, int cow);
int
vm_map_growstack(struct
proc *p, vm_offset_t
addr);
The
vm_map_stack()
function maps a process stack for a new process image. The stack is mapped
addrbos in map, with a maximum
size of max_ssize. Copy-on-write flags passed in
cow are also applied to the new mapping. Protection
bits are supplied by prot and
max.
It is typically called by
execve(2).
The
vm_map_growstack()
function is responsible for growing a stack for the process
p to the desired address addr,
similar to the legacy
sbrk(2)
call.
The vm_map_stack() function calls
vm_map_insert(9)
to create its mappings.
The vm_map_stack() and
vm_map_growstack() functions acquire the process
lock on p for the duration of the call.
The vm_map_stack() function returns
KERN_SUCCESS if the mapping was allocated
successfully.
Otherwise, if mapping the stack would exceed the process's VMEM
resource limit, or if the specified bottom-of-stack address is out of range
for the map, or if there is already a mapping at the address which would
result, or if max_ssize could not be accommodated
within the current mapping, KERN_NO_SPACE is
returned.
Other possible return values for this function are documented in
vm_map_insert(9).
The vm_map_growstack() function returns
KERN_SUCCESS if addr is
already mapped, or if the stack was grown successfully.
It also returns KERN_SUCCESS if
addr is outside the stack range; this is done in order
to preserve compatibility with the deprecated grow()
function previously located in the file
vm_machdep.c.
This manual page was written by Bruce M
Simpson
<bms@spc.org>.