From 0c550d1626e2282a7dbd211342699abd6e4178f0 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 10 Jul 2020 03:23:20 +0100 Subject: [PATCH] illumos support/build fix and large page support --- include/mimalloc-internal.h | 4 ++++ src/os.c | 10 ++++++++++ src/random.c | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index 35413315..c0a084c2 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -241,6 +241,10 @@ static inline bool mi_malloc_satisfies_alignment(size_t alignment, size_t size) static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) { #if __has_builtin(__builtin_umul_overflow) || __GNUC__ >= 5 #include // UINT_MAX, ULONG_MAX +#if defined(_CLOCK_T) +#undef _CLOCK_T +#endif + #if (SIZE_MAX == UINT_MAX) return __builtin_umul_overflow(count, size, total); #elif (SIZE_MAX == ULONG_MAX) diff --git a/src/os.c b/src/os.c index 1d6df907..08283ef5 100644 --- a/src/os.c +++ b/src/os.c @@ -401,6 +401,16 @@ static void* mi_unix_mmap(void* addr, size_t size, size_t try_alignment, int pro }; } #endif + #if defined(__sun) + if (allow_large && use_large_os_page(size, try_alignment)) { + struct memcntl_mha cmd = {0}; + cmd.mha_pagesize = large_os_page_size; + cmd.mha_cmd = MHA_MAPSIZE_VA; + if (memcntl(p, size, MC_HAT_ADVISE, (caddr_t)&cmd, 0, 0) == 0) { + *is_large = true; + } + } + #endif } if (p == NULL) { _mi_warning_message("unable to allocate OS memory (%zu bytes, error code: %i, address: %p, large only: %d, allow large: %d)\n", size, errno, addr, large_only, allow_large); diff --git a/src/random.c b/src/random.c index b3dbf4f8..2a96ccf6 100644 --- a/src/random.c +++ b/src/random.c @@ -178,7 +178,7 @@ static bool os_random_buf(void* buf, size_t buf_len) { */ #elif defined(ANDROID) || defined(XP_DARWIN) || defined(__APPLE__) || defined(__DragonFly__) || \ defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__wasi__) + defined(__sun) || defined(__wasi__) #include static bool os_random_buf(void* buf, size_t buf_len) { arc4random_buf(buf, buf_len);