xref: /openbsd/gnu/usr.bin/gcc/gcc/f/malloc.h (revision c87b03e5)
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