1 /*
2 Copyright (c) 2001 Wolfram Gloger
3 Copyright (c) 2006 Cavium networks
4 
5 Permission to use, copy, modify, distribute, and sell this software
6 and its documentation for any purpose is hereby granted without fee,
7 provided that (i) the above copyright notices and this permission
8 notice appear in all copies of the software and related documentation,
9 and (ii) the name of Wolfram Gloger may not be used in any advertising
10 or publicity relating to the software.
11 
12 THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
13 EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
14 WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
15 
16 IN NO EVENT SHALL WOLFRAM GLOGER BE LIABLE FOR ANY SPECIAL,
17 INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
18 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19 WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY
20 OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21 PERFORMANCE OF THIS SOFTWARE.
22 */
23 
24 #ifndef _MALLOC_H
25 #define _MALLOC_H 1
26 
27 #undef _LIBC
28 #ifdef _LIBC
29 #include <features.h>
30 #endif
31 
32 /*
33   $Id: malloc.h 30481 2007-12-05 21:46:59Z rfranz $
34   `ptmalloc2', a malloc implementation for multiple threads without
35   lock contention, by Wolfram Gloger <[email protected]>.
36 
37   VERSION 2.7.0
38 
39   This work is mainly derived from malloc-2.7.0 by Doug Lea
40   <[email protected]>, which is available from:
41 
42                  ftp://gee.cs.oswego.edu/pub/misc/malloc.c
43 
44   This trimmed-down header file only provides function prototypes and
45   the exported data structures.  For more detailed function
46   descriptions and compile-time options, see the source file
47   `malloc.c'.
48 */
49 
50 #if 0
51 # include <stddef.h>
52 # define __malloc_ptr_t  void *
53 # undef  size_t
54 # define size_t          unsigned long
55 # undef  ptrdiff_t
56 # define ptrdiff_t       long
57 #else
58 # undef  Void_t
59 # define Void_t       void
60 # define __malloc_ptr_t  char *
61 #endif
62 
63 #ifdef _LIBC
64 /* Used by GNU libc internals. */
65 # define __malloc_size_t size_t
66 # define __malloc_ptrdiff_t ptrdiff_t
67 #elif !defined __attribute_malloc__
68 # define __attribute_malloc__
69 #endif
70 
71 #ifdef __GNUC__
72 
73 /* GCC can always grok prototypes.  For C++ programs we add throw()
74    to help it optimize the function calls.  But this works only with
75    gcc 2.8.x and egcs.  */
76 # if defined __cplusplus && (__GNUC__ >= 3 || __GNUC_MINOR__ >= 8)
77 #  define __THROW	throw ()
78 # else
79 #  define __THROW
80 # endif
81 # define __MALLOC_P(args)	args __THROW
82 /* This macro will be used for functions which might take C++ callback
83    functions.  */
84 # define __MALLOC_PMT(args)	args
85 
86 #else	/* Not GCC.  */
87 
88 # define __THROW
89 
90 # if (defined __STDC__ && __STDC__) || defined __cplusplus
91 
92 #  define __MALLOC_P(args)	args
93 #  define __MALLOC_PMT(args)	args
94 
95 # else	/* Not ANSI C or C++.  */
96 
97 #  define __MALLOC_P(args)	()	/* No prototypes.  */
98 #  define __MALLOC_PMT(args)	()
99 
100 # endif	/* ANSI C or C++.  */
101 
102 #endif	/* GCC.  */
103 
104 #ifndef NULL
105 # ifdef __cplusplus
106 #  define NULL	0
107 # else
108 #  define NULL	((__malloc_ptr_t) 0)
109 # endif
110 #endif
111 
112 #ifdef __cplusplus
113 extern "C" {
114 #endif
115 
116 /* Nonzero if the malloc is already initialized.  */
117 #ifdef _LIBC
118 /* In the GNU libc we rename the global variable
119    `__malloc_initialized' to `__libc_malloc_initialized'.  */
120 # define __malloc_initialized __libc_malloc_initialized
121 #endif
122 extern int cvmx__malloc_initialized;
123 
124 
125 /* SVID2/XPG mallinfo structure */
126 
127 struct mallinfo {
128   int arena;    /* non-mmapped space allocated from system */
129   int ordblks;  /* number of free chunks */
130   int smblks;   /* number of fastbin blocks */
131   int hblks;    /* number of mmapped regions */
132   int hblkhd;   /* space in mmapped regions */
133   int usmblks;  /* maximum total allocated space */
134   int fsmblks;  /* space available in freed fastbin blocks */
135   int uordblks; /* total allocated space */
136   int fordblks; /* total free space */
137   int keepcost; /* top-most, releasable (via malloc_trim) space */
138 };
139 
140 /* Returns a copy of the updated current mallinfo. */
141 extern struct mallinfo mallinfo __MALLOC_P ((void));
142 
143 /* SVID2/XPG mallopt options */
144 #ifndef M_MXFAST
145 # define M_MXFAST  1	/* maximum request size for "fastbins" */
146 #endif
147 #ifndef M_NLBLKS
148 # define M_NLBLKS  2	/* UNUSED in this malloc */
149 #endif
150 #ifndef M_GRAIN
151 # define M_GRAIN   3	/* UNUSED in this malloc */
152 #endif
153 #ifndef M_KEEP
154 # define M_KEEP    4	/* UNUSED in this malloc */
155 #endif
156 
157 /* mallopt options that actually do something */
158 #define M_TRIM_THRESHOLD    -1
159 #define M_TOP_PAD           -2
160 #define M_MMAP_THRESHOLD    -3
161 #define M_MMAP_MAX          -4
162 #define M_CHECK_ACTION      -5
163 
164 /* General SVID/XPG interface to tunable parameters. */
165 extern int mallopt __MALLOC_P ((int __param, int __val));
166 
167 /* Release all but __pad bytes of freed top-most memory back to the
168    system. Return 1 if successful, else 0. */
169 extern int malloc_trim __MALLOC_P ((size_t __pad));
170 
171 /* Report the number of usable allocated bytes associated with allocated
172    chunk __ptr. */
173 extern size_t malloc_usable_size __MALLOC_P ((__malloc_ptr_t __ptr));
174 
175 /* Prints brief summary statistics on stderr. */
176 extern void malloc_stats __MALLOC_P ((void));
177 
178 /* Record the state of all malloc variables in an opaque data structure. */
179 extern __malloc_ptr_t malloc_get_state __MALLOC_P ((void));
180 
181 /* Restore the state of all malloc variables from data obtained with
182    malloc_get_state(). */
183 extern int malloc_set_state __MALLOC_P ((__malloc_ptr_t __ptr));
184 
185 /* Called once when malloc is initialized; redefining this variable in
186    the application provides the preferred way to set up the hook
187    pointers. */
188 extern void (*cmvx__malloc_initialize_hook) __MALLOC_PMT ((void));
189 /* Hooks for debugging and user-defined versions. */
190 extern void (*cvmx__free_hook) __MALLOC_PMT ((__malloc_ptr_t __ptr,
191 					__const __malloc_ptr_t));
192 extern __malloc_ptr_t (*cvmx__malloc_hook) __MALLOC_PMT ((size_t __size,
193 						    __const __malloc_ptr_t));
194 extern __malloc_ptr_t (*cvmx__realloc_hook) __MALLOC_PMT ((__malloc_ptr_t __ptr,
195 						     size_t __size,
196 						     __const __malloc_ptr_t));
197 extern __malloc_ptr_t (*cvmx__memalign_hook) __MALLOC_PMT ((size_t __alignment,
198 						      size_t __size,
199 						      __const __malloc_ptr_t));
200 extern void (*__after_morecore_hook) __MALLOC_PMT ((void));
201 
202 /* Activate a standard set of debugging hooks. */
203 extern void cvmx__malloc_check_init __MALLOC_P ((void));
204 
205 /* Internal routines, operating on "arenas".  */
206 struct malloc_state;
207 typedef struct malloc_state *mstate;
208 #ifdef __cplusplus
209 }; /* end of extern "C" */
210 #endif
211 
212 
213 #endif /* malloc.h */
214