1*b30d1939SAndy Fiddaman /***********************************************************************
2*b30d1939SAndy Fiddaman *                                                                      *
3*b30d1939SAndy Fiddaman *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2012 AT&T Intellectual Property          *
5*b30d1939SAndy Fiddaman *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
7*b30d1939SAndy Fiddaman *                    by AT&T Intellectual Property                     *
8*b30d1939SAndy Fiddaman *                                                                      *
9*b30d1939SAndy Fiddaman *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12*b30d1939SAndy Fiddaman *                                                                      *
13*b30d1939SAndy Fiddaman *              Information and Software Systems Research               *
14*b30d1939SAndy Fiddaman *                            AT&T Research                             *
15*b30d1939SAndy Fiddaman *                           Florham Park NJ                            *
16*b30d1939SAndy Fiddaman *                                                                      *
17*b30d1939SAndy Fiddaman *                 Glenn Fowler <gsf@research.att.com>                  *
18*b30d1939SAndy Fiddaman *                  David Korn <dgk@research.att.com>                   *
19*b30d1939SAndy Fiddaman *                   Phong Vo <kpv@research.att.com>                    *
20*b30d1939SAndy Fiddaman *                                                                      *
21*b30d1939SAndy Fiddaman ***********************************************************************/
22*b30d1939SAndy Fiddaman #ifndef _VMALLOC_H
23*b30d1939SAndy Fiddaman #define _VMALLOC_H	1
24*b30d1939SAndy Fiddaman 
25*b30d1939SAndy Fiddaman /*	Public header file for the virtual malloc package.
26*b30d1939SAndy Fiddaman **
27*b30d1939SAndy Fiddaman **	Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/1994.
28*b30d1939SAndy Fiddaman */
29*b30d1939SAndy Fiddaman 
30*b30d1939SAndy Fiddaman #define VMALLOC_VERSION	20110808L
31*b30d1939SAndy Fiddaman 
32*b30d1939SAndy Fiddaman #if _PACKAGE_ast
33*b30d1939SAndy Fiddaman #include	<ast_std.h>
34*b30d1939SAndy Fiddaman #else
35*b30d1939SAndy Fiddaman #include	<ast_common.h>
36*b30d1939SAndy Fiddaman #endif
37*b30d1939SAndy Fiddaman 
38*b30d1939SAndy Fiddaman typedef struct _vmalloc_s	Vmalloc_t;
39*b30d1939SAndy Fiddaman typedef struct _vmstat_s	Vmstat_t;
40*b30d1939SAndy Fiddaman typedef struct _vmdisc_s	Vmdisc_t;
41*b30d1939SAndy Fiddaman typedef struct _vmethod_s	Vmethod_t;
42*b30d1939SAndy Fiddaman typedef struct _vmdata_s	Vmdata_t;
43*b30d1939SAndy Fiddaman typedef Void_t*	(*Vmemory_f)_ARG_((Vmalloc_t*, Void_t*, size_t, size_t, Vmdisc_t*));
44*b30d1939SAndy Fiddaman typedef int	(*Vmexcept_f)_ARG_((Vmalloc_t*, int, Void_t*, Vmdisc_t*));
45*b30d1939SAndy Fiddaman 
46*b30d1939SAndy Fiddaman struct _vmstat_s
47*b30d1939SAndy Fiddaman {	int	n_busy;			/* number of busy blocks	*/
48*b30d1939SAndy Fiddaman 	int	n_free;			/* number of free blocks	*/
49*b30d1939SAndy Fiddaman 	size_t	s_busy;			/* total amount of busy space	*/
50*b30d1939SAndy Fiddaman 	size_t	s_free;			/* total amount of free space	*/
51*b30d1939SAndy Fiddaman 	size_t	m_busy;			/* largest busy piece		*/
52*b30d1939SAndy Fiddaman 	size_t	m_free;			/* largest free piece		*/
53*b30d1939SAndy Fiddaman 	int	n_seg;			/* number of segments		*/
54*b30d1939SAndy Fiddaman 	size_t	extent;			/* total size of region		*/
55*b30d1939SAndy Fiddaman 	int	n_region;		/* #parallel regions (Vmregion)	*/
56*b30d1939SAndy Fiddaman 	int	n_open;			/* #calls that finds open reg	*/
57*b30d1939SAndy Fiddaman 	int	n_lock;			/* #calls where reg was locked	*/
58*b30d1939SAndy Fiddaman 	int	n_probe;		/* #probes to find a region	*/
59*b30d1939SAndy Fiddaman 	int	mode;			/* region mode bits		*/
60*b30d1939SAndy Fiddaman };
61*b30d1939SAndy Fiddaman 
62*b30d1939SAndy Fiddaman struct _vmdisc_s
63*b30d1939SAndy Fiddaman {	Vmemory_f	memoryf;	/* memory manipulator		*/
64*b30d1939SAndy Fiddaman 	Vmexcept_f	exceptf;	/* exception handler		*/
65*b30d1939SAndy Fiddaman 	size_t		round;		/* rounding requirement		*/
66*b30d1939SAndy Fiddaman 	size_t		size;		/* actual size of discipline	*/
67*b30d1939SAndy Fiddaman };
68*b30d1939SAndy Fiddaman 
69*b30d1939SAndy Fiddaman struct _vmethod_s
70*b30d1939SAndy Fiddaman {	Void_t*		(*allocf)_ARG_((Vmalloc_t*,size_t,int));
71*b30d1939SAndy Fiddaman 	Void_t*		(*resizef)_ARG_((Vmalloc_t*,Void_t*,size_t,int,int));
72*b30d1939SAndy Fiddaman 	int		(*freef)_ARG_((Vmalloc_t*,Void_t*,int));
73*b30d1939SAndy Fiddaman 	long		(*addrf)_ARG_((Vmalloc_t*,Void_t*,int));
74*b30d1939SAndy Fiddaman 	long		(*sizef)_ARG_((Vmalloc_t*,Void_t*,int));
75*b30d1939SAndy Fiddaman 	int		(*compactf)_ARG_((Vmalloc_t*,int));
76*b30d1939SAndy Fiddaman 	Void_t*		(*alignf)_ARG_((Vmalloc_t*,size_t,size_t,int));
77*b30d1939SAndy Fiddaman 	unsigned short	meth;
78*b30d1939SAndy Fiddaman };
79*b30d1939SAndy Fiddaman 
80*b30d1939SAndy Fiddaman struct _vmalloc_s
81*b30d1939SAndy Fiddaman {	Vmethod_t	meth;		/* method for allocation	*/
82*b30d1939SAndy Fiddaman 	char*		file;		/* file name			*/
83*b30d1939SAndy Fiddaman 	int		line;		/* line number			*/
84*b30d1939SAndy Fiddaman 	char*		func;		/* calling function		*/
85*b30d1939SAndy Fiddaman 	Vmdisc_t*	disc;		/* discipline to get space	*/
86*b30d1939SAndy Fiddaman 	Vmdata_t*	data;		/* the real region data		*/
87*b30d1939SAndy Fiddaman 	Vmalloc_t*	next;		/* linked list of regions	*/
88*b30d1939SAndy Fiddaman };
89*b30d1939SAndy Fiddaman 
90*b30d1939SAndy Fiddaman #define VM_TRUST	0000000		/* obsolete			*/
91*b30d1939SAndy Fiddaman #define VM_TRACE	0000001		/* generate traces of calls	*/
92*b30d1939SAndy Fiddaman #define VM_DBCHECK	0000002		/* check for boundary overwrite	*/
93*b30d1939SAndy Fiddaman #define VM_DBABORT	0000004		/* abort on any warning		*/
94*b30d1939SAndy Fiddaman #define VM_SHARE	0000010		/* sharable across processes	*/
95*b30d1939SAndy Fiddaman #define VM_MEMORYF	0000020		/* vm was allocated by memoryf	*/
96*b30d1939SAndy Fiddaman #define VM_FLAGS	0000017		/* user-settable flags		*/
97*b30d1939SAndy Fiddaman 
98*b30d1939SAndy Fiddaman #define VM_MTBEST	0000100		/* Vmbest method		*/
99*b30d1939SAndy Fiddaman #define VM_MTPOOL	0000200		/* Vmpool method		*/
100*b30d1939SAndy Fiddaman #define VM_MTLAST	0000400		/* Vmlast method		*/
101*b30d1939SAndy Fiddaman #define VM_MTDEBUG	0001000		/* Vmdebug method		*/
102*b30d1939SAndy Fiddaman #define VM_MTPROFILE	0002000		/* Vmdebug method		*/
103*b30d1939SAndy Fiddaman #define VM_METHODS	0003700		/* available allocation methods	*/
104*b30d1939SAndy Fiddaman 
105*b30d1939SAndy Fiddaman #define VM_RSCOPY	0000001		/* copy old contents		*/
106*b30d1939SAndy Fiddaman #define VM_RSMOVE	0000002		/* old contents is moveable	*/
107*b30d1939SAndy Fiddaman #define VM_RSZERO	0000004		/* clear new space		*/
108*b30d1939SAndy Fiddaman 
109*b30d1939SAndy Fiddaman /* exception types */
110*b30d1939SAndy Fiddaman #define VM_OPEN		1		/* region being opened		*/
111*b30d1939SAndy Fiddaman #define VM_ENDOPEN	2		/* end of region opening	*/
112*b30d1939SAndy Fiddaman #define VM_CLOSE	3		/* announce being closed	*/
113*b30d1939SAndy Fiddaman #define VM_ENDCLOSE	4		/* end of region closing	*/
114*b30d1939SAndy Fiddaman #define VM_DISC		5		/* discipline being changed	*/
115*b30d1939SAndy Fiddaman #define VM_NOMEM	6		/* can't obtain memory		*/
116*b30d1939SAndy Fiddaman #define VM_BADADDR	(-1)		/* currently a no-op		*/
117*b30d1939SAndy Fiddaman 
118*b30d1939SAndy Fiddaman /* for application-specific data in shared/persistent regions */
119*b30d1939SAndy Fiddaman #define VM_MMGET	0		/* get data value (void*)	*/
120*b30d1939SAndy Fiddaman #define VM_MMSET	1		/* set data value (void*)	*/
121*b30d1939SAndy Fiddaman #define VM_MMADD	2		/* add data value (long)	*/
122*b30d1939SAndy Fiddaman 
123*b30d1939SAndy Fiddaman _BEGIN_EXTERNS_	 /* public data */
124*b30d1939SAndy Fiddaman #if _BLD_vmalloc && defined(__EXPORT__)
125*b30d1939SAndy Fiddaman #define extern	extern __EXPORT__
126*b30d1939SAndy Fiddaman #endif
127*b30d1939SAndy Fiddaman #if !_BLD_vmalloc && defined(__IMPORT__)
128*b30d1939SAndy Fiddaman #define extern	extern __IMPORT__
129*b30d1939SAndy Fiddaman #endif
130*b30d1939SAndy Fiddaman 
131*b30d1939SAndy Fiddaman extern Vmethod_t*	Vmbest;		/* best allocation		*/
132*b30d1939SAndy Fiddaman extern Vmethod_t*	Vmlast;		/* last-block allocation	*/
133*b30d1939SAndy Fiddaman extern Vmethod_t*	Vmpool;		/* pool allocation		*/
134*b30d1939SAndy Fiddaman extern Vmethod_t*	Vmdebug;	/* allocation with debugging	*/
135*b30d1939SAndy Fiddaman extern Vmethod_t*	Vmprofile;	/* profiling memory usage	*/
136*b30d1939SAndy Fiddaman 
137*b30d1939SAndy Fiddaman extern Vmdisc_t*	Vmdcsystem;	/* get memory from the OS	*/
138*b30d1939SAndy Fiddaman extern Vmdisc_t*	Vmdcheap;	/* get memory from Vmheap	*/
139*b30d1939SAndy Fiddaman extern Vmdisc_t*	Vmdcsbrk;	/* like Vmdcsystem - legacy use	*/
140*b30d1939SAndy Fiddaman 
141*b30d1939SAndy Fiddaman extern Vmalloc_t	_Vmheap;	/* heap region - use with care! */
142*b30d1939SAndy Fiddaman extern Vmalloc_t*	Vmheap;		/* = &_Vmheap - safe to use	*/
143*b30d1939SAndy Fiddaman extern Vmalloc_t*	Vmregion;	/* malloc region		*/
144*b30d1939SAndy Fiddaman 
145*b30d1939SAndy Fiddaman #undef extern
146*b30d1939SAndy Fiddaman _END_EXTERNS_
147*b30d1939SAndy Fiddaman 
148*b30d1939SAndy Fiddaman _BEGIN_EXTERNS_ /* public functions */
149*b30d1939SAndy Fiddaman #if _BLD_vmalloc && defined(__EXPORT__)
150*b30d1939SAndy Fiddaman #define extern	__EXPORT__
151*b30d1939SAndy Fiddaman #endif
152*b30d1939SAndy Fiddaman 
153*b30d1939SAndy Fiddaman extern Vmalloc_t*	vmopen _ARG_(( Vmdisc_t*, Vmethod_t*, int ));
154*b30d1939SAndy Fiddaman extern int		vmclose _ARG_(( Vmalloc_t* ));
155*b30d1939SAndy Fiddaman extern int		vmclear _ARG_(( Vmalloc_t* ));
156*b30d1939SAndy Fiddaman extern int		vmcompact _ARG_(( Vmalloc_t* ));
157*b30d1939SAndy Fiddaman 
158*b30d1939SAndy Fiddaman extern Vmdisc_t*	vmdisc _ARG_(( Vmalloc_t*, Vmdisc_t* ));
159*b30d1939SAndy Fiddaman 
160*b30d1939SAndy Fiddaman extern Vmalloc_t*	vmmopen _ARG_(( char*, int, ssize_t ));
161*b30d1939SAndy Fiddaman extern Void_t*		vmmvalue _ARG_(( Vmalloc_t*, int, Void_t*, int ));
162*b30d1939SAndy Fiddaman extern void		vmmrelease _ARG_(( Vmalloc_t*, int ));
163*b30d1939SAndy Fiddaman extern Void_t*		vmmaddress _ARG_(( size_t ));
164*b30d1939SAndy Fiddaman 
165*b30d1939SAndy Fiddaman extern Void_t*		vmalloc _ARG_(( Vmalloc_t*, size_t ));
166*b30d1939SAndy Fiddaman extern Void_t*		vmalign _ARG_(( Vmalloc_t*, size_t, size_t ));
167*b30d1939SAndy Fiddaman extern Void_t*		vmresize _ARG_(( Vmalloc_t*, Void_t*, size_t, int ));
168*b30d1939SAndy Fiddaman extern Void_t*		vmgetmem _ARG_(( Vmalloc_t*, Void_t*, size_t ));
169*b30d1939SAndy Fiddaman extern int		vmfree _ARG_(( Vmalloc_t*, Void_t* ));
170*b30d1939SAndy Fiddaman 
171*b30d1939SAndy Fiddaman extern long		vmaddr _ARG_(( Vmalloc_t*, Void_t* ));
172*b30d1939SAndy Fiddaman extern long		vmsize _ARG_(( Vmalloc_t*, Void_t* ));
173*b30d1939SAndy Fiddaman 
174*b30d1939SAndy Fiddaman extern Vmalloc_t*	vmregion _ARG_(( Void_t* ));
175*b30d1939SAndy Fiddaman extern Void_t*		vmsegment _ARG_(( Vmalloc_t*, Void_t* ));
176*b30d1939SAndy Fiddaman extern int		vmset _ARG_(( Vmalloc_t*, int, int ));
177*b30d1939SAndy Fiddaman 
178*b30d1939SAndy Fiddaman extern Void_t*		vmdbwatch _ARG_(( Void_t* ));
179*b30d1939SAndy Fiddaman extern int		vmdbcheck _ARG_(( Vmalloc_t* ));
180*b30d1939SAndy Fiddaman extern int		vmdebug _ARG_(( int ));
181*b30d1939SAndy Fiddaman 
182*b30d1939SAndy Fiddaman extern int		vmprofile _ARG_(( Vmalloc_t*, int ));
183*b30d1939SAndy Fiddaman 
184*b30d1939SAndy Fiddaman extern int		vmtrace _ARG_(( int ));
185*b30d1939SAndy Fiddaman extern int		vmtrbusy _ARG_((Vmalloc_t*));
186*b30d1939SAndy Fiddaman 
187*b30d1939SAndy Fiddaman extern int		vmstat _ARG_((Vmalloc_t*, Vmstat_t*));
188*b30d1939SAndy Fiddaman 
189*b30d1939SAndy Fiddaman extern int		vmwalk _ARG_((Vmalloc_t*,
190*b30d1939SAndy Fiddaman 					int(*)(Vmalloc_t*,Void_t*,size_t,Vmdisc_t*,Void_t*), Void_t*));
191*b30d1939SAndy Fiddaman extern char*		vmstrdup _ARG_((Vmalloc_t*, const char*));
192*b30d1939SAndy Fiddaman 
193*b30d1939SAndy Fiddaman #if !defined(_BLD_vmalloc) && !defined(_AST_STD_H) && \
194*b30d1939SAndy Fiddaman 	!defined(__stdlib_h) && !defined(__STDLIB_H) && \
195*b30d1939SAndy Fiddaman 	!defined(_STDLIB_INCLUDED) && !defined(_INC_STDLIB)
196*b30d1939SAndy Fiddaman extern Void_t*		malloc _ARG_(( size_t ));
197*b30d1939SAndy Fiddaman extern Void_t*		realloc _ARG_(( Void_t*, size_t ));
198*b30d1939SAndy Fiddaman extern void		free _ARG_(( Void_t* ));
199*b30d1939SAndy Fiddaman extern void		cfree _ARG_(( Void_t* ));
200*b30d1939SAndy Fiddaman extern Void_t*		calloc _ARG_(( size_t, size_t ));
201*b30d1939SAndy Fiddaman extern Void_t*		memalign _ARG_(( size_t, size_t ));
202*b30d1939SAndy Fiddaman extern Void_t*		valloc _ARG_(( size_t ));
203*b30d1939SAndy Fiddaman #endif
204*b30d1939SAndy Fiddaman extern int		setregmax _ARG_(( int ));
205*b30d1939SAndy Fiddaman 
206*b30d1939SAndy Fiddaman #undef extern
207*b30d1939SAndy Fiddaman _END_EXTERNS_
208*b30d1939SAndy Fiddaman 
209*b30d1939SAndy Fiddaman /* to coerce any value to a Vmalloc_t*, make ANSI happy */
210*b30d1939SAndy Fiddaman #define _VM_(vm)	((Vmalloc_t*)(vm))
211*b30d1939SAndy Fiddaman 
212*b30d1939SAndy Fiddaman /* enable recording of where a call originates from */
213*b30d1939SAndy Fiddaman #ifdef VMFL
214*b30d1939SAndy Fiddaman 
215*b30d1939SAndy Fiddaman #if defined(__FILE__)
216*b30d1939SAndy Fiddaman #define _VMFILE_(vm)	(_VM_(vm)->file = (char*)__FILE__)
217*b30d1939SAndy Fiddaman #else
218*b30d1939SAndy Fiddaman #define _VMFILE_(vm)	(_VM_(vm)->file = (char*)0)
219*b30d1939SAndy Fiddaman #endif
220*b30d1939SAndy Fiddaman 
221*b30d1939SAndy Fiddaman #if defined(__LINE__)
222*b30d1939SAndy Fiddaman #define _VMLINE_(vm)	(_VM_(vm)->line = __LINE__)
223*b30d1939SAndy Fiddaman #else
224*b30d1939SAndy Fiddaman #define _VMLINE_(vm)	(_VM_(vm)->line = 0)
225*b30d1939SAndy Fiddaman #endif
226*b30d1939SAndy Fiddaman 
227*b30d1939SAndy Fiddaman #if defined(__FUNCTION__)
228*b30d1939SAndy Fiddaman #define _VMFUNC_(vm)	(_VM_(vm)->func = (char*)__FUNCTION__)
229*b30d1939SAndy Fiddaman #else
230*b30d1939SAndy Fiddaman #define _VMFUNC_(vm)	(_VM_(vm)->func = (char*)0)
231*b30d1939SAndy Fiddaman #endif
232*b30d1939SAndy Fiddaman 
233*b30d1939SAndy Fiddaman #define _VMFL_(vm)	(_VMFILE_(vm), _VMLINE_(vm), _VMFUNC_(vm))
234*b30d1939SAndy Fiddaman 
235*b30d1939SAndy Fiddaman #define vmalloc(vm,sz)		(_VMFL_(vm), \
236*b30d1939SAndy Fiddaman 				 (*(_VM_(vm)->meth.allocf))((vm),(sz),0) )
237*b30d1939SAndy Fiddaman #define vmresize(vm,d,sz,type)	(_VMFL_(vm), \
238*b30d1939SAndy Fiddaman 				 (*(_VM_(vm)->meth.resizef))\
239*b30d1939SAndy Fiddaman 					((vm),(Void_t*)(d),(sz),(type),0) )
240*b30d1939SAndy Fiddaman #define vmfree(vm,d)		(_VMFL_(vm), \
241*b30d1939SAndy Fiddaman 				 (*(_VM_(vm)->meth.freef))((vm),(Void_t*)(d),0) )
242*b30d1939SAndy Fiddaman #define vmalign(vm,sz,align)	(_VMFL_(vm), \
243*b30d1939SAndy Fiddaman 				 (*(_VM_(vm)->meth.alignf))((vm),(sz),(align),0) )
244*b30d1939SAndy Fiddaman 
245*b30d1939SAndy Fiddaman #undef malloc
246*b30d1939SAndy Fiddaman #undef realloc
247*b30d1939SAndy Fiddaman #undef calloc
248*b30d1939SAndy Fiddaman #undef free
249*b30d1939SAndy Fiddaman #undef memalign
250*b30d1939SAndy Fiddaman #undef valloc
251*b30d1939SAndy Fiddaman 
252*b30d1939SAndy Fiddaman #if _map_malloc
253*b30d1939SAndy Fiddaman 
254*b30d1939SAndy Fiddaman #define malloc(s)		(_VMFL_(Vmregion), _ast_malloc((size_t)(s)) )
255*b30d1939SAndy Fiddaman #define realloc(d,s)		(_VMFL_(Vmregion), _ast_realloc((Void_t*)(d),(size_t)(s)) )
256*b30d1939SAndy Fiddaman #define calloc(n,s)		(_VMFL_(Vmregion), _ast_calloc((size_t)n, (size_t)(s)) )
257*b30d1939SAndy Fiddaman #define free(d)			(_VMFL_(Vmregion), _ast_free((Void_t*)(d)) )
258*b30d1939SAndy Fiddaman #define memalign(a,s)		(_VMFL_(Vmregion), _ast_memalign((size_t)(a),(size_t)(s)) )
259*b30d1939SAndy Fiddaman #define valloc(s)		(_VMFL_(Vmregion), _ast_valloc((size_t)(s) )
260*b30d1939SAndy Fiddaman 
261*b30d1939SAndy Fiddaman #else
262*b30d1939SAndy Fiddaman 
263*b30d1939SAndy Fiddaman #if !_std_malloc
264*b30d1939SAndy Fiddaman 
265*b30d1939SAndy Fiddaman #if __STD_C || defined(__STDPP__) || defined(__GNUC__)
266*b30d1939SAndy Fiddaman 
267*b30d1939SAndy Fiddaman #define malloc(s)		(_VMFL_(Vmregion), malloc((size_t)(s)) )
268*b30d1939SAndy Fiddaman #define realloc(d,s)		(_VMFL_(Vmregion), realloc((Void_t*)(d),(size_t)(s)) )
269*b30d1939SAndy Fiddaman #define calloc(n,s)		(_VMFL_(Vmregion), calloc((size_t)n, (size_t)(s)) )
270*b30d1939SAndy Fiddaman #define free(d)			(_VMFL_(Vmregion), free((Void_t*)(d)) )
271*b30d1939SAndy Fiddaman #define memalign(a,s)		(_VMFL_(Vmregion), memalign((size_t)(a),(size_t)(s)) )
272*b30d1939SAndy Fiddaman #define valloc(s)		(_VMFL_(Vmregion), valloc((size_t)(s) )
273*b30d1939SAndy Fiddaman #ifndef strdup
274*b30d1939SAndy Fiddaman #define strdup(s)		( _VMFL_(Vmregion), (strdup)((char*)(s)) )
275*b30d1939SAndy Fiddaman #endif
276*b30d1939SAndy Fiddaman 
277*b30d1939SAndy Fiddaman #else
278*b30d1939SAndy Fiddaman 
279*b30d1939SAndy Fiddaman #define _VMNM_(a,b,c,d,e,f)	a/**/b/**/c/**/d/**/e/**/f
280*b30d1939SAndy Fiddaman #define malloc(s)		(_VMFL_(Vmregion), _VMNM_(mallo,/,*,*,/,c)\
281*b30d1939SAndy Fiddaman 						((size_t)(s)) )
282*b30d1939SAndy Fiddaman #define realloc(d,s)		(_VMFL_(Vmregion), _VMNM_(reallo,/,*,*,/,c)\
283*b30d1939SAndy Fiddaman 						((Void_t*)(d),(size_t)(s)) )
284*b30d1939SAndy Fiddaman #define calloc(n,s)		(_VMFL_(Vmregion), _VMNM_(callo,/,*,*,/,c)\
285*b30d1939SAndy Fiddaman 						((size_t)n, (size_t)(s)) )
286*b30d1939SAndy Fiddaman #define free(d)			(_VMFL_(Vmregion), _VMNM_(fre,/,*,*,/,e)((Void_t*)(d)) )
287*b30d1939SAndy Fiddaman #define memalign(a,s)		(_VMFL_(Vmregion), _VMNM_(memalig,/,*,*,/,n)\
288*b30d1939SAndy Fiddaman 						((size_t)(a),(size_t)(s)) )
289*b30d1939SAndy Fiddaman #define valloc(s)		(_VMFL_(Vmregion), _VMNM_(vallo,/,*,*,/,c)\
290*b30d1939SAndy Fiddaman 						((size_t)(s) )
291*b30d1939SAndy Fiddaman #ifndef strdup
292*b30d1939SAndy Fiddaman #define strdup(s)		( _VMFL_(Vmregion), _VMNM_(strdu,/,*,*,/,p)\
293*b30d1939SAndy Fiddaman 						((char*)(s)) )
294*b30d1939SAndy Fiddaman #endif
295*b30d1939SAndy Fiddaman 
296*b30d1939SAndy Fiddaman #endif /*__STD_C || defined(__STDPP__) || defined(__GNUC__)*/
297*b30d1939SAndy Fiddaman 
298*b30d1939SAndy Fiddaman #define cfree(d)		free(d)
299*b30d1939SAndy Fiddaman 
300*b30d1939SAndy Fiddaman #endif /*!_std_malloc*/
301*b30d1939SAndy Fiddaman 
302*b30d1939SAndy Fiddaman #endif /*_map_malloc*/
303*b30d1939SAndy Fiddaman 
304*b30d1939SAndy Fiddaman #endif /*VMFL*/
305*b30d1939SAndy Fiddaman 
306*b30d1939SAndy Fiddaman /* non-debugging/profiling allocation calls */
307*b30d1939SAndy Fiddaman #ifndef vmalloc
308*b30d1939SAndy Fiddaman #define vmalloc(vm,sz)		(*(_VM_(vm)->meth.allocf))((vm),(sz),0)
309*b30d1939SAndy Fiddaman #endif
310*b30d1939SAndy Fiddaman 
311*b30d1939SAndy Fiddaman #ifndef vmresize
312*b30d1939SAndy Fiddaman #define vmresize(vm,d,sz,type)	(*(_VM_(vm)->meth.resizef))\
313*b30d1939SAndy Fiddaman 					((vm),(Void_t*)(d),(sz),(type),0)
314*b30d1939SAndy Fiddaman #endif
315*b30d1939SAndy Fiddaman 
316*b30d1939SAndy Fiddaman #ifndef vmfree
317*b30d1939SAndy Fiddaman #define vmfree(vm,d)		(*(_VM_(vm)->meth.freef))((vm),(Void_t*)(d),0)
318*b30d1939SAndy Fiddaman #endif
319*b30d1939SAndy Fiddaman 
320*b30d1939SAndy Fiddaman #ifndef vmalign
321*b30d1939SAndy Fiddaman #define vmalign(vm,sz,align)	(*(_VM_(vm)->meth.alignf))((vm),(sz),(align),0)
322*b30d1939SAndy Fiddaman #endif
323*b30d1939SAndy Fiddaman 
324*b30d1939SAndy Fiddaman #define vmaddr(vm,addr)		(*(_VM_(vm)->meth.addrf))((vm),(Void_t*)(addr),0)
325*b30d1939SAndy Fiddaman #define vmsize(vm,addr)		(*(_VM_(vm)->meth.sizef))((vm),(Void_t*)(addr),0)
326*b30d1939SAndy Fiddaman #define vmcompact(vm)		(*(_VM_(vm)->meth.compactf))((vm),0)
327*b30d1939SAndy Fiddaman #define vmoldof(v,p,t,n,x)	(t*)vmresize((v), (p), sizeof(t)*(n)+(x), \
328*b30d1939SAndy Fiddaman 					(VM_RSMOVE) )
329*b30d1939SAndy Fiddaman #define vmnewof(v,p,t,n,x)	(t*)vmresize((v), (p), sizeof(t)*(n)+(x), \
330*b30d1939SAndy Fiddaman 					(VM_RSMOVE|VM_RSCOPY|VM_RSZERO) )
331*b30d1939SAndy Fiddaman 
332*b30d1939SAndy Fiddaman #define vmdata(vm)		((Void_t*)(_VM_(vm)->data) )
333*b30d1939SAndy Fiddaman #define vmlocked(vm)		(*((unsigned int*)(_VM_(vm)->data)) )
334*b30d1939SAndy Fiddaman 
335*b30d1939SAndy Fiddaman #endif /* _VMALLOC_H */
336