summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2017-02-22 07:40:06 (GMT)
committerJason Evans <jasone@canonware.com>2017-02-23 18:06:15 (GMT)
commite85e588e45fd3bac1ddc3778e6f8bfe3f668f634 (patch)
treeaec8539e6baabd79cbfd6ce95aa2e5b3c1f144e4
parent3ecc3c84862ef3e66b20be8213b0301c06c692cc (diff)
downloadjemalloc-e85e588e45fd3bac1ddc3778e6f8bfe3f668f634.zip
jemalloc-e85e588e45fd3bac1ddc3778e6f8bfe3f668f634.tar.gz
jemalloc-e85e588e45fd3bac1ddc3778e6f8bfe3f668f634.tar.bz2
Use MALLOC_CONF rather than malloc_conf for tests.
malloc_conf does not reliably work with MSVC, which complains of "inconsistent dll linkage", i.e. its inability to support the application overriding malloc_conf when dynamically linking/loading. Work around this limitation by adding test harness support for per test shell script sourcing, and converting all tests to use MALLOC_CONF instead of malloc_conf.
-rw-r--r--test/integration/chunk.c4
-rw-r--r--test/integration/chunk.sh5
-rw-r--r--test/integration/mallocx.c4
-rw-r--r--test/integration/mallocx.sh5
-rw-r--r--test/integration/xallocx.c4
-rw-r--r--test/integration/xallocx.sh5
-rw-r--r--test/test.sh.in29
-rw-r--r--test/unit/arena_reset.c4
-rw-r--r--test/unit/arena_reset.sh5
-rw-r--r--test/unit/decay.c2
-rw-r--r--test/unit/decay.sh3
-rw-r--r--test/unit/junk.c8
-rw-r--r--test/unit/junk.sh5
-rw-r--r--test/unit/junk_alloc.c2
-rw-r--r--test/unit/junk_alloc.sh5
-rw-r--r--test/unit/junk_free.c2
-rw-r--r--test/unit/junk_free.sh5
-rw-r--r--test/unit/lg_chunk.c7
-rw-r--r--test/unit/lg_chunk.sh6
-rw-r--r--test/unit/pack.c8
-rw-r--r--test/unit/pack.sh5
-rw-r--r--test/unit/prof_accum.c5
-rw-r--r--test/unit/prof_accum.sh5
-rw-r--r--test/unit/prof_active.c5
-rw-r--r--test/unit/prof_active.sh5
-rw-r--r--test/unit/prof_gdump.c4
-rw-r--r--test/unit/prof_gdump.sh6
-rw-r--r--test/unit/prof_idump.c6
-rw-r--r--test/unit/prof_idump.sh7
-rw-r--r--test/unit/prof_reset.c5
-rw-r--r--test/unit/prof_reset.sh5
-rw-r--r--test/unit/prof_tctx.sh5
-rw-r--r--test/unit/prof_thread_name.c4
-rw-r--r--test/unit/prof_thread_name.sh5
-rw-r--r--test/unit/quarantine.c8
-rw-r--r--test/unit/quarantine.sh8
-rw-r--r--test/unit/zero.c5
-rw-r--r--test/unit/zero.sh5
38 files changed, 129 insertions, 87 deletions
diff --git a/test/integration/chunk.c b/test/integration/chunk.c
index 94cf002..997567a 100644
--- a/test/integration/chunk.c
+++ b/test/integration/chunk.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_FILL
-const char *malloc_conf = "junk:false";
-#endif
-
static chunk_hooks_t orig_hooks;
static chunk_hooks_t old_hooks;
diff --git a/test/integration/chunk.sh b/test/integration/chunk.sh
new file mode 100644
index 0000000..0cc2187
--- /dev/null
+++ b/test/integration/chunk.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="junk:false"
+fi
diff --git a/test/integration/mallocx.c b/test/integration/mallocx.c
index d709eb3..5a9058d 100644
--- a/test/integration/mallocx.c
+++ b/test/integration/mallocx.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_FILL
-const char *malloc_conf = "junk:false";
-#endif
-
static unsigned
get_nsizes_impl(const char *cmd)
{
diff --git a/test/integration/mallocx.sh b/test/integration/mallocx.sh
new file mode 100644
index 0000000..0cc2187
--- /dev/null
+++ b/test/integration/mallocx.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="junk:false"
+fi
diff --git a/test/integration/xallocx.c b/test/integration/xallocx.c
index 67e0a0e..2517a81 100644
--- a/test/integration/xallocx.c
+++ b/test/integration/xallocx.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_FILL
-const char *malloc_conf = "junk:false";
-#endif
-
/*
* Use a separate arena for xallocx() extension/contraction tests so that
* internal allocation e.g. by heap profiling can't interpose allocations where
diff --git a/test/integration/xallocx.sh b/test/integration/xallocx.sh
new file mode 100644
index 0000000..0cc2187
--- /dev/null
+++ b/test/integration/xallocx.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="junk:false"
+fi
diff --git a/test/test.sh.in b/test/test.sh.in
index a39f99f..f0f0f97 100644
--- a/test/test.sh.in
+++ b/test/test.sh.in
@@ -11,6 +11,18 @@ case @abi@ in
;;
esac
+# Make a copy of the @JEMALLOC_CPREFIX@MALLOC_CONF passed in to this script, so
+# it can be repeatedly concatenated with per test settings.
+export MALLOC_CONF_ALL=${@JEMALLOC_CPREFIX@MALLOC_CONF}
+# Concatenate the individual test's MALLOC_CONF and MALLOC_CONF_ALL.
+export_malloc_conf() {
+ if [ "x${MALLOC_CONF}" != "x" -a "x${MALLOC_CONF_ALL}" != "x" ] ; then
+ export @JEMALLOC_CPREFIX@MALLOC_CONF="${MALLOC_CONF},${MALLOC_CONF_ALL}"
+ else
+ export @JEMALLOC_CPREFIX@MALLOC_CONF="${MALLOC_CONF}${MALLOC_CONF_ALL}"
+ fi
+}
+
# Corresponds to test_status_t.
pass_code=0
skip_code=1
@@ -24,7 +36,22 @@ for t in $@; do
echo
fi
echo "=== ${t} ==="
- ${t}@exe@ @abs_srcroot@ @abs_objroot@
+ if [ -e "@srcroot@${t}.sh" ] ; then
+ # Source the shell script corresponding to the test in a subshell and
+ # execute the test. This allows the shell script to set MALLOC_CONF, which
+ # is then used to set @JEMALLOC_CPREFIX@MALLOC_CONF (thus allowing the
+ # per test shell script to ignore the @JEMALLOC_CPREFIX@ detail).
+ $(enable_fill=@enable_fill@ \
+ enable_prof=@enable_prof@ \
+ enable_tcache=@enable_tcache@ \
+ . @srcroot@${t}.sh && \
+ export_malloc_conf && \
+ ${t}@exe@ @abs_srcroot@ @abs_objroot@)
+ else
+ $(export MALLOC_CONF= && \
+ export_malloc_conf &&
+ ${t}@exe@ @abs_srcroot@ @abs_objroot@)
+ fi
result_code=$?
case ${result_code} in
${pass_code})
diff --git a/test/unit/arena_reset.c b/test/unit/arena_reset.c
index adf9baa..ec1c214 100644
--- a/test/unit/arena_reset.c
+++ b/test/unit/arena_reset.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf = "prof:true,lg_prof_sample:0";
-#endif
-
static unsigned
get_nsizes_impl(const char *cmd)
{
diff --git a/test/unit/arena_reset.sh b/test/unit/arena_reset.sh
new file mode 100644
index 0000000..8fcc7d8
--- /dev/null
+++ b/test/unit/arena_reset.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,lg_prof_sample:0"
+fi
diff --git a/test/unit/decay.c b/test/unit/decay.c
index 5af8f80..2d8d69d 100644
--- a/test/unit/decay.c
+++ b/test/unit/decay.c
@@ -1,7 +1,5 @@
#include "test/jemalloc_test.h"
-const char *malloc_conf = "purge:decay,decay_time:1";
-
static nstime_monotonic_t *nstime_monotonic_orig;
static nstime_update_t *nstime_update_orig;
diff --git a/test/unit/decay.sh b/test/unit/decay.sh
new file mode 100644
index 0000000..7b8f470
--- /dev/null
+++ b/test/unit/decay.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+export MALLOC_CONF="purge:decay,decay_time:1"
diff --git a/test/unit/junk.c b/test/unit/junk.c
index 460bd52..bbd83fb 100644
--- a/test/unit/junk.c
+++ b/test/unit/junk.c
@@ -1,13 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_FILL
-# ifndef JEMALLOC_TEST_JUNK_OPT
-# define JEMALLOC_TEST_JUNK_OPT "junk:true"
-# endif
-const char *malloc_conf =
- "abort:false,zero:false,redzone:true,quarantine:0," JEMALLOC_TEST_JUNK_OPT;
-#endif
-
static arena_dalloc_junk_small_t *arena_dalloc_junk_small_orig;
static arena_dalloc_junk_large_t *arena_dalloc_junk_large_orig;
static huge_dalloc_junk_t *huge_dalloc_junk_orig;
diff --git a/test/unit/junk.sh b/test/unit/junk.sh
new file mode 100644
index 0000000..e19c313
--- /dev/null
+++ b/test/unit/junk.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="abort:false,zero:false,redzone:true,quarantine:0,junk:true"
+fi
diff --git a/test/unit/junk_alloc.c b/test/unit/junk_alloc.c
index a5895b5..a442a0c 100644
--- a/test/unit/junk_alloc.c
+++ b/test/unit/junk_alloc.c
@@ -1,3 +1 @@
-#define JEMALLOC_TEST_JUNK_OPT "junk:alloc"
#include "junk.c"
-#undef JEMALLOC_TEST_JUNK_OPT
diff --git a/test/unit/junk_alloc.sh b/test/unit/junk_alloc.sh
new file mode 100644
index 0000000..984387d
--- /dev/null
+++ b/test/unit/junk_alloc.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="abort:false,zero:false,redzone:true,quarantine:0,junk:alloc"
+fi
diff --git a/test/unit/junk_free.c b/test/unit/junk_free.c
index bb5183c..a442a0c 100644
--- a/test/unit/junk_free.c
+++ b/test/unit/junk_free.c
@@ -1,3 +1 @@
-#define JEMALLOC_TEST_JUNK_OPT "junk:free"
#include "junk.c"
-#undef JEMALLOC_TEST_JUNK_OPT
diff --git a/test/unit/junk_free.sh b/test/unit/junk_free.sh
new file mode 100644
index 0000000..a5c21a5
--- /dev/null
+++ b/test/unit/junk_free.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="abort:false,zero:false,redzone:true,quarantine:0,junk:free"
+fi
diff --git a/test/unit/lg_chunk.c b/test/unit/lg_chunk.c
index 7e5df38..d4f77b7 100644
--- a/test/unit/lg_chunk.c
+++ b/test/unit/lg_chunk.c
@@ -1,12 +1,5 @@
#include "test/jemalloc_test.h"
-/*
- * Make sure that opt.lg_chunk clamping is sufficient. In practice, this test
- * program will fail a debug assertion during initialization and abort (rather
- * than the test soft-failing) if clamping is insufficient.
- */
-const char *malloc_conf = "lg_chunk:0";
-
TEST_BEGIN(test_lg_chunk_clamp)
{
void *p;
diff --git a/test/unit/lg_chunk.sh b/test/unit/lg_chunk.sh
new file mode 100644
index 0000000..103eef1
--- /dev/null
+++ b/test/unit/lg_chunk.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Make sure that opt.lg_chunk clamping is sufficient. In practice, this test
+# program will fail a debug assertion during initialization and abort (rather
+# than the test soft-failing) if clamping is insufficient.
+export MALLOC_CONF="lg_chunk:0"
diff --git a/test/unit/pack.c b/test/unit/pack.c
index 0b6ffcd..991faa6 100644
--- a/test/unit/pack.c
+++ b/test/unit/pack.c
@@ -1,13 +1,5 @@
#include "test/jemalloc_test.h"
-const char *malloc_conf =
- /* Use smallest possible chunk size. */
- "lg_chunk:0"
- /* Immediately purge to minimize fragmentation. */
- ",lg_dirty_mult:-1"
- ",decay_time:-1"
- ;
-
/*
* Size class that is a divisor of the page size, ideally 4+ regions per run.
*/
diff --git a/test/unit/pack.sh b/test/unit/pack.sh
new file mode 100644
index 0000000..a58151d
--- /dev/null
+++ b/test/unit/pack.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Use smallest possible chunk size. Immediately purge to minimize
+# fragmentation.
+export MALLOC_CONF="lg_chunk:0,lg_dirty_mult:-1,decay_time:-1"
diff --git a/test/unit/prof_accum.c b/test/unit/prof_accum.c
index d941b5b..031f083 100644
--- a/test/unit/prof_accum.c
+++ b/test/unit/prof_accum.c
@@ -5,11 +5,6 @@
#define DUMP_INTERVAL 1
#define BT_COUNT_CHECK_INTERVAL 5
-#ifdef JEMALLOC_PROF
-const char *malloc_conf =
- "prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0";
-#endif
-
static int
prof_dump_open_intercept(bool propagate_err, const char *filename)
{
diff --git a/test/unit/prof_accum.sh b/test/unit/prof_accum.sh
new file mode 100644
index 0000000..b3e13fc
--- /dev/null
+++ b/test/unit/prof_accum.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0"
+fi
diff --git a/test/unit/prof_active.c b/test/unit/prof_active.c
index d00943a..a906beb 100644
--- a/test/unit/prof_active.c
+++ b/test/unit/prof_active.c
@@ -1,10 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf =
- "prof:true,prof_thread_active_init:false,lg_prof_sample:0";
-#endif
-
static void
mallctl_bool_get(const char *name, bool expected, const char *func, int line)
{
diff --git a/test/unit/prof_active.sh b/test/unit/prof_active.sh
new file mode 100644
index 0000000..0167cb1
--- /dev/null
+++ b/test/unit/prof_active.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_thread_active_init:false,lg_prof_sample:0"
+fi
diff --git a/test/unit/prof_gdump.c b/test/unit/prof_gdump.c
index 996cb67..b88a74c 100644
--- a/test/unit/prof_gdump.c
+++ b/test/unit/prof_gdump.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf = "prof:true,prof_active:false,prof_gdump:true";
-#endif
-
static bool did_prof_dump_open;
static int
diff --git a/test/unit/prof_gdump.sh b/test/unit/prof_gdump.sh
new file mode 100644
index 0000000..3f600d2
--- /dev/null
+++ b/test/unit/prof_gdump.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_active:false,prof_gdump:true"
+fi
+
diff --git a/test/unit/prof_idump.c b/test/unit/prof_idump.c
index 16c6462..87734a4 100644
--- a/test/unit/prof_idump.c
+++ b/test/unit/prof_idump.c
@@ -1,11 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf =
- "prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0,"
- "lg_prof_interval:0";
-#endif
-
static bool did_prof_dump_open;
static int
diff --git a/test/unit/prof_idump.sh b/test/unit/prof_idump.sh
new file mode 100644
index 0000000..08a1b62
--- /dev/null
+++ b/test/unit/prof_idump.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0,lg_prof_interval:0"
+fi
+
+
diff --git a/test/unit/prof_reset.c b/test/unit/prof_reset.c
index 59d7079..87b0d0c 100644
--- a/test/unit/prof_reset.c
+++ b/test/unit/prof_reset.c
@@ -1,10 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf =
- "prof:true,prof_active:false,lg_prof_sample:0";
-#endif
-
static int
prof_dump_open_intercept(bool propagate_err, const char *filename)
{
diff --git a/test/unit/prof_reset.sh b/test/unit/prof_reset.sh
new file mode 100644
index 0000000..43c516a
--- /dev/null
+++ b/test/unit/prof_reset.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_active:false,lg_prof_sample:0"
+fi
diff --git a/test/unit/prof_tctx.sh b/test/unit/prof_tctx.sh
new file mode 100644
index 0000000..8fcc7d8
--- /dev/null
+++ b/test/unit/prof_tctx.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,lg_prof_sample:0"
+fi
diff --git a/test/unit/prof_thread_name.c b/test/unit/prof_thread_name.c
index 9ec5497..3251853 100644
--- a/test/unit/prof_thread_name.c
+++ b/test/unit/prof_thread_name.c
@@ -1,9 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_PROF
-const char *malloc_conf = "prof:true,prof_active:false";
-#endif
-
static void
mallctl_thread_name_get_impl(const char *thread_name_expected, const char *func,
int line)
diff --git a/test/unit/prof_thread_name.sh b/test/unit/prof_thread_name.sh
new file mode 100644
index 0000000..298c105
--- /dev/null
+++ b/test/unit/prof_thread_name.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_prof}" = "x1" ] ; then
+ export MALLOC_CONF="prof:true,prof_active:false"
+fi
diff --git a/test/unit/quarantine.c b/test/unit/quarantine.c
index bbd48a5..6068768 100644
--- a/test/unit/quarantine.c
+++ b/test/unit/quarantine.c
@@ -1,13 +1,7 @@
#include "test/jemalloc_test.h"
+/* Keep in sync with definition in quarantine.sh. */
#define QUARANTINE_SIZE 8192
-#define STRINGIFY_HELPER(x) #x
-#define STRINGIFY(x) STRINGIFY_HELPER(x)
-
-#ifdef JEMALLOC_FILL
-const char *malloc_conf = "abort:false,junk:true,redzone:true,quarantine:"
- STRINGIFY(QUARANTINE_SIZE);
-#endif
void
quarantine_clear(void)
diff --git a/test/unit/quarantine.sh b/test/unit/quarantine.sh
new file mode 100644
index 0000000..e3c6932
--- /dev/null
+++ b/test/unit/quarantine.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Keep in sync with definition in quarantine.c.
+export QUARANTINE_SIZE=8192
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="abort:false,junk:true,redzone:true,quarantine:${QUARANTINE_SIZE}"
+fi
diff --git a/test/unit/zero.c b/test/unit/zero.c
index 30ebe37..573993a 100644
--- a/test/unit/zero.c
+++ b/test/unit/zero.c
@@ -1,10 +1,5 @@
#include "test/jemalloc_test.h"
-#ifdef JEMALLOC_FILL
-const char *malloc_conf =
- "abort:false,junk:false,zero:true,redzone:false,quarantine:0";
-#endif
-
static void
test_zero(size_t sz_min, size_t sz_max)
{
diff --git a/test/unit/zero.sh b/test/unit/zero.sh
new file mode 100644
index 0000000..24488f0
--- /dev/null
+++ b/test/unit/zero.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [ "x${enable_fill}" = "x1" ] ; then
+ export MALLOC_CONF="abort:false,junk:false,zero:true,redzone:false,quarantine:0"
+fi