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*337776f8SJason Evansindex 0000000..737542e 121a4bd5210SJason Evans--- /dev/null 122a4bd5210SJason Evans+++ b/include/jemalloc/jemalloc_FreeBSD.h 123*337776f8SJason Evans@@ -0,0 +1,142 @@ 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 JEMALLOC_TLS_MODEL 139a4bd5210SJason Evans+#undef STATIC_PAGE_SHIFT 140a4bd5210SJason Evans+#undef LG_SIZEOF_PTR 141a4bd5210SJason Evans+#undef LG_SIZEOF_INT 142a4bd5210SJason Evans+#undef LG_SIZEOF_LONG 143a4bd5210SJason Evans+#undef LG_SIZEOF_INTMAX_T 144a4bd5210SJason Evans+ 145a4bd5210SJason Evans+#ifdef __i386__ 146a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 147a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec"))) 148a4bd5210SJason Evans+#endif 149a4bd5210SJason Evans+#ifdef __ia64__ 150a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 151a4bd5210SJason Evans+#endif 152a4bd5210SJason Evans+#ifdef __sparc64__ 153a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 154a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL __attribute__((tls_model("initial-exec"))) 155a4bd5210SJason Evans+#endif 156a4bd5210SJason Evans+#ifdef __amd64__ 157a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 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 163d8e39d2dSJason Evans+#ifdef __aarch64__ 164d8e39d2dSJason Evans+# define LG_SIZEOF_PTR 3 165d8e39d2dSJason Evans+#endif 166a4bd5210SJason Evans+#ifdef __mips__ 167e722f8f8SJason Evans+#ifdef __mips_n64 168e722f8f8SJason Evans+# define LG_SIZEOF_PTR 3 169e722f8f8SJason Evans+#else 170a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 171a4bd5210SJason Evans+#endif 172e722f8f8SJason Evans+#endif 173a4bd5210SJason Evans+#ifdef __powerpc64__ 174a4bd5210SJason Evans+# define LG_SIZEOF_PTR 3 175a4bd5210SJason Evans+#elif defined(__powerpc__) 176a4bd5210SJason Evans+# define LG_SIZEOF_PTR 2 177a4bd5210SJason Evans+#endif 178a4bd5210SJason Evans+ 179a4bd5210SJason Evans+#ifndef JEMALLOC_TLS_MODEL 180a4bd5210SJason Evans+# define JEMALLOC_TLS_MODEL /* Default. */ 181a4bd5210SJason Evans+#endif 182a4bd5210SJason Evans+ 183a4bd5210SJason Evans+#define STATIC_PAGE_SHIFT PAGE_SHIFT 184a4bd5210SJason Evans+#define LG_SIZEOF_INT 2 185a4bd5210SJason Evans+#define LG_SIZEOF_LONG LG_SIZEOF_PTR 186a4bd5210SJason Evans+#define LG_SIZEOF_INTMAX_T 3 187a4bd5210SJason Evans+ 188*337776f8SJason Evans+#undef CPU_SPINWAIT 189*337776f8SJason Evans+#include <machine/cpu.h> 190*337776f8SJason Evans+#include <machine/cpufunc.h> 191*337776f8SJason Evans+#define CPU_SPINWAIT cpu_spinwait() 192*337776f8SJason Evans+ 193a4bd5210SJason Evans+/* Disable lazy-lock machinery, mangle isthreaded, and adjust its type. */ 194a4bd5210SJason Evans+#undef JEMALLOC_LAZY_LOCK 195a4bd5210SJason Evans+extern int __isthreaded; 196a4bd5210SJason Evans+#define isthreaded ((bool)__isthreaded) 197a4bd5210SJason Evans+ 198a4bd5210SJason Evans+/* Mangle. */ 199f8ca2db1SJason Evans+#undef je_malloc 200f8ca2db1SJason Evans+#undef je_calloc 201f8ca2db1SJason Evans+#undef je_realloc 202f8ca2db1SJason Evans+#undef je_free 203f8ca2db1SJason Evans+#undef je_posix_memalign 204d0e79aa3SJason Evans+#undef je_aligned_alloc 205f8ca2db1SJason Evans+#undef je_malloc_usable_size 206f921d10fSJason Evans+#undef je_mallocx 207f921d10fSJason Evans+#undef je_rallocx 208f921d10fSJason Evans+#undef je_xallocx 209f921d10fSJason Evans+#undef je_sallocx 210f921d10fSJason Evans+#undef je_dallocx 211f921d10fSJason Evans+#undef je_nallocx 212f8ca2db1SJason Evans+#undef je_allocm 213f8ca2db1SJason Evans+#undef je_rallocm 214f8ca2db1SJason Evans+#undef je_sallocm 215f8ca2db1SJason Evans+#undef je_dallocm 216f8ca2db1SJason Evans+#undef je_nallocm 217f8ca2db1SJason Evans+#define je_malloc __malloc 218f8ca2db1SJason Evans+#define je_calloc __calloc 219f8ca2db1SJason Evans+#define je_realloc __realloc 220f8ca2db1SJason Evans+#define je_free __free 221f8ca2db1SJason Evans+#define je_posix_memalign __posix_memalign 222d0e79aa3SJason Evans+#define je_aligned_alloc __aligned_alloc 223f8ca2db1SJason Evans+#define je_malloc_usable_size __malloc_usable_size 224f921d10fSJason Evans+#define je_mallocx __mallocx 225f921d10fSJason Evans+#define je_rallocx __rallocx 226f921d10fSJason Evans+#define je_xallocx __xallocx 227f921d10fSJason Evans+#define je_sallocx __sallocx 228f921d10fSJason Evans+#define je_dallocx __dallocx 229f921d10fSJason Evans+#define je_nallocx __nallocx 230f8ca2db1SJason Evans+#define je_allocm __allocm 231f8ca2db1SJason Evans+#define je_rallocm __rallocm 232f8ca2db1SJason Evans+#define je_sallocm __sallocm 233f8ca2db1SJason Evans+#define je_dallocm __dallocm 234f8ca2db1SJason Evans+#define je_nallocm __nallocm 235a4bd5210SJason Evans+#define open _open 236a4bd5210SJason Evans+#define read _read 237a4bd5210SJason Evans+#define write _write 238a4bd5210SJason Evans+#define close _close 239a4bd5210SJason Evans+#define pthread_mutex_lock _pthread_mutex_lock 240a4bd5210SJason Evans+#define pthread_mutex_unlock _pthread_mutex_unlock 241f8ca2db1SJason Evans+ 242f8ca2db1SJason Evans+#ifdef JEMALLOC_C_ 243f8ca2db1SJason Evans+/* 244f8ca2db1SJason Evans+ * Define 'weak' symbols so that an application can have its own versions 245f8ca2db1SJason Evans+ * of malloc, calloc, realloc, free, et al. 246f8ca2db1SJason Evans+ */ 247f8ca2db1SJason Evans+__weak_reference(__malloc, malloc); 248f8ca2db1SJason Evans+__weak_reference(__calloc, calloc); 249f8ca2db1SJason Evans+__weak_reference(__realloc, realloc); 250f8ca2db1SJason Evans+__weak_reference(__free, free); 251f8ca2db1SJason Evans+__weak_reference(__posix_memalign, posix_memalign); 252d0e79aa3SJason Evans+__weak_reference(__aligned_alloc, aligned_alloc); 253f8ca2db1SJason Evans+__weak_reference(__malloc_usable_size, malloc_usable_size); 254f921d10fSJason Evans+__weak_reference(__mallocx, mallocx); 255f921d10fSJason Evans+__weak_reference(__rallocx, rallocx); 256f921d10fSJason Evans+__weak_reference(__xallocx, xallocx); 257f921d10fSJason Evans+__weak_reference(__sallocx, sallocx); 258f921d10fSJason Evans+__weak_reference(__dallocx, dallocx); 259f921d10fSJason Evans+__weak_reference(__nallocx, nallocx); 260f8ca2db1SJason Evans+__weak_reference(__allocm, allocm); 261f8ca2db1SJason Evans+__weak_reference(__rallocm, rallocm); 262f8ca2db1SJason Evans+__weak_reference(__sallocm, sallocm); 263f8ca2db1SJason Evans+__weak_reference(__dallocm, dallocm); 264f8ca2db1SJason Evans+__weak_reference(__nallocm, nallocm); 265f8ca2db1SJason Evans+#endif 266f921d10fSJason Evansdiff --git a/include/jemalloc/jemalloc_rename.sh b/include/jemalloc/jemalloc_rename.sh 267f921d10fSJason Evansindex f943891..47d032c 100755 268f921d10fSJason Evans--- a/include/jemalloc/jemalloc_rename.sh 269f921d10fSJason Evans+++ b/include/jemalloc/jemalloc_rename.sh 270f921d10fSJason Evans@@ -19,4 +19,6 @@ done 271f921d10fSJason Evans 272f921d10fSJason Evans cat <<EOF 273f921d10fSJason Evans #endif 274f8ca2db1SJason Evans+ 275f921d10fSJason Evans+#include "jemalloc_FreeBSD.h" 276f921d10fSJason Evans EOF 277a4bd5210SJason Evansdiff --git a/src/jemalloc.c b/src/jemalloc.c 278d0e79aa3SJason Evansindex ed7863b..d078a1f 100644 279a4bd5210SJason Evans--- a/src/jemalloc.c 280a4bd5210SJason Evans+++ b/src/jemalloc.c 281d0e79aa3SJason Evans@@ -4,6 +4,10 @@ 282d0e79aa3SJason Evans /******************************************************************************/ 283d0e79aa3SJason Evans /* Data. */ 284a4bd5210SJason Evans 285e722f8f8SJason Evans+/* Work around <http://llvm.org/bugs/show_bug.cgi?id=12623>: */ 286e722f8f8SJason Evans+const char *__malloc_options_1_0 = NULL; 287a4bd5210SJason Evans+__sym_compat(_malloc_options, __malloc_options_1_0, FBSD_1.0); 288a4bd5210SJason Evans+ 289a4bd5210SJason Evans /* Runtime configuration options. */ 290d0e79aa3SJason Evans const char *je_malloc_conf JEMALLOC_ATTR(weak); 29188ad2f8dSJason Evans bool opt_abort = 292d0e79aa3SJason Evans@@ -2475,6 +2479,107 @@ je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr) 293d0e79aa3SJason Evans */ 294d0e79aa3SJason Evans /******************************************************************************/ 295a4bd5210SJason Evans /* 296d0e79aa3SJason Evans+ * Begin compatibility functions. 297d0e79aa3SJason Evans+ */ 298d0e79aa3SJason Evans+ 299d0e79aa3SJason Evans+#define ALLOCM_LG_ALIGN(la) (la) 300d0e79aa3SJason Evans+#define ALLOCM_ALIGN(a) (ffsl(a)-1) 301d0e79aa3SJason Evans+#define ALLOCM_ZERO ((int)0x40) 302d0e79aa3SJason Evans+#define ALLOCM_NO_MOVE ((int)0x80) 303d0e79aa3SJason Evans+ 304d0e79aa3SJason Evans+#define ALLOCM_SUCCESS 0 305d0e79aa3SJason Evans+#define ALLOCM_ERR_OOM 1 306d0e79aa3SJason Evans+#define ALLOCM_ERR_NOT_MOVED 2 307d0e79aa3SJason Evans+ 308d0e79aa3SJason Evans+int 309d0e79aa3SJason Evans+je_allocm(void **ptr, size_t *rsize, size_t size, int flags) 310d0e79aa3SJason Evans+{ 311d0e79aa3SJason Evans+ void *p; 312d0e79aa3SJason Evans+ 313d0e79aa3SJason Evans+ assert(ptr != NULL); 314d0e79aa3SJason Evans+ 315d0e79aa3SJason Evans+ p = je_mallocx(size, flags); 316d0e79aa3SJason Evans+ if (p == NULL) 317d0e79aa3SJason Evans+ return (ALLOCM_ERR_OOM); 318d0e79aa3SJason Evans+ if (rsize != NULL) 319d0e79aa3SJason Evans+ *rsize = isalloc(p, config_prof); 320d0e79aa3SJason Evans+ *ptr = p; 321d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 322d0e79aa3SJason Evans+} 323d0e79aa3SJason Evans+ 324d0e79aa3SJason Evans+int 325d0e79aa3SJason Evans+je_rallocm(void **ptr, size_t *rsize, size_t size, size_t extra, int flags) 326d0e79aa3SJason Evans+{ 327d0e79aa3SJason Evans+ int ret; 328d0e79aa3SJason Evans+ bool no_move = flags & ALLOCM_NO_MOVE; 329d0e79aa3SJason Evans+ 330d0e79aa3SJason Evans+ assert(ptr != NULL); 331d0e79aa3SJason Evans+ assert(*ptr != NULL); 332d0e79aa3SJason Evans+ assert(size != 0); 333d0e79aa3SJason Evans+ assert(SIZE_T_MAX - size >= extra); 334d0e79aa3SJason Evans+ 335d0e79aa3SJason Evans+ if (no_move) { 336d0e79aa3SJason Evans+ size_t usize = je_xallocx(*ptr, size, extra, flags); 337d0e79aa3SJason Evans+ ret = (usize >= size) ? ALLOCM_SUCCESS : ALLOCM_ERR_NOT_MOVED; 338d0e79aa3SJason Evans+ if (rsize != NULL) 339d0e79aa3SJason Evans+ *rsize = usize; 340d0e79aa3SJason Evans+ } else { 341d0e79aa3SJason Evans+ void *p = je_rallocx(*ptr, size+extra, flags); 342d0e79aa3SJason Evans+ if (p != NULL) { 343d0e79aa3SJason Evans+ *ptr = p; 344d0e79aa3SJason Evans+ ret = ALLOCM_SUCCESS; 345d0e79aa3SJason Evans+ } else 346d0e79aa3SJason Evans+ ret = ALLOCM_ERR_OOM; 347d0e79aa3SJason Evans+ if (rsize != NULL) 348d0e79aa3SJason Evans+ *rsize = isalloc(*ptr, config_prof); 349d0e79aa3SJason Evans+ } 350d0e79aa3SJason Evans+ return (ret); 351d0e79aa3SJason Evans+} 352d0e79aa3SJason Evans+ 353d0e79aa3SJason Evans+int 354d0e79aa3SJason Evans+je_sallocm(const void *ptr, size_t *rsize, int flags) 355d0e79aa3SJason Evans+{ 356d0e79aa3SJason Evans+ 357d0e79aa3SJason Evans+ assert(rsize != NULL); 358d0e79aa3SJason Evans+ *rsize = je_sallocx(ptr, flags); 359d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 360d0e79aa3SJason Evans+} 361d0e79aa3SJason Evans+ 362d0e79aa3SJason Evans+int 363d0e79aa3SJason Evans+je_dallocm(void *ptr, int flags) 364d0e79aa3SJason Evans+{ 365d0e79aa3SJason Evans+ 366d0e79aa3SJason Evans+ je_dallocx(ptr, flags); 367d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 368d0e79aa3SJason Evans+} 369d0e79aa3SJason Evans+ 370d0e79aa3SJason Evans+int 371d0e79aa3SJason Evans+je_nallocm(size_t *rsize, size_t size, int flags) 372d0e79aa3SJason Evans+{ 373d0e79aa3SJason Evans+ size_t usize; 374d0e79aa3SJason Evans+ 375d0e79aa3SJason Evans+ usize = je_nallocx(size, flags); 376d0e79aa3SJason Evans+ if (usize == 0) 377d0e79aa3SJason Evans+ return (ALLOCM_ERR_OOM); 378d0e79aa3SJason Evans+ if (rsize != NULL) 379d0e79aa3SJason Evans+ *rsize = usize; 380d0e79aa3SJason Evans+ return (ALLOCM_SUCCESS); 381d0e79aa3SJason Evans+} 382d0e79aa3SJason Evans+ 383d0e79aa3SJason Evans+#undef ALLOCM_LG_ALIGN 384d0e79aa3SJason Evans+#undef ALLOCM_ALIGN 385d0e79aa3SJason Evans+#undef ALLOCM_ZERO 386d0e79aa3SJason Evans+#undef ALLOCM_NO_MOVE 387d0e79aa3SJason Evans+ 388d0e79aa3SJason Evans+#undef ALLOCM_SUCCESS 389d0e79aa3SJason Evans+#undef ALLOCM_ERR_OOM 390d0e79aa3SJason Evans+#undef ALLOCM_ERR_NOT_MOVED 391d0e79aa3SJason Evans+ 392d0e79aa3SJason Evans+/* 393d0e79aa3SJason Evans+ * End compatibility functions. 394d0e79aa3SJason Evans+ */ 395d0e79aa3SJason Evans+/******************************************************************************/ 396d0e79aa3SJason Evans+/* 397d0e79aa3SJason Evans * The following functions are used by threading libraries for protection of 398d0e79aa3SJason Evans * malloc during fork(). 399d0e79aa3SJason Evans */ 400d0e79aa3SJason Evans@@ -2575,4 +2680,11 @@ jemalloc_postfork_child(void) 401d0e79aa3SJason Evans ctl_postfork_child(); 402d0e79aa3SJason Evans } 403d0e79aa3SJason Evans 404d0e79aa3SJason Evans+void 405d0e79aa3SJason Evans+_malloc_first_thread(void) 406d0e79aa3SJason Evans+{ 407d0e79aa3SJason Evans+ 408d0e79aa3SJason Evans+ (void)malloc_mutex_first_thread(); 409d0e79aa3SJason Evans+} 410d0e79aa3SJason Evans+ 411d0e79aa3SJason Evans /******************************************************************************/ 412a4bd5210SJason Evansdiff --git a/src/mutex.c b/src/mutex.c 413d0e79aa3SJason Evansindex 2d47af9..934d5aa 100644 414a4bd5210SJason Evans--- a/src/mutex.c 415a4bd5210SJason Evans+++ b/src/mutex.c 416e722f8f8SJason Evans@@ -66,6 +66,17 @@ pthread_create(pthread_t *__restrict thread, 417a4bd5210SJason Evans #ifdef JEMALLOC_MUTEX_INIT_CB 41882872ac0SJason Evans JEMALLOC_EXPORT int _pthread_mutex_init_calloc_cb(pthread_mutex_t *mutex, 419a4bd5210SJason Evans void *(calloc_cb)(size_t, size_t)); 420a4bd5210SJason Evans+ 421d0e79aa3SJason Evans+#pragma weak _pthread_mutex_init_calloc_cb 422a4bd5210SJason Evans+int 423d0e79aa3SJason Evans+_pthread_mutex_init_calloc_cb(pthread_mutex_t *mutex, 424a4bd5210SJason Evans+ void *(calloc_cb)(size_t, size_t)) 425a4bd5210SJason Evans+{ 426a4bd5210SJason Evans+ 427d0e79aa3SJason Evans+ return (((int (*)(pthread_mutex_t *, void *(*)(size_t, size_t))) 428d0e79aa3SJason Evans+ __libc_interposing[INTERPOS__pthread_mutex_init_calloc_cb])(mutex, 429d0e79aa3SJason Evans+ calloc_cb)); 430a4bd5210SJason Evans+} 431a4bd5210SJason Evans #endif 432a4bd5210SJason Evans 433a4bd5210SJason Evans bool 434d0e79aa3SJason Evans@@ -137,7 +148,7 @@ malloc_mutex_postfork_child(malloc_mutex_t *mutex) 435d0e79aa3SJason Evans } 436d0e79aa3SJason Evans 437d0e79aa3SJason Evans bool 438d0e79aa3SJason Evans-mutex_boot(void) 439d0e79aa3SJason Evans+malloc_mutex_first_thread(void) 440d0e79aa3SJason Evans { 441d0e79aa3SJason Evans 442d0e79aa3SJason Evans #ifdef JEMALLOC_MUTEX_INIT_CB 443d0e79aa3SJason Evans@@ -151,3 +162,14 @@ mutex_boot(void) 444d0e79aa3SJason Evans #endif 445d0e79aa3SJason Evans return (false); 446d0e79aa3SJason Evans } 447d0e79aa3SJason Evans+ 448d0e79aa3SJason Evans+bool 449d0e79aa3SJason Evans+mutex_boot(void) 450d0e79aa3SJason Evans+{ 451d0e79aa3SJason Evans+ 452d0e79aa3SJason Evans+#ifndef JEMALLOC_MUTEX_INIT_CB 453d0e79aa3SJason Evans+ return (malloc_mutex_first_thread()); 454d0e79aa3SJason Evans+#else 455d0e79aa3SJason Evans+ return (false); 456d0e79aa3SJason Evans+#endif 457d0e79aa3SJason Evans+} 458a4bd5210SJason Evansdiff --git a/src/util.c b/src/util.c 459d0e79aa3SJason Evansindex 4cb0d6c..25b61c2 100644 460a4bd5210SJason Evans--- a/src/util.c 461a4bd5210SJason Evans+++ b/src/util.c 462e722f8f8SJason Evans@@ -58,6 +58,22 @@ wrtmessage(void *cbopaque, const char *s) 463a4bd5210SJason Evans 464e722f8f8SJason Evans JEMALLOC_EXPORT void (*je_malloc_message)(void *, const char *s); 465e722f8f8SJason Evans 466e722f8f8SJason Evans+JEMALLOC_ATTR(visibility("hidden")) 467a4bd5210SJason Evans+void 468a4bd5210SJason Evans+wrtmessage_1_0(const char *s1, const char *s2, const char *s3, 469a4bd5210SJason Evans+ const char *s4) 470a4bd5210SJason Evans+{ 471a4bd5210SJason Evans+ 472a4bd5210SJason Evans+ wrtmessage(NULL, s1); 473a4bd5210SJason Evans+ wrtmessage(NULL, s2); 474a4bd5210SJason Evans+ wrtmessage(NULL, s3); 475a4bd5210SJason Evans+ wrtmessage(NULL, s4); 476a4bd5210SJason Evans+} 477a4bd5210SJason Evans+ 478a4bd5210SJason Evans+void (*__malloc_message_1_0)(const char *s1, const char *s2, const char *s3, 479a4bd5210SJason Evans+ const char *s4) = wrtmessage_1_0; 480a4bd5210SJason Evans+__sym_compat(_malloc_message, __malloc_message_1_0, FBSD_1.0); 481a4bd5210SJason Evans+ 482a4bd5210SJason Evans /* 483e722f8f8SJason Evans * Wrapper around malloc_message() that avoids the need for 484e722f8f8SJason Evans * je_malloc_message(...) throughout the code. 485