xref: /xnu-8019.80.24/bsd/sys/malloc.h (revision a325d9c4a84054e40bbe985afedcb50ab80993ea)
1*a325d9c4SApple OSS Distributions /*
2*a325d9c4SApple OSS Distributions  * Copyright (c) 2000-2013 Apple Inc. All rights reserved.
3*a325d9c4SApple OSS Distributions  *
4*a325d9c4SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*a325d9c4SApple OSS Distributions  *
6*a325d9c4SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*a325d9c4SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*a325d9c4SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*a325d9c4SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*a325d9c4SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*a325d9c4SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*a325d9c4SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*a325d9c4SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*a325d9c4SApple OSS Distributions  *
15*a325d9c4SApple OSS Distributions  * Please obtain a copy of the License at
16*a325d9c4SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*a325d9c4SApple OSS Distributions  *
18*a325d9c4SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*a325d9c4SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*a325d9c4SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*a325d9c4SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*a325d9c4SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*a325d9c4SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*a325d9c4SApple OSS Distributions  * limitations under the License.
25*a325d9c4SApple OSS Distributions  *
26*a325d9c4SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*a325d9c4SApple OSS Distributions  */
28*a325d9c4SApple OSS Distributions /* Copyright (c) 1998, 1999 Apple Computer, Inc. All Rights Reserved */
29*a325d9c4SApple OSS Distributions /* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */
30*a325d9c4SApple OSS Distributions /*
31*a325d9c4SApple OSS Distributions  * Copyright (c) 1987, 1993
32*a325d9c4SApple OSS Distributions  *	The Regents of the University of California.  All rights reserved.
33*a325d9c4SApple OSS Distributions  *
34*a325d9c4SApple OSS Distributions  * Redistribution and use in source and binary forms, with or without
35*a325d9c4SApple OSS Distributions  * modification, are permitted provided that the following conditions
36*a325d9c4SApple OSS Distributions  * are met:
37*a325d9c4SApple OSS Distributions  * 1. Redistributions of source code must retain the above copyright
38*a325d9c4SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer.
39*a325d9c4SApple OSS Distributions  * 2. Redistributions in binary form must reproduce the above copyright
40*a325d9c4SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer in the
41*a325d9c4SApple OSS Distributions  *    documentation and/or other materials provided with the distribution.
42*a325d9c4SApple OSS Distributions  * 3. All advertising materials mentioning features or use of this software
43*a325d9c4SApple OSS Distributions  *    must display the following acknowledgement:
44*a325d9c4SApple OSS Distributions  *	This product includes software developed by the University of
45*a325d9c4SApple OSS Distributions  *	California, Berkeley and its contributors.
46*a325d9c4SApple OSS Distributions  * 4. Neither the name of the University nor the names of its contributors
47*a325d9c4SApple OSS Distributions  *    may be used to endorse or promote products derived from this software
48*a325d9c4SApple OSS Distributions  *    without specific prior written permission.
49*a325d9c4SApple OSS Distributions  *
50*a325d9c4SApple OSS Distributions  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
51*a325d9c4SApple OSS Distributions  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
52*a325d9c4SApple OSS Distributions  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
53*a325d9c4SApple OSS Distributions  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
54*a325d9c4SApple OSS Distributions  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
55*a325d9c4SApple OSS Distributions  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
56*a325d9c4SApple OSS Distributions  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57*a325d9c4SApple OSS Distributions  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
58*a325d9c4SApple OSS Distributions  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
59*a325d9c4SApple OSS Distributions  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60*a325d9c4SApple OSS Distributions  * SUCH DAMAGE.
61*a325d9c4SApple OSS Distributions  *
62*a325d9c4SApple OSS Distributions  *	@(#)malloc.h	8.5 (Berkeley) 5/3/95
63*a325d9c4SApple OSS Distributions  */
64*a325d9c4SApple OSS Distributions /*
65*a325d9c4SApple OSS Distributions  * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce
66*a325d9c4SApple OSS Distributions  * support for mandatory and extensible security protections.  This notice
67*a325d9c4SApple OSS Distributions  * is included in support of clause 2.2 (b) of the Apple Public License,
68*a325d9c4SApple OSS Distributions  * Version 2.0.
69*a325d9c4SApple OSS Distributions  */
70*a325d9c4SApple OSS Distributions 
71*a325d9c4SApple OSS Distributions #ifndef _SYS_MALLOC_H_
72*a325d9c4SApple OSS Distributions #define _SYS_MALLOC_H_
73*a325d9c4SApple OSS Distributions 
74*a325d9c4SApple OSS Distributions #include <sys/appleapiopts.h>
75*a325d9c4SApple OSS Distributions 
76*a325d9c4SApple OSS Distributions 
77*a325d9c4SApple OSS Distributions #ifdef KERNEL
78*a325d9c4SApple OSS Distributions /*
79*a325d9c4SApple OSS Distributions  * flags to malloc
80*a325d9c4SApple OSS Distributions  */
81*a325d9c4SApple OSS Distributions #define M_WAITOK        0x0000
82*a325d9c4SApple OSS Distributions #define M_NOWAIT        0x0001
83*a325d9c4SApple OSS Distributions #define M_ZERO          0x0004          /* bzero the allocation */
84*a325d9c4SApple OSS Distributions #define M_NULL          0x0008          /* return NULL if space is unavailable*/
85*a325d9c4SApple OSS Distributions 
86*a325d9c4SApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
87*a325d9c4SApple OSS Distributions 
88*a325d9c4SApple OSS Distributions #include <mach/vm_types.h>
89*a325d9c4SApple OSS Distributions #include <kern/kalloc.h>
90*a325d9c4SApple OSS Distributions 
91*a325d9c4SApple OSS Distributions ZONE_VIEW_DECLARE(ZV_NAMEI);
92*a325d9c4SApple OSS Distributions 
93*a325d9c4SApple OSS Distributions /*
94*a325d9c4SApple OSS Distributions  * Types of memory to be allocated (not all are used by us)
95*a325d9c4SApple OSS Distributions  */
96*a325d9c4SApple OSS Distributions #define M_DEVBUF        2       /* device driver memory */
97*a325d9c4SApple OSS Distributions #define M_PCB           4       /* protocol control block */
98*a325d9c4SApple OSS Distributions #define M_RTABLE        5       /* routing tables */
99*a325d9c4SApple OSS Distributions #define M_IFADDR        9       /* interface address */
100*a325d9c4SApple OSS Distributions #define M_SONAME        11      /* socket name */
101*a325d9c4SApple OSS Distributions #define M_PGRP          17      /* process group header */
102*a325d9c4SApple OSS Distributions #define M_FHANDLE       21      /* network file handle */
103*a325d9c4SApple OSS Distributions #define M_NFSNODE       24      /* NFS vnode private part */
104*a325d9c4SApple OSS Distributions #define M_VNODE         25      /* Dynamically allocated vnodes */
105*a325d9c4SApple OSS Distributions #define M_CACHE         26      /* Dynamically allocated cache entries */
106*a325d9c4SApple OSS Distributions #define M_DQUOT         27      /* UFS quota entries */
107*a325d9c4SApple OSS Distributions #define M_PROC_UUID_POLICY      28      /* proc UUID policy entries */
108*a325d9c4SApple OSS Distributions #define M_SHM           29      /* SVID compatible shared memory segments */
109*a325d9c4SApple OSS Distributions #define M_LOCKF         40      /* Byte-range locking structures */
110*a325d9c4SApple OSS Distributions #define M_PROC          41      /* Proc structures */
111*a325d9c4SApple OSS Distributions #define M_NETADDR       49      /* Export host address structure */
112*a325d9c4SApple OSS Distributions #define M_NFSSVC        50      /* NFS server structure */
113*a325d9c4SApple OSS Distributions #define M_NFSD          52      /* NFS server daemon structure */
114*a325d9c4SApple OSS Distributions #define M_IPMOPTS       53      /* internet multicast options */
115*a325d9c4SApple OSS Distributions #define M_IFMADDR       55      /* link-level multicast address */
116*a325d9c4SApple OSS Distributions #define M_NFSBIO        58      /* NFS client I/O buffers */
117*a325d9c4SApple OSS Distributions #define M_NFSBIGFH      61      /* NFS version 3 file handle */
118*a325d9c4SApple OSS Distributions #define M_TTYS          65      /* allocated tty structures */
119*a325d9c4SApple OSS Distributions #define M_OFILETABL     73      /* Open file descriptor table */
120*a325d9c4SApple OSS Distributions #define M_TEMP          80      /* misc temporary data buffers */
121*a325d9c4SApple OSS Distributions #define M_SECA          81      /* security associations, key management */
122*a325d9c4SApple OSS Distributions #define M_DEVFS         82
123*a325d9c4SApple OSS Distributions #define M_UDFNODE       84      /* UDF inodes */
124*a325d9c4SApple OSS Distributions #define M_UDFMNT        85      /* UDF mount structures */
125*a325d9c4SApple OSS Distributions #define M_KQUEUE        94      /* kqueue system */
126*a325d9c4SApple OSS Distributions #define M_KAUTH         100     /* kauth subsystem */
127*a325d9c4SApple OSS Distributions #define M_DUMMYNET      101     /* dummynet */
128*a325d9c4SApple OSS Distributions #define M_MACTEMP       104     /* MAC framework */
129*a325d9c4SApple OSS Distributions #define M_SBUF          105     /* string buffers */
130*a325d9c4SApple OSS Distributions #define M_SELECT        107     /* per-thread select memory */
131*a325d9c4SApple OSS Distributions #define M_INMFILTER     110     /* IPv4 multicast PCB-layer source filter */
132*a325d9c4SApple OSS Distributions #define M_IN6MFILTER    112     /* IPv6 multicast PCB-layer source filter */
133*a325d9c4SApple OSS Distributions #define M_IP6MOPTS      113     /* IPv6 multicast options */
134*a325d9c4SApple OSS Distributions #define M_IP6CGA        117
135*a325d9c4SApple OSS Distributions #define M_NECP          118     /* General NECP policy data */
136*a325d9c4SApple OSS Distributions #define M_FD_VN_DATA    122     /* Per fd vnode data */
137*a325d9c4SApple OSS Distributions #define M_FD_DIRBUF     123     /* Directory entries' buffer */
138*a325d9c4SApple OSS Distributions #define M_EVENTHANDLER  125     /* Eventhandler */
139*a325d9c4SApple OSS Distributions #define M_LLTABLE       126     /* Link layer table */
140*a325d9c4SApple OSS Distributions #define M_NWKWQ         127     /* Network work queue */
141*a325d9c4SApple OSS Distributions #define M_CFIL          128     /* Content Filter */
142*a325d9c4SApple OSS Distributions #define M_TRACKER       129     /* Tracker socket management */
143*a325d9c4SApple OSS Distributions 
144*a325d9c4SApple OSS Distributions #define M_LAST          130     /* Must be last type + 1 */
145*a325d9c4SApple OSS Distributions 
146*a325d9c4SApple OSS Distributions #define MALLOC(space, cast, size, type, flags)                      \
147*a325d9c4SApple OSS Distributions 	({ VM_ALLOC_SITE_STATIC(0, 0);                              \
148*a325d9c4SApple OSS Distributions 	(space) = (cast)__MALLOC(size, type, flags, &site); })
149*a325d9c4SApple OSS Distributions 
150*a325d9c4SApple OSS Distributions #define REALLOC(space, cast, addr, size, type, flags)               \
151*a325d9c4SApple OSS Distributions 	({ VM_ALLOC_SITE_STATIC(0, 0);                              \
152*a325d9c4SApple OSS Distributions 	(space) = (cast)__REALLOC(addr, size, type, flags, &site); })
153*a325d9c4SApple OSS Distributions 
154*a325d9c4SApple OSS Distributions #define _MALLOC(size, type, flags)                                  \
155*a325d9c4SApple OSS Distributions 	({ VM_ALLOC_SITE_STATIC(0, 0);                              \
156*a325d9c4SApple OSS Distributions 	__MALLOC(size, type, flags, &site); })
157*a325d9c4SApple OSS Distributions 
158*a325d9c4SApple OSS Distributions #define _REALLOC(addr, size, type, flags)                           \
159*a325d9c4SApple OSS Distributions 	({ VM_ALLOC_SITE_STATIC(0, 0);                              \
160*a325d9c4SApple OSS Distributions 	__REALLOC(addr, size, type, flags, &site); })
161*a325d9c4SApple OSS Distributions 
162*a325d9c4SApple OSS Distributions #define _FREE(addr, type)                                           \
163*a325d9c4SApple OSS Distributions 	(kheap_free_addr)(KHEAP_DEFAULT, addr)
164*a325d9c4SApple OSS Distributions 
165*a325d9c4SApple OSS Distributions #define FREE(addr, type)                                            \
166*a325d9c4SApple OSS Distributions 	kheap_free_addr(KHEAP_DEFAULT, addr)
167*a325d9c4SApple OSS Distributions 
168*a325d9c4SApple OSS Distributions #pragma GCC visibility push(hidden)
169*a325d9c4SApple OSS Distributions 
170*a325d9c4SApple OSS Distributions extern void     *__MALLOC(
171*a325d9c4SApple OSS Distributions 	size_t                size,
172*a325d9c4SApple OSS Distributions 	int                   type,
173*a325d9c4SApple OSS Distributions 	int                   flags,
174*a325d9c4SApple OSS Distributions 	vm_allocation_site_t *site)  __attribute__((alloc_size(1)));
175*a325d9c4SApple OSS Distributions 
176*a325d9c4SApple OSS Distributions extern void     *__REALLOC(
177*a325d9c4SApple OSS Distributions 	void                 *addr,
178*a325d9c4SApple OSS Distributions 	size_t                size,
179*a325d9c4SApple OSS Distributions 	int                   type,
180*a325d9c4SApple OSS Distributions 	int                   flags,
181*a325d9c4SApple OSS Distributions 	vm_allocation_site_t *site)  __attribute__((alloc_size(2)));
182*a325d9c4SApple OSS Distributions 
183*a325d9c4SApple OSS Distributions #pragma GCC visibility pop
184*a325d9c4SApple OSS Distributions #else /* XNU_KERNEL_PRIVATE */
185*a325d9c4SApple OSS Distributions 
186*a325d9c4SApple OSS Distributions #define M_PCB           4       /* protocol control block (smb) */
187*a325d9c4SApple OSS Distributions #define M_RTABLE        5       /* routing tables */
188*a325d9c4SApple OSS Distributions #define M_IFADDR        9       /* interface address (IOFireWireIP)*/
189*a325d9c4SApple OSS Distributions #define M_SONAME        11      /* socket name (smb) */
190*a325d9c4SApple OSS Distributions #define M_LOCKF         40      /* Byte-range locking structures (msdos) */
191*a325d9c4SApple OSS Distributions #define M_TEMP          80      /* misc temporary data buffers */
192*a325d9c4SApple OSS Distributions #define M_UDFNODE       84      /* UDF inodes (udf)*/
193*a325d9c4SApple OSS Distributions #define M_UDFMNT        85      /* UDF mount structures (udf)*/
194*a325d9c4SApple OSS Distributions #define M_KAUTH         100     /* kauth subsystem (smb) */
195*a325d9c4SApple OSS Distributions 
196*a325d9c4SApple OSS Distributions #define MALLOC(space, cast, size, type, flags) \
197*a325d9c4SApple OSS Distributions 	(space) = (cast)_MALLOC(size, type, flags)
198*a325d9c4SApple OSS Distributions 
199*a325d9c4SApple OSS Distributions #define FREE(addr, type) \
200*a325d9c4SApple OSS Distributions 	_FREE((void *)addr, type)
201*a325d9c4SApple OSS Distributions 
202*a325d9c4SApple OSS Distributions #define MALLOC_ZONE(space, cast, size, type, flags) \
203*a325d9c4SApple OSS Distributions 	(space) = (cast)_MALLOC_ZONE(size, type, flags)
204*a325d9c4SApple OSS Distributions 
205*a325d9c4SApple OSS Distributions #define FREE_ZONE(addr, size, type) \
206*a325d9c4SApple OSS Distributions 	_FREE_ZONE((void *)addr, size, type)
207*a325d9c4SApple OSS Distributions 
208*a325d9c4SApple OSS Distributions extern void     *_MALLOC(
209*a325d9c4SApple OSS Distributions 	size_t          size,
210*a325d9c4SApple OSS Distributions 	int             type,
211*a325d9c4SApple OSS Distributions 	int             flags);
212*a325d9c4SApple OSS Distributions 
213*a325d9c4SApple OSS Distributions extern void     _FREE(
214*a325d9c4SApple OSS Distributions 	void            *addr,
215*a325d9c4SApple OSS Distributions 	int             type);
216*a325d9c4SApple OSS Distributions 
217*a325d9c4SApple OSS Distributions extern void     *_MALLOC_ZONE(
218*a325d9c4SApple OSS Distributions 	size_t          size,
219*a325d9c4SApple OSS Distributions 	int             type,
220*a325d9c4SApple OSS Distributions 	int             flags);
221*a325d9c4SApple OSS Distributions 
222*a325d9c4SApple OSS Distributions extern void     _FREE_ZONE(
223*a325d9c4SApple OSS Distributions 	void            *elem,
224*a325d9c4SApple OSS Distributions 	size_t          size,
225*a325d9c4SApple OSS Distributions 	int             type);
226*a325d9c4SApple OSS Distributions 
227*a325d9c4SApple OSS Distributions #endif /* !XNU_KERNEL_PRIVATE */
228*a325d9c4SApple OSS Distributions 
229*a325d9c4SApple OSS Distributions #endif  /* KERNEL */
230*a325d9c4SApple OSS Distributions 
231*a325d9c4SApple OSS Distributions #endif  /* _SYS_MALLOC_H_ */
232