diff options
author | David Carlier <devnexen@gmail.com> | 2021-01-10 23:54:40 +0000 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2021-01-15 18:49:43 +1100 |
commit | d79141d641a6590c84d9360feaa8714ee0e570fe (patch) | |
tree | 2ffed404011ead0e54a41f91e66b59c69808fd46 | |
parent | dc3681e5ed15515c107f990f83c56735938fc071 (diff) | |
download | mariadb-git-d79141d641a6590c84d9360feaa8714ee0e570fe.tar.gz |
msys: detects crc/cryptosupport on FreeBSD/arm
closes #1737
Reviewers: Marko Mäkelä, Krunal Bauskar
-rw-r--r-- | mysys/CMakeLists.txt | 18 | ||||
-rw-r--r-- | mysys/crc32/crc32_arm64.c | 16 |
2 files changed, 29 insertions, 5 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..02c43c350c8 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> -#include <asm/hwcap.h> +#if defined(__FreeBSD__) +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; +} +#else +# include <asm/hwcap.h> +#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 |