Module Name: src
Committed By: christos
Date: Thu Mar 14 18:56:12 UTC 2019
Modified Files:
src/external/bsd/jemalloc/dist/src: prof.c
src/external/bsd/jemalloc/include/jemalloc/internal:
jemalloc_preamble.h
Log Message:
Remove __clang___ hacks for noreturn, reduce footprint when we don't compile
with JEMALLOC_PROF. More to do here.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/jemalloc/dist/src/prof.c
cvs rdiff -u -r1.1 -r1.2 \
src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/jemalloc/dist/src/prof.c
diff -u src/external/bsd/jemalloc/dist/src/prof.c:1.3 src/external/bsd/jemalloc/dist/src/prof.c:1.4
--- src/external/bsd/jemalloc/dist/src/prof.c:1.3 Sun Mar 10 15:34:30 2019
+++ src/external/bsd/jemalloc/dist/src/prof.c Thu Mar 14 14:56:12 2019
@@ -78,7 +78,9 @@ size_t lg_prof_sample;
* creating/destroying mutexes.
*/
static malloc_mutex_t *gctx_locks;
+#ifdef JEMALLOC_PROF
static atomic_u_t cum_gctxs; /* Atomic counter. */
+#endif
/*
* Table of mutexes that are shared among tdata's. No operations require
@@ -103,14 +105,18 @@ malloc_mutex_t bt2gctx_mtx;
static prof_tdata_tree_t tdatas;
static malloc_mutex_t tdatas_mtx;
+#ifdef JEMALLOC_PROF
static uint64_t next_thr_uid;
+#endif
static malloc_mutex_t next_thr_uid_mtx;
static malloc_mutex_t prof_dump_seq_mtx;
+#ifdef JEMALLOC_PROF
static uint64_t prof_dump_seq;
static uint64_t prof_dump_iseq;
static uint64_t prof_dump_mseq;
static uint64_t prof_dump_useq;
+#endif
/*
* This buffer is rather large for stack allocation, so use a single buffer for
@@ -128,8 +134,10 @@ static char prof_dump_buf[
static size_t prof_dump_buf_end;
static int prof_dump_fd;
+#ifdef JEMALLOC_PROF
/* Do not dump any profiles until bootstrapping is complete. */
static bool prof_booted = false;
+#endif
/******************************************************************************/
/*
@@ -143,7 +151,9 @@ static bool prof_tdata_should_destroy(ts
bool even_if_attached);
static void prof_tdata_destroy(tsd_t *tsd, prof_tdata_t *tdata,
bool even_if_attached);
+#ifdef JEMALLOC_PROF
static char *prof_thread_name_alloc(tsdn_t *tsdn, const char *thread_name);
+#endif
/******************************************************************************/
/* Red-black trees. */
@@ -207,7 +217,7 @@ rb_gen(static UNUSED, tdata_tree_, prof_
/******************************************************************************/
-JEMALLOC_NORETURN void
+JEMALLOC_PROF_NORETURN void
prof_alloc_rollback(tsd_t *tsd, prof_tctx_t *tctx, bool updated) {
prof_tdata_t *tdata;
@@ -237,7 +247,7 @@ prof_alloc_rollback(tsd_t *tsd, prof_tct
}
}
-JEMALLOC_NORETURN void
+JEMALLOC_PROF_NORETURN void
prof_malloc_sample_object(tsdn_t *tsdn, const void *ptr, size_t usize,
prof_tctx_t *tctx) {
prof_tctx_set(tsdn, ptr, usize, NULL, tctx);
@@ -268,7 +278,7 @@ prof_free_sampled_object(tsd_t *tsd, siz
}
}
-JEMALLOC_NORETURN void
+JEMALLOC_PROF_NORETURN void
bt_init(prof_bt_t *bt, void **vec) {
cassert(config_prof);
@@ -276,7 +286,7 @@ bt_init(prof_bt_t *bt, void **vec) {
bt->len = 0;
}
-static JEMALLOC_NORETURN void
+static JEMALLOC_PROF_NORETURN void
prof_enter(tsd_t *tsd, prof_tdata_t *tdata) {
cassert(config_prof);
assert(tdata == prof_tdata_get(tsd, false));
@@ -289,7 +299,7 @@ prof_enter(tsd_t *tsd, prof_tdata_t *tda
malloc_mutex_lock(tsd_tsdn(tsd), &bt2gctx_mtx);
}
-static JEMALLOC_NORETURN void
+static JEMALLOC_PROF_NORETURN void
prof_leave(tsd_t *tsd, prof_tdata_t *tdata) {
cassert(config_prof);
assert(tdata == prof_tdata_get(tsd, false));
@@ -537,6 +547,7 @@ prof_backtrace(prof_bt_t *bt) {
}
#endif
+#ifdef JEMALLOC_PROF
static malloc_mutex_t *
prof_gctx_mutex_choose(void) {
unsigned ngctxs = atomic_fetch_add_u(&cum_gctxs, 1, ATOMIC_RELAXED);
@@ -574,8 +585,9 @@ prof_gctx_create(tsdn_t *tsdn, prof_bt_t
gctx->bt.len = bt->len;
return gctx;
}
+#endif
-static JEMALLOC_NORETURN void
+static JEMALLOC_PROF_NORETURN void
prof_gctx_try_destroy(tsd_t *tsd, prof_tdata_t *tdata_self, prof_gctx_t *gctx,
prof_tdata_t *tdata) {
cassert(config_prof);
@@ -716,6 +728,7 @@ prof_tctx_destroy(tsd_t *tsd, prof_tctx_
}
}
+#ifdef JEMALLOC_PROF
static bool
prof_lookup_global(tsd_t *tsd, prof_bt_t *bt, prof_tdata_t *tdata,
void **p_btkey, prof_gctx_t **p_gctx, bool *p_new_gctx) {
@@ -780,9 +793,12 @@ prof_lookup_global(tsd_t *tsd, prof_bt_t
*p_new_gctx = new_gctx;
return false;
}
+#endif
-prof_tctx_t *
+JEMALLOC_PROF_NORETURN prof_tctx_t *
prof_lookup(tsd_t *tsd, prof_bt_t *bt) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
union {
prof_tctx_t *p;
void *v;
@@ -790,8 +806,6 @@ prof_lookup(tsd_t *tsd, prof_bt_t *bt) {
prof_tdata_t *tdata;
bool not_found;
- cassert(config_prof);
-
tdata = prof_tdata_get(tsd, false);
if (tdata == NULL) {
return NULL;
@@ -853,6 +867,7 @@ prof_lookup(tsd_t *tsd, prof_bt_t *bt) {
}
return ret.p;
+#endif
}
/*
@@ -994,6 +1009,7 @@ prof_dump_flush(bool propagate_err) {
return ret;
}
+#ifdef JEMALLOC_PROF
static bool
prof_dump_close(bool propagate_err) {
bool ret;
@@ -1005,6 +1021,7 @@ prof_dump_close(bool propagate_err) {
return ret;
}
+#endif
static bool
prof_dump_write(bool propagate_err, const char *s) {
@@ -1052,6 +1069,7 @@ prof_dump_printf(bool propagate_err, con
return ret;
}
+#ifdef JEMALLOC_PROF
static void
prof_tctx_merge_tdata(tsdn_t *tsdn, prof_tctx_t *tctx, prof_tdata_t *tdata) {
malloc_mutex_assert_owner(tsdn, tctx->tdata->lock);
@@ -1175,9 +1193,8 @@ label_return:
return ret;
}
-static JEMALLOC_NORETURN void
+static void
prof_dump_gctx_prep(tsdn_t *tsdn, prof_gctx_t *gctx, prof_gctx_tree_t *gctxs) {
- cassert(config_prof);
malloc_mutex_lock(tsdn, gctx->lock);
@@ -1300,6 +1317,7 @@ prof_tdata_merge_iter(prof_tdata_tree_t
return NULL;
}
+#endif
static prof_tdata_t *
prof_tdata_dump_iter(prof_tdata_tree_t *tdatasunused, prof_tdata_t *tdata,
@@ -1343,6 +1361,7 @@ prof_dump_header_impl(tsdn_t *tsdn, bool
}
prof_dump_header_t *JET_MUTABLE prof_dump_header = prof_dump_header_impl;
+#ifdef JEMALLOC_PROF
static bool
prof_dump_gctx(tsdn_t *tsdn, bool propagate_err, prof_gctx_t *gctx,
const prof_bt_t *bt, prof_gctx_tree_t *gctxs) {
@@ -1495,7 +1514,6 @@ label_return:
static void
prof_leakcheck(const prof_cnt_t *cnt_all, size_t leak_ngctx,
const char *filename) {
-#ifdef JEMALLOC_PROF
/*
* Scaling is equivalent AdjustSamples() in jeprof, but the result may
* differ slightly from what jeprof reports, because here we scale the
@@ -1520,7 +1538,6 @@ prof_leakcheck(const prof_cnt_t *cnt_all
"<jemalloc>: Run jeprof on \"%s\" for leak detail\n",
filename);
}
-#endif
}
struct prof_gctx_dump_iter_arg_s {
@@ -1548,7 +1565,7 @@ label_return:
return ret;
}
-static JEMALLOC_NORETURN void
+static void
prof_dump_prep(tsd_t *tsd, prof_tdata_t *tdata,
struct prof_tdata_merge_iter_arg_s *prof_tdata_merge_iter_arg,
struct prof_gctx_merge_iter_arg_s *prof_gctx_merge_iter_arg,
@@ -1669,6 +1686,7 @@ prof_dump(tsd_t *tsd, bool propagate_err
}
return false;
}
+#endif
#ifdef JEMALLOC_JET
void
@@ -1717,9 +1735,10 @@ prof_cnt_all(uint64_t *curobjs, uint64_t
}
#endif
+#ifdef JEMALLOC_PROF
#define DUMP_FILENAME_BUFSIZE (PATH_MAX + 1)
#define VSEQ_INVALID UINT64_C(0xffffffffffffffff)
-static JEMALLOC_NORETURN void
+static void
prof_dump_filename(char *filename, char v, uint64_t vseq) {
cassert(config_prof);
@@ -1739,11 +1758,10 @@ prof_dump_filename(char *filename, char
static void
prof_fdump(void) {
+ cassert(config_prof);
tsd_t *tsd;
char filename[DUMP_FILENAME_BUFSIZE];
-#ifndef __clang__
- cassert(config_prof);
-#endif
+
assert(opt_prof_final);
assert(opt_prof_prefix[0] != '\0');
@@ -1758,11 +1776,12 @@ prof_fdump(void) {
malloc_mutex_unlock(tsd_tsdn(tsd), &prof_dump_seq_mtx);
prof_dump(tsd, false, filename, opt_prof_leak);
}
+#endif
-bool
+JEMALLOC_PROF_NORETURN bool
prof_accum_init(tsdn_t *tsdn, prof_accum_t *prof_accum) {
cassert(config_prof);
-
+#ifdef JEMALLOC_PROF
#ifndef JEMALLOC_ATOMIC_U64
if (malloc_mutex_init(&prof_accum->mtx, "prof_accum",
WITNESS_RANK_PROF_ACCUM, malloc_mutex_rank_exclusive)) {
@@ -1773,15 +1792,15 @@ prof_accum_init(tsdn_t *tsdn, prof_accum
atomic_store_u64(&prof_accum->accumbytes, 0, ATOMIC_RELAXED);
#endif
return false;
+#endif
}
-void
+JEMALLOC_PROF_NORETURN void
prof_idump(tsdn_t *tsdn) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
tsd_t *tsd;
prof_tdata_t *tdata;
-#ifndef __clang__
- cassert(config_prof);
-#endif
if (!prof_booted || tsdn_null(tsdn) || !prof_active_get_unlocked()) {
return;
@@ -1808,11 +1827,13 @@ prof_idump(tsdn_t *tsdn) {
malloc_mutex_unlock(tsd_tsdn(tsd), &prof_dump_seq_mtx);
prof_dump(tsd, false, filename, false);
}
+#endif
}
-bool
+JEMALLOC_PROF_NORETURN bool
prof_mdump(tsd_t *tsd, const char *filename) {
cassert(config_prof);
+#ifdef JEMALLOC_PROF
assert(tsd_reentrancy_level_get(tsd) == 0);
if (!opt_prof || !prof_booted) {
@@ -1831,15 +1852,15 @@ prof_mdump(tsd_t *tsd, const char *filen
filename = filename_buf;
}
return prof_dump(tsd, true, filename, false);
+#endif
}
-void
+JEMALLOC_PROF_NORETURN void
prof_gdump(tsdn_t *tsdn) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
tsd_t *tsd;
prof_tdata_t *tdata;
-#ifndef __clang__
- cassert(config_prof);
-#endif
if (!prof_booted || tsdn_null(tsdn) || !prof_active_get_unlocked()) {
return;
@@ -1866,9 +1887,11 @@ prof_gdump(tsdn_t *tsdn) {
malloc_mutex_unlock(tsdn, &prof_dump_seq_mtx);
prof_dump(tsd, false, filename, false);
}
+#endif
}
-static JEMALLOC_NORETURN void
+#ifdef JEMALLOC_PROF
+static void
prof_bt_hash(const void *key, size_t r_hash[2]) {
const prof_bt_t *bt = (const prof_bt_t *)key;
@@ -1947,11 +1970,15 @@ prof_tdata_init_impl(tsd_t *tsd, uint64_
return tdata;
}
+#endif
-prof_tdata_t *
+JEMALLOC_PROF_NORETURN prof_tdata_t *
prof_tdata_init(tsd_t *tsd) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
return prof_tdata_init_impl(tsd, prof_thr_uid_alloc(tsd_tsdn(tsd)), 0,
NULL, prof_thread_active_init_get(tsd_tsdn(tsd)));
+#endif
}
static bool
@@ -2022,8 +2049,10 @@ prof_tdata_detach(tsd_t *tsd, prof_tdata
}
}
-prof_tdata_t *
+JEMALLOC_PROF_NORETURN prof_tdata_t *
prof_tdata_reinit(tsd_t *tsd, prof_tdata_t *tdata) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
uint64_t thr_uid = tdata->thr_uid;
uint64_t thr_discrim = tdata->thr_discrim + 1;
char *thread_name = (tdata->thread_name != NULL) ?
@@ -2033,6 +2062,7 @@ prof_tdata_reinit(tsd_t *tsd, prof_tdata
prof_tdata_detach(tsd, tdata);
return prof_tdata_init_impl(tsd, thr_uid, thr_discrim, thread_name,
active);
+#endif
}
static bool
@@ -2122,8 +2152,10 @@ prof_active_set(tsdn_t *tsdn, bool activ
return prof_active_old;
}
-const char *
+JEMALLOC_PROF_NORETURN const char *
prof_thread_name_get(tsd_t *tsd) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
prof_tdata_t *tdata;
tdata = prof_tdata_get(tsd, true);
@@ -2131,8 +2163,10 @@ prof_thread_name_get(tsd_t *tsd) {
return "";
}
return (tdata->thread_name != NULL ? tdata->thread_name : "");
+#endif
}
+#ifdef JEMALLOC_PROF
static char *
prof_thread_name_alloc(tsdn_t *tsdn, const char *thread_name) {
char *ret;
@@ -2155,9 +2189,12 @@ prof_thread_name_alloc(tsdn_t *tsdn, con
memcpy(ret, thread_name, size);
return ret;
}
+#endif
-int
+JEMALLOC_PROF_NORETURN int
prof_thread_name_set(tsd_t *tsd, const char *thread_name) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
prof_tdata_t *tdata;
unsigned i;
char *s;
@@ -2192,10 +2229,13 @@ prof_thread_name_set(tsd_t *tsd, const c
tdata->thread_name = s;
}
return 0;
+#endif
}
-bool
+JEMALLOC_PROF_NORETURN bool
prof_thread_active_get(tsd_t *tsd) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
prof_tdata_t *tdata;
tdata = prof_tdata_get(tsd, true);
@@ -2203,10 +2243,13 @@ prof_thread_active_get(tsd_t *tsd) {
return false;
}
return tdata->active;
+#endif
}
-bool
+JEMALLOC_PROF_NORETURN bool
prof_thread_active_set(tsd_t *tsd, bool active) {
+ cassert(config_prof);
+#ifdef JEMALLOC_PROF
prof_tdata_t *tdata;
tdata = prof_tdata_get(tsd, true);
@@ -2215,6 +2258,7 @@ prof_thread_active_set(tsd_t *tsd, bool
}
tdata->active = active;
return false;
+#endif
}
bool
@@ -2259,7 +2303,7 @@ prof_gdump_set(tsdn_t *tsdn, bool gdump)
return prof_gdump_old;
}
-JEMALLOC_NORETURN void
+JEMALLOC_PROF_NORETURN void
prof_boot0(void) {
cassert(config_prof);
@@ -2267,7 +2311,7 @@ prof_boot0(void) {
sizeof(PROF_PREFIX_DEFAULT));
}
-JEMALLOC_NORETURN void
+JEMALLOC_PROF_NORETURN void
prof_boot1(void) {
cassert(config_prof);
@@ -2291,10 +2335,10 @@ prof_boot1(void) {
}
}
-bool
+JEMALLOC_PROF_NORETURN bool
prof_boot2(tsd_t *tsd) {
cassert(config_prof);
-
+#ifdef JEMALLOC_PROF
if (opt_prof) {
unsigned i;
@@ -2398,6 +2442,7 @@ prof_boot2(tsd_t *tsd) {
prof_booted = true;
return false;
+#endif
}
void
Index: src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h
diff -u src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h:1.1 src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h:1.2
--- src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h:1.1 Mon Mar 4 12:25:09 2019
+++ src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_preamble.h Thu Mar 14 14:56:12 2019
@@ -89,8 +89,10 @@ static const bool config_lazy_lock =
static const char * const config_malloc_conf = JEMALLOC_CONFIG_MALLOC_CONF;
static const bool config_prof =
#ifdef JEMALLOC_PROF
+# define JEMALLOC_PROF_NORETURN
true
#else
+# define JEMALLOC_PROF_NORETURN JEMALLOC_NORETURN
false
#endif
;