diff options
| author | Christopher Ferris <cferris@google.com> | 2018-09-28 12:50:26 -0700 |
|---|---|---|
| committer | Christopher Ferris <cferris@google.com> | 2018-11-01 14:43:50 -0700 |
| commit | c6954b2064a82404e747d9a763fe8e8d7135e202 (patch) | |
| tree | edfab0d3bede0c1543553156ed93fe4d1f021938 /include | |
| parent | 109c8749ed17bb1b000360a8a69852f0eab605fa (diff) | |
| download | platform_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.h | 9 | ||||
| -rw-r--r-- | include/jemalloc/internal/jemalloc_internal_defs_host.h | 2 | ||||
| -rw-r--r-- | include/jemalloc/internal/rtree.h | 38 | ||||
| -rw-r--r-- | include/jemalloc/jemalloc_rename.h | 2 |
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 |
