1a4bd5210SJason Evansdiff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in 2d0e79aa3SJason Evansindex 8fc774b..47b453c 100644 3a4bd5210SJason Evans--- a/doc/jemalloc.xml.in 4a4bd5210SJason Evans+++ b/doc/jemalloc.xml.in 5d0e79aa3SJason Evans@@ -53,6 +53,17 @@ 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 11d0e79aa3SJason Evans+ jemalloc: <option>--enable-fill</option>, 12a4bd5210SJason Evans+ <option>--enable-lazy-lock</option>, <option>--enable-munmap</option>, 13a4bd5210SJason Evans+ <option>--enable-stats</option>, <option>--enable-tcache</option>, 14a4bd5210SJason Evans+ <option>--enable-tls</option>, <option>--enable-utrace</option>, and 15a4bd5210SJason Evans+ <option>--enable-xmalloc</option>. Additionally, 16a4bd5210SJason Evans+ <option>--enable-debug</option> is enabled in development versions of 17a4bd5210SJason Evans+ FreeBSD (controlled by the <constant>MALLOC_PRODUCTION</constant> make 18a4bd5210SJason Evans+ variable).</para> 19d0e79aa3SJason Evans+ 20a4bd5210SJason Evans </refsect1> 21a4bd5210SJason Evans <refsynopsisdiv> 22a4bd5210SJason Evans <title>SYNOPSIS</title> 23d0e79aa3SJason Evans@@ -2759,4 +2770,18 @@ malloc_conf = "lg_chunk:24";]]></programlisting></para> 24a4bd5210SJason Evans <para>The <function>posix_memalign<parameter/></function> function conforms 25a4bd5210SJason Evans to IEEE Std 1003.1-2001 (“POSIX.1”).</para> 26a4bd5210SJason Evans </refsect1> 27a4bd5210SJason Evans+ <refsect1 id="history"> 28a4bd5210SJason Evans+ <title>HISTORY</title> 29a4bd5210SJason Evans+ <para>The <function>malloc_usable_size<parameter/></function> and 30a4bd5210SJason Evans+ <function>posix_memalign<parameter/></function> functions first appeared in 31a4bd5210SJason Evans+ FreeBSD 7.0.</para> 32a4bd5210SJason Evans+ 33a4bd5210SJason Evans+ <para>The <function>aligned_alloc<parameter/></function>, 34d0e79aa3SJason Evans+ <function>malloc_stats_print<parameter/></function>, and 35d0e79aa3SJason Evans+ <function>mallctl*<parameter/></function> functions first appeared in 36a4bd5210SJason Evans+ FreeBSD 10.0.</para> 37f921d10fSJason Evans+ 38f921d10fSJason Evans+ <para>The <function>*allocx<parameter/></function> functions first appeared 39f921d10fSJason Evans+ in FreeBSD 11.0.</para> 40a4bd5210SJason Evans+ </refsect1> 41a4bd5210SJason Evans </refentry> 42a4bd5210SJason Evansdiff --git a/include/jemalloc/internal/jemalloc_internal.h.in b/include/jemalloc/internal/jemalloc_internal.h.in 43d0e79aa3SJason Evansindex 7a137b6..b0001e9 100644 44a4bd5210SJason Evans--- a/include/jemalloc/internal/jemalloc_internal.h.in 45a4bd5210SJason Evans+++ b/include/jemalloc/internal/jemalloc_internal.h.in 46d0e79aa3SJason Evans@@ -8,6 +8,9 @@ 47d0e79aa3SJason Evans #include <sys/ktrace.h> 48e722f8f8SJason Evans #endif 49a4bd5210SJason Evans 50a4bd5210SJason Evans+#include "un-namespace.h" 51a4bd5210SJason Evans+#include "libc_private.h" 52a4bd5210SJason Evans+ 53a4bd5210SJason Evans #define JEMALLOC_NO_DEMANGLE 54f921d10fSJason Evans #ifdef JEMALLOC_JET 55f921d10fSJason Evans # define JEMALLOC_N(n) jet_##n 56d0e79aa3SJason Evans@@ -42,13 +45,7 @@ static const bool config_fill = 57edaa25bdSJason Evans false 58edaa25bdSJason Evans #endif 59edaa25bdSJason Evans ; 60edaa25bdSJason Evans-static const bool config_lazy_lock = 61edaa25bdSJason Evans-#ifdef JEMALLOC_LAZY_LOCK 62edaa25bdSJason Evans- true 63edaa25bdSJason Evans-#else 64edaa25bdSJason Evans- false 65edaa25bdSJason Evans-#endif 66edaa25bdSJason Evans- ; 67edaa25bdSJason Evans+static const bool config_lazy_lock = true; 68edaa25bdSJason Evans static const bool config_prof = 69edaa25bdSJason Evans #ifdef JEMALLOC_PROF 70edaa25bdSJason Evans true 71d0e79aa3SJason Evansdiff --git a/include/jemalloc/internal/jemalloc_internal_decls.h b/include/jemalloc/internal/jemalloc_internal_decls.h 72d0e79aa3SJason Evansindex a601d6e..e7094b2 100644 73d0e79aa3SJason Evans--- a/include/jemalloc/internal/jemalloc_internal_decls.h 74d0e79aa3SJason Evans+++ b/include/jemalloc/internal/jemalloc_internal_decls.h 75d0e79aa3SJason Evans@@ -1,6 +1,9 @@ 76d0e79aa3SJason Evans #ifndef JEMALLOC_INTERNAL_DECLS_H 77d0e79aa3SJason Evans #define JEMALLOC_INTERNAL_DECLS_H 78d0e79aa3SJason Evans 79d0e79aa3SJason Evans+#include "libc_private.h" 80d0e79aa3SJason Evans+#include "namespace.h" 81d0e79aa3SJason Evans+ 82d0e79aa3SJason Evans #include <math.h> 83d0e79aa3SJason Evans #ifdef _WIN32 84d0e79aa3SJason Evans # include <windows.h> 85a4bd5210SJason Evansdiff --git a/include/jemalloc/internal/mutex.h b/include/jemalloc/internal/mutex.h 86d0e79aa3SJason Evansindex f051f29..561378f 100644 87a4bd5210SJason Evans--- a/include/jemalloc/internal/mutex.h 88a4bd5210SJason Evans+++ b/include/jemalloc/internal/mutex.h 89d0e79aa3SJason Evans@@ -47,15 +47,13 @@ struct malloc_mutex_s { 90a4bd5210SJason Evans 91a4bd5210SJason Evans #ifdef JEMALLOC_LAZY_LOCK 92a4bd5210SJason Evans extern bool isthreaded; 93a4bd5210SJason Evans-#else 948ed34ab0SJason Evans-# undef isthreaded /* Undo private_namespace.h definition. */ 95a4bd5210SJason Evans-# define isthreaded true 96a4bd5210SJason Evans #endif 97a4bd5210SJason Evans 98a4bd5210SJason Evans bool malloc_mutex_init(malloc_mutex_t *mutex); 99d0e79aa3SJason Evans void malloc_mutex_prefork(malloc_mutex_t *mutex); 100d0e79aa3SJason Evans void malloc_mutex_postfork_parent(malloc_mutex_t *mutex); 101d0e79aa3SJason Evans void malloc_mutex_postfork_child(malloc_mutex_t *mutex); 102d0e79aa3SJason Evans+bool malloc_mutex_first_thread(void); 103d0e79aa3SJason Evans bool mutex_boot(void); 104d0e79aa3SJason Evans 105d0e79aa3SJason Evans #endif /* JEMALLOC_H_EXTERNS */ 106f921d10fSJason Evansdiff --git a/include/jemalloc/internal/private_symbols.txt b/include/jemalloc/internal/private_symbols.txt 107d0e79aa3SJason Evansindex dbf6aa7..f87dba8 100644 108f921d10fSJason Evans--- a/include/jemalloc/internal/private_symbols.txt 109f921d10fSJason Evans+++ b/include/jemalloc/internal/private_symbols.txt 110d0e79aa3SJason Evans@@ -277,7 +277,6 @@ iralloct_realign 111f921d10fSJason Evans isalloc 112d0e79aa3SJason Evans isdalloct 113d0e79aa3SJason Evans isqalloc 114f921d10fSJason Evans-isthreaded 115f921d10fSJason Evans ivsalloc 116f921d10fSJason Evans ixalloc 117f921d10fSJason Evans jemalloc_postfork_child 118a4bd5210SJason Evansdiff --git a/include/jemalloc/jemalloc_FreeBSD.h b/include/jemalloc/jemalloc_FreeBSD.h 119a4bd5210SJason Evansnew file mode 100644 120*d8e39d2dSJason Evansindex 0000000..c5113b9 121a4bd5210SJason Evans--- /dev/null 122a4bd5210SJason Evans+++ b/include/jemalloc/jemalloc_FreeBSD.h 123*d8e39d2dSJason Evans@@ -0,0 +1,144 @@ 124a4bd5210SJason Evans+/* 125a4bd5210SJason Evans+ * Override settings that were generated in jemalloc_defs.h as necessary. 126a4bd5210SJason Evans+ */ 127a4bd5210SJason Evans+ 128a4bd5210SJason Evans+#undef JEMALLOC_OVERRIDE_VALLOC 129a4bd5210SJason Evans+ 130a4bd5210SJason Evans+#ifndef MALLOC_PRODUCTION 131a4bd5210SJason Evans+#define JEMALLOC_DEBUG 132a4bd5210SJason Evans+#endif 133a4bd5210SJason Evans+ 134a4bd5210SJason Evans+/* 135a4bd5210SJason Evans+ * The following are architecture-dependent, so conditionally define them for 136a4bd5210SJason Evans+ * each supported architecture. 137a4bd5210SJason Evans+ */ 138a4bd5210SJason Evans+#undef CPU_SPINWAIT 139a4bd5210SJason Evans+#undef JEMALLOC_TLS_MODEL 140a4bd5210SJason Evans+#undef STATIC_PAGE_SHIFT 141a4bd5210SJason Evans+#undef LG_SIZEOF_PTR 142a4bd5210SJason Evans+#undef LG_SIZEOF_INT 143a4bd5210SJason Evans+#undef LG_SIZEOF_LONG 144a4bd5210SJason Evans+#undef LG_SIZEOF_INTMAX_T 145a4bd5210SJason Evans+ 146a4bd5210SJason Evans+#ifdef __i386__ 147a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 148a4bd5210SJason Evans+# define CPU_SPINWAIT __asm__ volatile("pause") 149a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec"))) 150a4bd5210SJason Evans+#endif 151a4bd5210SJason Evans+#ifdef __ia64__ 152a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 153a4bd5210SJason Evans+#endif 154a4bd5210SJason Evans+#ifdef __sparc64__ 155a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 156a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec"))) 157a4bd5210SJason Evans+#endif 158a4bd5210SJason Evans+#ifdef __amd64__ 159a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 160a4bd5210SJason Evans+# define CPU_SPINWAIT __asm__ volatile("pause") 161a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec"))) 162a4bd5210SJason Evans+#endif 163a4bd5210SJason Evans+#ifdef __arm__ 164a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 165a4bd5210SJason Evans+#endif 166*d8e39d2dSJason Evans+#ifdef __aarch64__ 167*d8e39d2dSJason Evans+# define LG_SIZEOF_PTR 3 168*d8e39d2dSJason Evans+#endif 169a4bd5210SJason Evans+#ifdef __mips__ 170e722f8f8SJason Evans+#ifdef __mips_n64 171e722f8f8SJason Evans+# define LG_SIZEOF_PTR 3 172e722f8f8SJason Evans+#else 173a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 174a4bd5210SJason Evans+#endif 175e722f8f8SJason Evans+#endif 176a4bd5210SJason Evans+#ifdef __powerpc64__ 177a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 178a4bd5210SJason Evans+#elif defined(__powerpc__) 179a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 180a4bd5210SJason Evans+#endif 181a4bd5210SJason Evans+ 182a4bd5210SJason Evans+#ifndef JEMALLOC_TLS_MODEL 183a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL /* Default. */ 184a4bd5210SJason Evans+#endif 185a4bd5210SJason Evans+ 186*d8e39d2dSJason Evans+#ifndef CPU_SPINWAIT 187*d8e39d2dSJason Evans+# define CPU_SPINWAIT do {} while (0) 188*d8e39d2dSJason Evans+#endif 189*d8e39d2dSJason Evans+ 190a4bd5210SJason Evans+#define STATIC_PAGE_SHIFT PAGE_SHIFT 191a4bd5210SJason Evans+#define LG_SIZEOF_INT 2 192a4bd5210SJason Evans+#define LG_SIZEOF_LONG LG_SIZEOF_PTR 193a4bd5210SJason Evans+#define LG_SIZEOF_INTMAX_T 3 194a4bd5210SJason Evans+ 195a4bd5210SJason Evans+/* Disable lazy-lock machinery, mangle isthreaded, and adjust its type. */ 196a4bd5210SJason Evans+#undef JEMALLOC_LAZY_LOCK 197a4bd5210SJason Evans+extern int __isthreaded; 198a4bd5210SJason Evans+#define isthreaded ((bool)__isthreaded) 199a4bd5210SJason Evans+ 200a4bd5210SJason Evans+/* Mangle. */ 201f8ca2db1SJason Evans+#undef je_malloc 202f8ca2db1SJason Evans+#undef je_calloc 203f8ca2db1SJason Evans+#undef je_realloc 204f8ca2db1SJason Evans+#undef je_free 205f8ca2db1SJason Evans+#undef je_posix_memalign 206d0e79aa3SJason Evans+#undef je_aligned_alloc 207f8ca2db1SJason Evans+#undef je_malloc_usable_size 208f921d10fSJason Evans+#undef je_mallocx 209f921d10fSJason Evans+#undef je_rallocx 210f921d10fSJason Evans+#undef je_xallocx 211f921d10fSJason Evans+#undef je_sallocx 212f921d10fSJason Evans+#undef je_dallocx 213f921d10fSJason Evans+#undef je_nallocx 214f8ca2db1SJason Evans+#undef je_allocm 215f8ca2db1SJason Evans+#undef je_rallocm 216f8ca2db1SJason Evans+#undef je_sallocm 217f8ca2db1SJason Evans+#undef je_dallocm 218f8ca2db1SJason Evans+#undef je_nallocm 219f8ca2db1SJason Evans+#define je_malloc __malloc 220f8ca2db1SJason Evans+#define je_calloc __calloc 221f8ca2db1SJason Evans+#define je_realloc __realloc 222f8ca2db1SJason Evans+#define je_free __free 223f8ca2db1SJason Evans+#define je_posix_memalign __posix_memalign 224d0e79aa3SJason Evans+#define je_aligned_alloc __aligned_alloc 225f8ca2db1SJason Evans+#define je_malloc_usable_size __malloc_usable_size 226f921d10fSJason Evans+#define je_mallocx __mallocx 227f921d10fSJason Evans+#define je_rallocx __rallocx 228f921d10fSJason Evans+#define je_xallocx __xallocx 229f921d10fSJason Evans+#define je_sallocx __sallocx 230f921d10fSJason Evans+#define je_dallocx __dallocx 231f921d10fSJason Evans+#define je_nallocx __nallocx 232f8ca2db1SJason Evans+#define je_allocm __allocm 233f8ca2db1SJason Evans+#define je_rallocm __rallocm 234f8ca2db1SJason Evans+#define je_sallocm __sallocm 235f8ca2db1SJason Evans+#define je_dallocm __dallocm 236f8ca2db1SJason Evans+#define je_nallocm __nallocm 237a4bd5210SJason Evans+#define open _open 238a4bd5210SJason Evans+#define read _read 239a4bd5210SJason Evans+#define write _write 240a4bd5210SJason Evans+#define close _close 241a4bd5210SJason Evans+#define pthread_mutex_lock _pthread_mutex_lock 242a4bd5210SJason Evans+#define pthread_mutex_unlock _pthread_mutex_unlock 243f8ca2db1SJason Evans+ 244f8ca2db1SJason Evans+#ifdef JEMALLOC_C_ 245f8ca2db1SJason Evans+/* 246f8ca2db1SJason Evans+ * Define 'weak' symbols so that an application can have its own versions 247f8ca2db1SJason Evans+ * of malloc, calloc, realloc, free, et al. 248f8ca2db1SJason Evans+ */ 249f8ca2db1SJason Evans+__weak_reference(__malloc, malloc); 250f8ca2db1SJason Evans+__weak_reference(__calloc, calloc); 251f8ca2db1SJason Evans+__weak_reference(__realloc, realloc); 252f8ca2db1SJason Evans+__weak_reference(__free, free); 253f8ca2db1SJason Evans+__weak_reference(__posix_memalign, posix_memalign); 254d0e79aa3SJason Evans+__weak_reference(__aligned_alloc, aligned_alloc); 255f8ca2db1SJason Evans+__weak_reference(__malloc_usable_size, malloc_usable_size); 256f921d10fSJason Evans+__weak_reference(__mallocx, mallocx); 257f921d10fSJason Evans+__weak_reference(__rallocx, rallocx); 258f921d10fSJason Evans+__weak_reference(__xallocx, xallocx); 259f921d10fSJason Evans+__weak_reference(__sallocx, sallocx); 260f921d10fSJason Evans+__weak_reference(__dallocx, dallocx); 261f921d10fSJason Evans+__weak_reference(__nallocx, nallocx); 262f8ca2db1SJason Evans+__weak_reference(__allocm, allocm); 263f8ca2db1SJason Evans+__weak_reference(__rallocm, rallocm); 264f8ca2db1SJason Evans+__weak_reference(__sallocm, sallocm); 265f8ca2db1SJason Evans+__weak_reference(__dallocm, dallocm); 266f8ca2db1SJason Evans+__weak_reference(__nallocm, nallocm); 267f8ca2db1SJason Evans+#endif 268f921d10fSJason Evansdiff --git a/include/jemalloc/jemalloc_rename.sh b/include/jemalloc/jemalloc_rename.sh 269f921d10fSJason Evansindex f943891..47d032c 100755 270f921d10fSJason Evans--- a/include/jemalloc/jemalloc_rename.sh 271f921d10fSJason Evans+++ b/include/jemalloc/jemalloc_rename.sh 272f921d10fSJason Evans@@ -19,4 +19,6 @@ done 273f921d10fSJason Evans 274f921d10fSJason Evans cat <<EOF 275f921d10fSJason Evans #endif 276f8ca2db1SJason Evans+ 277f921d10fSJason Evans+#include "jemalloc_FreeBSD.h" 278f921d10fSJason Evans EOF 279a4bd5210SJason Evansdiff --git a/src/jemalloc.c b/src/jemalloc.c 280d0e79aa3SJason Evansindex ed7863b..d078a1f 100644 281a4bd5210SJason Evans--- a/src/jemalloc.c 282a4bd5210SJason Evans+++ b/src/jemalloc.c 283d0e79aa3SJason Evans@@ -4,6 +4,10 @@ 284d0e79aa3SJason Evans /******************************************************************************/ 285d0e79aa3SJason Evans /* Data. */ 286a4bd5210SJason Evans 287e722f8f8SJason Evans+/* Work around <http://llvm.org/bugs/show_bug.cgi?id=12623>: */ 288e722f8f8SJason Evans+const char *__malloc_options_1_0 = NULL; 289a4bd5210SJason Evans+__sym_compat(_malloc_options, __malloc_options_1_0, FBSD_1.0); 290a4bd5210SJason Evans+ 291a4bd5210SJason Evans /* Runtime configuration options. */ 292d0e79aa3SJason Evans const char *je_malloc_conf JEMALLOC_ATTR(weak); 29388ad2f8dSJason Evans bool opt_abort = 294d0e79aa3SJason Evans@@ -2475,6 +2479,107 @@ je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr) 295d0e79aa3SJason Evans */ 296d0e79aa3SJason Evans /******************************************************************************/ 297a4bd5210SJason Evans /* 298d0e79aa3SJason Evans+ * Begin compatibility functions. 299d0e79aa3SJason Evans+ */ 300d0e79aa3SJason Evans+ 301d0e79aa3SJason Evans+#define ALLOCM_LG_ALIGN(la) (la) 302d0e79aa3SJason Evans+#define ALLOCM_ALIGN(a) (ffsl(a)-1) 303d0e79aa3SJason Evans+#define ALLOCM_ZERO ((int)0x40) 304d0e79aa3SJason Evans+#define ALLOCM_NO_MOVE ((int)0x80) 305d0e79aa3SJason Evans+ 306d0e79aa3SJason Evans+#define ALLOCM_SUCCESS 0 307d0e79aa3SJason Evans+#define ALLOCM_ERR_OOM 1 308d0e79aa3SJason Evans+#define ALLOCM_ERR_NOT_MOVED 2 309d0e79aa3SJason Evans+ 310d0e79aa3SJason Evans+int 311d0e79aa3SJason Evans+je_allocm(void **ptr, size_t *rsize, size_t size, int flags) 312d0e79aa3SJason Evans+{ 313d0e79aa3SJason Evans+ void *p; 314d0e79aa3SJason Evans+ 315d0e79aa3SJason Evans+ assert(ptr != NULL); 316d0e79aa3SJason Evans+ 317d0e79aa3SJason Evans+ p = je_mallocx(size, flags); 318d0e79aa3SJason Evans+ if (p == NULL) 319d0e79aa3SJason Evans+ return (ALLOCM_ERR_OOM); 320d0e79aa3SJason Evans+ if (rsize != NULL) 321d0e79aa3SJason Evans+ *rsize = isalloc(p, config_prof); 322d0e79aa3SJason Evans+ *ptr = p; 323d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 324d0e79aa3SJason Evans+} 325d0e79aa3SJason Evans+ 326d0e79aa3SJason Evans+int 327d0e79aa3SJason Evans+je_rallocm(void **ptr, size_t *rsize, size_t size, size_t extra, int flags) 328d0e79aa3SJason Evans+{ 329d0e79aa3SJason Evans+ int ret; 330d0e79aa3SJason Evans+ bool no_move = flags & ALLOCM_NO_MOVE; 331d0e79aa3SJason Evans+ 332d0e79aa3SJason Evans+ assert(ptr != NULL); 333d0e79aa3SJason Evans+ assert(*ptr != NULL); 334d0e79aa3SJason Evans+ assert(size != 0); 335d0e79aa3SJason Evans+ assert(SIZE_T_MAX - size >= extra); 336d0e79aa3SJason Evans+ 337d0e79aa3SJason Evans+ if (no_move) { 338d0e79aa3SJason Evans+ size_t usize = je_xallocx(*ptr, size, extra, flags); 339d0e79aa3SJason Evans+ ret = (usize >= size) ? ALLOCM_SUCCESS : ALLOCM_ERR_NOT_MOVED; 340d0e79aa3SJason Evans+ if (rsize != NULL) 341d0e79aa3SJason Evans+ *rsize = usize; 342d0e79aa3SJason Evans+ } else { 343d0e79aa3SJason Evans+ void *p = je_rallocx(*ptr, size+extra, flags); 344d0e79aa3SJason Evans+ if (p != NULL) { 345d0e79aa3SJason Evans+ *ptr = p; 346d0e79aa3SJason Evans+ ret = ALLOCM_SUCCESS; 347d0e79aa3SJason Evans+ } else 348d0e79aa3SJason Evans+ ret = ALLOCM_ERR_OOM; 349d0e79aa3SJason Evans+ if (rsize != NULL) 350d0e79aa3SJason Evans+ *rsize = isalloc(*ptr, config_prof); 351d0e79aa3SJason Evans+ } 352d0e79aa3SJason Evans+ return (ret); 353d0e79aa3SJason Evans+} 354d0e79aa3SJason Evans+ 355d0e79aa3SJason Evans+int 356d0e79aa3SJason Evans+je_sallocm(const void *ptr, size_t *rsize, int flags) 357d0e79aa3SJason Evans+{ 358d0e79aa3SJason Evans+ 359d0e79aa3SJason Evans+ assert(rsize != NULL); 360d0e79aa3SJason Evans+ *rsize = je_sallocx(ptr, flags); 361d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 362d0e79aa3SJason Evans+} 363d0e79aa3SJason Evans+ 364d0e79aa3SJason Evans+int 365d0e79aa3SJason Evans+je_dallocm(void *ptr, int flags) 366d0e79aa3SJason Evans+{ 367d0e79aa3SJason Evans+ 368d0e79aa3SJason Evans+ je_dallocx(ptr, flags); 369d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 370d0e79aa3SJason Evans+} 371d0e79aa3SJason Evans+ 372d0e79aa3SJason Evans+int 373d0e79aa3SJason Evans+je_nallocm(size_t *rsize, size_t size, int flags) 374d0e79aa3SJason Evans+{ 375d0e79aa3SJason Evans+ size_t usize; 376d0e79aa3SJason Evans+ 377d0e79aa3SJason Evans+ usize = je_nallocx(size, flags); 378d0e79aa3SJason Evans+ if (usize == 0) 379d0e79aa3SJason Evans+ return (ALLOCM_ERR_OOM); 380d0e79aa3SJason Evans+ if (rsize != NULL) 381d0e79aa3SJason Evans+ *rsize = usize; 382d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 383d0e79aa3SJason Evans+} 384d0e79aa3SJason Evans+ 385d0e79aa3SJason Evans+#undef ALLOCM_LG_ALIGN 386d0e79aa3SJason Evans+#undef ALLOCM_ALIGN 387d0e79aa3SJason Evans+#undef ALLOCM_ZERO 388d0e79aa3SJason Evans+#undef ALLOCM_NO_MOVE 389d0e79aa3SJason Evans+ 390d0e79aa3SJason Evans+#undef ALLOCM_SUCCESS 391d0e79aa3SJason Evans+#undef ALLOCM_ERR_OOM 392d0e79aa3SJason Evans+#undef ALLOCM_ERR_NOT_MOVED 393d0e79aa3SJason Evans+ 394d0e79aa3SJason Evans+/* 395d0e79aa3SJason Evans+ * End compatibility functions. 396d0e79aa3SJason Evans+ */ 397d0e79aa3SJason Evans+/******************************************************************************/ 398d0e79aa3SJason Evans+/* 399d0e79aa3SJason Evans * The following functions are used by threading libraries for protection of 400d0e79aa3SJason Evans * malloc during fork(). 401d0e79aa3SJason Evans */ 402d0e79aa3SJason Evans@@ -2575,4 +2680,11 @@ jemalloc_postfork_child(void) 403d0e79aa3SJason Evans ctl_postfork_child(); 404d0e79aa3SJason Evans } 405d0e79aa3SJason Evans 406d0e79aa3SJason Evans+void 407d0e79aa3SJason Evans+_malloc_first_thread(void) 408d0e79aa3SJason Evans+{ 409d0e79aa3SJason Evans+ 410d0e79aa3SJason Evans+ (void)malloc_mutex_first_thread(); 411d0e79aa3SJason Evans+} 412d0e79aa3SJason Evans+ 413d0e79aa3SJason Evans /******************************************************************************/ 414a4bd5210SJason Evansdiff --git a/src/mutex.c b/src/mutex.c 415d0e79aa3SJason Evansindex 2d47af9..934d5aa 100644 416a4bd5210SJason Evans--- a/src/mutex.c 417a4bd5210SJason Evans+++ b/src/mutex.c 418e722f8f8SJason Evans@@ -66,6 +66,17 @@ pthread_create(pthread_t *__restrict thread, 419a4bd5210SJason Evans #ifdef JEMALLOC_MUTEX_INIT_CB 42082872ac0SJason Evans JEMALLOC_EXPORT int _pthread_mutex_init_calloc_cb(pthread_mutex_t *mutex, 421a4bd5210SJason Evans void *(calloc_cb)(size_t, size_t)); 422a4bd5210SJason Evans+ 423d0e79aa3SJason Evans+#pragma weak _pthread_mutex_init_calloc_cb 424a4bd5210SJason Evans+int 425d0e79aa3SJason Evans+_pthread_mutex_init_calloc_cb(pthread_mutex_t *mutex, 426a4bd5210SJason Evans+ void *(calloc_cb)(size_t, size_t)) 427a4bd5210SJason Evans+{ 428a4bd5210SJason Evans+ 429d0e79aa3SJason Evans+ return (((int (*)(pthread_mutex_t *, void *(*)(size_t, size_t))) 430d0e79aa3SJason Evans+ __libc_interposing[INTERPOS__pthread_mutex_init_calloc_cb])(mutex, 431d0e79aa3SJason Evans+ calloc_cb)); 432a4bd5210SJason Evans+} 433a4bd5210SJason Evans #endif 434a4bd5210SJason Evans 435a4bd5210SJason Evans bool 436d0e79aa3SJason Evans@@ -137,7 +148,7 @@ malloc_mutex_postfork_child(malloc_mutex_t *mutex) 437d0e79aa3SJason Evans } 438d0e79aa3SJason Evans 439d0e79aa3SJason Evans bool 440d0e79aa3SJason Evans-mutex_boot(void) 441d0e79aa3SJason Evans+malloc_mutex_first_thread(void) 442d0e79aa3SJason Evans { 443d0e79aa3SJason Evans 444d0e79aa3SJason Evans #ifdef JEMALLOC_MUTEX_INIT_CB 445d0e79aa3SJason Evans@@ -151,3 +162,14 @@ mutex_boot(void) 446d0e79aa3SJason Evans #endif 447d0e79aa3SJason Evans return (false); 448d0e79aa3SJason Evans } 449d0e79aa3SJason Evans+ 450d0e79aa3SJason Evans+bool 451d0e79aa3SJason Evans+mutex_boot(void) 452d0e79aa3SJason Evans+{ 453d0e79aa3SJason Evans+ 454d0e79aa3SJason Evans+#ifndef JEMALLOC_MUTEX_INIT_CB 455d0e79aa3SJason Evans+ return (malloc_mutex_first_thread()); 456d0e79aa3SJason Evans+#else 457d0e79aa3SJason Evans+ return (false); 458d0e79aa3SJason Evans+#endif 459d0e79aa3SJason Evans+} 460a4bd5210SJason Evansdiff --git a/src/util.c b/src/util.c 461d0e79aa3SJason Evansindex 4cb0d6c..25b61c2 100644 462a4bd5210SJason Evans--- a/src/util.c 463a4bd5210SJason Evans+++ b/src/util.c 464e722f8f8SJason Evans@@ -58,6 +58,22 @@ wrtmessage(void *cbopaque, const char *s) 465a4bd5210SJason Evans 466e722f8f8SJason Evans JEMALLOC_EXPORT void (*je_malloc_message)(void *, const char *s); 467e722f8f8SJason Evans 468e722f8f8SJason Evans+JEMALLOC_ATTR(visibility("hidden")) 469a4bd5210SJason Evans+void 470a4bd5210SJason Evans+wrtmessage_1_0(const char *s1, const char *s2, const char *s3, 471a4bd5210SJason Evans+ const char *s4) 472a4bd5210SJason Evans+{ 473a4bd5210SJason Evans+ 474a4bd5210SJason Evans+ wrtmessage(NULL, s1); 475a4bd5210SJason Evans+ wrtmessage(NULL, s2); 476a4bd5210SJason Evans+ wrtmessage(NULL, s3); 477a4bd5210SJason Evans+ wrtmessage(NULL, s4); 478a4bd5210SJason Evans+} 479a4bd5210SJason Evans+ 480a4bd5210SJason Evans+void (*__malloc_message_1_0)(const char *s1, const char *s2, const char *s3, 481a4bd5210SJason Evans+ const char *s4) = wrtmessage_1_0; 482a4bd5210SJason Evans+__sym_compat(_malloc_message, __malloc_message_1_0, FBSD_1.0); 483a4bd5210SJason Evans+ 484a4bd5210SJason Evans /* 485e722f8f8SJason Evans * Wrapper around malloc_message() that avoids the need for 486e722f8f8SJason Evans * je_malloc_message(...) throughout the code. 487