]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/mmap.2
xnu-3248.20.55.tar.gz
[apple/xnu.git] / bsd / man / man2 / mmap.2
CommitLineData
9bccf70c
A
1.\" Copyright (c) 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
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.
9bccf70c
A
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.
15.\"
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
26.\" SUCH DAMAGE.
27.\"
b0d623f7
A
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 $
9bccf70c 30.\"
b0d623f7 31.Dd April 21, 2006
9bccf70c 32.Dt MMAP 2
b0d623f7 33.Os
9bccf70c
A
34.Sh NAME
35.Nm mmap
b0d623f7
A
36.Nd allocate memory, or map files or devices into memory
37.Sh LIBRARY
38.Lb libc
9bccf70c 39.Sh SYNOPSIS
b0d623f7 40.In sys/mman.h
9bccf70c 41.Ft void *
b0d623f7 42.Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
9bccf70c
A
43.Sh DESCRIPTION
44The
b0d623f7
A
45.Fn mmap
46system call causes the pages starting at
9bccf70c
A
47.Fa addr
48and continuing for at most
49.Fa len
50bytes to be mapped from the object described by
b0d623f7 51.Fa fd ,
9bccf70c
A
52starting at byte offset
53.Fa offset .
54If
55.Fa offset
56or
57.Fa len
58is not a multiple of the pagesize, the mapped region may extend past the
59specified range.
b0d623f7 60Any extension beyond the end of the mapped object will be zero-filled.
9bccf70c 61.Pp
b0d623f7
A
62The
63.Fa addr
64argument is used by the system to determine the starting address of the mapping,
65and its interpretation is dependent on the setting of the MAP_FIXED flag.
66If MAP_FIXED is specified in
67.Fa flags ,
68the system will try to place the mapping at the specified address,
69possibly removing a
70mapping that already exists at that location.
71If MAP_FIXED is not specified,
72then the system will attempt to use the range of addresses starting at
9bccf70c 73.Fa addr
b0d623f7
A
74if they do not overlap any existing mappings,
75including memory allocated by malloc(3) and other such allocators.
76Otherwise,
77the system will choose an alternate address for the mapping (using an implementation
78dependent algorithm)
79that does not overlap any existing
80mappings.
81In other words,
82without MAP_FIXED the system will attempt to find an empty location in the address space if the specified address
83range has already been mapped by something else.
9bccf70c
A
84If
85.Fa addr
b0d623f7
A
86is zero and MAP_FIXED is not specified,
87then an address will be selected by the system so as not to overlap
88any existing mappings in the address space.
89In all cases,
90the actual starting address of the region is returned.
91If MAP_FIXED is specified,
92a successful
9bccf70c
A
93.Fa mmap
94deletes any previous mapping in the allocated address range.
b0d623f7 95Previous mappings are never deleted if MAP_FIXED is not specified.
9bccf70c
A
96.Pp
97The protections (region accessibility) are specified in the
98.Fa prot
99argument by
100.Em or Ns 'ing
101the following values:
102.Pp
b0d623f7
A
103.Bl -tag -width PROT_WRITE -compact
104.It Dv PROT_NONE
105Pages may not be accessed.
9bccf70c
A
106.It Dv PROT_READ
107Pages may be read.
108.It Dv PROT_WRITE
109Pages may be written.
b0d623f7
A
110.It Dv PROT_EXEC
111Pages may be executed.
9bccf70c
A
112.El
113.Pp
b0d623f7
A
114Note that, due to hardware limitations, on some platforms PROT_WRITE may
115imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs
116should not rely on these flags being separately enforcable.
117.Pp
9bccf70c
A
118The
119.Fa flags
b0d623f7
A
120argument specifies the type of the mapped object, mapping options and
121whether modifications made to the mapped copy of the page are private
122to the process (copy-on-write) or are to be shared with other references.
123Sharing, mapping type and options are specified in the
9bccf70c
A
124.Fa flags
125argument by
126.Em or Ns 'ing
127the following values:
b0d623f7 128.Bl -tag -width MAP_HASSEMAPHORE
3e170ce0
A
129.It Dv MAP_ANONYMOUS
130Synonym for
131.Dv MAP_ANON.
9bccf70c
A
132.It Dv MAP_ANON
133Map anonymous memory not associated with any specific file.
b0d623f7
A
134The
135.Fa offset
136argument is ignored.
2d21ac55 137Mac OS X specific: the file descriptor used for creating
9bccf70c 138.Dv MAP_ANON
2d21ac55
A
139regions can be used to pass some Mach VM flags, and can
140be specified as \-1 if no such flags are associated with
141the region. Mach VM flags are defined in
142<mach/vm_statistics.h> and the ones that currently apply
143to
144.Nm mmap
145are:
146.Pp
147VM_FLAGS_PURGABLE to create Mach purgable (i.e. volatile) memory
2d21ac55 148.Pp
b0d623f7
A
149VM_MAKE_TAG(tag) to associate an 8-bit tag with the region
150.br
2d21ac55
A
151<mach/vm_statistics.h> defines some preset tags (with a VM_MEMORY_ prefix).
152Users are encouraged to use tags between 240 and 255.
153Tags are used by tools such as vmmap(1) to help identify specific memory regions.
6d2010ae
A
154.Pp
155VM_FLAGS_SUPERPAGE_SIZE_* to use superpages for the allocation.
156See <mach/vm_statistics.h> for supported architectures and sizes (or use
157VM_FLAGS_SUPERPAGE_SIZE_ANY to have the kernel choose a size).
158The specified size must be divisible by the superpage size (except for
159VM_FLAGS_SUPERPAGE_SIZE_ANY), and if you use MAP_FIXED, the specified address
160must be properly aligned. If the system cannot satisfy the request with superpages,
161the call will fail. Note that currently, superpages are always wired and not
162inherited by children of the process.
9bccf70c 163.It Dv MAP_FILE
b0d623f7 164Mapped from a regular file. (This is
9bccf70c
A
165the default mapping type, and need not be specified.)
166.It Dv MAP_FIXED
167Do not permit the system to select a different address than the one
168specified.
169If the specified address cannot be used,
b0d623f7 170.Fn mmap
9bccf70c 171will fail.
b0d623f7
A
172If
173.Dv MAP_FIXED
174is specified,
9bccf70c
A
175.Fa addr
176must be a multiple of the pagesize.
b0d623f7
A
177If a
178.Dv MAP_FIXED
179request is successful, the mapping established by
180.Fn mmap
181replaces any previous mappings for the process' pages in the range from
182.Fa addr
183to
184.Fa addr
185+
186.Fa len .
9bccf70c
A
187Use of this option is discouraged.
188.It Dv MAP_HASSEMAPHORE
189Notify the kernel that the region may contain semaphores and that special
190handling may be necessary.
9bccf70c 191.It Dv MAP_PRIVATE
2d21ac55 192Modifications are private (copy-on-write).
9bccf70c
A
193.It Dv MAP_SHARED
194Modifications are shared.
2d21ac55
A
195.It Dv MAP_NOCACHE
196Pages in this mapping are not retained in the kernel's memory cache.
197If the system runs low on memory, pages in MAP_NOCACHE mappings will be among
198the first to be reclaimed.
199This flag is intended for mappings that have little locality and
200provides a hint to the kernel that pages in this mapping are unlikely to be needed
201again in the near future.
9bccf70c
A
202.El
203.Pp
2d21ac55
A
204Conforming applications must specify either MAP_PRIVATE or MAP_SHARED.
205.Pp
b0d623f7 206The
9bccf70c 207.Xr close 2
b0d623f7 208system call does not unmap pages, see
9bccf70c
A
209.Xr munmap 2
210for further information.
211.Pp
212The current design does not allow a process to specify the location of
213swap space.
214In the future we may define an additional mapping type,
215.Dv MAP_SWAP ,
216in which
217the file descriptor argument specifies a file or device to which swapping
218should be done.
219.Sh RETURN VALUES
220Upon successful completion,
b0d623f7 221.Fn mmap
9bccf70c 222returns a pointer to the mapped region.
b0d623f7
A
223Otherwise, a value of
224.Dv MAP_FAILED
225is returned and
9bccf70c
A
226.Va errno
227is set to indicate the error.
228.Sh ERRORS
b0d623f7
A
229The
230.Fn mmap
231system call
9bccf70c
A
232will fail if:
233.Bl -tag -width Er
234.It Bq Er EACCES
b0d623f7
A
235The flag
236.Dv PROT_READ
237was specified as part of the
238.Fa prot
239argument and
240.Fa fd
241was not open for reading.
9bccf70c 242The flags
9bccf70c 243.Dv MAP_SHARED
b0d623f7
A
244and
245.Dv PROT_WRITE
246were specified as part of the
9bccf70c
A
247.Fa flags
248and
249.Fa prot
b0d623f7
A
250argument and
251.Fa fd
252was not open for writing.
9bccf70c 253.It Bq Er EBADF
b0d623f7
A
254The
255.Fa fd
256argument
257is not a valid open file descriptor.
9bccf70c
A
258.It Bq Er EINVAL
259.Dv MAP_FIXED
b0d623f7
A
260was specified and the
261.Fa addr
262argument was not page aligned, or part of the desired address space
263resides out of the valid address space for a user process.
2d21ac55
A
264.It Bq Er EINVAL
265.Fa flags
266does not include either MAP_PRIVATE or MAP_SHARED.
2d21ac55 267.It Bq Er EINVAL
b0d623f7 268The
2d21ac55 269.Fa len
b0d623f7 270argument
3e170ce0
A
271was negative or zero. Historically, the system call would not return an error if the argument was zero.
272See other potential additional restrictions in the
273COMPATIBILITY section below.
2d21ac55 274.It Bq Er EINVAL
b0d623f7 275The
2d21ac55 276.Fa offset
b0d623f7
A
277argument
278was not page-aligned based on the page size as returned by getpagesize(3).
2d21ac55 279.It Bq Er ENODEV
b0d623f7
A
280.Dv MAP_ANON
281has not been specified and the file
282.Fa fd
283refers to does not support mapping.
9bccf70c
A
284.It Bq Er ENOMEM
285.Dv MAP_FIXED
b0d623f7 286was specified and the
9bccf70c 287.Fa addr
b0d623f7
A
288argument was not available.
289.Dv MAP_FIXED
290was specified and the address range specified exceeds the address space
291limit for the process.
9bccf70c 292.Dv MAP_ANON
b0d623f7 293was specified and insufficient memory was available.
2d21ac55 294.It Bq Er ENXIO
b0d623f7
A
295Addresses in the specified range are invalid for
296.Fa fd .
2d21ac55
A
297.It Bq Er EOVERFLOW
298Addresses in the specified range exceed the maximum offset
b0d623f7
A
299set for
300.Fa fd .
2d21ac55
A
301.El
302.Sh LEGACY SYNOPSIS
303.Fd #include <sys/types.h>
304.Fd #include <sys/mman.h>
305.Pp
306The include file
307.In sys/types.h
308is necessary.
309.Sh COMPATIBILITY
310.Fn mmap
311now returns with
312.Va errno
313set to EINVAL in places that historically succeeded.
314The rules have changed as follows:
315.Bl -bullet
316.It
317The
318.Fa flags
319parameter must specify either MAP_PRIVATE or MAP_SHARED.
320.It
321The
3e170ce0 322.Fa len
2d21ac55
A
323parameter must not be 0.
324.It
325The
326.Fa off
327parameter must be a multiple of pagesize,
328as returned by
329.Fn sysconf .
9bccf70c 330.El
b0d623f7 331.Sh SEE ALSO
9bccf70c
A
332.Xr madvise 2 ,
333.Xr mincore 2 ,
b0d623f7 334.Xr minherit 2 ,
2d21ac55
A
335.Xr mlock 2 ,
336.Xr mprotect 2 ,
337.Xr msync 2 ,
b0d623f7 338.Xr munlock 2 ,
2d21ac55 339.Xr munmap 2 ,
b0d623f7
A
340.Xr shmat 2 ,
341.Xr getpagesize 3