From 97df5adebb7c340e4c9776c6c6d8ce3c76ce6c1e Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Mon, 27 Jan 2020 02:53:38 -0700 Subject: [PATCH] Bug 1609181 - Detect ARM CPU features on FreeBSD. r=jcj Implement `getauxval` via `elf_aux_info` to avoid code duplication. `AT_HWCAP*` can be used on powerpc* and riscv64 as well. --HG-- extra : amend_source : d58f4c5ae761b102d58b15ffa6bfc815bab7ea68 --- lib/freebl/blinit.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/freebl/blinit.c b/lib/freebl/blinit.c index 4723d3bb16..d76bf9627e 100644 --- a/lib/freebl/blinit.c +++ b/lib/freebl/blinit.c @@ -122,6 +122,22 @@ extern unsigned long getauxval(unsigned long type) __attribute__((weak)); static unsigned long (*getauxval)(unsigned long) = NULL; #endif /* defined(__GNUC__) && __GNUC__ >= 2 && defined(__ELF__)*/ +#if defined(__FreeBSD__) && !defined(__aarch64__) && __has_include() +/* Avoid conflict with static declaration above */ +#define getauxval freebl_getauxval +static unsigned long getauxval(unsigned long type) +{ + /* Only AT_HWCAP* return unsigned long */ + if (type != AT_HWCAP && type != AT_HWCAP2) { + return 0; + } + + unsigned long ret = 0; + elf_aux_info(type, &ret, sizeof(ret)); + return ret; +} +#endif + #ifndef AT_HWCAP2 #define AT_HWCAP2 26 #endif