1234370Sjasone/******************************************************************************/
2234370Sjasone#ifdef JEMALLOC_H_TYPES
3234370Sjasone
4234370Sjasone/*
5234370Sjasone * Size and alignment of memory chunks that are allocated by the OS's virtual
6234370Sjasone * memory system.
7234370Sjasone */
8286866Sjasone#define	LG_CHUNK_DEFAULT	21
9234370Sjasone
10234370Sjasone/* Return the chunk address for allocation address a. */
11234370Sjasone#define	CHUNK_ADDR2BASE(a)						\
12234370Sjasone	((void *)((uintptr_t)(a) & ~chunksize_mask))
13234370Sjasone
14234370Sjasone/* Return the chunk offset of address a. */
15234370Sjasone#define	CHUNK_ADDR2OFFSET(a)						\
16234370Sjasone	((size_t)((uintptr_t)(a) & chunksize_mask))
17234370Sjasone
18234370Sjasone/* Return the smallest chunk multiple that is >= s. */
19234370Sjasone#define	CHUNK_CEILING(s)						\
20234370Sjasone	(((s) + chunksize_mask) & ~chunksize_mask)
21234370Sjasone
22286866Sjasone#define	CHUNK_HOOKS_INITIALIZER {					\
23286866Sjasone    NULL,								\
24286866Sjasone    NULL,								\
25286866Sjasone    NULL,								\
26286866Sjasone    NULL,								\
27286866Sjasone    NULL,								\
28286866Sjasone    NULL,								\
29286866Sjasone    NULL								\
30286866Sjasone}
31286866Sjasone
32234370Sjasone#endif /* JEMALLOC_H_TYPES */
33234370Sjasone/******************************************************************************/
34234370Sjasone#ifdef JEMALLOC_H_STRUCTS
35234370Sjasone
36234370Sjasone#endif /* JEMALLOC_H_STRUCTS */
37234370Sjasone/******************************************************************************/
38234370Sjasone#ifdef JEMALLOC_H_EXTERNS
39234370Sjasone
40234370Sjasoneextern size_t		opt_lg_chunk;
41242844Sjasoneextern const char	*opt_dss;
42234370Sjasone
43286866Sjasoneextern rtree_t		chunks_rtree;
44234370Sjasone
45234370Sjasoneextern size_t		chunksize;
46234370Sjasoneextern size_t		chunksize_mask; /* (chunksize - 1). */
47234370Sjasoneextern size_t		chunk_npages;
48234370Sjasone
49286866Sjasoneextern const chunk_hooks_t	chunk_hooks_default;
50286866Sjasone
51299587Sjasonechunk_hooks_t	chunk_hooks_get(tsdn_t *tsdn, arena_t *arena);
52299587Sjasonechunk_hooks_t	chunk_hooks_set(tsdn_t *tsdn, arena_t *arena,
53286866Sjasone    const chunk_hooks_t *chunk_hooks);
54286866Sjasone
55299587Sjasonebool	chunk_register(tsdn_t *tsdn, const void *chunk,
56299587Sjasone    const extent_node_t *node);
57286866Sjasonevoid	chunk_deregister(const void *chunk, const extent_node_t *node);
58286866Sjasonevoid	*chunk_alloc_base(size_t size);
59299587Sjasonevoid	*chunk_alloc_cache(tsdn_t *tsdn, arena_t *arena,
60299587Sjasone    chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment,
61299587Sjasone    bool *zero, bool dalloc_node);
62299587Sjasonevoid	*chunk_alloc_wrapper(tsdn_t *tsdn, arena_t *arena,
63299587Sjasone    chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment,
64299587Sjasone    bool *zero, bool *commit);
65299587Sjasonevoid	chunk_dalloc_cache(tsdn_t *tsdn, arena_t *arena,
66299587Sjasone    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool committed);
67299587Sjasonevoid	chunk_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena,
68299587Sjasone    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool zeroed,
69299587Sjasone    bool committed);
70299587Sjasonebool	chunk_purge_wrapper(tsdn_t *tsdn, arena_t *arena,
71299587Sjasone    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t offset,
72286866Sjasone    size_t length);
73234569Sjasonebool	chunk_boot(void);
74299587Sjasonevoid	chunk_prefork(tsdn_t *tsdn);
75299587Sjasonevoid	chunk_postfork_parent(tsdn_t *tsdn);
76299587Sjasonevoid	chunk_postfork_child(tsdn_t *tsdn);
77234370Sjasone
78234370Sjasone#endif /* JEMALLOC_H_EXTERNS */
79234370Sjasone/******************************************************************************/
80234370Sjasone#ifdef JEMALLOC_H_INLINES
81234370Sjasone
82286866Sjasone#ifndef JEMALLOC_ENABLE_INLINE
83286866Sjasoneextent_node_t	*chunk_lookup(const void *chunk, bool dependent);
84286866Sjasone#endif
85286866Sjasone
86286866Sjasone#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_CHUNK_C_))
87286866SjasoneJEMALLOC_INLINE extent_node_t *
88286866Sjasonechunk_lookup(const void *ptr, bool dependent)
89286866Sjasone{
90286866Sjasone
91286866Sjasone	return (rtree_get(&chunks_rtree, (uintptr_t)ptr, dependent));
92286866Sjasone}
93286866Sjasone#endif
94286866Sjasone
95234370Sjasone#endif /* JEMALLOC_H_INLINES */
96234370Sjasone/******************************************************************************/
97234370Sjasone
98234370Sjasone#include "jemalloc/internal/chunk_dss.h"
99234370Sjasone#include "jemalloc/internal/chunk_mmap.h"
100