1234370Sjasone#ifndef JEMALLOC_H_
2234370Sjasone#define	JEMALLOC_H_
3234370Sjasone#ifdef __cplusplus
4234370Sjasoneextern "C" {
5234370Sjasone#endif
6234370Sjasone
7234370Sjasone#include <limits.h>
8234370Sjasone#include <strings.h>
9234370Sjasone
10251300Sjasone#define	JEMALLOC_VERSION "3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775"
11235322Sjasone#define	JEMALLOC_VERSION_MAJOR 3
12251300Sjasone#define	JEMALLOC_VERSION_MINOR 4
13234370Sjasone#define	JEMALLOC_VERSION_BUGFIX 0
14235322Sjasone#define	JEMALLOC_VERSION_NREV 0
15251300Sjasone#define	JEMALLOC_VERSION_GID "0ed518e5dab789ad2171bb38977a8927e2a26775"
16234370Sjasone
17234370Sjasone#include "jemalloc_defs.h"
18234370Sjasone#include "jemalloc_FreeBSD.h"
19234370Sjasone
20234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL
21234370Sjasone#define	ALLOCM_LG_ALIGN(la)	(la)
22234370Sjasone#if LG_SIZEOF_PTR == 2
23234370Sjasone#define	ALLOCM_ALIGN(a)	(ffs(a)-1)
24234370Sjasone#else
25234370Sjasone#define	ALLOCM_ALIGN(a)	((a < (size_t)INT_MAX) ? ffs(a)-1 : ffs(a>>32)+31)
26234370Sjasone#endif
27234370Sjasone#define	ALLOCM_ZERO	((int)0x40)
28234370Sjasone#define	ALLOCM_NO_MOVE	((int)0x80)
29242844Sjasone/* Bias arena index bits so that 0 encodes "ALLOCM_ARENA() unspecified". */
30242844Sjasone#define	ALLOCM_ARENA(a)	((int)(((a)+1) << 8))
31234370Sjasone
32234370Sjasone#define	ALLOCM_SUCCESS		0
33234370Sjasone#define	ALLOCM_ERR_OOM		1
34234370Sjasone#define	ALLOCM_ERR_NOT_MOVED	2
35234370Sjasone#endif
36234370Sjasone
37234370Sjasone/*
38234370Sjasone * The je_ prefix on the following public symbol declarations is an artifact of
39234370Sjasone * namespace management, and should be omitted in application code unless
40234370Sjasone * JEMALLOC_NO_DEMANGLE is defined (see below).
41234370Sjasone */
42235238Sjasoneextern JEMALLOC_EXPORT const char	*je_malloc_conf;
43235238Sjasoneextern JEMALLOC_EXPORT void		(*je_malloc_message)(void *cbopaque,
44235238Sjasone    const char *s);
45234370Sjasone
46235238SjasoneJEMALLOC_EXPORT void	*je_malloc(size_t size) JEMALLOC_ATTR(malloc);
47235238SjasoneJEMALLOC_EXPORT void	*je_calloc(size_t num, size_t size)
48235238Sjasone    JEMALLOC_ATTR(malloc);
49235238SjasoneJEMALLOC_EXPORT int	je_posix_memalign(void **memptr, size_t alignment,
50235238Sjasone    size_t size) JEMALLOC_ATTR(nonnull(1));
51235238SjasoneJEMALLOC_EXPORT void	*je_aligned_alloc(size_t alignment, size_t size)
52235238Sjasone    JEMALLOC_ATTR(malloc);
53235238SjasoneJEMALLOC_EXPORT void	*je_realloc(void *ptr, size_t size);
54235238SjasoneJEMALLOC_EXPORT void	je_free(void *ptr);
55234370Sjasone
56235238Sjasone#ifdef JEMALLOC_OVERRIDE_MEMALIGN
57235238SjasoneJEMALLOC_EXPORT void *	je_memalign(size_t alignment, size_t size)
58235238Sjasone    JEMALLOC_ATTR(malloc);
59235238Sjasone#endif
60235238Sjasone
61235238Sjasone#ifdef JEMALLOC_OVERRIDE_VALLOC
62235238SjasoneJEMALLOC_EXPORT void *	je_valloc(size_t size) JEMALLOC_ATTR(malloc);
63235238Sjasone#endif
64235238Sjasone
65242844SjasoneJEMALLOC_EXPORT size_t	je_malloc_usable_size(
66242844Sjasone    JEMALLOC_USABLE_SIZE_CONST void *ptr);
67235238SjasoneJEMALLOC_EXPORT void	je_malloc_stats_print(void (*write_cb)(void *,
68235238Sjasone    const char *), void *je_cbopaque, const char *opts);
69235238SjasoneJEMALLOC_EXPORT int	je_mallctl(const char *name, void *oldp,
70234370Sjasone    size_t *oldlenp, void *newp, size_t newlen);
71235238SjasoneJEMALLOC_EXPORT int	je_mallctlnametomib(const char *name, size_t *mibp,
72235238Sjasone    size_t *miblenp);
73235238SjasoneJEMALLOC_EXPORT int	je_mallctlbymib(const size_t *mib, size_t miblen,
74235238Sjasone    void *oldp, size_t *oldlenp, void *newp, size_t newlen);
75234370Sjasone
76234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL
77235238SjasoneJEMALLOC_EXPORT int	je_allocm(void **ptr, size_t *rsize, size_t size,
78234370Sjasone    int flags) JEMALLOC_ATTR(nonnull(1));
79235238SjasoneJEMALLOC_EXPORT int	je_rallocm(void **ptr, size_t *rsize, size_t size,
80235238Sjasone    size_t extra, int flags) JEMALLOC_ATTR(nonnull(1));
81235238SjasoneJEMALLOC_EXPORT int	je_sallocm(const void *ptr, size_t *rsize, int flags)
82234370Sjasone    JEMALLOC_ATTR(nonnull(1));
83235238SjasoneJEMALLOC_EXPORT int	je_dallocm(void *ptr, int flags)
84235238Sjasone    JEMALLOC_ATTR(nonnull(1));
85235238SjasoneJEMALLOC_EXPORT int	je_nallocm(size_t *rsize, size_t size, int flags);
86234370Sjasone#endif
87234370Sjasone
88234370Sjasone/*
89234370Sjasone * By default application code must explicitly refer to mangled symbol names,
90234370Sjasone * so that it is possible to use jemalloc in conjunction with another allocator
91234370Sjasone * in the same application.  Define JEMALLOC_MANGLE in order to cause automatic
92234370Sjasone * name mangling that matches the API prefixing that happened as a result of
93234370Sjasone * --with-mangling and/or --with-jemalloc-prefix configuration settings.
94234370Sjasone */
95234370Sjasone#ifdef JEMALLOC_MANGLE
96234370Sjasone#ifndef JEMALLOC_NO_DEMANGLE
97234370Sjasone#define	JEMALLOC_NO_DEMANGLE
98234370Sjasone#endif
99234370Sjasone#define	malloc_conf je_malloc_conf
100234370Sjasone#define	malloc_message je_malloc_message
101234370Sjasone#define	malloc je_malloc
102234370Sjasone#define	calloc je_calloc
103234370Sjasone#define	posix_memalign je_posix_memalign
104234370Sjasone#define	aligned_alloc je_aligned_alloc
105234370Sjasone#define	realloc je_realloc
106234370Sjasone#define	free je_free
107234370Sjasone#define	malloc_usable_size je_malloc_usable_size
108234370Sjasone#define	malloc_stats_print je_malloc_stats_print
109234370Sjasone#define	mallctl je_mallctl
110234370Sjasone#define	mallctlnametomib je_mallctlnametomib
111234370Sjasone#define	mallctlbymib je_mallctlbymib
112234370Sjasone#define	memalign je_memalign
113234370Sjasone#define	valloc je_valloc
114234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL
115234370Sjasone#define	allocm je_allocm
116234370Sjasone#define	rallocm je_rallocm
117234370Sjasone#define	sallocm je_sallocm
118234370Sjasone#define	dallocm je_dallocm
119234370Sjasone#define	nallocm je_nallocm
120234370Sjasone#endif
121234370Sjasone#endif
122234370Sjasone
123234370Sjasone/*
124234370Sjasone * The je_* macros can be used as stable alternative names for the public
125234370Sjasone * jemalloc API if JEMALLOC_NO_DEMANGLE is defined.  This is primarily meant
126234370Sjasone * for use in jemalloc itself, but it can be used by application code to
127234370Sjasone * provide isolation from the name mangling specified via --with-mangling
128234370Sjasone * and/or --with-jemalloc-prefix.
129234370Sjasone */
130234370Sjasone#ifndef JEMALLOC_NO_DEMANGLE
131234370Sjasone#undef je_malloc_conf
132234370Sjasone#undef je_malloc_message
133234370Sjasone#undef je_malloc
134234370Sjasone#undef je_calloc
135234370Sjasone#undef je_posix_memalign
136234370Sjasone#undef je_aligned_alloc
137234370Sjasone#undef je_realloc
138234370Sjasone#undef je_free
139234370Sjasone#undef je_malloc_usable_size
140234370Sjasone#undef je_malloc_stats_print
141234370Sjasone#undef je_mallctl
142234370Sjasone#undef je_mallctlnametomib
143234370Sjasone#undef je_mallctlbymib
144234370Sjasone#undef je_memalign
145234370Sjasone#undef je_valloc
146234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL
147234370Sjasone#undef je_allocm
148234370Sjasone#undef je_rallocm
149234370Sjasone#undef je_sallocm
150234370Sjasone#undef je_dallocm
151234370Sjasone#undef je_nallocm
152234370Sjasone#endif
153234370Sjasone#endif
154234370Sjasone
155234370Sjasone#ifdef __cplusplus
156234370Sjasone};
157234370Sjasone#endif
158234370Sjasone#endif /* JEMALLOC_H_ */
159