From c8880e1ba025e681d45834e34a1fb7847082b26a Mon Sep 17 00:00:00 2001 From: Timothy Kielan Date: Fri, 21 Feb 2025 15:16:22 +0100 Subject: [PATCH 1/2] support building for QNX --- 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 37dd873d..9e1c53ef 100644 --- a/src/prim/unix/prim.c +++ b/src/prim/unix/prim.c @@ -190,6 +190,8 @@ int _mi_prim_free(void* addr, size_t size ) { static int unix_madvise(void* addr, size_t size, int advice) { #if defined(__sun) int res = madvise((caddr_t)addr, size, advice); // Solaris needs cast (issue #520) + #elif defined(__QNX__) + int res = posix_madvise(addr, size, advice); #else int res = madvise(addr, size, advice); #endif @@ -411,7 +413,11 @@ int _mi_prim_commit(void* start, size_t size, bool* is_zero) { int _mi_prim_decommit(void* start, size_t size, bool* needs_recommit) { int err = 0; // decommit: use MADV_DONTNEED as it decreases rss immediately (unlike MADV_FREE) + #if defined(__QNX__) + err = posix_madvise(start, size, POSIX_MADV_DONTNEED); + #else err = unix_madvise(start, size, MADV_DONTNEED); + #endif #if !MI_DEBUG && !MI_SECURE *needs_recommit = false; #else @@ -443,6 +449,8 @@ int _mi_prim_reset(void* start, size_t size) { mi_atomic_store_release(&advice, (size_t)MADV_DONTNEED); err = unix_madvise(start, size, MADV_DONTNEED); } + #elif defined(__QNX__) + int err = posix_madvise(start, size, POSIX_MADV_DONTNEED); #else int err = unix_madvise(start, size, MADV_DONTNEED); #endif From 783c3ba486d388119fcf80995b5f79ed42f2b783 Mon Sep 17 00:00:00 2001 From: Daan Date: Thu, 6 Mar 2025 20:40:52 -0800 Subject: [PATCH 2/2] improve QNX support --- src/prim/unix/prim.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/prim/unix/prim.c b/src/prim/unix/prim.c index 9e1c53ef..8e3180e6 100644 --- a/src/prim/unix/prim.c +++ b/src/prim/unix/prim.c @@ -62,7 +62,14 @@ terms of the MIT license. A copy of the license can be found in the file #include #endif +#if !defined(MADV_DONTNEED) && defined(POSIX_MADV_DONTNEED) // QNX +#define MADV_DONTNEED POSIX_MADV_DONTNEED +#endif +#if !defined(MADV_FREE) && defined(POSIX_MADV_FREE) // QNX +#define MADV_FREE POSIX_MADV_FREE +#endif + //------------------------------------------------------------------------------------ // Use syscalls for some primitives to allow for libraries that override open/read/close etc. // and do allocation themselves; using syscalls prevents recursion when mimalloc is @@ -413,11 +420,7 @@ int _mi_prim_commit(void* start, size_t size, bool* is_zero) { int _mi_prim_decommit(void* start, size_t size, bool* needs_recommit) { int err = 0; // decommit: use MADV_DONTNEED as it decreases rss immediately (unlike MADV_FREE) - #if defined(__QNX__) - err = posix_madvise(start, size, POSIX_MADV_DONTNEED); - #else err = unix_madvise(start, size, MADV_DONTNEED); - #endif #if !MI_DEBUG && !MI_SECURE *needs_recommit = false; #else @@ -449,8 +452,6 @@ int _mi_prim_reset(void* start, size_t size) { mi_atomic_store_release(&advice, (size_t)MADV_DONTNEED); err = unix_madvise(start, size, MADV_DONTNEED); } - #elif defined(__QNX__) - int err = posix_madvise(start, size, POSIX_MADV_DONTNEED); #else int err = unix_madvise(start, size, MADV_DONTNEED); #endif