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 <<filename class="headerfile">stdlib.h</filename>> 25*a4bd5210SJason Evans-#include <<filename class="headerfile">jemalloc/jemalloc.h</filename>></funcsynopsisinfo> 26*a4bd5210SJason Evans+#include <<filename class="headerfile">malloc_np.h</filename>></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 (“POSIX.1”).</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