Remove --enable-ivsalloc.
Continue to use ivsalloc() when --enable-debug is specified (and add assertions to guard against 0 size), but stop providing a documented explicit semantics-changing band-aid to dodge undefined behavior in sallocx() and malloc_usable_size(). ivsalloc() remains compiled in, unlike when #211 restored --enable-ivsalloc, and if JEMALLOC_FORCE_IVSALLOC is defined during compilation, sallocx() and malloc_usable_size() will still use ivsalloc(). This partially resolves #580.
This commit is contained in:
parent
b2a8453a3f
commit
3823effe12
7
INSTALL
7
INSTALL
@ -104,7 +104,6 @@ any of the following arguments (not a definitive list) to 'configure':
|
|||||||
--enable-debug
|
--enable-debug
|
||||||
Enable assertions and validation code. This incurs a substantial
|
Enable assertions and validation code. This incurs a substantial
|
||||||
performance hit, but is very useful during application development.
|
performance hit, but is very useful during application development.
|
||||||
Implies --enable-ivsalloc.
|
|
||||||
|
|
||||||
--enable-code-coverage
|
--enable-code-coverage
|
||||||
Enable code coverage support, for use during jemalloc test development.
|
Enable code coverage support, for use during jemalloc test development.
|
||||||
@ -123,12 +122,6 @@ any of the following arguments (not a definitive list) to 'configure':
|
|||||||
Disable statistics gathering functionality. See the "opt.stats_print"
|
Disable statistics gathering functionality. See the "opt.stats_print"
|
||||||
option documentation for usage details.
|
option documentation for usage details.
|
||||||
|
|
||||||
--enable-ivsalloc
|
|
||||||
Enable validation code for malloc_usable_size() and sallocx(), which
|
|
||||||
verifies that pointers reside within jemalloc-owned extents before
|
|
||||||
dereferencing metadata. This incurs a minor performance hit, and causes
|
|
||||||
the functions to return 0 for failed lookups.
|
|
||||||
|
|
||||||
--enable-prof
|
--enable-prof
|
||||||
Enable heap profiling and leak detection functionality. See the "opt.prof"
|
Enable heap profiling and leak detection functionality. See the "opt.prof"
|
||||||
option documentation for usage details. When enabled, there are several
|
option documentation for usage details. When enabled, there are several
|
||||||
|
19
configure.ac
19
configure.ac
@ -958,7 +958,7 @@ fi
|
|||||||
dnl Do not compile with debugging by default.
|
dnl Do not compile with debugging by default.
|
||||||
AC_ARG_ENABLE([debug],
|
AC_ARG_ENABLE([debug],
|
||||||
[AS_HELP_STRING([--enable-debug],
|
[AS_HELP_STRING([--enable-debug],
|
||||||
[Build debugging code (implies --enable-ivsalloc)])],
|
[Build debugging code])],
|
||||||
[if test "x$enable_debug" = "xno" ; then
|
[if test "x$enable_debug" = "xno" ; then
|
||||||
enable_debug="0"
|
enable_debug="0"
|
||||||
else
|
else
|
||||||
@ -972,26 +972,9 @@ if test "x$enable_debug" = "x1" ; then
|
|||||||
fi
|
fi
|
||||||
if test "x$enable_debug" = "x1" ; then
|
if test "x$enable_debug" = "x1" ; then
|
||||||
AC_DEFINE([JEMALLOC_DEBUG], [ ])
|
AC_DEFINE([JEMALLOC_DEBUG], [ ])
|
||||||
enable_ivsalloc="1"
|
|
||||||
fi
|
fi
|
||||||
AC_SUBST([enable_debug])
|
AC_SUBST([enable_debug])
|
||||||
|
|
||||||
dnl Do not validate pointers by default.
|
|
||||||
AC_ARG_ENABLE([ivsalloc],
|
|
||||||
[AS_HELP_STRING([--enable-ivsalloc],
|
|
||||||
[Validate pointers passed through the public API])],
|
|
||||||
[if test "x$enable_ivsalloc" = "xno" ; then
|
|
||||||
enable_ivsalloc="0"
|
|
||||||
else
|
|
||||||
enable_ivsalloc="1"
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[enable_ivsalloc="0"]
|
|
||||||
)
|
|
||||||
if test "x$enable_ivsalloc" = "x1" ; then
|
|
||||||
AC_DEFINE([JEMALLOC_IVSALLOC], [ ])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Only optimize if not debugging.
|
dnl Only optimize if not debugging.
|
||||||
if test "x$enable_debug" = "x0" ; then
|
if test "x$enable_debug" = "x0" ; then
|
||||||
if test "x$GCC" = "xyes" ; then
|
if test "x$GCC" = "xyes" ; then
|
||||||
|
@ -224,12 +224,6 @@
|
|||||||
#undef JEMALLOC_INTERNAL_FFSL
|
#undef JEMALLOC_INTERNAL_FFSL
|
||||||
#undef JEMALLOC_INTERNAL_FFS
|
#undef JEMALLOC_INTERNAL_FFS
|
||||||
|
|
||||||
/*
|
|
||||||
* JEMALLOC_IVSALLOC enables ivsalloc(), which verifies that pointers reside
|
|
||||||
* within jemalloc-owned extents before dereferencing them.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_IVSALLOC
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If defined, explicitly attempt to more uniformly distribute large allocation
|
* If defined, explicitly attempt to more uniformly distribute large allocation
|
||||||
* pointer alignments across all cache indices.
|
* pointer alignments across all cache indices.
|
||||||
|
@ -132,13 +132,6 @@ static const bool config_xmalloc =
|
|||||||
false
|
false
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
static const bool config_ivsalloc =
|
|
||||||
#ifdef JEMALLOC_IVSALLOC
|
|
||||||
true
|
|
||||||
#else
|
|
||||||
false
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
static const bool config_cache_oblivious =
|
static const bool config_cache_oblivious =
|
||||||
#ifdef JEMALLOC_CACHE_OBLIVIOUS
|
#ifdef JEMALLOC_CACHE_OBLIVIOUS
|
||||||
true
|
true
|
||||||
@ -164,5 +157,16 @@ static const bool have_percpu_arena =
|
|||||||
false
|
false
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
/*
|
||||||
|
* Undocumented, and not recommended; the application should take full
|
||||||
|
* responsibility for tracking provenance.
|
||||||
|
*/
|
||||||
|
static const bool force_ivsalloc =
|
||||||
|
#ifdef JEMALLOC_FORCE_IVSALLOC
|
||||||
|
true
|
||||||
|
#else
|
||||||
|
false
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
#endif /* JEMALLOC_PREAMBLE_H */
|
#endif /* JEMALLOC_PREAMBLE_H */
|
||||||
|
@ -2678,12 +2678,14 @@ je_sallocx(const void *ptr, int flags) {
|
|||||||
tsdn_t *tsdn;
|
tsdn_t *tsdn;
|
||||||
|
|
||||||
assert(malloc_initialized() || IS_INITIALIZER);
|
assert(malloc_initialized() || IS_INITIALIZER);
|
||||||
|
assert(ptr != NULL);
|
||||||
|
|
||||||
tsdn = tsdn_fetch();
|
tsdn = tsdn_fetch();
|
||||||
witness_assert_lockless(tsdn);
|
witness_assert_lockless(tsdn);
|
||||||
|
|
||||||
if (config_ivsalloc) {
|
if (config_debug || force_ivsalloc) {
|
||||||
usize = ivsalloc(tsdn, ptr);
|
usize = ivsalloc(tsdn, ptr);
|
||||||
|
assert(force_ivsalloc || usize != 0);
|
||||||
} else {
|
} else {
|
||||||
usize = isalloc(tsdn, ptr);
|
usize = isalloc(tsdn, ptr);
|
||||||
}
|
}
|
||||||
@ -2885,10 +2887,15 @@ je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr) {
|
|||||||
tsdn = tsdn_fetch();
|
tsdn = tsdn_fetch();
|
||||||
witness_assert_lockless(tsdn);
|
witness_assert_lockless(tsdn);
|
||||||
|
|
||||||
if (config_ivsalloc) {
|
if (unlikely(ptr == NULL)) {
|
||||||
ret = ivsalloc(tsdn, ptr);
|
ret = 0;
|
||||||
} else {
|
} else {
|
||||||
ret = (ptr == NULL) ? 0 : isalloc(tsdn, ptr);
|
if (config_debug || force_ivsalloc) {
|
||||||
|
ret = ivsalloc(tsdn, ptr);
|
||||||
|
assert(force_ivsalloc || ret != 0);
|
||||||
|
} else {
|
||||||
|
ret = isalloc(tsdn, ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
witness_assert_lockless(tsdn);
|
witness_assert_lockless(tsdn);
|
||||||
|
Loading…
Reference in New Issue
Block a user