xref: /freebsd/contrib/jemalloc/FREEBSD-diffs (revision 8ed34ab00dc684db97a9e5ba466fa7142fbfc7d2)
1a4bd5210SJason Evansdiff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
2*8ed34ab0SJason Evansindex f78f423..ce6df80 100644
3a4bd5210SJason Evans--- a/doc/jemalloc.xml.in
4a4bd5210SJason Evans+++ b/doc/jemalloc.xml.in
5a4bd5210SJason Evans@@ -51,12 +51,23 @@
6a4bd5210SJason Evans     <para>This manual describes jemalloc @jemalloc_version@.  More information
7a4bd5210SJason Evans     can be found at the <ulink
8a4bd5210SJason Evans     url="http://www.canonware.com/jemalloc/">jemalloc website</ulink>.</para>
9a4bd5210SJason Evans+
10a4bd5210SJason Evans+    <para>The following configuration options are enabled in libc's built-in
11a4bd5210SJason Evans+    jemalloc: <option>--enable-dss</option>,
12a4bd5210SJason Evans+    <option>--enable-experimental</option>, <option>--enable-fill</option>,
13a4bd5210SJason Evans+    <option>--enable-lazy-lock</option>, <option>--enable-munmap</option>,
14a4bd5210SJason Evans+    <option>--enable-stats</option>, <option>--enable-tcache</option>,
15a4bd5210SJason Evans+    <option>--enable-tls</option>, <option>--enable-utrace</option>, and
16a4bd5210SJason Evans+    <option>--enable-xmalloc</option>.  Additionally,
17a4bd5210SJason Evans+    <option>--enable-debug</option> is enabled in development versions of
18a4bd5210SJason Evans+    FreeBSD (controlled by the <constant>MALLOC_PRODUCTION</constant> make
19a4bd5210SJason Evans+    variable).</para>
20a4bd5210SJason Evans   </refsect1>
21a4bd5210SJason Evans   <refsynopsisdiv>
22a4bd5210SJason Evans     <title>SYNOPSIS</title>
23a4bd5210SJason Evans     <funcsynopsis>
24a4bd5210SJason Evans       <funcsynopsisinfo>#include &lt;<filename class="headerfile">stdlib.h</filename>&gt;
25a4bd5210SJason Evans-#include &lt;<filename class="headerfile">jemalloc/jemalloc.h</filename>&gt;</funcsynopsisinfo>
26a4bd5210SJason Evans+#include &lt;<filename class="headerfile">malloc_np.h</filename>&gt;</funcsynopsisinfo>
27a4bd5210SJason Evans       <refsect2>
28a4bd5210SJason Evans         <title>Standard API</title>
29a4bd5210SJason Evans         <funcprototype>
30*8ed34ab0SJason Evans@@ -2091,4 +2102,16 @@ malloc_conf = "lg_chunk:24";]]></programlisting></para>
31a4bd5210SJason Evans     <para>The <function>posix_memalign<parameter/></function> function conforms
32a4bd5210SJason Evans     to IEEE Std 1003.1-2001 (&ldquo;POSIX.1&rdquo;).</para>
33a4bd5210SJason Evans   </refsect1>
34a4bd5210SJason Evans+  <refsect1 id="history">
35a4bd5210SJason Evans+    <title>HISTORY</title>
36a4bd5210SJason Evans+    <para>The <function>malloc_usable_size<parameter/></function> and
37a4bd5210SJason Evans+    <function>posix_memalign<parameter/></function> functions first appeared in
38a4bd5210SJason Evans+    FreeBSD 7.0.</para>
39a4bd5210SJason Evans+
40a4bd5210SJason Evans+    <para>The <function>aligned_alloc<parameter/></function>,
41a4bd5210SJason Evans+    <function>malloc_stats_print<parameter/></function>,
42a4bd5210SJason Evans+    <function>mallctl*<parameter/></function>, and
43a4bd5210SJason Evans+    <function>*allocm<parameter/></function> functions first appeared in
44a4bd5210SJason Evans+    FreeBSD 10.0.</para>
45a4bd5210SJason Evans+  </refsect1>
46a4bd5210SJason Evans </refentry>
47a4bd5210SJason Evansdiff --git a/include/jemalloc/internal/jemalloc_internal.h.in b/include/jemalloc/internal/jemalloc_internal.h.in
48*8ed34ab0SJason Evansindex b61abe8..edbb437 100644
49a4bd5210SJason Evans--- a/include/jemalloc/internal/jemalloc_internal.h.in
50a4bd5210SJason Evans+++ b/include/jemalloc/internal/jemalloc_internal.h.in
51c92c6224SJason Evans@@ -1,5 +1,8 @@
52c92c6224SJason Evans #ifndef JEMALLOC_INTERNAL_H
53c92c6224SJason Evans #define JEMALLOC_INTERNAL_H
54a4bd5210SJason Evans+#include "libc_private.h"
55a4bd5210SJason Evans+#include "namespace.h"
56a4bd5210SJason Evans+
57a4bd5210SJason Evans #include <sys/mman.h>
58a4bd5210SJason Evans #include <sys/param.h>
59a4bd5210SJason Evans #include <sys/syscall.h>
60c92c6224SJason Evans@@ -35,6 +38,9 @@
61a4bd5210SJason Evans #include <pthread.h>
62a4bd5210SJason Evans #include <math.h>
63a4bd5210SJason Evans
64a4bd5210SJason Evans+#include "un-namespace.h"
65a4bd5210SJason Evans+#include "libc_private.h"
66a4bd5210SJason Evans+
67a4bd5210SJason Evans #define	JEMALLOC_NO_DEMANGLE
68a4bd5210SJason Evans #include "../jemalloc@install_suffix@.h"
69a4bd5210SJason Evans
70a4bd5210SJason Evansdiff --git a/include/jemalloc/internal/mutex.h b/include/jemalloc/internal/mutex.h
71*8ed34ab0SJason Evansindex 8837ef5..d7133f4 100644
72a4bd5210SJason Evans--- a/include/jemalloc/internal/mutex.h
73a4bd5210SJason Evans+++ b/include/jemalloc/internal/mutex.h
74*8ed34ab0SJason Evans@@ -39,9 +39,6 @@ struct malloc_mutex_s {
75a4bd5210SJason Evans
76a4bd5210SJason Evans #ifdef JEMALLOC_LAZY_LOCK
77a4bd5210SJason Evans extern bool isthreaded;
78a4bd5210SJason Evans-#else
79*8ed34ab0SJason Evans-#  undef isthreaded /* Undo private_namespace.h definition. */
80a4bd5210SJason Evans-#  define isthreaded true
81a4bd5210SJason Evans #endif
82a4bd5210SJason Evans
83a4bd5210SJason Evans bool	malloc_mutex_init(malloc_mutex_t *mutex);
84*8ed34ab0SJason Evansdiff --git a/include/jemalloc/internal/private_namespace.h b/include/jemalloc/internal/private_namespace.h
85*8ed34ab0SJason Evansindex 15fe3c5..be94eb8 100644
86*8ed34ab0SJason Evans--- a/include/jemalloc/internal/private_namespace.h
87*8ed34ab0SJason Evans+++ b/include/jemalloc/internal/private_namespace.h
88*8ed34ab0SJason Evans@@ -1,6 +1,3 @@
89*8ed34ab0SJason Evans-#define	a0calloc JEMALLOC_N(a0calloc)
90*8ed34ab0SJason Evans-#define	a0free JEMALLOC_N(a0free)
91*8ed34ab0SJason Evans-#define	a0malloc JEMALLOC_N(a0malloc)
92*8ed34ab0SJason Evans #define	arena_alloc_junk_small JEMALLOC_N(arena_alloc_junk_small)
93*8ed34ab0SJason Evans #define	arena_bin_index JEMALLOC_N(arena_bin_index)
94*8ed34ab0SJason Evans #define	arena_bin_info JEMALLOC_N(arena_bin_info)
95*8ed34ab0SJason Evans@@ -167,7 +164,6 @@
96*8ed34ab0SJason Evans #define	iqalloc JEMALLOC_N(iqalloc)
97*8ed34ab0SJason Evans #define	iralloc JEMALLOC_N(iralloc)
98*8ed34ab0SJason Evans #define	isalloc JEMALLOC_N(isalloc)
99*8ed34ab0SJason Evans-#define	isthreaded JEMALLOC_N(isthreaded)
100*8ed34ab0SJason Evans #define	ivsalloc JEMALLOC_N(ivsalloc)
101*8ed34ab0SJason Evans #define	jemalloc_postfork_child JEMALLOC_N(jemalloc_postfork_child)
102*8ed34ab0SJason Evans #define	jemalloc_postfork_parent JEMALLOC_N(jemalloc_postfork_parent)
103a4bd5210SJason Evansdiff --git a/include/jemalloc/jemalloc.h.in b/include/jemalloc/jemalloc.h.in
104a4bd5210SJason Evansindex f0581db..f26d8bc 100644
105a4bd5210SJason Evans--- a/include/jemalloc/jemalloc.h.in
106a4bd5210SJason Evans+++ b/include/jemalloc/jemalloc.h.in
107a4bd5210SJason Evans@@ -15,6 +15,7 @@ extern "C" {
108a4bd5210SJason Evans #define	JEMALLOC_VERSION_GID "@jemalloc_version_gid@"
109a4bd5210SJason Evans
110a4bd5210SJason Evans #include "jemalloc_defs@install_suffix@.h"
111a4bd5210SJason Evans+#include "jemalloc_FreeBSD.h"
112a4bd5210SJason Evans
113a4bd5210SJason Evans #ifdef JEMALLOC_EXPERIMENTAL
114a4bd5210SJason Evans #define	ALLOCM_LG_ALIGN(la)	(la)
115a4bd5210SJason Evansdiff --git a/include/jemalloc/jemalloc_FreeBSD.h b/include/jemalloc/jemalloc_FreeBSD.h
116a4bd5210SJason Evansnew file mode 100644
117a4bd5210SJason Evansindex 0000000..2c5797f
118a4bd5210SJason Evans--- /dev/null
119a4bd5210SJason Evans+++ b/include/jemalloc/jemalloc_FreeBSD.h
120a4bd5210SJason Evans@@ -0,0 +1,76 @@
121a4bd5210SJason Evans+/*
122a4bd5210SJason Evans+ * Override settings that were generated in jemalloc_defs.h as necessary.
123a4bd5210SJason Evans+ */
124a4bd5210SJason Evans+
125a4bd5210SJason Evans+#undef JEMALLOC_OVERRIDE_VALLOC
126a4bd5210SJason Evans+
127a4bd5210SJason Evans+#ifndef MALLOC_PRODUCTION
128a4bd5210SJason Evans+#define	JEMALLOC_DEBUG
129a4bd5210SJason Evans+#endif
130a4bd5210SJason Evans+
131a4bd5210SJason Evans+/*
132a4bd5210SJason Evans+ * The following are architecture-dependent, so conditionally define them for
133a4bd5210SJason Evans+ * each supported architecture.
134a4bd5210SJason Evans+ */
135a4bd5210SJason Evans+#undef CPU_SPINWAIT
136a4bd5210SJason Evans+#undef JEMALLOC_TLS_MODEL
137a4bd5210SJason Evans+#undef STATIC_PAGE_SHIFT
138a4bd5210SJason Evans+#undef LG_SIZEOF_PTR
139a4bd5210SJason Evans+#undef LG_SIZEOF_INT
140a4bd5210SJason Evans+#undef LG_SIZEOF_LONG
141a4bd5210SJason Evans+#undef LG_SIZEOF_INTMAX_T
142a4bd5210SJason Evans+
143a4bd5210SJason Evans+#ifdef __i386__
144a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		2
145a4bd5210SJason Evans+#  define CPU_SPINWAIT		__asm__ volatile("pause")
146a4bd5210SJason Evans+#  define JEMALLOC_TLS_MODEL	__attribute__((tls_model("initial-exec")))
147a4bd5210SJason Evans+#endif
148a4bd5210SJason Evans+#ifdef __ia64__
149a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		3
150a4bd5210SJason Evans+#endif
151a4bd5210SJason Evans+#ifdef __sparc64__
152a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		3
153a4bd5210SJason Evans+#  define JEMALLOC_TLS_MODEL	__attribute__((tls_model("initial-exec")))
154a4bd5210SJason Evans+#endif
155a4bd5210SJason Evans+#ifdef __amd64__
156a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		3
157a4bd5210SJason Evans+#  define CPU_SPINWAIT		__asm__ volatile("pause")
158a4bd5210SJason Evans+#  define JEMALLOC_TLS_MODEL	__attribute__((tls_model("initial-exec")))
159a4bd5210SJason Evans+#endif
160a4bd5210SJason Evans+#ifdef __arm__
161a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		2
162a4bd5210SJason Evans+#endif
163a4bd5210SJason Evans+#ifdef __mips__
164a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		2
165a4bd5210SJason Evans+#endif
166a4bd5210SJason Evans+#ifdef __powerpc64__
167a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		3
168a4bd5210SJason Evans+#elif defined(__powerpc__)
169a4bd5210SJason Evans+#  define LG_SIZEOF_PTR		2
170a4bd5210SJason Evans+#endif
171a4bd5210SJason Evans+
172a4bd5210SJason Evans+#ifndef JEMALLOC_TLS_MODEL
173a4bd5210SJason Evans+#  define JEMALLOC_TLS_MODEL	/* Default. */
174a4bd5210SJason Evans+#endif
175a4bd5210SJason Evans+#ifdef __clang__
176a4bd5210SJason Evans+#  undef JEMALLOC_TLS_MODEL
177a4bd5210SJason Evans+#  define JEMALLOC_TLS_MODEL	/* clang does not support tls_model yet. */
178a4bd5210SJason Evans+#endif
179a4bd5210SJason Evans+
180a4bd5210SJason Evans+#define	STATIC_PAGE_SHIFT	PAGE_SHIFT
181a4bd5210SJason Evans+#define	LG_SIZEOF_INT		2
182a4bd5210SJason Evans+#define	LG_SIZEOF_LONG		LG_SIZEOF_PTR
183a4bd5210SJason Evans+#define	LG_SIZEOF_INTMAX_T	3
184a4bd5210SJason Evans+
185a4bd5210SJason Evans+/* Disable lazy-lock machinery, mangle isthreaded, and adjust its type. */
186a4bd5210SJason Evans+#undef JEMALLOC_LAZY_LOCK
187a4bd5210SJason Evans+extern int __isthreaded;
188a4bd5210SJason Evans+#define	isthreaded		((bool)__isthreaded)
189a4bd5210SJason Evans+
190a4bd5210SJason Evans+/* Mangle. */
191a4bd5210SJason Evans+#define	open			_open
192a4bd5210SJason Evans+#define	read			_read
193a4bd5210SJason Evans+#define	write			_write
194a4bd5210SJason Evans+#define	close			_close
195a4bd5210SJason Evans+#define	pthread_mutex_lock	_pthread_mutex_lock
196a4bd5210SJason Evans+#define	pthread_mutex_unlock	_pthread_mutex_unlock
197a4bd5210SJason Evansdiff --git a/src/jemalloc.c b/src/jemalloc.c
198*8ed34ab0SJason Evansindex 00c2b23..729f4e1 100644
199a4bd5210SJason Evans--- a/src/jemalloc.c
200a4bd5210SJason Evans+++ b/src/jemalloc.c
201a4bd5210SJason Evans@@ -8,6 +8,9 @@ malloc_tsd_data(, arenas, arena_t *, NULL)
202a4bd5210SJason Evans malloc_tsd_data(, thread_allocated, thread_allocated_t,
203a4bd5210SJason Evans     THREAD_ALLOCATED_INITIALIZER)
204a4bd5210SJason Evans
205a4bd5210SJason Evans+const char	*__malloc_options_1_0;
206a4bd5210SJason Evans+__sym_compat(_malloc_options, __malloc_options_1_0, FBSD_1.0);
207a4bd5210SJason Evans+
208a4bd5210SJason Evans /* Runtime configuration options. */
209a4bd5210SJason Evans const char	*je_malloc_conf JEMALLOC_ATTR(visibility("default"));
210a4bd5210SJason Evans #ifdef JEMALLOC_DEBUG
211a4bd5210SJason Evans@@ -401,7 +404,8 @@ malloc_conf_init(void)
212a4bd5210SJason Evans #endif
213a4bd5210SJason Evans 			    ;
214a4bd5210SJason Evans
215a4bd5210SJason Evans-			if ((opts = getenv(envname)) != NULL) {
216a4bd5210SJason Evans+			if (issetugid() == 0 && (opts = getenv(envname)) !=
217a4bd5210SJason Evans+			    NULL) {
218a4bd5210SJason Evans 				/*
219a4bd5210SJason Evans 				 * Do nothing; opts is already initialized to
220a4bd5210SJason Evans 				 * the value of the MALLOC_CONF environment
221a4bd5210SJason Evansdiff --git a/src/mutex.c b/src/mutex.c
222a4bd5210SJason Evansindex 4b8ce57..7be5fc9 100644
223a4bd5210SJason Evans--- a/src/mutex.c
224a4bd5210SJason Evans+++ b/src/mutex.c
225a4bd5210SJason Evans@@ -63,6 +63,17 @@ pthread_create(pthread_t *__restrict thread,
226a4bd5210SJason Evans #ifdef JEMALLOC_MUTEX_INIT_CB
227a4bd5210SJason Evans int	_pthread_mutex_init_calloc_cb(pthread_mutex_t *mutex,
228a4bd5210SJason Evans     void *(calloc_cb)(size_t, size_t));
229a4bd5210SJason Evans+
230a4bd5210SJason Evans+__weak_reference(_pthread_mutex_init_calloc_cb_stub,
231a4bd5210SJason Evans+    _pthread_mutex_init_calloc_cb);
232a4bd5210SJason Evans+
233a4bd5210SJason Evans+int
234a4bd5210SJason Evans+_pthread_mutex_init_calloc_cb_stub(pthread_mutex_t *mutex,
235a4bd5210SJason Evans+    void *(calloc_cb)(size_t, size_t))
236a4bd5210SJason Evans+{
237a4bd5210SJason Evans+
238a4bd5210SJason Evans+	return (0);
239a4bd5210SJason Evans+}
240a4bd5210SJason Evans #endif
241a4bd5210SJason Evans
242a4bd5210SJason Evans bool
243a4bd5210SJason Evansdiff --git a/src/util.c b/src/util.c
244*8ed34ab0SJason Evansindex 99ae26d..b80676c 100644
245a4bd5210SJason Evans--- a/src/util.c
246a4bd5210SJason Evans+++ b/src/util.c
247a4bd5210SJason Evans@@ -60,6 +60,22 @@ wrtmessage(void *cbopaque, const char *s)
248a4bd5210SJason Evans void	(*je_malloc_message)(void *, const char *s)
249a4bd5210SJason Evans     JEMALLOC_ATTR(visibility("default")) = wrtmessage;
250a4bd5210SJason Evans
251a4bd5210SJason Evans+JEMALLOC_CATTR(visibility("hidden"), static)
252a4bd5210SJason Evans+void
253a4bd5210SJason Evans+wrtmessage_1_0(const char *s1, const char *s2, const char *s3,
254a4bd5210SJason Evans+    const char *s4)
255a4bd5210SJason Evans+{
256a4bd5210SJason Evans+
257a4bd5210SJason Evans+	wrtmessage(NULL, s1);
258a4bd5210SJason Evans+	wrtmessage(NULL, s2);
259a4bd5210SJason Evans+	wrtmessage(NULL, s3);
260a4bd5210SJason Evans+	wrtmessage(NULL, s4);
261a4bd5210SJason Evans+}
262a4bd5210SJason Evans+
263a4bd5210SJason Evans+void	(*__malloc_message_1_0)(const char *s1, const char *s2, const char *s3,
264a4bd5210SJason Evans+    const char *s4) = wrtmessage_1_0;
265a4bd5210SJason Evans+__sym_compat(_malloc_message, __malloc_message_1_0, FBSD_1.0);
266a4bd5210SJason Evans+
267a4bd5210SJason Evans /*
268a4bd5210SJason Evans  * glibc provides a non-standard strerror_r() when _GNU_SOURCE is defined, so
269a4bd5210SJason Evans  * provide a wrapper.
270