summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2021-01-10 23:54:40 +0000
committerDaniel Black <daniel@mariadb.org>2021-01-15 18:49:43 +1100
commitd79141d641a6590c84d9360feaa8714ee0e570fe (patch)
tree2ffed404011ead0e54a41f91e66b59c69808fd46
parentdc3681e5ed15515c107f990f83c56735938fc071 (diff)
downloadmariadb-git-d79141d641a6590c84d9360feaa8714ee0e570fe.tar.gz
msys: detects crc/cryptosupport on FreeBSD/arm
closes #1737 Reviewers: Marko Mäkelä, Krunal Bauskar
-rw-r--r--mysys/CMakeLists.txt18
-rw-r--r--mysys/crc32/crc32_arm64.c16
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