+.\"
+.\" Copyright (c) 2008 Apple Inc. All rights reserved.
+.\"
+.\" @APPLE_LICENSE_HEADER_START@
+.\"
+.\" This file contains Original Code and/or Modifications of Original Code
+.\" as defined in and that are subject to the Apple Public Source License
+.\" Version 2.0 (the 'License'). You may not use this file except in
+.\" compliance with the License. Please obtain a copy of the License at
+.\" http://www.opensource.apple.com/apsl/ and read it before using this
+.\" file.
+.\"
+.\" The Original Code and all software distributed under the License are
+.\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+.\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+.\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+.\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+.\" Please see the License for the specific language governing rights and
+.\" limitations under the License.
+.\"
+.\" @APPLE_LICENSE_HEADER_END@
+.\"
+.\"
.\" $NetBSD: mprotect.2,v 1.6 1995/10/12 15:41:08 jtc Exp $
.\"
.\" Copyright (c) 1991, 1993
.\" SUCH DAMAGE.
.\"
.\" @(#)mprotect.2 8.1 (Berkeley) 6/9/93
+.\" $FreeBSD: src/lib/libc/sys/mprotect.2,v 1.18 2007/01/09 00:28:15 imp Exp $
.\"
-.Dd June 9, 1993
+.Dd October 16, 2008
.Dt MPROTECT 2
.Os
.Sh NAME
.Nm mprotect
.Nd control the protection of pages
.Sh SYNOPSIS
-.Fd #include <sys/types.h>
.Fd #include <sys/mman.h>
.Ft int
-.Fn mprotect "caddr_t addr" "size_t len" "int prot"
+.Fo mprotect
+.Fa "void *addr"
+.Fa "size_t len"
+.Fa "int prot"
+.Fc
.Sh DESCRIPTION
The
.Fn mprotect
system call
changes the specified pages to have protection
.Fa prot .
-Not all implementations will guarantee protection on a page basis;
-the granularity of protection changes may be as large as an entire region.
+Not all implementations will guarantee protection on a page basis but Mac OS X's
+current implementation does.
+.Pp
+When a program violates the protections of a page, it gets a SIGBUS or SIGSEGV signal.
+.Pp
+Currently
+.Fa prot
+can be one or more of the following:
+.Pp
+.Bl -tag -width ".Dv PROT_WRITE" -compact
+.It Dv PROT_NONE
+No permissions at all.
+.It Dv PROT_READ
+The pages can be read.
+.It Dv PROT_WRITE
+The pages can be written.
+.It Dv PROT_EXEC
+The pages can be executed.
+.El
.Sh RETURN VALUES
Upon successful completion,
a value of 0 is returned.
Otherwise, a value of -1 is returned and
.Va errno
is set to indicate the error.
+.Sh ERRORS
+.Fn mprotect
+will fail if:
+.Bl -tag -width Er
+.\" ===========
+.It Bq Er EACCES
+The requested protection conflicts with
+the access permissions of the process
+on the specified address range.
+.\" ===========
+.\" .It Bq Er EAGAIN
+.\" Insufficient memory resources exist to allow locking a private page
+.\" under PROT_WRITE.
+.\" ===========
+.It Bq Er EINVAL
+.Fa addr
+is not a multiple of the page size (i.e.
+.Fa addr
+is not page-aligned).
+.\" ===========
+.\" .It Bq Er ENOMEM
+.\" The specified address range is outside of the address range
+.\" of the process or includes an unmapped page.
+.\" ===========
+.It Bq Er ENOTSUP
+The combination of accesses requested in
+.Fa prot
+is not supported.
+.El
+.Sh LEGACY SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <sys/mman.h>
+.Pp
+The include file
+.In sys/types.h
+is necessary.
+.Pp
+.Ft int
+.br
+.Fo mprotect
+.Fa "caddr_t addr"
+.Fa "size_t len"
+.Fa "int prot"
+.Fc ;
+.Pp
+The type of
+.Fa addr
+has changed.
.Sh SEE ALSO
.Xr madvise 2 ,
.Xr mincore 2 ,
.Xr msync 2 ,
-.Xr munmap 2
+.Xr munmap 2 ,
+.Xr compat 5
.Sh HISTORY
The
.Fn mprotect