diff --git a/lib/freebl/Makefile b/lib/freebl/Makefile index d94cb0d480..eafa0da317 100644 --- a/lib/freebl/Makefile +++ b/lib/freebl/Makefile @@ -778,7 +778,9 @@ $(OBJDIR)/$(PROG_PREFIX)gcm-aarch64$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypt endif ifeq ($(CPU_ARCH),ppc) -$(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec +$(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx +$(OBJDIR)/$(PROG_PREFIX)gcm$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx +$(OBJDIR)/$(PROG_PREFIX)rijndael$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx endif $(OBJDIR)/$(PROG_PREFIX)Hacl_Chacha20_Vec128$(OBJ_SUFFIX): CFLAGS += -mssse3 -msse4 -mavx -maes diff --git a/lib/freebl/blinit.c b/lib/freebl/blinit.c index d76bf9627e..01f036ea70 100644 --- a/lib/freebl/blinit.c +++ b/lib/freebl/blinit.c @@ -431,7 +431,11 @@ ppc_crypto_support() #if defined(__powerpc__) +#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD__ >= 12) #include +#elif (defined(__FreeBSD__) && __FreeBSD__ < 12) +#include +#endif // Defines from cputable.h in Linux kernel - PPC, letting us build on older kernels #ifndef PPC_FEATURE2_VEC_CRYPTO @@ -443,7 +447,17 @@ CheckPPCSupport() { char *disable_hw_crypto = PR_GetEnvSecure("NSS_DISABLE_PPC_GHASH"); - long hwcaps = getauxval(AT_HWCAP2); + unsigned long hwcaps = 0; +#if defined(__linux__) + hwcaps = getauxval(AT_HWCAP2); +#elif defined(__FreeBSD__) +# if __FreeBSD__ >= 12 + elf_aux_info(AT_HWCAP2, &hwcaps, sizeof(hwcaps)); +# else + size_t len = sizeof(hwcaps); + sysctlbyname("hw.cpu_features2", &hwcaps, &len, NULL, 0); +# endif +#endif ppc_crypto_support_ = hwcaps & PPC_FEATURE2_VEC_CRYPTO && disable_hw_crypto == NULL; }