From cd915900a23959947554e01bccc3d983eb8aa263 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 12 Apr 2023 01:37:48 +0800 Subject: [PATCH 1/5] atomic.h: unbreak build on Darwin PPC --- include/mimalloc/atomic.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/include/mimalloc/atomic.h b/include/mimalloc/atomic.h index 6fb4951c..1951b470 100644 --- a/include/mimalloc/atomic.h +++ b/include/mimalloc/atomic.h @@ -303,7 +303,7 @@ static inline void mi_atomic_yield(void) { } #elif (defined(__GNUC__) || defined(__clang__)) && \ (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__armel__) || defined(__ARMEL__) || \ - defined(__aarch64__) || defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)) + defined(__aarch64__) || defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)) || defined(__POWERPC__) #if defined(__x86_64__) || defined(__i386__) static inline void mi_atomic_yield(void) { __asm__ volatile ("pause" ::: "memory"); @@ -316,10 +316,16 @@ static inline void mi_atomic_yield(void) { static inline void mi_atomic_yield(void) { __asm__ volatile("yield" ::: "memory"); } -#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) +#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__) +#ifdef __APPLE__ +static inline void mi_atomic_yield(void) { + __asm__ volatile ("or r27,r27,r27" ::: "memory"); +} +#else static inline void mi_atomic_yield(void) { __asm__ __volatile__ ("or 27,27,27" ::: "memory"); } +#endif #elif defined(__armel__) || defined(__ARMEL__) static inline void mi_atomic_yield(void) { __asm__ volatile ("nop" ::: "memory"); From 2647146abd24ca971c34939014b4dc84c12b4c3b Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 12 Apr 2023 01:48:08 +0800 Subject: [PATCH 2/5] prim.c: fix for macOS without MACH_TASK_BASIC_INFO --- src/prim/unix/prim.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/prim/unix/prim.c b/src/prim/unix/prim.c index 4efc10d3..c28c7759 100644 --- a/src/prim/unix/prim.c +++ b/src/prim/unix/prim.c @@ -610,11 +610,19 @@ void _mi_prim_process_info(mi_process_info_t* pinfo) pinfo->page_faults = 0; #elif defined(__APPLE__) pinfo->peak_rss = rusage.ru_maxrss; // macos reports in bytes + #ifdef MACH_TASK_BASIC_INFO struct mach_task_basic_info info; mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &infoCount) == KERN_SUCCESS) { pinfo->current_rss = (size_t)info.resident_size; } + #else + struct task_basic_info info; + mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT; + if (task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &infoCount) == KERN_SUCCESS) { + pinfo->current_rss = (size_t)info.resident_size; + } + #endif #else pinfo->peak_rss = rusage.ru_maxrss * 1024; // Linux/BSD report in KiB #endif From d106f0c116f6f1122357ac530e7a6d3230ab5547 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 12 Apr 2023 02:00:03 +0800 Subject: [PATCH 3/5] alloc-override-zone.c: fix for 10.6 rosetta/ppc --- src/prim/osx/alloc-override-zone.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/prim/osx/alloc-override-zone.c b/src/prim/osx/alloc-override-zone.c index 80bcfa93..0e0a99d9 100644 --- a/src/prim/osx/alloc-override-zone.c +++ b/src/prim/osx/alloc-override-zone.c @@ -195,7 +195,7 @@ static malloc_introspection_t mi_introspect = { .log = &intro_log, .force_lock = &intro_force_lock, .force_unlock = &intro_force_unlock, -#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) +#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) && !defined(__ppc__) .statistics = &intro_statistics, .zone_locked = &intro_zone_locked, #endif @@ -216,7 +216,7 @@ static malloc_zone_t mi_malloc_zone = { .batch_malloc = &zone_batch_malloc, .batch_free = &zone_batch_free, .introspect = &mi_introspect, -#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) +#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) && !defined(__ppc__) #if defined(MAC_OS_X_VERSION_10_14) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14) .version = 10, #else From a52ba65f656d5ce7b19fad3943de0d04d7110d37 Mon Sep 17 00:00:00 2001 From: daanx Date: Mon, 17 Apr 2023 09:13:08 -0700 Subject: [PATCH 4/5] further fix for atomic build error suggested by Davide Di Gennaro (issue #729, pr #724) --- include/mimalloc/atomic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mimalloc/atomic.h b/include/mimalloc/atomic.h index 1951b470..130ef820 100644 --- a/include/mimalloc/atomic.h +++ b/include/mimalloc/atomic.h @@ -281,7 +281,7 @@ typedef _Atomic(uintptr_t) mi_atomic_once_t; static inline bool mi_atomic_once( mi_atomic_once_t* once ) { if (mi_atomic_load_relaxed(once) != 0) return false; // quick test uintptr_t expected = 0; - return mi_atomic_cas_strong_acq_rel(once, &expected, 1UL); // try to set to 1 + return mi_atomic_cas_strong_acq_rel(once, &expected, (uintptr_t)1); // try to set to 1 } // Yield From 43be9c29092603f072d1584c9ca056f1133e3cfd Mon Sep 17 00:00:00 2001 From: daanx Date: Mon, 17 Apr 2023 09:25:41 -0700 Subject: [PATCH 5/5] possible fix for warnings on armv6 (issue #719) --- include/mimalloc/types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mimalloc/types.h b/include/mimalloc/types.h index 28343d21..bef23d51 100644 --- a/include/mimalloc/types.h +++ b/include/mimalloc/types.h @@ -165,7 +165,7 @@ typedef int32_t mi_ssize_t; // Derived constants #define MI_SEGMENT_SIZE (MI_ZU(1)<