diff options
author | David Carlier <devnexen@gmail.com> | 2021-01-10 23:54:40 +0000 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2021-01-15 15:19:29 +1100 |
commit | 67a2079630dd4bb5ea81813b667871bd6ab570eb (patch) | |
tree | 5c5721cc20600ec50dc81d10a0387e5a9ce132f1 | |
parent | 1015cbde5985e7e89c887ab30ce7c772671194c5 (diff) | |
download | mariadb-git-bb-10.5-danielblack-pr1737.tar.gz |
msys: detects crc/cryptosupport on FreeBSD/armbb-10.5-danielblack-pr1737
closes #1737
-rw-r--r-- | mysys/CMakeLists.txt | 18 | ||||
-rw-r--r-- | mysys/crc32/crc32_arm64.c | 14 |
2 files changed, 28 insertions, 4 deletions
diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index e15257a9572..6aab788f12c 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -86,7 +86,14 @@ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64") return ret; } #include <sys/auxv.h> - int main() { foo(0); getauxval(AT_HWCAP); }" HAVE_ARMV8_CRC) + int main() { foo(0); + #ifdef __linux__ + getauxval(AT_HWCAP); + #else + unsigned long v; + elf_aux_info(AT_HWCAP, &v, sizeof(v)); + #endif + }" HAVE_ARMV8_CRC) CHECK_CXX_SOURCE_COMPILES(" asm(\".arch_extension crypto\"); @@ -95,7 +102,14 @@ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64") return ret; } #include <sys/auxv.h> - int main() { foo(0); getauxval(AT_HWCAP); }" HAVE_ARMV8_CRYPTO) + int main() { foo(0); + #ifdef __linux__ + getauxval(AT_HWCAP); + #else + unsigned long v; + elf_aux_info(AT_HWCAP, &v, sizeof(v)); + #endif + }" HAVE_ARMV8_CRYPTO) CHECK_C_COMPILER_FLAG(-march=armv8-a+crc+crypto HAVE_ARMV8_CRC_CRYPTO_MARCH) diff --git a/mysys/crc32/crc32_arm64.c b/mysys/crc32/crc32_arm64.c index b82d4701e6f..41c2f1bbaba 100644 --- a/mysys/crc32/crc32_arm64.c +++ b/mysys/crc32/crc32_arm64.c @@ -2,10 +2,20 @@ #include <string.h> #include <stdint.h> -#if defined(__GNUC__) && defined(HAVE_ARMV8_CRC) +#if defined(HAVE_ARMV8_CRC) #include <sys/auxv.h> +#if !defined(__FreeBSD__) #include <asm/hwcap.h> +#else +static unsigned long getauxval(unsigned int key) +{ + unsigned long val; + if (elf_aux_info(key, (void *)&val, (int)sizeof(val) != 0) + return 0ul; + return val; +} +#endif #ifndef HWCAP_CRC32 # define HWCAP_CRC32 (1 << 7) @@ -40,7 +50,7 @@ const char *crc32c_aarch64_available(void) return "Using ARMv8 crc32 instructions"; } -#endif /* __GNUC__ && HAVE_ARMV8_CRC */ +#endif /* HAVE_ARMV8_CRC */ #ifndef HAVE_ARMV8_CRC_CRYPTO_INTRINSICS |