aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2018-09-28 12:50:26 -0700
committerChristopher Ferris <cferris@google.com>2018-11-01 14:43:50 -0700
commitc6954b2064a82404e747d9a763fe8e8d7135e202 (patch)
treeedfab0d3bede0c1543553156ed93fe4d1f021938 /include
parent109c8749ed17bb1b000360a8a69852f0eab605fa (diff)
downloadplatform_external_jemalloc_new-c6954b2064a82404e747d9a763fe8e8d7135e202.tar.gz
platform_external_jemalloc_new-c6954b2064a82404e747d9a763fe8e8d7135e202.tar.bz2
platform_external_jemalloc_new-c6954b2064a82404e747d9a763fe8e8d7135e202.zip
Further updates to jemalloc code.
Add support for svelte. Add je_iterate support. Update some of the internals so that bad pointers in je_iterate do not crash. Test: Ran new bionic unit tests, ran libmemunreachable tests, booted system. Change-Id: I04171cf88df16d8dc2c2ebb60327e58b915b9d83
Diffstat (limited to 'include')
-rw-r--r--include/jemalloc/internal/jemalloc_internal_defs.h9
-rw-r--r--include/jemalloc/internal/jemalloc_internal_defs_host.h2
-rw-r--r--include/jemalloc/internal/rtree.h38
-rw-r--r--include/jemalloc/jemalloc_rename.h2
4 files changed, 40 insertions, 11 deletions
diff --git a/include/jemalloc/internal/jemalloc_internal_defs.h b/include/jemalloc/internal/jemalloc_internal_defs.h
index 29948a2c..15886468 100644
--- a/include/jemalloc/internal/jemalloc_internal_defs.h
+++ b/include/jemalloc/internal/jemalloc_internal_defs.h
@@ -1,4 +1,6 @@
-#if !defined(__ANDROID__)
+/* Include cdefs to see if __BIONIC__ is set */
+#include <sys/cdefs.h>
+#if !defined(__BIONIC__)
#include "jemalloc_internal_defs_host.h"
#else
/* include/jemalloc/internal/jemalloc_internal_defs.h. Generated from jemalloc_internal_defs.h.in by configure. */
@@ -297,12 +299,13 @@
* MADV_FREE, though typically with higher
* system overhead.
*/
-#define JEMALLOC_PURGE_MADVISE_FREE
+/* MADV_FREE available since kernel 4.5 but not all devices support this yet. */
+/* #undef JEMALLOC_PURGE_MADVISE_FREE */
#define JEMALLOC_PURGE_MADVISE_DONTNEED
#define JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS
/* Defined if madvise(2) is available but MADV_FREE is not (x86 Linux only). */
-/* #undef JEMALLOC_DEFINE_MADVISE_FREE */
+#define JEMALLOC_DEFINE_MADVISE_FREE
/*
* Defined if MADV_DO[NT]DUMP is supported as an argument to madvise.
diff --git a/include/jemalloc/internal/jemalloc_internal_defs_host.h b/include/jemalloc/internal/jemalloc_internal_defs_host.h
index 480a8356..38f91bc2 100644
--- a/include/jemalloc/internal/jemalloc_internal_defs_host.h
+++ b/include/jemalloc/internal/jemalloc_internal_defs_host.h
@@ -334,7 +334,9 @@
#define LG_SIZEOF_INTMAX_T 3
/* glibc malloc hooks (__malloc_hook, __realloc_hook, __free_hook). */
+#if !defined(__ANDROID__)
#define JEMALLOC_GLIBC_MALLOC_HOOK
+#endif
/* glibc memalign hook. */
#define JEMALLOC_GLIBC_MEMALIGN_HOOK
diff --git a/include/jemalloc/internal/rtree.h b/include/jemalloc/internal/rtree.h
index b59d33a8..2124b095 100644
--- a/include/jemalloc/internal/rtree.h
+++ b/include/jemalloc/internal/rtree.h
@@ -336,7 +336,12 @@ rtree_leaf_elm_lookup(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
/* Fast path: L1 direct mapped cache. */
if (likely(rtree_ctx->cache[slot].leafkey == leafkey)) {
rtree_leaf_elm_t *leaf = rtree_ctx->cache[slot].leaf;
- assert(leaf != NULL);
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* assert(leaf != NULL); */
+ if (leaf == NULL) {
+ return NULL;
+ }
+ /* ANDROID END CHANGE */
uintptr_t subkey = rtree_subkey(key, RTREE_HEIGHT-1);
return &leaf[subkey];
}
@@ -347,7 +352,12 @@ rtree_leaf_elm_lookup(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
#define RTREE_CACHE_CHECK_L2(i) do { \
if (likely(rtree_ctx->l2_cache[i].leafkey == leafkey)) { \
rtree_leaf_elm_t *leaf = rtree_ctx->l2_cache[i].leaf; \
- assert(leaf != NULL); \
+ /* ANDROID CHANGE: Bad pointers return NULL */ \
+ /* assert(leaf != NULL); */ \
+ if (leaf == NULL) { \
+ return NULL; \
+ } \
+ /* ANDROID END CHANGE */ \
if (i > 0) { \
/* Bubble up by one. */ \
rtree_ctx->l2_cache[i].leafkey = \
@@ -405,7 +415,10 @@ rtree_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx, uintptr_t key,
bool dependent) {
rtree_leaf_elm_t *elm = rtree_leaf_elm_lookup(tsdn, rtree, rtree_ctx,
key, dependent, false);
- if (!dependent && elm == NULL) {
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* if (!dependent && elm == NULL) { */
+ if (elm == NULL) {
+ /* ANDROID END CHANGE */
return NULL;
}
assert(elm != NULL);
@@ -417,7 +430,10 @@ rtree_extent_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
uintptr_t key, bool dependent) {
rtree_leaf_elm_t *elm = rtree_read(tsdn, rtree, rtree_ctx, key,
dependent);
- if (!dependent && elm == NULL) {
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* if (!dependent && elm == NULL) { */
+ if (elm == NULL) {
+ /* ANDROID END CHANGE */
return NULL;
}
return rtree_leaf_elm_extent_read(tsdn, rtree, elm, dependent);
@@ -428,7 +444,9 @@ rtree_szind_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
uintptr_t key, bool dependent) {
rtree_leaf_elm_t *elm = rtree_read(tsdn, rtree, rtree_ctx, key,
dependent);
- if (!dependent && elm == NULL) {
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* if (!dependent && elm == NULL) { */
+ if (elm == NULL) {
return NSIZES;
}
return rtree_leaf_elm_szind_read(tsdn, rtree, elm, dependent);
@@ -444,7 +462,10 @@ rtree_extent_szind_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
uintptr_t key, bool dependent, extent_t **r_extent, szind_t *r_szind) {
rtree_leaf_elm_t *elm = rtree_read(tsdn, rtree, rtree_ctx, key,
dependent);
- if (!dependent && elm == NULL) {
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* if (!dependent && elm == NULL) { */
+ if (elm == NULL) {
+ /* ANDROID END CHANGE */
return true;
}
*r_extent = rtree_leaf_elm_extent_read(tsdn, rtree, elm, dependent);
@@ -457,7 +478,10 @@ rtree_szind_slab_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
uintptr_t key, bool dependent, szind_t *r_szind, bool *r_slab) {
rtree_leaf_elm_t *elm = rtree_read(tsdn, rtree, rtree_ctx, key,
dependent);
- if (!dependent && elm == NULL) {
+ /* ANDROID CHANGE: Bad pointers return NULL */
+ /* if (!dependent && elm == NULL) { */
+ if (elm == NULL) {
+ /* ANDROID END CHANGE */
return true;
}
#ifdef RTREE_LEAF_COMPACT
diff --git a/include/jemalloc/jemalloc_rename.h b/include/jemalloc/jemalloc_rename.h
index c5cefd8d..2784243e 100644
--- a/include/jemalloc/jemalloc_rename.h
+++ b/include/jemalloc/jemalloc_rename.h
@@ -4,7 +4,7 @@
* these macro definitions.
*/
#ifndef JEMALLOC_NO_RENAME
-#if defined(__ANDROID__)
+#if defined(__BIONIC__)
# define je_aligned_alloc je_aligned_alloc
# define je_calloc je_calloc
# define je_dallocx je_dallocx