xref: /freebsd/lib/libc/stdlib/malloc/jemalloc/include/jemalloc/internal/jemalloc_preamble.h (revision c43cad87172039ccf38172129c79755ea79e6102)
1 #ifndef JEMALLOC_PREAMBLE_H
2 #define JEMALLOC_PREAMBLE_H
3 
4 #include "jemalloc_internal_defs.h"
5 #include "jemalloc/internal/jemalloc_internal_decls.h"
6 
7 #if defined(JEMALLOC_UTRACE) || defined(JEMALLOC_UTRACE_LABEL)
8 #include <sys/ktrace.h>
9 #  if defined(JEMALLOC_UTRACE)
10 #    define UTRACE_CALL(p, l) utrace(p, l)
11 #  else
12 #    define UTRACE_CALL(p, l) utrace("jemalloc_process", p, l)
13 #    define JEMALLOC_UTRACE
14 #  endif
15 #endif
16 
17 #ifndef JEMALLOC_PRIVATE_NAMESPACE
18 #include "un-namespace.h"
19 #include "libc_private.h"
20 #endif
21 
22 #define JEMALLOC_NO_DEMANGLE
23 #ifdef JEMALLOC_JET
24 #  undef JEMALLOC_IS_MALLOC
25 #  define JEMALLOC_N(n) jet_##n
26 #  include "jemalloc/internal/public_namespace.h"
27 #  define JEMALLOC_NO_RENAME
28 #  include "../jemalloc.h"
29 #  undef JEMALLOC_NO_RENAME
30 #else
31 #  define JEMALLOC_N(n) __je_##n
32 #  include "../jemalloc.h"
33 #endif
34 
35 #if defined(JEMALLOC_OSATOMIC)
36 #include <libkern/OSAtomic.h>
37 #endif
38 
39 #ifdef JEMALLOC_ZONE
40 #include <mach/mach_error.h>
41 #include <mach/mach_init.h>
42 #include <mach/vm_map.h>
43 #endif
44 
45 #include "jemalloc/internal/jemalloc_internal_macros.h"
46 
47 /*
48  * Note that the ordering matters here; the hook itself is name-mangled.  We
49  * want the inclusion of hooks to happen early, so that we hook as much as
50  * possible.
51  */
52 #ifndef JEMALLOC_NO_PRIVATE_NAMESPACE
53 #  ifndef JEMALLOC_JET
54 #    include "jemalloc/internal/private_namespace.h"
55 #  else
56 #    include "jemalloc/internal/private_namespace_jet.h"
57 #  endif
58 #endif
59 #include "jemalloc/internal/test_hooks.h"
60 
61 #ifdef JEMALLOC_DEFINE_MADVISE_FREE
62 #  define JEMALLOC_MADV_FREE 8
63 #endif
64 
65 static const bool config_debug =
66 #ifdef JEMALLOC_DEBUG
67     true
68 #else
69     false
70 #endif
71     ;
72 static const bool have_dss =
73 #ifdef JEMALLOC_DSS
74     true
75 #else
76     false
77 #endif
78     ;
79 static const bool have_madvise_huge =
80 #ifdef JEMALLOC_HAVE_MADVISE_HUGE
81     true
82 #else
83     false
84 #endif
85     ;
86 static const bool config_fill =
87 #ifdef JEMALLOC_FILL
88     true
89 #else
90     false
91 #endif
92     ;
93 static const bool config_lazy_lock = true;
94 static const char * const config_malloc_conf = JEMALLOC_CONFIG_MALLOC_CONF;
95 static const bool config_prof =
96 #ifdef JEMALLOC_PROF
97     true
98 #else
99     false
100 #endif
101     ;
102 static const bool config_prof_libgcc =
103 #ifdef JEMALLOC_PROF_LIBGCC
104     true
105 #else
106     false
107 #endif
108     ;
109 static const bool config_prof_libunwind =
110 #ifdef JEMALLOC_PROF_LIBUNWIND
111     true
112 #else
113     false
114 #endif
115     ;
116 static const bool maps_coalesce =
117 #ifdef JEMALLOC_MAPS_COALESCE
118     true
119 #else
120     false
121 #endif
122     ;
123 static const bool config_stats =
124 #ifdef JEMALLOC_STATS
125     true
126 #else
127     false
128 #endif
129     ;
130 static const bool config_tls =
131 #ifdef JEMALLOC_TLS
132     true
133 #else
134     false
135 #endif
136     ;
137 static const bool config_utrace =
138 #ifdef JEMALLOC_UTRACE
139     true
140 #else
141     false
142 #endif
143     ;
144 static const bool config_xmalloc =
145 #ifdef JEMALLOC_XMALLOC
146     true
147 #else
148     false
149 #endif
150     ;
151 static const bool config_cache_oblivious =
152 #ifdef JEMALLOC_CACHE_OBLIVIOUS
153     true
154 #else
155     false
156 #endif
157     ;
158 /*
159  * Undocumented, for jemalloc development use only at the moment.  See the note
160  * in jemalloc/internal/log.h.
161  */
162 static const bool config_log =
163 #ifdef JEMALLOC_LOG
164     true
165 #else
166     false
167 #endif
168     ;
169 /*
170  * Are extra safety checks enabled; things like checking the size of sized
171  * deallocations, double-frees, etc.
172  */
173 static const bool config_opt_safety_checks =
174 #ifdef JEMALLOC_OPT_SAFETY_CHECKS
175     true
176 #elif defined(JEMALLOC_DEBUG)
177     /*
178      * This lets us only guard safety checks by one flag instead of two; fast
179      * checks can guard solely by config_opt_safety_checks and run in debug mode
180      * too.
181      */
182     true
183 #else
184     false
185 #endif
186     ;
187 
188 /*
189  * Extra debugging of sized deallocations too onerous to be included in the
190  * general safety checks.
191  */
192 static const bool config_opt_size_checks =
193 #if defined(JEMALLOC_OPT_SIZE_CHECKS) || defined(JEMALLOC_DEBUG)
194     true
195 #else
196     false
197 #endif
198     ;
199 
200 static const bool config_uaf_detection =
201 #if defined(JEMALLOC_UAF_DETECTION) || defined(JEMALLOC_DEBUG)
202     true
203 #else
204     false
205 #endif
206     ;
207 
208 /* Whether or not the C++ extensions are enabled. */
209 static const bool config_enable_cxx =
210 #ifdef JEMALLOC_ENABLE_CXX
211     true
212 #else
213     false
214 #endif
215 ;
216 
217 #if defined(_WIN32) || defined(JEMALLOC_HAVE_SCHED_GETCPU)
218 /* Currently percpu_arena depends on sched_getcpu. */
219 #define JEMALLOC_PERCPU_ARENA
220 #endif
221 static const bool have_percpu_arena =
222 #ifdef JEMALLOC_PERCPU_ARENA
223     true
224 #else
225     false
226 #endif
227     ;
228 /*
229  * Undocumented, and not recommended; the application should take full
230  * responsibility for tracking provenance.
231  */
232 static const bool force_ivsalloc =
233 #ifdef JEMALLOC_FORCE_IVSALLOC
234     true
235 #else
236     false
237 #endif
238     ;
239 static const bool have_background_thread =
240 #ifdef JEMALLOC_BACKGROUND_THREAD
241     true
242 #else
243     false
244 #endif
245     ;
246 static const bool config_high_res_timer =
247 #ifdef JEMALLOC_HAVE_CLOCK_REALTIME
248     true
249 #else
250     false
251 #endif
252     ;
253 
254 static const bool have_memcntl =
255 #ifdef JEMALLOC_HAVE_MEMCNTL
256     true
257 #else
258     false
259 #endif
260     ;
261 
262 #endif /* JEMALLOC_PREAMBLE_H */
263