 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: brk.2,v 1.32 2004/05/13 10:20:57 wiz Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1980, 1991, 1993
 | |
| .\"	The Regents of the University of California.  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
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     @(#)brk.2	8.4 (Berkeley) 5/1/95
 | |
| .\"
 | |
| .Dd July 12, 1999
 | |
| .Dt BRK 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm brk ,
 | |
| .Nm sbrk
 | |
| .Nd change data segment size
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In unistd.h
 | |
| .Ft int
 | |
| .Fn brk "void *addr"
 | |
| .Ft void *
 | |
| .Fn sbrk "intptr_t incr"
 | |
| .Sh DESCRIPTION
 | |
| .Bf -symbolic
 | |
| The brk and sbrk functions are legacy interfaces from before the
 | |
| advent of modern virtual memory management.
 | |
| .Ef
 | |
| .Pp
 | |
| The
 | |
| .Fn brk
 | |
| and
 | |
| .Fn sbrk
 | |
| functions are used to change the amount of memory allocated in a
 | |
| process's data segment.
 | |
| They do this by moving the location of the
 | |
| .Dq break .
 | |
| The break is the first address after the end of the process's
 | |
| uninitialized data segment (also known as the
 | |
| .Dq BSS ) .
 | |
| .Pp
 | |
| While the actual process data segment size maintained by the kernel will only
 | |
| grow or shrink in page sizes, these functions allow setting the break
 | |
| to unaligned values (i.e. it may point to any address inside the last
 | |
| page of the data segment).
 | |
| .Pp
 | |
| The
 | |
| .Fn brk
 | |
| function sets the break to
 | |
| .Fa addr .
 | |
| .Pp
 | |
| The
 | |
| .Fn sbrk
 | |
| function raises the break by at least
 | |
| .Fa incr
 | |
| bytes, thus allocating at least
 | |
| .Fa incr
 | |
| bytes of new memory in the data segment.
 | |
| If
 | |
| .Fa incr
 | |
| is negative,
 | |
| the break is lowered by
 | |
| .Fa incr
 | |
| bytes.
 | |
| .Pp
 | |
| .Fn sbrk
 | |
| returns the prior address of the break.
 | |
| The current value of the program break may be determined by calling
 | |
| .Fn sbrk 0 .
 | |
| (See also
 | |
| .Xr end 3 ) .
 | |
| .Pp
 | |
| The
 | |
| .Xr getrlimit 2
 | |
| system call may be used to determine
 | |
| the maximum permissible size of the
 | |
| .Em data
 | |
| segment;
 | |
| it will not be possible to set the break
 | |
| beyond the
 | |
| .Dv RLIMIT_DATA
 | |
| .Em rlim_max
 | |
| value returned from a call to
 | |
| .Xr getrlimit 2 ,
 | |
| e.g.
 | |
| .Dq etext + rlim.rlim_max .
 | |
| (see
 | |
| .Xr end 3
 | |
| for the definition of
 | |
| .Em etext ) .
 | |
| .Sh RETURN VALUES
 | |
| .Fn brk
 | |
| returns 0 if successful;
 | |
| otherwise \-1 with
 | |
| .Va errno
 | |
| set to indicate why the allocation failed.
 | |
| .Pp
 | |
| The
 | |
| .Fn sbrk
 | |
| function returns the prior break value if successful;
 | |
| otherwise ((void *)\-1) is returned and
 | |
| .Va errno
 | |
| is set to indicate why the allocation failed.
 | |
| .Sh ERRORS
 | |
| .Fn brk
 | |
| or
 | |
| .Fn sbrk
 | |
| will fail and no additional memory will be allocated if
 | |
| one of the following are true:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er ENOMEM
 | |
| The limit, as set by
 | |
| .Xr setrlimit 2 ,
 | |
| was exceeded.
 | |
| .It Bq Er ENOMEM
 | |
| The maximum possible size of a data segment (compiled into the
 | |
| system) was exceeded.
 | |
| .It Bq Er ENOMEM
 | |
| Insufficient space existed in the swap area
 | |
| to support the expansion.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr execve 2 ,
 | |
| .Xr getrlimit 2 ,
 | |
| .Xr mmap 2 ,
 | |
| .Xr end 3 ,
 | |
| .Xr free 3 ,
 | |
| .Xr malloc 3 ,
 | |
| .Xr sysconf 3
 | |
| .Sh HISTORY
 | |
| A
 | |
| .Fn brk
 | |
| function call appeared in
 | |
| .At v7 .
 | |
| .Sh BUGS
 | |
| Note that
 | |
| mixing
 | |
| .Fn brk
 | |
| and
 | |
| .Fn sbrk
 | |
| with
 | |
| .Xr malloc 3 ,
 | |
| .Xr free 3 ,
 | |
| and similar functions may result in non-portable program
 | |
| behavior.
 | |
| Caution is advised.
 | |
| .Pp
 | |
| Setting the break may fail due to a temporary lack of swap space.
 | |
| It is not possible to distinguish this from a failure caused by
 | |
| exceeding the maximum size of the data segment without consulting
 | |
| .Xr getrlimit 2 .
 |