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