# getenv_secure is used for fat overrides,
# getline is used in the testsuite
-AC_CHECK_FUNCS(secure_getenv getline)
+AC_CHECK_FUNCS(secure_getenv getline elf_aux_info)
ASM_WORDS_BIGENDIAN=unknown
AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1)
#if USE_GETAUXVAL
# include <asm/hwcap.h>
# include <sys/auxv.h>
+#elif defined(HAVE_ELF_AUX_INFO)
+# include <sys/auxv.h>
#elif defined(__OpenBSD__)
# include <sys/sysctl.h>
# include <machine/cpu.h>
}
else
{
+#if USE_GETAUXVAL || defined(HAVE_ELF_AUX_INFO)
+ unsigned long hwcap = 0;
+
#if USE_GETAUXVAL
- unsigned long hwcap = getauxval(AT_HWCAP);
+ hwcap = getauxval(AT_HWCAP);
+#elif defined(HAVE_ELF_AUX_INFO)
+ elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
+#endif
+
features->have_aes
= ((hwcap & (HWCAP_ASIMD | HWCAP_AES)) == (HWCAP_ASIMD | HWCAP_AES));
features->have_pmull
# include <asm/cputable.h>
# include <sys/auxv.h>
# endif
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
# include <machine/cpu.h>
# ifdef PPC_FEATURE2_HAS_VEC_CRYPTO
# define PPC_FEATURE2_VEC_CRYPTO PPC_FEATURE2_HAS_VEC_CRYPTO
# endif
-# if __FreeBSD__ >= 12
+# ifdef HAVE_ELF_AUX_INFO
# include <sys/auxv.h>
-# else
+# elif !defined(__OpenBSD__)
# include <sys/sysctl.h>
# endif
#endif
# if USE_GETAUXVAL
hwcap = getauxval(AT_HWCAP);
hwcap2 = getauxval(AT_HWCAP2);
-# elif defined(__FreeBSD__)
-# if __FreeBSD__ >= 12
+# elif defined(__FreeBSD__) || defined(__OpenBSD__)
+# ifdef HAVE_ELF_AUX_INFO
elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
-# else
+# elif !defined(__OpenBSD__)
size_t len;
len = sizeof(hwcap);
sysctlbyname("hw.cpu_features", &hwcap, &len, NULL, 0);