From: Cameron Cawley Date: Thu, 13 Oct 2022 13:59:18 +0000 (+0100) Subject: Support using aligned_alloc() for memory allocation X-Git-Tag: 2.0.7~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2a13a8fd4a0ffc5e25102717d26b30f6e05d092;p=thirdparty%2Fzlib-ng.git Support using aligned_alloc() for memory allocation --- diff --git a/CMakeLists.txt b/CMakeLists.txt index bb29d76d..a7c6806a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -388,6 +388,12 @@ if(HAVE_POSIX_MEMALIGN) add_definitions(-DHAVE_POSIX_MEMALIGN) endif() set(CMAKE_REQUIRED_DEFINITIONS) +set(CMAKE_REQUIRED_DEFINITIONS -D_ISOC11_SOURCE=1) +check_function_exists(aligned_alloc HAVE_ALIGNED_ALLOC) +if(HAVE_ALIGNED_ALLOC) + add_definitions(-DHAVE_ALIGNED_ALLOC) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) if(WITH_SANITIZER STREQUAL "Address") add_address_sanitizer() diff --git a/configure b/configure index 998ba3c0..cc51d214 100755 --- a/configure +++ b/configure @@ -750,6 +750,25 @@ else fi echo >> configure.log +cat > $test.c < +int main(void) { + void *ptr = aligned_alloc(64, 10); + if (ptr) + free(ptr); + return 0; +} +EOF +if try $CC $CFLAGS -o $test $test.c $LDSHAREDLIBC; then + echo "Checking for aligned_alloc... Yes." | tee -a configure.log + CFLAGS="${CFLAGS} -DHAVE_ALIGNED_ALLOC" + SFLAGS="${SFLAGS} -DHAVE_ALIGNED_ALLOC" +else + echo "Checking for aligned_alloc... No." | tee -a configure.log +fi +echo >> configure.log + # check for strerror() for use by gz* functions cat > $test.c < diff --git a/zbuild.h b/zbuild.h index 3c5e5fb4..f0f9202c 100644 --- a/zbuild.h +++ b/zbuild.h @@ -1,6 +1,10 @@ #ifndef _ZBUILD_H #define _ZBUILD_H +#ifndef _ISOC11_SOURCE +# define _ISOC11_SOURCE 1 /* aligned_alloc */ +#endif + /* This has to be first include that defines any types */ #if defined(_MSC_VER) # if defined(_WIN64) diff --git a/zutil_p.h b/zutil_p.h index 55f00611..856b44f9 100644 --- a/zutil_p.h +++ b/zutil_p.h @@ -9,7 +9,7 @@ # define _POSIX_C_SOURCE 200112L /* For posix_memalign(). */ #endif -#if defined(__APPLE__) || defined(HAVE_POSIX_MEMALIGN) +#if defined(__APPLE__) || defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_ALIGNED_ALLOC) # include #elif defined(__FreeBSD__) # include @@ -27,6 +27,8 @@ static inline void *zng_alloc(size_t size) { return (void *)_aligned_malloc(size, 64); #elif defined(__APPLE__) return (void *)malloc(size); /* MacOS always aligns to 16 bytes */ +#elif defined(HAVE_ALIGNED_ALLOC) + return (void *)aligned_alloc(64, size); #else return (void *)memalign(64, size); #endif