From b72a2d9659216dcf352a69287f39fec7798d305d Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 27 Aug 2019 18:43:50 +0100 Subject: [PATCH] macOS: anonymous page ID make it as env var. --- include/mimalloc.h | 1 + src/options.c | 3 ++- src/os.c | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/mimalloc.h b/include/mimalloc.h index 4f13bc1f..41514d3e 100644 --- a/include/mimalloc.h +++ b/include/mimalloc.h @@ -232,6 +232,7 @@ typedef enum mi_option_e { mi_option_page_reset, mi_option_cache_reset, mi_option_reset_decommits, + mi_option_os_tag, _mi_option_last } mi_option_t; diff --git a/src/options.c b/src/options.c index 16c50f11..5f2ad896 100644 --- a/src/options.c +++ b/src/options.c @@ -68,7 +68,8 @@ static mi_option_desc_t options[_mi_option_last] = { 0, UNINIT, MI_OPTION(segment_cache) }, // cache N segments per thread { 0, UNINIT, MI_OPTION(page_reset) }, { 0, UNINIT, MI_OPTION(cache_reset) }, - { 0, UNINIT, MI_OPTION(reset_decommits) } // note: cannot enable this if secure is on + { 0, UNINIT, MI_OPTION(reset_decommits) }, // note: cannot enable this if secure is on + { 100, UNINIT, MI_OPTION(os_tag) } // only apple specific for now but might serve more or less related purpose }; static void mi_option_init(mi_option_desc_t* desc); diff --git a/src/os.c b/src/os.c index fb36f3fc..0a733aa3 100644 --- a/src/os.c +++ b/src/os.c @@ -288,7 +288,9 @@ static void* mi_unix_mmap(size_t size, size_t try_alignment, int protect_flags) #endif #if defined(VM_MAKE_TAG) // macOS: tracking anonymous page with a specific ID. (All up to 98 are taken officially but LLVM sanitizers had taken 99) - fd = VM_MAKE_TAG(100); + int os_tag = (int)mi_option_get(mi_option_os_tag); + if (os_tag < 100 || os_tag > 255) os_tag = 100; + fd = VM_MAKE_TAG(os_tag); #endif if (use_large_os_page(size, try_alignment)) { static volatile _Atomic(uintptr_t) large_page_try_ok; // = 0;