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