1 .\" Copyright (c) 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 4. Neither the name of the University nor the names of its contributors
13 .\" may be used to endorse or promote products derived from this software
14 .\" without specific prior written permission.
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
29 .\" $FreeBSD: src/lib/libc/sys/mmap.2,v 1.56 2007/01/09 00:28:15 imp Exp $
36 .Nd allocate memory, or map files or devices into memory
42 .Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
46 system call causes the pages starting at
48 and continuing for at most
50 bytes to be mapped from the object described by
52 starting at byte offset
58 is not a multiple of the pagesize, the mapped region may extend past the
60 Any extension beyond the end of the mapped object will be zero-filled.
64 argument is used by the system to determine the starting address of the mapping,
65 and its interpretation is dependent on the setting of the MAP_FIXED flag.
66 If MAP_FIXED is specified in
68 the system will try to place the mapping at the specified address,
70 mapping that already exists at that location.
71 If MAP_FIXED is not specified,
72 then the system will attempt to use the range of addresses starting at
74 if they do not overlap any existing mappings,
75 including memory allocated by malloc(3) and other such allocators.
77 the system will choose an alternate address for the mapping (using an implementation
79 that does not overlap any existing
82 without MAP_FIXED the system will attempt to find an empty location in the address space if the specified address
83 range has already been mapped by something else.
86 is zero and MAP_FIXED is not specified,
87 then an address will be selected by the system so as not to overlap
88 any existing mappings in the address space.
90 the actual starting address of the region is returned.
91 If MAP_FIXED is specified,
94 deletes any previous mapping in the allocated address range.
95 Previous mappings are never deleted if MAP_FIXED is not specified.
97 The protections (region accessibility) are specified in the
101 the following values:
103 .Bl -tag -width PROT_WRITE -compact
105 Pages may not be accessed.
109 Pages may be written.
111 Pages may be executed.
114 Note that, due to hardware limitations, on some platforms PROT_WRITE may
115 imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs
116 should not rely on these flags being separately enforcable.
120 argument specifies the type of the mapped object, mapping options and
121 whether modifications made to the mapped copy of the page are private
122 to the process (copy-on-write) or are to be shared with other references.
123 Sharing, mapping type and options are specified in the
127 the following values:
128 .Bl -tag -width MAP_HASSEMAPHORE
130 Map anonymous memory not associated with any specific file.
134 Mac OS X specific: the file descriptor used for creating
136 regions can be used to pass some Mach VM flags, and can
137 be specified as \-1 if no such flags are associated with
138 the region. Mach VM flags are defined in
139 <mach/vm_statistics.h> and the ones that currently apply
144 VM_FLAGS_PURGABLE to create Mach purgable (i.e. volatile) memory
146 VM_MAKE_TAG(tag) to associate an 8-bit tag with the region
148 <mach/vm_statistics.h> defines some preset tags (with a VM_MEMORY_ prefix).
149 Users are encouraged to use tags between 240 and 255.
150 Tags are used by tools such as vmmap(1) to help identify specific memory regions.
152 VM_FLAGS_SUPERPAGE_SIZE_* to use superpages for the allocation.
153 See <mach/vm_statistics.h> for supported architectures and sizes (or use
154 VM_FLAGS_SUPERPAGE_SIZE_ANY to have the kernel choose a size).
155 The specified size must be divisible by the superpage size (except for
156 VM_FLAGS_SUPERPAGE_SIZE_ANY), and if you use MAP_FIXED, the specified address
157 must be properly aligned. If the system cannot satisfy the request with superpages,
158 the call will fail. Note that currently, superpages are always wired and not
159 inherited by children of the process.
161 Mapped from a regular file. (This is
162 the default mapping type, and need not be specified.)
164 Do not permit the system to select a different address than the one
166 If the specified address cannot be used,
173 must be a multiple of the pagesize.
176 request is successful, the mapping established by
178 replaces any previous mappings for the process' pages in the range from
184 Use of this option is discouraged.
185 .It Dv MAP_HASSEMAPHORE
186 Notify the kernel that the region may contain semaphores and that special
187 handling may be necessary.
189 Modifications are private (copy-on-write).
191 Modifications are shared.
193 Pages in this mapping are not retained in the kernel's memory cache.
194 If the system runs low on memory, pages in MAP_NOCACHE mappings will be among
195 the first to be reclaimed.
196 This flag is intended for mappings that have little locality and
197 provides a hint to the kernel that pages in this mapping are unlikely to be needed
198 again in the near future.
201 Conforming applications must specify either MAP_PRIVATE or MAP_SHARED.
205 system call does not unmap pages, see
207 for further information.
209 The current design does not allow a process to specify the location of
211 In the future we may define an additional mapping type,
214 the file descriptor argument specifies a file or device to which swapping
217 Upon successful completion,
219 returns a pointer to the mapped region.
220 Otherwise, a value of
224 is set to indicate the error.
234 was specified as part of the
238 was not open for reading.
243 were specified as part of the
249 was not open for writing.
254 is not a valid open file descriptor.
257 was specified and the
259 argument was not page aligned, or part of the desired address space
260 resides out of the valid address space for a user process.
263 does not include either MAP_PRIVATE or MAP_SHARED.
273 was not page-aligned based on the page size as returned by getpagesize(3).
276 has not been specified and the file
278 refers to does not support mapping.
281 was specified and the
283 argument was not available.
285 was specified and the address range specified exceeds the address space
286 limit for the process.
288 was specified and insufficient memory was available.
290 Addresses in the specified range are invalid for
293 Addresses in the specified range exceed the maximum offset
298 .Fd #include <sys/types.h>
299 .Fd #include <sys/mman.h>
308 set to EINVAL in places that historically succeeded.
309 The rules have changed as follows:
314 parameter must specify either MAP_PRIVATE or MAP_SHARED.
318 parameter must not be 0.
322 parameter must be a multiple of pagesize,