1#ifndef JEMALLOC_INTERNAL_EXTERNS_H
2#define JEMALLOC_INTERNAL_EXTERNS_H
3
4#include "jemalloc/internal/atomic.h"
5#include "jemalloc/internal/hpa_opts.h"
6#include "jemalloc/internal/sec_opts.h"
7#include "jemalloc/internal/tsd_types.h"
8#include "jemalloc/internal/nstime.h"
9
10/* TSD checks this to set thread local slow state accordingly. */
11extern bool malloc_slow;
12
13/* Run-time options. */
14extern bool opt_abort;
15extern bool opt_abort_conf;
16extern bool opt_trust_madvise;
17extern bool opt_confirm_conf;
18extern bool opt_hpa;
19extern hpa_shard_opts_t opt_hpa_opts;
20extern sec_opts_t opt_hpa_sec_opts;
21
22extern const char *opt_junk;
23extern bool opt_junk_alloc;
24extern bool opt_junk_free;
25extern void (*junk_free_callback)(void *ptr, size_t size);
26extern void (*junk_alloc_callback)(void *ptr, size_t size);
27extern bool opt_utrace;
28extern bool opt_xmalloc;
29extern bool opt_experimental_infallible_new;
30extern bool opt_zero;
31extern unsigned opt_narenas;
32extern zero_realloc_action_t opt_zero_realloc_action;
33extern malloc_init_t malloc_init_state;
34extern const char *zero_realloc_mode_names[];
35extern atomic_zu_t zero_realloc_count;
36extern bool opt_cache_oblivious;
37extern unsigned opt_debug_double_free_max_scan;
38
39/* Escape free-fastpath when ptr & mask == 0 (for sanitization purpose). */
40extern uintptr_t san_cache_bin_nonfast_mask;
41
42/* Number of CPUs. */
43extern unsigned ncpus;
44
45/* Number of arenas used for automatic multiplexing of threads and arenas. */
46extern unsigned narenas_auto;
47
48/* Base index for manual arenas. */
49extern unsigned manual_arena_base;
50
51/*
52 * Arenas that are used to service external requests. Not all elements of the
53 * arenas array are necessarily used; arenas are created lazily as needed.
54 */
55extern atomic_p_t arenas[];
56
57void *a0malloc(size_t size);
58void a0dalloc(void *ptr);
59void *bootstrap_malloc(size_t size);
60void *bootstrap_calloc(size_t num, size_t size);
61void bootstrap_free(void *ptr);
62void arena_set(unsigned ind, arena_t *arena);
63unsigned narenas_total_get(void);
64arena_t *arena_init(tsdn_t *tsdn, unsigned ind, const arena_config_t *config);
65arena_t *arena_choose_hard(tsd_t *tsd, bool internal);
66void arena_migrate(tsd_t *tsd, arena_t *oldarena, arena_t *newarena);
67void iarena_cleanup(tsd_t *tsd);
68void arena_cleanup(tsd_t *tsd);
69size_t batch_alloc(void **ptrs, size_t num, size_t size, int flags);
70void jemalloc_prefork(void);
71void jemalloc_postfork_parent(void);
72void jemalloc_postfork_child(void);
73void je_sdallocx_noflags(void *ptr, size_t size);
74void *malloc_default(size_t size);
75
76#endif /* JEMALLOC_INTERNAL_EXTERNS_H */
77