1*c87b03e5Sespie /* malloc.h -- Public #include File (module.h template V1.0) 2*c87b03e5Sespie Copyright (C) 1995 Free Software Foundation, Inc. 3*c87b03e5Sespie Contributed by James Craig Burley. 4*c87b03e5Sespie 5*c87b03e5Sespie This file is part of GNU Fortran. 6*c87b03e5Sespie 7*c87b03e5Sespie GNU Fortran is free software; you can redistribute it and/or modify 8*c87b03e5Sespie it under the terms of the GNU General Public License as published by 9*c87b03e5Sespie the Free Software Foundation; either version 2, or (at your option) 10*c87b03e5Sespie any later version. 11*c87b03e5Sespie 12*c87b03e5Sespie GNU Fortran is distributed in the hope that it will be useful, 13*c87b03e5Sespie but WITHOUT ANY WARRANTY; without even the implied warranty of 14*c87b03e5Sespie MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*c87b03e5Sespie GNU General Public License for more details. 16*c87b03e5Sespie 17*c87b03e5Sespie You should have received a copy of the GNU General Public License 18*c87b03e5Sespie along with GNU Fortran; see the file COPYING. If not, write to 19*c87b03e5Sespie the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 20*c87b03e5Sespie 02111-1307, USA. 21*c87b03e5Sespie 22*c87b03e5Sespie Owning Modules: 23*c87b03e5Sespie malloc.c 24*c87b03e5Sespie 25*c87b03e5Sespie Modifications: 26*c87b03e5Sespie */ 27*c87b03e5Sespie 28*c87b03e5Sespie /* Allow multiple inclusion to work. */ 29*c87b03e5Sespie 30*c87b03e5Sespie #ifndef GCC_F_MALLOC_H 31*c87b03e5Sespie #define GCC_F_MALLOC_H 32*c87b03e5Sespie 33*c87b03e5Sespie #ifndef MALLOC_DEBUG 34*c87b03e5Sespie #define MALLOC_DEBUG 0 /* 1 means check caller's use of this module. */ 35*c87b03e5Sespie #endif 36*c87b03e5Sespie 37*c87b03e5Sespie /* Simple definitions and enumerations. */ 38*c87b03e5Sespie 39*c87b03e5Sespie typedef enum 40*c87b03e5Sespie { 41*c87b03e5Sespie MALLOC_typeKS_, 42*c87b03e5Sespie MALLOC_typeKSR_, 43*c87b03e5Sespie MALLOC_typeKP_, 44*c87b03e5Sespie MALLOC_typeKPR_, 45*c87b03e5Sespie MALLOC_typeUS_, 46*c87b03e5Sespie MALLOC_typeUSR_, 47*c87b03e5Sespie MALLOC_type_ 48*c87b03e5Sespie } mallocType_; 49*c87b03e5Sespie 50*c87b03e5Sespie /* Typedefs. */ 51*c87b03e5Sespie 52*c87b03e5Sespie typedef struct _malloc_area_ *mallocArea_; 53*c87b03e5Sespie typedef struct _malloc_pool_ *mallocPool; 54*c87b03e5Sespie typedef unsigned long int mallocSize; 55*c87b03e5Sespie #define mallocSize_f "l" 56*c87b03e5Sespie 57*c87b03e5Sespie /* Include files needed by this one. */ 58*c87b03e5Sespie 59*c87b03e5Sespie 60*c87b03e5Sespie /* Structure definitions. */ 61*c87b03e5Sespie 62*c87b03e5Sespie struct _malloc_area_ 63*c87b03e5Sespie { 64*c87b03e5Sespie mallocArea_ next; 65*c87b03e5Sespie mallocArea_ previous; 66*c87b03e5Sespie void *where; 67*c87b03e5Sespie #if MALLOC_DEBUG 68*c87b03e5Sespie mallocSize size; 69*c87b03e5Sespie mallocType_ type; 70*c87b03e5Sespie #endif 71*c87b03e5Sespie char name[1]; 72*c87b03e5Sespie }; 73*c87b03e5Sespie 74*c87b03e5Sespie struct _malloc_pool_ 75*c87b03e5Sespie { 76*c87b03e5Sespie mallocPool next; 77*c87b03e5Sespie mallocPool previous; 78*c87b03e5Sespie mallocPool eldest; 79*c87b03e5Sespie mallocPool youngest; 80*c87b03e5Sespie mallocArea_ first; 81*c87b03e5Sespie mallocArea_ last; 82*c87b03e5Sespie unsigned long uses; 83*c87b03e5Sespie #if MALLOC_DEBUG 84*c87b03e5Sespie mallocSize allocated; 85*c87b03e5Sespie mallocSize freed; 86*c87b03e5Sespie mallocSize old_sizes; 87*c87b03e5Sespie mallocSize new_sizes; 88*c87b03e5Sespie unsigned long allocations; 89*c87b03e5Sespie unsigned long frees; 90*c87b03e5Sespie unsigned long resizes; 91*c87b03e5Sespie #endif 92*c87b03e5Sespie char name[1]; 93*c87b03e5Sespie }; 94*c87b03e5Sespie 95*c87b03e5Sespie struct _malloc_root_ 96*c87b03e5Sespie { 97*c87b03e5Sespie struct _malloc_pool_ malloc_pool_image_; 98*c87b03e5Sespie }; 99*c87b03e5Sespie 100*c87b03e5Sespie /* Global objects accessed by users of this module. */ 101*c87b03e5Sespie 102*c87b03e5Sespie extern struct _malloc_root_ malloc_root_; 103*c87b03e5Sespie 104*c87b03e5Sespie /* Declare functions with prototypes. */ 105*c87b03e5Sespie 106*c87b03e5Sespie void malloc_display_ (mallocArea_ a); 107*c87b03e5Sespie mallocArea_ malloc_find_inpool_ (mallocPool pool, void *ptr); 108*c87b03e5Sespie void malloc_init (void); 109*c87b03e5Sespie void malloc_kill_inpool_ (mallocPool pool, mallocType_ type, void *ptr, 110*c87b03e5Sespie mallocSize size); 111*c87b03e5Sespie void *malloc_new_ (mallocSize size); 112*c87b03e5Sespie void *malloc_new_inpool_ (mallocPool pool, mallocType_ type, const char *name, 113*c87b03e5Sespie mallocSize size); 114*c87b03e5Sespie void *malloc_new_zinpool_ (mallocPool pool, mallocType_ type, const char *name, 115*c87b03e5Sespie mallocSize size, int z); 116*c87b03e5Sespie void malloc_pool_display (mallocPool p); 117*c87b03e5Sespie char malloc_pool_find_ (mallocPool p, mallocPool parent); 118*c87b03e5Sespie void malloc_pool_kill (mallocPool p); 119*c87b03e5Sespie mallocPool malloc_pool_new (const char *name, mallocPool parent, unsigned long chunks); 120*c87b03e5Sespie mallocPool malloc_pool_use (mallocPool p); 121*c87b03e5Sespie void *malloc_resize_ (void *ptr, mallocSize new_size); 122*c87b03e5Sespie void *malloc_resize_inpool_ (mallocPool pool, mallocType_ type, void *ptr, 123*c87b03e5Sespie mallocSize new_size, mallocSize old_size); 124*c87b03e5Sespie void malloc_verify_inpool_ (mallocPool pool, mallocType_ type, void *ptr, 125*c87b03e5Sespie mallocSize size); 126*c87b03e5Sespie 127*c87b03e5Sespie /* Define macros. */ 128*c87b03e5Sespie 129*c87b03e5Sespie #define malloc_new_ks(pool,name,size) \ 130*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeKS_,name,size) 131*c87b03e5Sespie #define malloc_new_ksr(pool,name,size) \ 132*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeKSR_,name,size) 133*c87b03e5Sespie #define malloc_new_kp(pool,name,size) \ 134*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeKP_,name,size) 135*c87b03e5Sespie #define malloc_new_kpr(pool,name,size) \ 136*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeKPR_,name,size) 137*c87b03e5Sespie #define malloc_new_us(pool,name,size) \ 138*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeUS_,name,size) 139*c87b03e5Sespie #define malloc_new_usr(pool,name,size) \ 140*c87b03e5Sespie malloc_new_inpool_ (pool,MALLOC_typeUSR_,name,size) 141*c87b03e5Sespie #define malloc_new_zks(pool,name,size,z) \ 142*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeKS_,name,size,z) 143*c87b03e5Sespie #define malloc_new_zksr(pool,name,size,z) \ 144*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeKSR_,name,size,z) 145*c87b03e5Sespie #define malloc_new_zkp(pool,name,size,z) \ 146*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeKP_,name,size,z) 147*c87b03e5Sespie #define malloc_new_zkpr(pool,name,size,z) \ 148*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeKPR_,name,size,z) 149*c87b03e5Sespie #define malloc_new_zus(pool,name,size,z) \ 150*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeUS_,name,size,z) 151*c87b03e5Sespie #define malloc_new_zusr(pool,name,size,z) \ 152*c87b03e5Sespie malloc_new_zinpool_ (pool,MALLOC_typeUSR_,name,size,z) 153*c87b03e5Sespie #define malloc_kill_ks(pool,ptr,size) \ 154*c87b03e5Sespie malloc_kill_inpool_ (pool,MALLOC_typeKS_,ptr,size) 155*c87b03e5Sespie #define malloc_kill_ksr(pool,ptr,size) \ 156*c87b03e5Sespie malloc_kill_inpool_ (pool,MALLOC_typeKSR_,ptr,size) 157*c87b03e5Sespie #define malloc_kill_us(pool,ptr) \ 158*c87b03e5Sespie malloc_kill_inpool_ (pool,MALLOC_typeUS_,ptr,0) 159*c87b03e5Sespie #define malloc_kill_usr(pool,ptr) \ 160*c87b03e5Sespie malloc_kill_inpool_ (pool,MALLOC_typeUSR_,ptr,0) 161*c87b03e5Sespie #define malloc_pool_image() (&malloc_root_.malloc_pool_image_) 162*c87b03e5Sespie #define malloc_resize_ksr(pool,ptr,new_size,old_size) \ 163*c87b03e5Sespie malloc_resize_inpool_ (pool,MALLOC_typeKSR_,ptr,new_size,old_size) 164*c87b03e5Sespie #define malloc_resize_kpr(pool,ptr,new_size,old_size) \ 165*c87b03e5Sespie malloc_resize_inpool_ (pool,MALLOC_typeKPR_,ptr,new_size,old_size) 166*c87b03e5Sespie #define malloc_resize_usr(pool,ptr,new_size) \ 167*c87b03e5Sespie malloc_resize_inpool_ (pool,MALLOC_typeUSR_,ptr,new_size,0) 168*c87b03e5Sespie #define malloc_verify_kp(pool,name,size) \ 169*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeKP_,name,size) 170*c87b03e5Sespie #define malloc_verify_kpr(pool,name,size) \ 171*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeKPR_,name,size) 172*c87b03e5Sespie #define malloc_verify_ks(pool,ptr,size) \ 173*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeKS_,ptr,size) 174*c87b03e5Sespie #define malloc_verify_ksr(pool,ptr,size) \ 175*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeKSR_,ptr,size) 176*c87b03e5Sespie #define malloc_verify_us(pool,ptr) \ 177*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeUS_,ptr,0) 178*c87b03e5Sespie #define malloc_verify_usr(pool,ptr) \ 179*c87b03e5Sespie malloc_verify_inpool_ (pool,MALLOC_typeUSR_,ptr,0) 180*c87b03e5Sespie 181*c87b03e5Sespie /* End of #include file. */ 182*c87b03e5Sespie 183*c87b03e5Sespie #endif /* ! GCC_F_MALLOC_H */ 184