From 7023c205aaa2d5cde4e6c9819a15567390d8f4bd Mon Sep 17 00:00:00 2001 From: Eduard Voronkin Date: Thu, 6 Mar 2025 10:26:22 -0800 Subject: [PATCH] improve MacOS interposes to make mimalloc compile for older MacOS I've got a failure while trying to compile with "-mmacosx-version-min=10.7" since MAC_OS_X_VERSION_MAX_ALLOWED is greater than MAC_OS_X_VERSION_10_15 but still we can't use `aligned_alloc` since of the lower bound (10.7). I'm not sure about internal details of how `__OSX_AVAILABLE` works, but my hope is the it would only make this interpose available starting from the OS version specified. Also, it helps me to compile mimalloc with "-mmacosx-version-min=10.7". --- src/alloc-override.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/alloc-override.c b/src/alloc-override.c index b5109ded..304ee906 100644 --- a/src/alloc-override.c +++ b/src/alloc-override.c @@ -77,18 +77,12 @@ typedef void* mi_nothrow_t; MI_INTERPOSE_MI(calloc), MI_INTERPOSE_MI(realloc), MI_INTERPOSE_MI(strdup), - #if defined(MAC_OS_X_VERSION_10_7) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - MI_INTERPOSE_MI(strndup), - #endif MI_INTERPOSE_MI(realpath), MI_INTERPOSE_MI(posix_memalign), MI_INTERPOSE_MI(reallocf), MI_INTERPOSE_MI(valloc), MI_INTERPOSE_FUN(malloc_size,mi_malloc_size_checked), MI_INTERPOSE_MI(malloc_good_size), - #if defined(MAC_OS_X_VERSION_10_15) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_15 - MI_INTERPOSE_MI(aligned_alloc), - #endif #ifdef MI_OSX_ZONE // we interpose malloc_default_zone in alloc-override-osx.c so we can use mi_free safely MI_INTERPOSE_MI(free), @@ -99,6 +93,15 @@ typedef void* mi_nothrow_t; MI_INTERPOSE_FUN(vfree,mi_cfree), #endif }; + __attribute__((used)) static struct mi_interpose_s _mi_interposes_10_7[] + __attribute__((section("__DATA, __interpose"))) __OSX_AVAILABLE(10.7) = { + MI_INTERPOSE_MI(strndup), +}; + + __attribute__((used)) static struct mi_interpose_s _mi_interposes_10_15[] + __attribute__((section("__DATA, __interpose"))) __OSX_AVAILABLE(10.15) = { + MI_INTERPOSE_MI(aligned_alloc), + }; #ifdef __cplusplus extern "C" {