Copyright (c) 2003 Bruce M Simpson <email@example.com> All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documenta...
NAMEvm_map_stack vm_map_growstack - manage process stacks
SYNOPSISIn sys/param.h In vm/vm.h In vm/vm_map.h Ft int Fo vm_map_stack Fa vm_map_t map vm_offset_t addrbos vm_size_t max_ssize vm_prot_t prot Fa vm_prot_t max int cow Fc Ft int Fn vm_map_growstack struct proc *p vm_offset_t addr
DESCRIPTIONThe Fn vm_map_stack function maps a process stack for a new process image. The stack is mapped Fa addrbos in Fa map , with a maximum size of Fa max_ssize . Copy-on-write flags passed in Fa cow are also applied to the new mapping. Protection bits are supplied by Fa prot and Fa max .
It is typically called by execve(2).
The Fn vm_map_growstack function is responsible for growing a stack for the process Fa p to the desired address Fa addr , similar to the legacy sbrk(2) call.
IMPLEMENTATION NOTESThe Fn vm_map_stack function calls vm_map_insert9 to create its mappings.
The Fn vm_map_stack and Fn vm_map_growstack functions acquire the process lock on Fa p for the duration of the call.
RETURN VALUESThe Fn 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 Fa 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_insert9.
The Fn vm_map_growstack function returns KERN_SUCCESS if Fa addr is already mapped, or if the stack was grown successfully.
It also returns KERN_SUCCESS if Fa addr is outside the stack range; this is done in order to preserve compatibility with the deprecated Fn grow function previously located in the file vm_machdep.c