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