1/******************************************************************************/
2#ifdef JEMALLOC_H_TYPES
3
4/*
5 * Size and alignment of memory chunks that are allocated by the OS's virtual
6 * memory system.
7 */
8#ifdef ANDROID_LG_CHUNK_DEFAULT
9#define	LG_CHUNK_DEFAULT	ANDROID_LG_CHUNK_DEFAULT
10#else
11#define	LG_CHUNK_DEFAULT	21
12#endif
13
14/* Return the chunk address for allocation address a. */
15#define	CHUNK_ADDR2BASE(a)						\
16	((void *)((uintptr_t)(a) & ~chunksize_mask))
17
18/* Return the chunk offset of address a. */
19#define	CHUNK_ADDR2OFFSET(a)						\
20	((size_t)((uintptr_t)(a) & chunksize_mask))
21
22/* Return the smallest chunk multiple that is >= s. */
23#define	CHUNK_CEILING(s)						\
24	(((s) + chunksize_mask) & ~chunksize_mask)
25
26#define	CHUNK_HOOKS_INITIALIZER {					\
27    NULL,								\
28    NULL,								\
29    NULL,								\
30    NULL,								\
31    NULL,								\
32    NULL,								\
33    NULL								\
34}
35
36#endif /* JEMALLOC_H_TYPES */
37/******************************************************************************/
38#ifdef JEMALLOC_H_STRUCTS
39
40#endif /* JEMALLOC_H_STRUCTS */
41/******************************************************************************/
42#ifdef JEMALLOC_H_EXTERNS
43
44extern size_t		opt_lg_chunk;
45extern const char	*opt_dss;
46
47extern rtree_t		chunks_rtree;
48
49extern size_t		chunksize;
50extern size_t		chunksize_mask; /* (chunksize - 1). */
51extern size_t		chunk_npages;
52
53extern const chunk_hooks_t	chunk_hooks_default;
54
55chunk_hooks_t	chunk_hooks_get(arena_t *arena);
56chunk_hooks_t	chunk_hooks_set(arena_t *arena,
57    const chunk_hooks_t *chunk_hooks);
58
59bool	chunk_register(const void *chunk, const extent_node_t *node);
60void	chunk_deregister(const void *chunk, const extent_node_t *node);
61void	*chunk_alloc_base(size_t size);
62void	*chunk_alloc_cache(arena_t *arena, chunk_hooks_t *chunk_hooks,
63    void *new_addr, size_t size, size_t alignment, bool *zero,
64    bool dalloc_node);
65void	*chunk_alloc_wrapper(arena_t *arena, chunk_hooks_t *chunk_hooks,
66    void *new_addr, size_t size, size_t alignment, bool *zero, bool *commit);
67void	chunk_dalloc_cache(arena_t *arena, chunk_hooks_t *chunk_hooks,
68    void *chunk, size_t size, bool committed);
69void	chunk_dalloc_wrapper(arena_t *arena, chunk_hooks_t *chunk_hooks,
70    void *chunk, size_t size, bool zeroed, bool committed);
71bool	chunk_purge_wrapper(arena_t *arena, chunk_hooks_t *chunk_hooks,
72    void *chunk, size_t size, size_t offset, size_t length);
73bool	chunk_boot(void);
74void	chunk_prefork(void);
75void	chunk_postfork_parent(void);
76void	chunk_postfork_child(void);
77
78#endif /* JEMALLOC_H_EXTERNS */
79/******************************************************************************/
80#ifdef JEMALLOC_H_INLINES
81
82#ifndef JEMALLOC_ENABLE_INLINE
83extent_node_t	*chunk_lookup(const void *chunk, bool dependent);
84#endif
85
86#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_CHUNK_C_))
87JEMALLOC_INLINE extent_node_t *
88chunk_lookup(const void *ptr, bool dependent)
89{
90
91	return (rtree_get(&chunks_rtree, (uintptr_t)ptr, dependent));
92}
93#endif
94
95#endif /* JEMALLOC_H_INLINES */
96/******************************************************************************/
97
98#include "jemalloc/internal/chunk_dss.h"
99#include "jemalloc/internal/chunk_mmap.h"
100