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